Boolean representation in RFC xml
Hello, I have problems with representing boolean values in an RFC xml call using XI towards SAP. Using 'X' as a value for true does not seem to work. The BAPI I am calling through RFC xml is BAPI_CHARACT_CREATE and I am trying to set the parameter INTERVAL_ALLOWED. Anyone have a clue? Thanks
Hi,
Boolean functions return as an output either string true or false. As an true value they interpret either 1 or true (not case sensitive). Rest values are interpreted as false.
In your case RFC data type is: ATXFE with value range: 'X' for true and ' ' for false then you can solved such case with simple message mapping:
In mapping to RFC field use: boolean function "If" that returns either 'X' or ' '.
In mapping from RFC field use: text function "equalsS" that check "X" and returns "true".
Regards,
Jakub
Similar Messages
-
Unallowed RFC-XML Tag (SOAP_EINVALDOC) - Web Service using ABAP Proxy
Hi there
I am trying to consume a Web Service using ABAP Proxies. I have done the following in the system:
I configured the HTTP and HTTPS Proxy settings.
I created a package with package interfaces SAI_TOOLS and SAPPINT included under the Use Access tab.
I created the proxy classes by using the WSDL provided by the system I'm trying to interface with.
I created my HTTP destination RFC via SM59.
I configured a logical port for the proxy.
I developed the ABAP code for calling the proxy.
In the code the exception CX_AI_SYSTEM_FAULT gets raised with error message <b>"Unallowed RFC-XML Tag (SOAP_EINVALDOC)"</b> when I call the method for passing data to the destination system in the proxy class.
I had a look at SM21 and the following message was written in the log:
<b>"SOAP Runtime: SOAP Runtime exception: 111 occurred in method XP_READ_TAG of class CL_SOAP_XP at position 1
SOAP Runtime: Exception message: Unallowed RFC-XML Tag (SOAP_EINVALDOC)"</b>. I also looked at SAP Note 919886 which states that it can be dumps in the system, missing configuration or the path prefix of the RFC destination that is incorrect. I cannot find any ST22 entries. The trace file looks as follows:
SAP System ID: DGH
Client: 009
User: COLESKG
System time: 072910
System date: 20070531
SAP Release: 700
Host: hd307c
Operating system: AIX
DB System: ORACLE
Program: ZUK_IPA00003
Processing State: 0
Location: Client
Transport Binding: http://schemas.xmlsoap.org/soap/http
SOAP Application: urn:sap-com:soap:runtime:application:client
SOAP Runtime Protocol: http://www.sap.com/webas/630/soap
/runtime/protocol
SOAP Protocols: <initial>
Request Message: <initial>
Response Message: <initial>
Fault: <initial>
Registry: <initial>
SOAP Roles: <initial>
Trace Level: 3
Logging Level: 2
Monitoring Level: 0
Security Profile: <initial>
WS Security Protocol: <initial>
INFO 07:29:10: SOAP LP Registry CL_SRT_LP_MAINTENANCE->CREATE_CLIENT_APPL() Try to create client application for Proxyclass:
ZES_CO_PROCESS_EMPLOYEE_BATCH LP name: DEFAULT
INFO 07:29:10: SOAP LP Registry CL_SRT_LP_MAINTENANCE->CREATE_CLIENT_APPL() Client application created
INFO 07:29:10: SOAP LP Registry CL_SRT_LP_MAINTENANCE->CREATE_CLIENT_APPL() Try to initialize client application
INFO 07:29:10: SOAP Application CL_SOAP_APPLICATION_CLIENT->IF_SOAP_APPLICATION_CS~INIT() Try to initialize application
urn:sap-com:soap:runtime:application:client
INFO 07:29:10: SOAP Application CL_SOAP_APPLICATION_CLIENT->INTERNAL_CLIENT_INIT() Create new runtime CL_SOAP_RUNTIME_CLIENT
INFO 07:29:10: SOAP Runtime CL_SOAP_RUNTIME_CLIENT->REGISTER_APPLICATION() Try to register application
INFO 07:29:10: SOAP Runtime CL_SOAP_RUNTIME_CLIENT->REGISTER_APPLICATION() Application registered
INFO 07:29:10: SOAP Application CL_SOAP_APPLICATION_CLIENT->INTERNAL_CLIENT_INIT() Read type of transport binding from
configuration
INFO 07:29:10: SOAP Application CL_SOAP_APPLICATION_CLIENT->INTERNAL_CLIENT_INIT() Create new transport binding type
http://schemas.xmlsoap.org/soap/http
INFO 07:29:10: SOAP Transport Binding CL_SOAP_TRANSPORT_BINDING_ROOT->IF_SOAP_TRANSPORT_BINDING~INIT() Try to initialize
http://schemas.xmlsoap.org/soap/http
INFO 07:29:10: SOAP Transport Binding CL_SOAP_TRANSPORT_BINDING_ROOT->IF_SOAP_TRANSPORT_BINDING~INIT() http://schemas.xmlsoap
.org/soap/http initialized
INFO 07:29:10: SOAP Transport Binding CL_SOAP_TRANSPORT_BINDING_ROOT->IF_SOAP_TRANSPORT_BINDING~REQUEST() Try to create request message
INFO 07:29:10: SOAP Transport Binding CL_SOAP_TRANSPORT_BINDING_ROOT->IF_SOAP_TRANSPORT_BINDING~REQUEST() Request message created
INFO 07:29:10: SOAP Transport Binding CL_SOAP_TRANSPORT_BINDING_ROOT->IF_SOAP_TRANSPORT_BINDING~RESPONSE() Try to create response message
INFO 07:29:10: SOAP Transport Binding CL_SOAP_TRANSPORT_BINDING_ROOT->IF_SOAP_TRANSPORT_BINDING~RESPONSE() Response message
created
INFO 07:29:10: SOAP Runtime CL_SOAP_RUNTIME_CLIENT->INIT() Try to initialize
INFO 07:29:10: SOAP Runtime CL_SOAP_RUNTIME_CLIENT->INIT() Check transport binding
INFO 07:29:10: SOAP Runtime CL_SOAP_RUNTIME_CLIENT->INIT() Create runtime protocol
INFO 07:29:10: SOAP Runtime Protocol CL_SOAP_RUNTIME_PROTOCOL->IF_SOAP_PROTOCOL~INIT() Try to initialize SOAP Runtime-intrinsic
Protocol as SENDER with Priority 5
INFO 07:29:10: SOAP Runtime Protocol CL_SOAP_RUNTIME_PROTOCOL->INIT_MODULES() Try to create trace header/part
INFO 07:29:10: SOAP Runtime Protocol CL_SOAP_RUNTIME_PROTOCOL->INIT_MODULES() Trace header/part created
INFO 07:29:10: SOAP Runtime Protocol CL_SOAP_RUNTIME_PROTOCOL->INIT_MODULES() Try to create logging header/part
INFO 07:29:10: SOAP Runtime Protocol CL_SOAP_RUNTIME_PROTOCOL->INIT_MODULES() Logging header/part created
INFO 07:29:10: SOAP Runtime Protocol CL_SOAP_RUNTIME_PROTOCOL->IF_SOAP_PROTOCOL~INIT() Protocol initialized
INFO 07:29:10: SOAP Runtime CL_SOAP_RUNTIME_CLIENT->INIT()
Initialized
INFO 07:29:10: SOAP Protocol CL_SOAP_PROTOCOL_FACTORY->CREATE()
Try to create instance for http://www.sap.com/webas/630/soap
/runtime/session/protocol::http://www.sap.com/webas/630/soap
/runtime/session/protocol/srt640_impl
INFO 07:29:10: SOAP Protocol CL_SOAP_PROTOCOL_FACTORY->CREATE()
Instance of CL_SOAP_SESSION_PROTOCOL created for http://www.sap.com/webas/630/soap/runtime/session/protocol::http://www.sap.com/webas/630/soap/runtime/session/protocol/srt640_impl
INFO 07:29:10: SOAP SESSION Protocol CL_SOAP_SESSION_PROTOCOL->IF_SOAP_PROTOCOL~INIT() Try to initialize SOAP Session Protocol
as SENDER with Priority 5
INFO 07:29:10: SOAP SESSION Protocol CL_SOAP_SESSION_PROTOCOL->IF_SOAP_PROTOCOL~INIT() Protocol initialized
INFO 07:29:10: SOAP Application CL_SOAP_APPLICATION_CLIENT_GEN->CONFIGURE_FEATURES() Try to configure features
INFO 07:29:10: SOAP HTTP Binding CL_SOAP_HTTP_TPBND_ROOT->IF_SOAP_HTTP_TRANSPORT_BINDING~SET_CLIENT_BY_DESTINATION() Try to
create ICF Client for DESTINATION = ALSB
INFO 07:29:10: SOAP HTTP Binding CL_SOAP_HTTP_TPBND_ROOT->IF_SOAP_HTTP_TRANSPORT_BINDING~SET_CLIENT_BY_DESTINATION() ICF
Client created by DESTINATION
INFO 07:29:10: SOAP HTTP Binding CL_SOAP_HTTP_TPBND_ROOT->IF_SOAP_HTTP_TRANSPORT_BINDING~SET_DESTINATION_URL_PATH() Set
DESTINATION PATH = /SapHRSmartIntegrationWeb/processes/ProcessEmployeeBatch.jpd
INFO 07:29:10: SOAP Application CL_SOAP_APPLICATION_CLIENT_GEN->CONFIGURE_FEATURES() Features configured
INFO 07:29:10: SOAP Application CL_SOAP_APPLICATION_CLIENT->IF_SOAP_APPLICATION_CS~INIT() Application urn:sap-com:soap
:runtime:application:client initialized
INFO 07:29:10: SOAP LP Registry CL_SRT_LP_MAINTENANCE->CREATE_CLIENT_APPL() Client application initialized
Trace file opened at 20070531 073030 GMT SAP-REL 700,0,95
Error in module XMLParserGetNextElement:773
Id @(#) $Id: //bas/700_REL/src/krn/rfc/xrfcpars.c#2 $
Unallowed RFC-XML Tag
Error in module XMLConverterReadTag:3061
Id @(#) $Id: //bas/700_REL/src/krn/rfc/xrfccnvrt.c#5 $
Unallowed RFC-XML Tag(24)
Error in module ab_soap:4392
Id @(#) $Id: //bas/700_REL/src/krn/rfc/abxrfccal.c#2 $
failed with return code 1
It then must be something in the config. Has anyone got any idea why this message is encountered?
Kind Regards
Gustav Coleske
Message was edited by:
Gustav ColeskeHi,
I have the same problem as described.
Can you give me a little more information about the error you have solved in the proxy.
Thanks for help
John -
CDATA issue in RFC XML conversion
Hi all,
I am trying to consume a webservice from ABAP. One of the webservice method responds with a data holding an xml fragment under the tags CDATA, like,
<!CDATA[[<?xml version="1.0" encoding=.....]]>
But the program throws exception during RFC XML conversion.
However i could find the correct response payload in the error log in ST11 transaction.
Pls advice.Hi,
as this is not a proper CDATA
try:
<![CDATA[ cdata text ]]>
you can test it easily by opening with IExplorer
Regards,
michal
<a href="/people/michal.krawczyk2/blog/2005/06/28/xipi-faq-frequently-asked-questions"><b>XI / PI FAQ - Frequently Asked Questions</b></a> -
Rfc XML Purchase Order via business connector
Hi,
I am new to business connector and currently I am faced with a task where I have to send the Purchase Order to vendor via rfc XML with business connector 4.7.
The vendor should receive the order via ebp XML.
Can any one specify me the exact steps involved in this.
Please reply asap as there is an urgency in the task.
Points assured to helpful answers.hi,
there used to be standard content for EBP for BC
SAP BC Support Packages for EBP, BBP, and CRM link on:
http://service.sap.com/~form/sapnet?_SHORTKEY=01100035870000463624&_OBJECT=011000358700000267402002E
but I cannot access it anymore
you can asking SAP about it as I'm sure this could help you in your EBP scenario
Regards,
michal
<a href="/people/michal.krawczyk2/blog/2005/06/28/xipi-faq-frequently-asked-questions"><b>XI / PI FAQ - Frequently Asked Questions</b></a> -
Send PO via rfc XML with BC 4.7
Hi Gurus,
I have to send the Purchase Order to vendor via rfc XML with business connector 4.7. The vendor should receive the order via ebp XML. We are not using XI we use xCBL. SRM Server 5.5 Standalone.
i use zbbp_PO_send_xml badi for this purpose. We are able to send the data as rfc XML. But the smartform attachment is not working.
Can any one specify me the exact steps involved in this.
Please reply asap as there is an urgency in the task.
Points assured to helpful answers.
Cheers,
LokeshWe are getting a similar error -
Any ideas on what parameters we need to pass or configure?
JCO.ServerThread-1 [13:15:27:437]: [JNI-LAYER] RFC.incomingRequestHandler() before dispatchRequest("IDOC_INBOUND_ASYNCHRONOUS")
JCO.ServerThread-1 [13:15:27:515]: [JNI-LAYER] RFC.nativeConnect() enter, [SUCCESS]
JCO.ServerThread-1 [13:15:27:515]: [JNI-LAYER] RFC.nativeConnect() before RfcOpenEx("CLIENT="110" USER="ALEWM1" PASSWD=********** LANG="EN" SYSNR="00" ASHOST="atlun02.celanese.com" R3NAME="atlun02.celanese.com" TRACE="1" TOUPPER="0"")
JCO.ServerThread-1 [13:15:27:515]: [JNI-LAYER] RFC.nativeConnect() after RfcOpenEx("CLIENT="110" USER="ALEWM1" PASSWD=********** LANG="EN" SYSNR="00" ASHOST="atlun02.celanese.com" R3NAME="atlun02.celanese.com" TRACE="1" TOUPPER="0"") = 0
with error: RFC_ERROR_PROGRAM No entry for 'atlun02.celanese.com' found in 'C:\WINDOWS\sapmsg.ini'
JCO.ServerThread-1 [13:15:27:515]: [JAV-LAYER] JCO.PoolManager.releaseClient: Cannot release client equals null
JCO.ServerThread-1 [13:15:27:515]: [JNI-LAYER] RFC.incomingRequestHandler() caught the following exception: com.sap.mw.idoc.IDoc$Exception: (2) IDOC_ERROR_METADATA_UNAVAILABLE: The meta data for the IDoc type "LOIPRO01" is unavailable.
JCO.ServerThread-1 [13:15:27:515]: [JNI-LAYER] RFC.incomingRequestHandler() Exception.message = "The meta data for the IDoc type "LOIPRO01" is unavailable."
JCO.ServerThread-1 [13:15:27:515]: [JNI-LAYER] RFC.abort() enter, [SUCCESS]
JCO.ServerThread-1 [13:15:27:515]: [JNI-LAYER] RFC.abort() before RfcAbort(1,"The meta data for the IDoc type "LOIPRO01" is unavailable.") -
SOAP Runtime: Exception message: Unallowed RFC-XML Tag (SOAP_EINVALDOC)
Hi,
Curretly I am trying to test a Webservice on ECC 5.0, Oracle, Windows.
Below is the error that I am facing.
SOAP Runtime: SOAP Runtime exception: 111 occurred in method XP_READ_TAG of class CL_SOAP_XP at position 1
SOAP Runtime: Exception message: Unallowed RFC-XML Tag (SOAP_EINVALDOC)
In dev_rfc0:
ERROR 03:20:57: SOAP HTTP Binding CL_SOAP_HTTP_TPBND_ROOT->HANDLE
STATUSCODE() Received return code 404 ( Not found )
ERROR 03:20:57: SOAP Message CL_SOAP_MESSAGE->IF_SOAP_MESSAGE
PART~INITFOR_DESERIALIZE() A SOAP Runtime Core Exception
occurred in method XP_READ_TAG of class CL_SOAP_XP at position id
1 with internal error id 111 and error text Unallowed RFC-XML Tag
(SOAP_EINVALDOC) (fault location is 1 ).
I have looked up on sdn, and also looked at note 919886.
I have read several posts regarding creation of RFC Destination in sm59 of Type G, to get over this issue.
But RFC Destination of type G is not available in ECC 5.0
Is the error because of incorrect URL mentioned in logical port,
I am unable to ping the host name mentioned in URL, looks like that machine is not in the network.
does it mean the wsdl is not located at that particular host.
Any suggestions would be greatly appreciated.
Regards,
Vishnu.Hi Anton,
The complete error message in dev_rfc0:
INFO 02:15:12: SOAP Transport Binding CL_SOAP_HTTP_TPBND_ROOT
->IF_SOAP_TRANSPORT_BINDING~SEND() Try to send message ( DEST =
,PATH = ,URL = http://hostname:portno/ ,SOAP Action =
"ROI_R3_DF.roiSAPCreateOrder" )
INFO 02:15:12: SOAP Transport Binding CL_SOAP_HTTP_TPBND_ROOT
->IF_SOAP_TRANSPORT_BINDING~SEND() Message sent
INFO 02:15:12: SOAP Transport binding CL_SOAP_HTTP_TPBND_ROOT
->IF_SOAP_TRANSPORT_BINDING~RECEIVE() Try to receive message
ERROR 02:15:12: SOAP HTTP Binding CL_SOAP_HTTP_TPBND_ROOT->HANDLE
STATUSCODE() Received return code 404 ( Not found )
ERROR 02:15:12: SOAP Message CL_SOAP_MESSAGE->IF_SOAP_MESSAGE
PART~INITFOR_DESERIALIZE() A SOAP Runtime Core Exception
occurred in method XP_READ_TAG of class CL_SOAP_XP at position id
1 with internal error id 111 and error text Unallowed RFC-XML Tag
(SOAP_EINVALDOC) (fault location is 1 ).
After reading your post about the return code 404, I am in a dilemma whether, services in icman are unavailable or
the services at the location of the wsdl in the other server.
If you could clarify, it would be great.
Thanks a lot.
Vishnu. -
String representation of the xml document
hi, I have created the following xml document using the DOM api. I want to the "function" to return a "string" - which represents the xml document i created. How do u do that?
As of now it doesnt return anything...
How do u return the entire xml document as character data..? just like
<root><elements>data</elements></root>....
anyhelp would be great.
import java.io.*;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.*;
public class test1{
private static void function()throws IOException, DOMException{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance ();
DocumentBuilder db = dbf.newDocumentBuilder ();
Document doc = db.newDocument ();
Element record = doc.createElement ("record");
Element name = doc.createElement ("name");
Element address = doc.createElement ("address");
Element zip = doc.createElement ("zip");
Text nameText = doc.createTextNode("bill");
Text addressText = doc.createTextNode("128, washington");
Text zipText = doc.createTextNode("10000");
doc.appendChild(record);
record.appendChild(name);
name.appendChild(nameText);
record.appendChild(address);
address.appendChild(addressText);
record.appendChild(zip);
zip.appendChild(zipText);
public static void main (String argv [])throws Exception {
function();
}Brent,
Looks like you're using the Sun Java Parser. I'll show you how to do it with the Oracle XML Parser and you can extrapolate...
Document doc = new XMLDocument();
// Stuff here to build up the DOM Doc
// with elements, etc.
// Print the Document to a String
StringWriter sw = new StringWriter();
// Wrap the stringwriter in a printwriter
PrintWriter pw = new PrintWriter(sw);
// Print to the printwriter
((XMLDocument)doc).print(pw);
// return the string from the stringwriter
return sw.toString(); -
Hello All,
I have the folowing scenario:
I have an RFC table that contains header and line details in the same line. for instance:
Header Num, header text, line num, line text
1 abc 10 d
1 abc 20 g
2 def 10 h
I want to output this to an XML file with hierarchy e.g.
<Header>
<Num>1</Num>
<Text>abc</Text>
<Item>
<num>10</num>
<text>d</text>
</Item>
<Item>
<num>20</num>
<text>g</text>
</Item>
</Header>
<Header>
<Num>2</Num>
<Text>def</Text>
<Item>
<num>10</num>
<text>h</text>
</Item>
</Header>
I tries using splitbyvalue on valuechange but this doesn't work. How exactly is the mapping for this?
Thanks,
YoniHi,
Just try this:
<RFCLine>---splitbyvalue<Num>
<RFCLine>---splitbyvalue<Text>
detail
<RFCLine)-splitbyValue-removecontext---<num>
<RFCLine)-splitbyValue-removecontext---<text>
Regards
vijaya -
XI Message - Normalized to RFC-XML format
In a follow up to this posting:
Re: How can the payload of a XI message be normalized to the RFC-XMLuFF1F
Can someone tell me what the proceedure is to install/use the rfcnormalizer.jar file?
Thanks so much,
JohnHi John,
rfcnormalizer.jar file has got inbuilt XSL mapping program that has to be executed after your original mapping.
import this .xsl file as Imported Archive(under Mapping Objects) in to Integration repository.use this in interface mapping as XSLT Mapping after your original mapping.
Please let me know if you are not clear
Cheers,
Jag -
Excel representation of config.xml
<p>I was wondering if anyone has an excel spreadsheet that captures WLS domain/cluster configuration, I'd rather not write my own if someone is willing to share theirs!</p>
<p>
I am looking at converting this into a properties files that can be used to prove the environment by an application or WLST.
</p>
<p>Cheers</p>
<p>
Hussein Badakhchani</br>
</p>Hi Jin,
As you have 2 different custom application does both have different b2b or b2c project in java perspective.
Because generally there is only one "isaweb~b2b" project and we do modification over there for JSP. If you have 2 custom application then How you do modification in same file for 2 different application.
i.e. suppose you have requirement to show 2 different header element in 2 different application then how you maintain changes for 2 different application.
For your question. Try below.
Open web.xml from "isaweb~b2b" project.
Try to find below lines.
<!-- Action Servlet Configuration -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>com.sap.isa.core.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/config.xml,/WEB-INF/xcmadmin-config.xml,/WEB-INF/ccmsims-config.xml,/WEB-INF/ipc-config.xml,/ipc/customer/config.xml,/WEB-INF/config_lwc_b2b.xml,/WEB-INF/scheduler-config.xml,/WEB-INF/ipcpricing-config.xml</param-value>
</init-param>
In above code. insert your zconfig.xml path to <param-value> and remove /WEB-INF/config.xml value if necessary.
I hope this will help you.
eCommerce Developer -
Generating an XML representation of arbitrary Java objects
Hi. Just for fun, I'm attempting to write some code which creates an XML representation of an arbitrary java object using reflection. The idea is that only properties with get/set methods should come through in the XML.
Here is the code:
package com.uhg.aarp.compas.persistence.common.xml;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.w3c.dom.Document;
import org.w3c.dom.DOMException;
import org.w3c.dom.Node;
import java.util.Stack;
public class XMLDAO {
public static String getXMLWithHeader(Object obj){
return "<?xml version=\"0\"?>" + getXML(obj);
* Returns an XML representation of an arbitrary object
public static String getXML(Object obj){
StringBuffer buffer = new StringBuffer();
AccessorMethod[] accessorMethods = getAccessorMethods(obj);
buffer.append("<" + obj.getClass().getName() + ">\n");
//List
if(obj instanceof List){
List objList = (List)obj;
Iterator iterator = objList.iterator();
while(iterator.hasNext()){
buffer.append(getXML(iterator.next()));
else{
for(int i = 0; i < accessorMethods.length; i++){
Object fieldObj = null;
try{
fieldObj = accessorMethods.invoke();
1. Primitive Wrapper or String(base case)
if(fieldObj instanceof Integer || fieldObj instanceof Float || fieldObj instanceof Double
|| fieldObj instanceof Long || fieldObj instanceof String){
buffer.append("<" + accessorMethods[i].getAccessorFieldName() + ">");
buffer.append(accessorMethods[i].invoke());
buffer.append("</" + accessorMethods[i].getAccessorFieldName() + ">\n");
else if(fieldObj instanceof Object[]){
buffer.append("<" + accessorMethods[i].getAccessorFieldName() + ">\n");
Object[] fieldArray = (Object[])fieldObj;
for(int j = 0; j < fieldArray.length; j++)
buffer.append(getXML(fieldArray[i]));
buffer.append("</" + accessorMethods[i].getAccessorFieldName() + ">\n");
}catch(Exception e){
System.out.println("Couldn't invoke method: " + accessorMethods[i].getName());
buffer.append("</" + obj.getClass().getName() + ">\n");
return buffer.toString();
* Returns the Object representation for the XML - used to rebuild Java objects
* converted to XML by XMLDAO.getXML().
public static Object getObject(String xmlString) throws ParserConfigurationException,
SAXException, IOException{
//the root element is the class name
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(xmlString);
Stack objectStack = new Stack();
return getObject(document);
private static Object getObject(Node n){
//every document is either an object or a bean property
//all bean properties have values
//no object has a value, it can only have bean properties
//the base case occurs when the document has a value
String nodeName = n.getNodeName();
if(n.getNodeValue() == null){
System.out.println("node " + nodeName + " is an object");
else{
System.out.println("node " + nodeName + " is a bean property");
return null;
* Returns all of the "getter" methods for the given object
private static AccessorMethod[] getAccessorMethods(Object obj){
Class theClass = obj.getClass();
Method[] objMethods = theClass.getMethods();
ArrayList methodList = new ArrayList();
for(int i = 0; i < objMethods.length; i++){
try{
methodList.add(new AccessorMethod(obj, objMethods[i]));
}catch(IllegalArgumentException e){}
return (AccessorMethod[])methodList.toArray(new AccessorMethod[methodList.size()]);
* Invokes the specified "getter" method and returns the result as an Object
private Object invokeAccessorMethod(Object obj, Method m) throws IllegalAccessException,
InvocationTargetException{
return m.invoke(obj, null);
package com.uhg.aarp.compas.persistence.common.xml;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
* Represents an AccessorMethod (i.e. getField()) on an Object
public class AccessorMethod{
private Object obj;
private Method m;
private String accessorFieldName;
* Constructor for AccessorMethod
public AccessorMethod(Object obj, Method m) throws IllegalArgumentException{
1. Method name starts with get
2. Method name does not equal get
3. Method takes no arguments
4. Method return type is not void
String methodName = m.getName();
if(methodName.indexOf("get") != 0 || methodName.length() == 3 &&
m.getParameterTypes().length != 0 && m.getReturnType() != null){
throw new IllegalArgumentException("Not a valid getter method " + methodName);
this.obj = obj;
this.m = m;
String tempName = m.getName().substring(3, m.getName().length());
this.accessorFieldName = Character.toLowerCase(tempName.charAt(0)) + tempName.substring(1, tempName.length());
public Object invoke() throws IllegalAccessException, InvocationTargetException{
return m.invoke(obj, null);
* Gets the m
* @return Returns a Method
public Method getM() {
return m;
* Sets the m
* @param m The m to set
public void setM(Method m) {
this.m = m;
* Gets the accessorFieldName
* @return Returns a String
public String getAccessorFieldName() {
return accessorFieldName;
* Sets the accessorFieldName
* @param accessorFieldName The accessorFieldName to set
public void setAccessorFieldName(String accessorFieldName) {
this.accessorFieldName = accessorFieldName;
* Gets the obj
* @return Returns a Object
public Object getObj() {
return obj;
* Sets the obj
* @param obj The obj to set
public void setObj(Object obj) {
this.obj = obj;
public String getName(){
return this.m.getName();
I'm having some trouble figuring out how to implement the XMLDAO.getObject(Node n) method. I was thinking of maintaining a Stack of the previous Objects as I traverse the DOM, but I think that might be unnecessary work. Basically I'm wondering how I determine what the last "object" is in the DOM from any given node. Anyone have any input?I think the end of my post got cut off:
I'm having some trouble figuring out how to implement the XMLDAO.getObject(Node n) method. I was thinking of maintaining a Stack of the previous Objects as I traverse the DOM, but I think that might be unnecessary work. Basically I'm wondering how I determine what the last "object" is in the DOM from any given node. Anyone have any input? -
RFC to XML-RFC Parsing issue in RFC Adapter as Sender
Hi all,
I tried to use RFC adapter as a sender. The scenario I am trying to achieve is R3 -> RFC Adapter Sender --> BPM --> RFC Adapter Receiver --> SAP Auto-ID system.
The reason to use two RFC adapter and BPM is to log the request message if the RFC call fails. Everything works as expected, except the RFC Adapter Sender.
The RFC I am calling has an input table. The input data I use works fine if I call it via SE37 or remotely from another SAP system. However, if I call it via RFC adapter, when XI parses the data into RFC-XML format, the input data is all messed up.
DATA: BEGIN OF ID_STR,
ID_VERSION(8) TYPE C,
ID(96) TYPE C,
ELEMENT_NAME(50) TYPE C,
ELEMENT_VALUE(128) TYPE C,
END OF ID_STR.
DATA: it_id LIKE TABLE OF ID_STR,
ls_id LIKE ID_STR.
ls_id-ID_VERSION = 'EPC_1.30'.
ls_id-ID = '30340242206DC3C00000000A'.
ls_id-element_name = 'BATCH_ID'.
ls_id-element_value = 'BATCH001'.
APPEND ls_id TO it_id.
CALL FUNCTION '/AIN/UI_MOBILE_MSG_SEND'
IN BACKGROUND TASK
DESTINATION 'RFC_UPDATEAII'
EXPORTING
IV_BUSINESS_PROCESS = '09'
IV_COMMAND = 'DO'
IV_ACTION_TYPE = 'APL2'
IV_PRT_ID = '31140242200000000F000000'
IV_DEVGRP_EXTID = 'MOBILE'
TABLES
IT_ID = it_id
commit work.
And the parsed RFC-XML message is:
<?xml version="1.0" encoding="UTF-8" ?>
<rfc:_-AIN_-UI_MOBILE_MSG_SEND
xmlns:rfc="urn:sap-com:document:sap:rfc:functions">
<IV_ACTION_TYPE>APL2</IV_ACTION_TYPE>
<IV_BTD_EXTID />
<IV_BTD_TYPE />
<IV_BUSINESS_PROCESS>09</IV_BUSINESS_PROCESS>
<IV_COMMAND>DO</IV_COMMAND>
<IV_DEVGRP_EXTID>MOBILE</IV_DEVGRP_EXTID>
<IV_LOC_EXTID />
<IV_LOC_TYPE />
<IV_PRT_ID>31140242200000000F000000</IV_PRT_ID>
<IV_PRT_ID_VERSION />
<IV_REASON_CODE />
<IV_UNAME/>
<ET_RETURN />
<IT_ID>
<item>
<ID_VERSION>EPC_1.30</ID_VERSION>
<ID>206DC3C00000000A BATCH_ID</ID>
<ELEMENT_NAME />
<ELEMENT_VALUE />
</item>
</IT_ID>
</rfc:_-AIN_-UI_MOBILE_MSG_SEND>
You can see the data in the table is all wrong, it should be:
<IT_ID>
<item>
<ID_VERSION>EPC_1.30</ID_VERSION>
<ID>30340242206DC3C00000000A</ID>
<ELEMENT_NAME>BATCH_ID</ELEMENT_NAME>
<ELEMENT_VALUE>BATCH001</ELEMENT_VALUE>
</item>
</IT_ID>
The calling system is a 4.6C non-unicode system, and the destination system is a unicode system (this does not matter since the first part of the integration is between R3 and XI). There is no config found on R3 side to specify non-unicode because it is a rather old system. In XI RFC Adapter config, I checked non-unicode checkbox (I also tested it with this unchecked, but still the same issue).
Have any of you seen this problem and how you resolve it?
Thanks a lot for your help!
Regards,
HartHi Hart
long time no seen - hope you remember me
>The reason to use two RFC adapter and BPM is to log the request message if the RFC call fails
there is an easy way (guess max 3-4 hours) to solve all of your issues
and get rid of a BPM
use IDOC - XI - ABAP Proxy
then you will have IDOC and ABAP Proxy that always log the message on both ends (and you can restart ABAP proxies easily in AII - and every AII supports ABAP proxies) + you get rid of a BPM as it's not necessary as far as I understand (as it's asyn communication right?)
maybe you can go this way and IDOCs always work...
good luck,
Regards,
Michal Krawczyk
http://mypigenie.com XI/PI FAQ -
hi
can any one provide me with some scenarios having
idoc and rfc as senders.Hi
To Configure the RFC to FILE scenario ,Proceed as Follows
a. Create an RFC Destination to XI in transaction code (SM59)
b. Create new destination of type T (TCP/IP)
c. Make sure you select Registered Server Program option before writing your program ID
d. Write you program ID (remember it's case-sensitive)
e. In the gateway host and gateway service write the values of your Application system - business system (not the XI server)
Step2:Repository
1) From the Integration Builder page, select Integration Repository. This will launch the Java Web Start Application. Log with the User id and password from the Integration Server
2) Choose Tools->Transfer from System Landscape Directory->Import Software Component Versions
From the list of Software Component Versions, Choose your own software component version .Click Import.
3) On the left hand side frame ,software components will appear .Select your own software component. Open your own software component. Double click on this software component. A screen will appear .Switch to display mode. After doing this first add a namespace under Namespaces.
The namespace is ur:rfctofile
4) Then choose the Radio Button ->Import of RFC AND IDOC interfaces from SAP systems permitted
After this specify the connection parameters to the R/3 system:
4.1) System IS :sapfox
4.2) Client IS :800
Then Save it. The new namespace will be visible under software component version node in the left frame.
Under the namespace node, you will find the section Imported Objects. Right click on it and choose Import of sap objects. A wizard will display. In the wizard provide the following details.
4.3) Application server:172.25.5.7
4.4) System number: 00
4.5) User name:developer
4.6) Password: Password of Sap R/3 system.
Then click continue .You will find IDOC and RFC node. Click on this node and select the Idoc or Rfc which is to be imported from R/3. Click Finish to start the Import. Close the wizard. After doing this the Rfc and Idoc will be available into XI as Message types. So no need to create any Rfc or Idoc Structure. We need to create a structure for file only.
5). Under your namespace in the left frame, expand the node Interface objects. You will find a node DATA TYPES
6) Create new data types.
6.1) Right click on Data types and select New.
Your Data Type is. dt_file
In the data type Editor ,Create a structure having Elements of type String , integer, Boolean , Float etc as per the requirement.
Save the object.
6.2) The Import function for XSD files enables you to upload message definitions from external sources. The object type External Definition is a container to make external definitions available in the Integration Repository.. While Importing the XSD files from External Definition
no need to create Data types. They are imported directly as Message types.
6.3) To do so, In the left hand frame Under Interface objects Create a new object of type External Definition and give name to it.
Select the following.
6.3.1) Category: XSD.
6.3.2) Messages: From All Available Global Elements.
6.3.3) File:
Once the XSD is imported, click on Message tab , You should be able to see 2 messages(Request and Response)
7). Create a new Message Type.
7.1) In the left hand frame under Interface objects, right click on the Message types and select new.
7.2) Give a suitable name to the Message type.(MT_ messagetype).
7.3) For the section Data type used you can go to input help (F4) or Search help provided and choose your data type (DT_datatype) from there.
Save it.
8). Create a Message interface
8.1) In the left hand frame under Interface objects, right click on the Message Interface and select new and name(MI_ messageinterface) it
8.2). The interface Should be Inbound and mode should be Asynchronous .It should reference your Message type(Use F4 or Search help).
Save it.
9) . Create a graphical mapping between the target document and the sender .
9.1) In the left hand frame ,expand Mapping objects. Right click on Message mapping and name it.You are now in a graphical editor.The Source message is on left, the Target message is on right.
9.2) As Source message select your own Message type.You can choose Search for Integration Object.As a reminder you can find your Idoc or Rfc under Software Component- > Namespace->Imported Objects.
9.3) As Target Message you can choose your Rfc .Choose Search for Integration Object.
9.4) Now that we have defined the Source and Target message, we can start defining the Mapping rules.
9.5) Map the fields of Source document to the equivalent fields in Target document .This can be achieved easily by locating the field in Target document and then Drag and Drop the Source fields to the respective Target Fields.
Save It.
9.6) You can also Test your Mapping by selecting the 'Test Tab'.
9.7) Fill in the values in the Idoc fields and click 'Start Transformation'. On the right hand side you will see Target Document populated with the appropriate Values.
10). Create an Interface Mapping.
10.1) In the left hand Frame expand Mapping objects. Right Click on Interface Mapping and Name it. You are in a Interface Mapping Editor .Assign the following References.
10.2) Source interface : Your Outbound Interface (The Source document(Rfc) interface).You can Choose Search for Integration Object.
10.3) Target interface: Your Inbound Interface( The Target document interface).
Then Select 'Read Interface' and Assign your 'Mapping Program' .
Mapping Program: Your Message mapping.
Then Save it.
11.) Finally , in the left hand frame ,go to your change list and Activate it
STEP 3: Directory
1) From the Integration Builder page, select Integration Directory. This will launch the Java Web Start Application. Log with the User id and password from the Integration Server.
Create a Scenario Object
2). The First Step is to create a Scenario Object
This will serve as container for all your configuration work. Create and save a scenario object
3) In the left hand frame you can see the created scenario object. Under that Object Expand the node Service without Party and right click on Business System->Assign Business System
4) In the wizard , leave the party name blank and then select your own Business System. Uncheck the box Create Communication Channel Automatically.This service (business system) represents the legacy system and Sap R/3 which will be exchanging the data.
5) . Create a Communication Channel.
6). Expand your service and right click on Communication Channel. Name your Communication Channel
Here we need to configure the adapter.
Since the Sender is 'RFC', Specify the following Parameters
For the adapter type , use the F4 help and select RFC.
Specify Sender since the adapter will be sending messages to XI
Specify the following parameters.
Transport Protocol: RFC
Message Protocol: RFC(RFC XML )
Adapter Engine: Integration Server
Adapter status: Active
RFC Server Parameter:
Application Server(Gateway):172.25.5.7
Application Server Service(Gateway Service): sapgw00
Program Id: Id of Registered server program ( it is case sensititve)
And the adapter is configured. Save it
Since the Receiver is File , Specify the following Parameters
6.1 For the adapter type , use the F4 help and select FILE.
6.2 Specify Receiver since the adapter will be sending XML files from XI to the FTP server.
6.3 Specify the following parameters.
Transport Protocol: File Transport Protocol.(FTP)
Message Protocol: File Content Conversion(since the xml files produce by XI need to be converted to text files)
Adapter Engine: Integration Server
For the File system access Parameters, enter the following
Source Directory:Test
File Name: Input.txt
6.4 For the FTP Connection Parameters, Specify the Following
Server:172.25.5.240
Port: 21(by default)
Data Connection: Passive
Connection security: None
Connection Mode: Permanently
Transfer Mode: Binary
6.5 For Processing Parameters, Specify the following
File construction mode: Add Time Stamp
File Type: Binary
6.6 For Content Conversion Parameters, Specify the Following
RecordSet Structure:
Adapter Status: Active
The receiver file adapter is now configured. Save your Communication Channel.
Create an Receiver Determination.
7). From the left frame Create a new Receiver Determination object. This is the main part of routing process, where you assign a receiver for your message.
7.1) Select your sender service and interface.
Sender:
Party: blank
Service: Sender service(Business system)
Interface : Sender interface
7.2) In the Configured Receivers area , choose the Service for the Target System.. Save your Receiver Determination
Create an Interface Determination.
7.3) Next create an Interface Determination object. Now that we have defined a receiver of message ,we need to assign an Inbound interface and an Interface mapping
7.3.1) In the Receiver Determination you just created, have a look at the area Configuration Overview for Receiver Determination at bottom of your screen and press Refresh for that the Business system you assigned is displayed in that area as well.
7.3.2) In the column Receiver(Partner/Service) open the details by clicking the node .The Entry Not defined shows you that there is no interface determination present.
Right click on the Entry Not defined and select New specific, in order to create a new interface determination object
7.3.3) You are now in the screen Edit Interface Determination. In the section Configured Inbound Interfaces select the Inbound Interface using F4 help Provided. You might need to choose ALL button for the interface to be shown.
After choosing the Inbound Interface, It is shown in the Interface Determination
7.3.4) A mapping has to be specified .Use the F4 help next to Inbound Interface to select your Interface Mapping.
7.3.5) When you are done , Save the Interface determination object.
8.) Create a Sender Agreement.
In the left hand frame , right click on Sender Agreement ->New
8.1) Specify the following:
Party: blank
Service: Select your own Business system
Interface: Outbound Interface
8.2) In the screen Edit Service Agreement use F4 help for the Sender Communication channel field .Select your Communication channel .Save and close
9.) Create a Receiver Agreement.
Finally you will create a 'Receiver Agreement' .This will allow you to assign a Receiver Communication Channel to the receiver service/Interface you have chosen.
9.1) Go back to the main screen for your receiver determination. In the area Configuration Overview for Receiver Determination at the bottom of your screen click Refresh.
9.2) In the Column Receiver Agreement(Communication Channel) right click and select New Specific.
Specify the following:
Party: blank
Service: Select your own Business system
Interface: Inbound Interface
9.3) In the screen Edit Receiver Agreement for the field Receiver Communication Channel use the input help F4 and select your communication channel. Save and Close it
Your Configuration is complete. Activate the objects.
To Configure the IDOC TO FILE SCENARIO,PROCEED AS FOLLOWS
STEP 1:ALE SETTINGS TO POST IDOC OUT OF SAP R/3
We need to do the following settings in XI
1) Create an RFC Destination to the Sending System in transaction code (SM59)
a) Choose create
b) Specify the name of the RFC destination
c) Select connection type as 3 and save
d) In the technical settings tab enter the details SAP SID/URL and system number#
e) Enter the Gateway host as same details above SID/URL
f) Gateway service is 3300+system number#
g) In the Logon /Security tab, enter the client user & Password details of Destination system
h) Test the connection and remote logon.Both should be succesful
2) Create Port Using Transaction Code IDX1
a) Select create new button
b) Enter the port name as SAP+SID (The starting char should be SAP)
c) Enter the destination client
d) Enter the RFC Destination created in SAP R/3 towards other system
e) Save
3) Load Meta Data for IDOC Using transaction Using Transaction (IDX2)
a) Create new
b) IDOC Message Type
c) Enter port created in IDX1
SETTINGS IN SAP R/3
We need to do the following settings in R/3
Logon to Sap R/3 System
1) Create an RFC Destination to XI in transaction code (SM59)
a) Choose create
b) Specify the name of the RFC destination
c) Select connection type as 3 and save
d) In the technical settings tab enter the details SAP SID/URL and system number#
e) Enter the Gateway host as same details above SID/URL
f) Gateway service is 3300+system number#
g) In the Logon /Security tab, enter the client user & Password details of Destination system
h) Test the connection and remote logon.Both must be succesful
2) Create communication Port for Idoc processing Using Transaction(We21)
a) First Select Transactional RFC and then click create button
b) Enter the destination port name as SAP+SID (The starting char should be SAP)
d) Enter the RFC Destination created in SAP R/3 towards other system.
e) Save
3) Create Partner Profile with Outbound Parameters (WE20)
a) Create New
b) Create the Partner no. name as same the logical system name of the destination system
c) Select Partner type LS
d) Enter details for Type: US/USER, Agent, and Lang
Then Save
e) Select Partner no. and LS which were create above
f) Now we have to give some Outbound Parameters.So click on ADD TO Create Outbound Parameter
g) Select Message type
h) Double click on Message Type and Then Enter the details for Receiving port, Pack size=1 and Basic type
I) save
4) In Transaction SALE, Create Logical System
a). Go to Basic Settings-> First Define logical systems
and then assign logical systems
b) Double click on Define the logical systems
c) Give data for your Logicaal System and Name
d) Now click on Save.Here one window may appear just click on Continue.Now the Logical System name is ready
e) Assign the logical system name to the client
5) Create Customer Distribution model in the transaction code BD64
1) Click on the Create modal View button and enter the short text, Technical name etc as shown below
2) Now select the created model view and click on Add message type button .A pop up box appears, enter Sending system, receiving system and message type
3) Save the Distribution model
Generate Partner Profiles
Click on Menu Item Generate Partner Profiles
It leads to the next transaction where in the selection screen you have to provide Model view name, Partner System logical system and execute
Then, you will be intimated about the partners, port creation, and outbound parameters creation
4) Distribute Customer Distribution Model
In the menu item GO to Edit->Modal View-> Distribute to the destination client
Popup window appears ,press Enter
You will be intimated about the the Modal View Distributed
Step2:Repository
1) From the Integration Builder page, select Integration Repository. This will launch the Java Web Start Application. Log with the User id and password from the Integration Server
2) Choose Tools->Transfer from System Landscape Directory->Import Software Component Versions
From the list of Software Component Versions, Choose your own software component version .Click Import.
3) On the left hand side frame ,software components will appear .Select your own software component. Open your own software component. Double click on this software component. A screen will appear .Switch to display mode. After doing this first add a namespace under Namespaces.
Your NameSpace is urn:idoctofile
4) Then choose the Radio Button ->Import of RFC AND IDOC interfaces from SAP systems permitted
After this specify the connection parameters to the R/3 system:
4.1) System :sapfox
4.2) Client :800
Then Save it. The new namespace will be visible under software component version node in the left frame.
Under the namespace node, you will find the section Imported Objects. Right click on it and choose Import of sap objects. A wizard will display. In the wizard provide the following details.
4.3) Application server:172.25.5.7
4.4) System number:00
4.5) User name: developer
4.6) Password: Password of Sap R/3 system.
Then click continue .You will find IDOC node. Click on this node and select the Idoc which is to be imported from R/3. Click Finish to start the Import. Close the wizard. After doing this the Idoc will be available into XI as Message types. So no need to create any Idoc Structure. We need to create a structure for file only.
5). Under your namespace in the left frame, expand the node Interface objects. You will find a node DATA TYPES
6) Create new data types.
6.1) Right click on Data types and select New.
Your Data Type is :dt_file
In the data type Editor ,Create a structure having Elements of type String , integer, Boolean , Float etc as per the requirement.
Save the object.
6.2) The Import function for XSD files enables you to upload message definitions from external sources. The object type External Definition is a container to make external definitions available in the Integration Repository.. While Importing the XSD files from External Definition
no need to create Data types. They are imported directly as Message types.
6.3) To do so, In the left hand frame Under Interface objects Create a new object of type External Definition and give name to it.
Select the following.
6.3.1) Category: XSD.
6.3.2) Messages: From All Available Global Elements.
6.3.3) File:
Once the XSD is imported, click on Message tab , You should be able to see 2 messages(Request and Response)
7). Create a new Message Type.
7.1) In the left hand frame under Interface objects, right click on the Message types and select new.
7.2) Give a suitable name to the Message type.(MT_ messagetype).
7.3) For the section Data type used you can go to input help (F4) or Search help provided and choose your data type (DT_datatype) from there.
Save it.
8). Create a Message interface
8.1) In the left hand frame under Interface objects, right click on the Message Interface and select new and name(MI_ messageinterface) it
8.2). The interface Should be Inbound and mode should be Asynchronous .It should reference your Message type(Use F4 or Search help).
Save it.
9) . Create a graphical mapping between the target document and the sender .
9.1) In the left hand frame ,expand Mapping objects. Right click on Message mapping and name it.You are now in a graphical editor.The Source message is on left, the Target message is on right.
9.2) As Source message select your own Idoc .You can choose Search for Integration Object.As a reminder you can find your Idoc or Rfc under Software Component- > Namespace->Imported Objects.
9.3) As Target Message you can choose your Message type .Choose Search for Integration Object.
9.4) Now that we have defined the Source and Target message, we can start defining the Mapping rules.
9.5) Map the fields of Source document to the equivalent fields in Target document .This can be achieved easily by locating the field in Target document and then Drag and Drop the Source fields to the respective Target Fields.
Save It.
9.6) You can also Test your Mapping by selecting the 'Test Tab'.
9.7) Fill in the values in the Idoc fields and click 'Start Transformation'. On the right hand side you will see Target Document populated with the appropriate Values.
10). Create an Interface Mapping.
10.1) In the left hand Frame expand Mapping objects. Right Click on Interface Mapping and Name it. You are in a Interface Mapping Editor .Assign the following References.
10.2) Source interface : Your Outbound Interface (The Source document(Idoc) interface).You can Choose Search for Integration Object.
10.3) Target interface: Your Inbound Interface( The Target document interface).
Then Select 'Read Interface' and Assign your 'Mapping Program' .
Mapping Program: Your Message mapping.
Then Save it.
11.) Finally , in the left hand frame ,go to your change list and Activate it
STEP 3: Directory
1) From the Integration Builder page, select Integration Directory. This will launch the Java Web Start Application. Log with the User id and password from the Integration Server.
Create a Scenario Object
2). The First Step is to create a Scenario Object
This will serve as container for all your configuration work. Create and save a scenario object
3) In the left hand frame you can see the created scenario object. Under that Object Expand the node Service without Party and right click on Business System->Assign Business System
4) In the wizard , leave the party name blank and then select your own Business System. Uncheck the box Create Communication Channel Automatically.This service (business system) represents the legacy system and Sap R/3 which will be exchanging the data.
5) . Create a Communication Channel.
6). Expand your service and right click on Communication Channel. Name your Communication Channel
Here we need to configure the adapter.
Since The Sender is IDOC , then there is no need of Sender communication channel and Sender Agreement.
For the Receiver, Specify the following Parameters
6.1 For the adapter type , use the F4 help and select FILE.
6.2 Specify Receiver since the adapter will be sending XML files from XI to the FTP server.
6.3 Specify the following parameters.
Transport Protocol: File Transport Protocol.(FTP)
Message Protocol: File Content Conversion(since the xml file produce by XI need to be converted to text file)
Adapter Engine: Integration Server
For the File system access Parameters, enter the following
Source Directory:Test
File Name: Input.txt
6.4 For the FTP Connection Parameters, Specify the Following
Server: 172.25.5.240
Port: 21(by default)
Data Connection: Passive
Connection security: None
Connection Mode: Permanently
Transfer Mode: Binary
6.5 For Processing Parameters, Specify the following
File construction mode: Add Time Stamp
File Type: Binary
6.6 For Content Conversion Parameters, Specify the Following
RecordSet Structure:
Adapter Status: Active
The receiver file adapter is now configured. Save your Communication Channel.
Create an Receiver Determination.
7). From the left frame Create a new Receiver Determination object. This is the main part of routing process, where you assign a receiver for your message.
7.1) Select your sender service and interface.
Sender:
Party: blank
Service: Sender service(Business system)
Interface : Sender interface
7.2) In the Configured Receivers area , choose the Service for the Target System.. Save your Receiver Determination
Create an Interface Determination.
7.3) Next create an Interface Determination object. Now that we have defined a receiver of message ,we need to assign an Inbound interface and an Interface mapping
7.3.1) In the Receiver Determination you just created, have a look at the area Configuration Overview for Receiver Determination at bottom of your screen and press Refresh for that the Business system you assigned is displayed in that area as well.
7.3.2) In the column Receiver(Partner/Service) open the details by clicking the node .The Entry Not defined shows you that there is no interface determination present.
Right click on the Entry Not defined and select New specific, in order to create a new interface determination object
7.3.3) You are now in the screen Edit Interface Determination. In the section Configured Inbound Interfaces select the Inbound Interface using F4 help Provided. You might need to choose ALL button for the interface to be shown.
After choosing the Inbound Interface, It is shown in the Interface Determination
7.3.4) A mapping has to be specified .Use the F4 help next to Inbound Interface to select your Interface Mapping.
7.3.5) When you are done , Save the Interface determination object.
8.) Create a Sender Agreement.
In the left hand frame , right click on Sender Agreement ->New
8.1) Specify the following:
Party: blank
Service: Select your own Business system
Interface: Outbound Interface
8.2) In the screen Edit Service Agreement use F4 help for the Sender Communication channel field .Select your Communication channel .Save and close
9.) Create a Receiver Agreement.
Finally you will create a 'Receiver Agreement' .This will allow you to assign a Receiver Communication Channel to the receiver service/Interface you have chosen.
9.1) Go back to the main screen for your receiver determination. In the area Configuration Overview for Receiver Determination at the bottom of your screen click Refresh.
9.2) In the Column Receiver Agreement(Communication Channel) right click and select New Specific.
Specify the following:
Party: blank
Service: Select your own Business system
Interface: Inbound Interface
9.3) In the screen Edit Receiver Agreement for the field Receiver Communication Channel use the input help F4 and select your communication channel. Save and Close it
Your Configuration is complete. Activate the objects.
plz rewards points
vikas -
Error while executing WS to RFC sync on 7.4 single stack
Hi Experts
I am working in ws..>sap pi..>Rfc sync scerio
when I have entered the data in RFC its working fi9 but I am using SOAPUI to test it, it's giving me error:
<text>com.sap.engine.interfaces.messaging.api.exception.MessagingException: com.sap.engine.interfaces.messaging.api.exception.MessagingException: com.sap.aii.adapter.rfc.afcommunication.RfcAFWException: error while processing message to remote system:com.sap.aii.adapter.rfc.core.client.RfcClientException: functiontemplate from repository was <null>
pls note that I have reimported the RFC
pls suggest!Refer to question no 16 under the below note
730870 - FAQ XI 3.0/ PI 7.0/ PI 7.1/ PI 7.11/ PI 7.2/ 7.3 RFC Adapter
Q 16: While sending a message to the RFC Adapter the error "... functiontemplate from repository was <null>" is shown. What is the reason?
A: After receiving a message from the Adapter Engine, the RFC Adapter extracts the payload from the message. Normally this should be an XML document in the RFC-XML format. In this format the root element of the XML document represents the name of the function module and is enclosed in the fixed RFC namespace 'urn:sap-com:document:sap:rfc:functions'. But this only will be checked at a later point, when the conversion from XML to native RFC is done. As prerequisite of this conversion the structures and types of the function module parameters has to be known. This is also called metadata or function template. To get this function template the name of the function module is extracted from the root element of the XML document and is queried against the metadata repository of the communication channel. If the metadata repository doesn't have a function module with this name, the exception named above is thrown. Possible reasons are
The XML document, which was sent to the RFC Adapter, is not a RFC-XML document. So the root element name of this document is not the name of a function module and thus can't be found in the metadata repository.
The metadata repository doesn't contain an entry for this function module name. Normally the metadata repository will be an R/3 system and it's function module repository can be searched with the transaction SE37. -
Gurus,
Background :We have fresh installation of SAP PO 7.3 (Single Stack ) on SQL Server 2013.
Scenraio is : JDBC to RFC async scerio; i can pull data from SQL database but not able to post to SAP
Please advise what to do.
I always provide points for helpful answersHi V Jay - Did you check the below thread?
RfcClientException: functiontemplate from repository was <null>
Q 16: While sending a message to the RFC Adapter the error "... functiontemplate from repository was <null>" is shown. What is the reason?
A: After receiving a message from the Adapter Engine, the RFC Adapter extracts the payload from the message. Normally this should be an XML document in the RFC-XML format. In this format the root element of the XML document represents the name of the function module and is enclosed in the fixed RFC namespace 'urn:sap-com:document:sap:rfc:functions'. But this only will be checked at a later point, when the conversion from XML to native RFC is done. As prerequisite of this conversion the structures and types of the function module parameters has to be known. This is also called metadata or function template. To get this function template the name of the function module is extracted from the root element of the XML document and is queried against the metadata repository of the communication channel. If the metadata repository doesn't have a function module with this name, the exception named above is thrown. Possible reasons are
The XML document, which was sent to the RFC Adapter, is not a RFC-XML document. So the root element name of this document is not the name of a function module and thus can't be found in the metadata repository.
The metadata repository doesn't contain an entry for this function module name. Normally the metadata repository will be an R/3 system and it's function module repository can be searched with the transaction SE37
Reference : 730870 - FAQ XI 3.0/ PI 7.0/ PI 7.1/ PI 7.11/ PI 7.2/ 7.3 RFC Adapter
Maybe you are looking for
-
Macbook pro, 17 inch, early 2010. Hard drive crashed so I put in new ssd hard drive. Operating system OS X 10.9.4 has been installed. Now I need to find out how to get my photos from my time machine and restore to my mac book pro??
-
HT201210 when I want to make a call show me the call back page and i cant make call
when I want to make a call show me the call back page and i cant make call
-
I tried to update photoshop with windows 8 and I get update failed. I retried and failed. I restarted my computer and retried and it failed.
-
Aperture 3 doesn't see my iphoto library in OSx
I just installed the Aperture 3 trial on my new macbook pro and it does not see my iphoto library. I was also trying out the iphotolibrary manager but just uninstalled it when it didn't seem to have the full features that aperture has. What to do?
-
i cleared 1z0-007 and 1z0-031 on 17-july 2008 and 30-aug-2008 respectively. shall i send any e mail request to get my OCA Certificate. till date i did not my get my certificate. whom should i contact to get my certificate.