Mapping problem wsdl to idoc
Hi all,
I am using a external defination in a webservice scenario.When I import the wsdl file into the message mapping its not showing the structure of the message type of the wsdl.Now please suggest me how can I map it to a idoc structure.The message type is of xsd string ,its just being shown in the wsdl
hi Abhishek,
for your scenario, WS to IDOC you have to create the WSDL in PI.
you have to define the DT,MT and MI and later in integration directory once you define the communication channel type SOAP sender, you have to go>tools>define Web Services.
see this
Soap Sender Channel Config
Thanks
Rodrigo
Similar Messages
-
Mapping Problem ORDERS Idoc to Edifact
Hi,
I have a mapping problem with the IDOC ORDERS:
I get the IDOC with several E1EDP01. Each E1EDP01 has several E1EDPT1, where i want only the first one (which I get over the TDID value). Each E1EDPT1 has min. 1 E1EDPT2.
Now I have to map each field TDLINE from first two E1EDPT2 of the first E1EDPT1 to the Edifact fields /LIST/S_UNB/S_UNH/G_SSG25/S_LIN/S_IMD[1]/C_C273/D_7008 (from the first E1EDPT2) and, if a second E1EDPT2 exists in /LIST/S_UNB/S_UNH/G_SSG25/S_LIN/S_IMD[1]/C_C273/D_7008_2.
I use following UDF:
//a = TDLINE
//b = Number of entry in the List
int pos =Integer.parseInt(b[0]);
if ( pos < a.length )
result.addValue(a[pos]);
else
result.addValue(ResultList.SUPPRESS);
Unfortunatly, I think becaus of the context problems (not every E1EDPT1 has two E1EDPT2), it's not working. Could somebody help me with this problem?
Thanks in advance
DominicDear Dominic ,
I had same problem when I was trying to do the same thing for FTX segment.
Your UDF is fine but you don't need else condition.
//a = TDLINE
//b = Number of entry in the List
int pos =Integer.parseInt(b[0]);
if ( pos < a.length )
result.addValue(a[pos]);
for C_C273 assigned contant value and
D_7008 assigned TDLINE but change the context to E1EDPT1
and for D_7008_2
TDLINE(context to E1EDPT1 )
====>UDF====>D_7008_2
Contant(=1)
It should work becasue my map is working fine. If not let me know error message.
Thanks
Shubhankar -
Mapping problem: IDOC - XI - File
Hi,
in my scenario (Z-IDOC - XI - File) I have problems with the mapping:
Z-IDOC :
ZFIBUCH1
_IDOC
___Begin
___EDI_DC40
___Z1L061 (0..999999999)
_____Z1L062 (0..999999999)
example
L061 18000 DE 0101 23236318 050605 EUR
__L062 18000 XXX XXX
__L062 18000 XX1 CCC3
L061 87000 DE 0101 050605 EUR
__L062 87000 XXX XXX
__L062 87000 XX1 XAA4
the result should look like this :
L061 18000 DE 0101 23236318 050605 EUR
L062 18000 XXX XXX
L062 18000 XX1 CCC3
L061 87000 DE 0101 050605 EUR
L062 87000 XXX XXX
L062 87000 XX1 XAA4
I tried the following (target)-data types in the mapping but nothing didnt work very well :
MT_ZIFUCH_FILE
__ row
_____L061
_______L062
or
MT_ZIFUCH_FILE
__ row
_____L061
_____L062
or
MT_ZIFUCH_FILE
_____L061
_____L062
Do I need here a BPM? Or should I use XSLT-Mapping??
Or knows somebody a easyer way?
Regards
ChristophHi,
As per my understanding to have a flat file struture you would require a flat structure at the target side.One similar to the second structure mentioned by you.
DT_Target
|_Header
|______L61.....segment (child of header)
|______L62.....segment (child of header)
Using the mapping we convert the idoc structure to flat structure and then use content conversion like this :
Recordset structure : L61,L62
L61.fieldSeparator = ,(for you this value should be space)
L62.fieldSeparator = ,
I have not been able to convert the Target hierarchial structure to a flat file via content conversion.
when i tried I got the values as
L61,1800,...EUR,L62,8700,......
Hope this helps,
Regards,
Sulakshana -
Context Mapping Problem from IDoc to EDI
Hi,
I'm trying to map an IDoc to an EDI and I get this problem.
In my IDoc, I have segment E1ADRM1 (1:N)
My mapping condition is if E1ADRM-PARTNER_Q = OSP then copy E1ADRM-REGION into x (EDI field)
So here is my problem:
In my IDoc test, the segment E1ADRM1 is repeated 6 times and the field REGION is not populated in all iterations so the wrong
REGION is being copied to my EDI field.
If I do a display queue on E1ADRM-PARTNER_Q, the value OSP is at the 5th position
AG
SP
VE
WE
OSP ***
OSO
If I do a display queue on E1ADRM-REGION, since only 5 segment E1ADRM have the field REGION populated, I get
KS
VA
KS
ON
VA
**(E1ADRM-PARTNER_Q = SP do not have the RIGION populated so not showing in the IDoc)
So now, since E1ADRM-PARTNER_Q = OSP is at the 5th position, it is copying the 5th E1ADRM-REGION from the list but it should be the 4th.
How can I do that?
Rgds,
YvesHi,
For the mapping to work as you are expecting the queue should look like this(<b>CC</b> denotes context change)..
KS
<b>CC</b>
<b>CC</b>
VA
<b>CC</b>
KS
<b>CC</b>
ON
<b>CC</b>
VA
If you are not having the context changes, check at what level is field REGION at, right click on REGION in graphical mapping and choose menu item context, the 1st entry should have the tick mark(same should be for the PARTNER_Q field also).
Thanks,
Renjith. -
IDOC DELVRY05 TO EDI 856 - Mapping problem
Hi all,
i'm currently working on a outbound mapping with the delivery idoc (DELVRY05) and the EDI 856 (Advance Shipping Notice Definition)
The problem is that i can't map the items for every pack in the structure because the ocurrency doesn't match.
The EDI 856 has a segment called G_SHL (ocurrence 0.200000), that i replicated 4 times for shipping, order, pack and item data
And this segment has a subsegment called G_SHL/S_HL (ocurrence 0.1)
RESULT DESIRED GIVEN BY THE CLIENT: (1 pack/1item)
3 HL1*S~ ======> S: shipping, 1 hierarchy)
4 TD1CTN251***G223.997*LB~
5 TD5*2ABFSM*CC~
6 REFBM003030987~
7 REFCN086044619~
8 DTM01120080128*180610~
9 DTM06720080204~
10 FOB*PP~
11 N1SFStiefel Labs~
12 N4DULUTHGA*30096~
13 HL21*O~ ======> O: order, 2 hierarchy, 1 was the previous hierarchy)
14 PRF*4064561~
15 HL32*P~ ======> P : Pack, 3 hierarchy, 2 was the previous hierarchy
16 MANGM00000734620052976193~
17 HL43*I~ ======> I: Item , 4 hierchay, 3 was the previous hierarchy
31 LIN*UP073462150651LT45X5147ND00145150605~
32 SN1*12EA~
33 DTM03620090930~
34 HL52*P~ ======> P : Pack, 5 hierarchy, 2 was the previous hierarchy
35 MANGM00000734620052975189~
36 HL65*I~ ======> I: Item , 6 hierchay, 5 was the previous hierarchy
37 LIN*UP073462150651LT45X5147ND00145150605~
38 SN1*12EA~
39 DTM03620090930~
40 HL72*P~ ======> P : Pack,7 hierarchy, 2 was the previous hierarchy
41 MANGM00000734620052975196~
42 HL87*I~ ======> I: Item , 8 hierarchay, 7 was the previous hierarchy
43 LIN*UP073462150651LT45X5147ND00145150605~
44 SN1*12EA~
45 DTM03620090930~
46 CTT*8~
47 SE479220014~
As u see, all packs belong to "2 hierarchy" (order), and items to their correposding pack
(has a comment, the "hierarchy number" is always given by a counter so u won't find the exact number again)
so, the client wants us to create an structure that is like this..
1º Pack
1º item
2º item
2º Pack
1º item
2º item
(the example has only one item, but they say that is going to be with many items)
- The problem is that the structure data of the Idoc doesnt match EDI 856 structure
E1EDL37 (0.99999) -
Pack data -
G_SHL (0.200000)
E1EDL37/E1EDL44 (0.99999) -
Item data -
G_SHL/HL (0.1) <====
i was doing different G_SHL for pack and items but that leaves me with a wrong structure, and with all the hierarchy data wrong for items (since the mapping can't see which item belong to his pack)
1º Pack
2º Pack
3º Pack
1º Item
2º Item
3º Item
- How can i map the structure Pack/item if in the idoc got too many item positions for only one EDI corresponding segment??
Thanks in advance!Alains,
We have the same tear, pack and item problem with one of our customer in one of my project. To acheive this result with the standard schema is not possible because this is a custom one.
So I would suggest to change the schema in BIC like the occurrence and within the third G_SHL you should have S_HL and within this you should have a S_HL so that for every pack you will have multipe items.
The bottom line is to have the schema as required by your mapping. Once you change the schema deploy the maps in J2EE and use them else it will throw an error in RWB.
Regards,
---Satish -
Mapping Problem with IDOC HRMD_A05
Hi All,
When i am mapping source structure with IDOC HRMD_A05 i am getting Mapping not sufficiently defined...
The idoc is used to change the address of employee(infotype 0006)..
my source structure is
EMPADDR_MT
EmpAddr1
Trans_INFTY *
Address1
AddressType *
PERNR *
EFdate *
Addr1 *
Addr2 *
ADDR4 *
City *
Country *
state *
Postalcode *
the fields to be mapped
So can any one help me out what r fields to be maintained for <b>HRMD_A05</b>...
Regards,
Sridhar
Message was edited by: sridhar reddy kondamAll the required fields & segments(shown red in mapping editor or min occurence:1) of idoc need to be mapped.If any of the fields are not available in your source for mapping..map those fields with empty constants using constant option of the mapping editor.
-
SP14 Multi-mapping - error in receiver idoc adapter
Hi,
I have a scenario where a business service should send some XML to SAP CRM. I get the file via a sender JMS adapter and try to post it to CRM via a receiver IDOC adapter.
I have created a multimapping (1:N - 1 XML file to many Idocs) as should in the repository.
In the configuration under Interface Determination, I have chosen 'RB_SPLIT' and selected the interface multimapping.
It should be pointed out, that when testing both interface and message mapping i get no error. All idocs seem to be created as they should.
When testing the setup 'real life' the message fails. The error message in the monitor says:
- <!-- Call Adapter
-->
- <SAP:Error xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:mustUnderstand="">
<SAP:Category>XIAdapter</SAP:Category>
<SAP:Code area="IDOC_ADAPTER">ATTRIBUTE_WRONG_INTF</SAP:Code>
<SAP:P1>InterfaceCollection</SAP:P1>
<SAP:P2 />
<SAP:P3 />
<SAP:P4 />
<SAP:AdditionalText />
<SAP:ApplicationFaultMessage namespace="" />
<SAP:Stack>Unable to interpret IDoc interface InterfaceCollection</SAP:Stack>
<SAP:Retry>M</SAP:Retry>
</SAP:Error>
Notice that the above error is when trying to send only 1 record, which in turn then should result in only 1 idoc.
If trying to send multiple XML records, i get the following error:
- <!-- Technical Routing
-->
- <SAP:Error xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:mustUnderstand="">
<SAP:Category>XIServer</SAP:Category>
<SAP:Code area="OUTBINDING">MMF_ENGINETYPE</SAP:Code>
<SAP:P1 />
<SAP:P2 />
<SAP:P3 />
<SAP:P4 />
<SAP:AdditionalText />
<SAP:ApplicationFaultMessage namespace="" />
<SAP:Stack>A system error occurred in the outbound binding</SAP:Stack>
<SAP:Retry>M</SAP:Retry>
</SAP:Error>
In the monitor in the payload of 'Request message mapping' I see as many Maindocument, Submaindocument pairs as should be Idocs.
Now i really don't know how to interpret the error messages in both cases, so I'm a little lost here...
It should be pointed out that the idoc being used everywhere in this scenario, has not been modified - from all places it is being used (and only exists) in the 'Imported objects | Idocs' place.
Also the Idoc is also being used as Inbound interface - so no mistakes here either.
I really hope someone can help me here, as I'm otherwise pretty stuck in this case.
Best regards,
DanielHi Daniel,
I have exactly the same type of scenario (under SPS14 and now also SPS15), sending an XML message over JMS to XI and trying a multi-mapping to many IDocs (actually a list of orders in XML is mapped to n ORDERS Idocs).
I also face problems doing so, when I use the IDoc Adapter as outbound in the Receiver Agreement. I receive the following error:
<i>CO_TXT_MMF_ENGINETYPE
Messages in multi message format can be sent to one adapter engine only</i>
However, I tested the same scenario by just changing the Receiver Agreement to a File Communication Channel and - surprise, surprise - it works. One file per IDoc is created.
Of course, this is not what we want to accomplish, but when I checked this piece of documentation (sorry another link
http://help.sap.com/saphelp_nw04/helpdata/en/42/ed364cf8593eebe10000000a1553f7/content.htm
the IDoc adapter is not listed in the list of Adapters that are supported. Does that mean, that this feature is not supported for generating IDocs? Maybe that's a question for a SAP OSS Message?
I hope that helped you a little further - if you find out more I'd be happy to learn about it.
regards,
Peter -
Mapping problem:from E1EDK14-ORGID to PORDCR102-PUR_GROUP
Mapping problem:from E1EDK14-ORGID to PORDCR102-PUR_GROUP
E1EDK14 occurs 4 times in the source sys:
1 E1EDK14-QUALF = '014'
E1EDK14-ORGID = 'YP01' <= purchase organization
2 E1EDK14-QUALF = '009'
E1EDK14-ORGID = '001' <= purchase group
3 E1EDK14-QUALF = '013'
E1EDK14-ORGID = 'NB' <= document type
4 E1EDK14-QUALF = '011'
E1EDK14-ORGID = 'C999' <= company code
I always want to copy "E1EDK14-ORGID = '001'" to PORDCR102-PUR_GROUP.
I have a solution which works but not perfect:
E1EDK14-ORGID=>copyvalue[1]=>PORDCR102-PUR_GROUP
I want to have the perfect mapping as follow:
IF E1EDK14-QUALF = '009'.
E1EDK14-ORGID = '001' => PORDCR102-PUR_GROUP
ENDIF.
I did it in the data flow editor as follow:
/PORDCR102/IDOC/E1PORDCR1/E1BPMEPOHEADER/PUR_GROUP=
ifWithoutElse([keepss=false]stringEquals
(removeContexts(/ORDERS05/IDOC/E1EDK14/QUALF=),
const([value=009])), /ORDERS05/IDOC/E1EDK14/ORGID=)
But the result in the target sys is always 'YP0'(The first E1EDK14-ORGID)
How to solve this problem?
Thanks
ming yuHi,
Try like this.
E1EDK14-QUALF --------
Constant(009) ---------------- EqualsS ---------------
And(Boolean Function) ------ IfWithoutElse -- PORDCR102-PUR_GROUP
E1EDK14-ORGID ------- E1EDK14-ORGID ----------------
Constant(001) -------------- EqualsS ------------------
Regards,
P.Venkat -
Message Mapping Problem with UTF-16LE Encoded XML
Hello,
we have the following scenario:
IDoc > BPM > HTTP Sync Call > BPM > IDoc
Resonse message of the HTTP call is a XML file with UTF-16LE processing instruction. This response should then be mapped to a SYSTAT IDoc. However the message mapping fails "...XML Parser: No data allowed here ...".
So obviously the XML is not considered as well-formed.
When taking a look at SXMB_MONI the following message appears: "Switch from current encoding to specific encoding not supported.....".
Strange thing however is if I save the response file as XML and use the same XML file in the test tab message mapping is executed successfully.
I also tried to use a Java Mapping to switch encodings before executing message mapping, but the error remains.
Could the problem be, that the codepage UTF-16LE is not installed on the PI system ? Any idea on that ?
Thank you!
Edited by: Florian Guppenberger on Feb 2, 2010 2:29 PM
Edited by: Florian Guppenberger on Feb 2, 2010 2:29 PMHi,
thank your for your answer.
This is what I have tried to achieve. I apply the java conversion mapping when receiving the response message - i tried to convert the response to UTF-16, UTF-8 but none of them has helped to solve the problem.
I guess that using adapter modules is not an option either as it would modify the request message, but not the response, right? -
Java heap space error occured during message mapping of FILE to IDOC
hello Friends,
I am trying to do the message mapping for File to Idoc scenario.
Idoc which I am using is HRMD_A.HRMD_A06 and infotype which I want to update is 14. I am trying to map the message type which I hav created for infotype 14 with the IDOC
Its very simple scenerio but every time I try to save the mapping before activating it I get an error:
Java heap space
Internal problem occurred (INTERNAL_PROBLEM)
Java heap space.
I am not able to figure out what possibly is the problem wheather its from my end or the BASIS end.
Kindly help.
Regards,
LokeshAs the server probably survives (you restart your Integration Builder and can probably connect immediately), the problem will be on your side (client). Did you add one or more large xml-test-instances to the mapping ? If yes, delete them, because they lower the performance and can make problems. If not, then this is a strange problem. Even if the Idoc structure is complex, the mapping object itself cannot be that large.Is this problem only with this one mapping ?
CSY
Edited by: Christian Sy on Mar 9, 2010 6:26 AM -
I have a problem receving an IDOC. I checked the SM58 Xn and it says " Error when opening RFC connection "
So I reprocessed the IDOC by transaction WE19 and then BD87 where SAP says it has sent the IDOC and staus is set to 03.
However I again checked SM58 this time it says " RfcAbort : Cannot lock transaction " ........
any idea or pointers as what the problem is or might be?
Below is the RFC Server code which i am using......it is the sample code that comes along with the sapjco.jar
Thanks a lot
package milestone.ups;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Hashtable;
import java.util.Map;
import java.util.Properties;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.JCoFunction;
import com.sap.conn.jco.ext.DestinationDataProvider;
import com.sap.conn.jco.ext.ServerDataProvider;
import com.sap.conn.jco.server.DefaultServerHandlerFactory;
import com.sap.conn.jco.server.JCoServer;
import com.sap.conn.jco.server.JCoServerContext;
import com.sap.conn.jco.server.JCoServerContextInfo;
import com.sap.conn.jco.server.JCoServerErrorListener;
import com.sap.conn.jco.server.JCoServerExceptionListener;
import com.sap.conn.jco.server.JCoServerFactory;
import com.sap.conn.jco.server.JCoServerFunctionHandler;
import com.sap.conn.jco.server.JCoServerState;
import com.sap.conn.jco.server.JCoServerStateChangedListener;
import com.sap.conn.jco.server.JCoServerTIDHandler;
public class StepByStepServer
static String SERVER_NAME1 = "SERVER";
static String DESTINATION_NAME1 = "ABAP_AS_WITHOUT_POOL";
static String DESTINATION_NAME2 = "ABAP_AS_WITH_POOL";
static MyTIDHandler myTIDHandler = null;
static
Properties connectProperties = new Properties();
connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, " PRIVATE_IP ");
connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "01");
connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "001");
connectProperties.setProperty(DestinationDataProvider.JCO_USER, " usr");
connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "pwd ");
connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "en");
createDataFile(DESTINATION_NAME1, "jcoDestination", connectProperties);
connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3");
connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10");
createDataFile(DESTINATION_NAME2, "jcoDestination", connectProperties);
Properties servertProperties = new Properties();
servertProperties.setProperty(ServerDataProvider.JCO_GWHOST, " PRIVATE_IP ");
servertProperties.setProperty(ServerDataProvider.JCO_GWSERV, "sapgw01");
servertProperties.setProperty(ServerDataProvider.JCO_PROGID, "JCO_SERVER");
servertProperties.setProperty(ServerDataProvider.JCO_REP_DEST, "ABAP_AS_WITH_POOL");
servertProperties.setProperty(ServerDataProvider.JCO_CONNECTION_COUNT, "2");
createDataFile(SERVER_NAME1, "jcoServer", servertProperties);
static void createDataFile(String name, String suffix, Properties properties)
File cfg = new File(name + "." + suffix);
if(!cfg.exists())
try
FileOutputStream fos = new FileOutputStream(cfg, false);
properties.store(fos, "for tests only !");
fos.close();
catch(Exception e)
throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e);
static class StfcConnectionHandler implements JCoServerFunctionHandler
public void handleRequest(JCoServerContext serverCtx, JCoFunction function)
System.out.println("----
System.out.println("call : " + function.getName());
System.out.println("ConnectionId : " + serverCtx.getConnectionID());
System.out.println("SessionId : " + serverCtx.getSessionID());
System.out.println("TID : " + serverCtx.getTID());
System.out.println("repository name : " + serverCtx.getRepository().getName());
System.out.println("is in transaction : " + serverCtx.isInTransaction());
System.out.println("is stateful : " + serverCtx.isStatefulSession());
System.out.println("----
System.out.println("gwhost: " + serverCtx.getServer().getGatewayHost());
System.out.println("gwserv: " + serverCtx.getServer().getGatewayService());
System.out.println("progid: " + serverCtx.getServer().getProgramID());
System.out.println("----
System.out.println("attributes : ");
System.out.println(serverCtx.getConnectionAttributes().toString());
System.out.println("----
System.out.println("CPIC conversation ID: " + serverCtx.getConnectionAttributes().getCPICConversationID());
System.out.println("----
System.out.println("req text: " + function.getImportParameterList().getString("REQUTEXT"));
function.getExportParameterList().setValue("ECHOTEXT", function.getImportParameterList().getString("REQUTEXT"));
function.getExportParameterList().setValue("RESPTEXT", "Hello World");
// In sample 3 (tRFC Server) we also set the status to executed:
if(myTIDHandler != null)
myTIDHandler.execute(serverCtx);
static class MyThrowableListener implements JCoServerErrorListener, JCoServerExceptionListener
public void serverErrorOccurred(JCoServer jcoServer, String connectionId, JCoServerContextInfo serverCtx, Error error)
System.out.println(">>> Error occured on " + jcoServer.getProgramID() + " connection " + connectionId);
error.printStackTrace();
public void serverExceptionOccurred(JCoServer jcoServer, String connectionId, JCoServerContextInfo serverCtx, Exception error)
System.out.println(">>> Error occured on " + jcoServer.getProgramID() + " connection " + connectionId);
error.printStackTrace();
static class MyStateChangedListener implements JCoServerStateChangedListener
public void serverStateChangeOccurred(JCoServer server, JCoServerState oldState, JCoServerState newState)
// Defined states are: STARTED, DEAD, ALIVE, STOPPED;
// see JCoServerState class for details.
// Details for connections managed by a server instance
// are available via JCoServerMonitor
System.out.println("Server state changed from " + oldState.toString() + " to " + newState.toString() + " on server with program id "
+ server.getProgramID());
static void step2SimpleServer()
JCoServer server;
try
server = JCoServerFactory.getServer(SERVER_NAME1);
catch(JCoException ex)
throw new RuntimeException("Unable to create the server " + SERVER_NAME1 + ", because of " + ex.getMessage(), ex);
JCoServerFunctionHandler stfcConnectionHandler = new StfcConnectionHandler();
DefaultServerHandlerFactory.FunctionHandlerFactory factory = new DefaultServerHandlerFactory.FunctionHandlerFactory();
factory.registerHandler("STFC_CONNECTION", stfcConnectionHandler);
server.setCallHandlerFactory(factory);
// additionally to step 1
MyThrowableListener eListener = new MyThrowableListener();
server.addServerErrorListener(eListener);
server.addServerExceptionListener(eListener);
MyStateChangedListener slistener = new MyStateChangedListener();
server.addServerStateChangedListener(slistener);
server.start();
System.out.println("The program can be stoped using <ctrl>+<c>");
static class MyTIDHandler implements JCoServerTIDHandler
Map<String, TIDState> availableTIDs = new Hashtable<String, TIDState>();
public boolean checkTID(JCoServerContext serverCtx, String tid)
// This example uses a Hashtable to store status information. But usually
// you would use a database. If the DB is down, throw a RuntimeException at
// this point. JCo will then abort the tRFC and the R/3 backend will try
// again later.
System.out.println("TID Handler: checkTID for " + tid);
TIDState state = availableTIDs.get(tid);
if(state == null)
availableTIDs.put(tid, TIDState.CREATED);
return true;
if(state == TIDState.CREATED || state == TIDState.ROLLED_BACK)
return true;
return false;
// "true" means that JCo will now execute the transaction, "false" means
// that we have already executed this transaction previously, so JCo will
// skip the handleRequest() step and will immediately return an OK code to R/3.
public void commit(JCoServerContext serverCtx, String tid)
System.out.println("TID Handler: commit for " + tid);
// react on commit e.g. commit on the database
// if necessary throw a RuntimeException, if the commit was not
// possible
availableTIDs.put(tid, TIDState.COMMITTED);
public void rollback(JCoServerContext serverCtx, String tid)
System.out.println("TID Handler: rollback for " + tid);
availableTIDs.put(tid, TIDState.ROLLED_BACK);
// react on rollback e.g. rollback on the database
public void confirmTID(JCoServerContext serverCtx, String tid)
System.out.println("TID Handler: confirmTID for " + tid);
try
// clean up the resources
// catch(Throwable t) {} //partner wont react on an exception at
// this point
finally
availableTIDs.remove(tid);
public void execute(JCoServerContext serverCtx)
String tid = serverCtx.getTID();
if(tid != null)
System.out.println("TID Handler: execute for " + tid);
availableTIDs.put(tid, TIDState.EXECUTED);
private enum TIDState
CREATED, EXECUTED, COMMITTED, ROLLED_BACK, CONFIRMED;
public static void main(String[] a)
// step1SimpleServer();
step2SimpleServer();
// step3SimpleTRfcServer();thx sameer.
I am sending IDOCs when delivery is created i.e through transaction VL01N /VL02N.
I dont know for some reason i dont have mw ppackage in my sapjco.jar. I got from the sap market place.
I modified the code to handle IDOC request as u sugguested. I have put system.out in the code to check whether handler is being invovked? But it didnt when I run the code.
I tried to reprocess the IDOC through we19....but they failed(as shown in sm58).
Here is the modified code....
package milestone.ups;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Hashtable;
import java.util.Map;
import java.util.Properties;
import com.sap.conn.idoc.IDocDocumentList;
import com.sap.conn.idoc.IDocXMLProcessor;
import com.sap.conn.idoc.jco.JCoIDoc;
import com.sap.conn.idoc.jco.JCoIDocHandler;
import com.sap.conn.idoc.jco.JCoIDocHandlerFactory;
import com.sap.conn.idoc.jco.JCoIDocServerContext;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.ext.DestinationDataProvider;
import com.sap.conn.jco.ext.ServerDataProvider;
import com.sap.conn.jco.server.JCoServer;
import com.sap.conn.jco.server.JCoServerContext;
import com.sap.conn.jco.server.JCoServerContextInfo;
import com.sap.conn.jco.server.JCoServerErrorListener;
import com.sap.conn.jco.server.JCoServerExceptionListener;
import com.sap.conn.jco.server.JCoServerState;
import com.sap.conn.jco.server.JCoServerStateChangedListener;
import com.sap.conn.jco.server.JCoServerTIDHandler;
import com.sap.conn.idoc.jco.*;
public class StepByStepServer
static String SERVER_NAME1 = "SERVER";
static String DESTINATION_NAME1 = "ABAP_AS_WITHOUT_POOL";
static String DESTINATION_NAME2 = "ABAP_AS_WITH_POOL";
static MyTIDHandler myTIDHandler = null;
static
Properties connectProperties = new Properties();
connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "172.31.64.74");
connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "01");
connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "001");
connectProperties.setProperty(DestinationDataProvider.JCO_USER, "US9904");
connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "us9904");
connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "en");
createDataFile(DESTINATION_NAME1, "jcoDestination", connectProperties);
connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3");
connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10");
createDataFile(DESTINATION_NAME2, "jcoDestination", connectProperties);
Properties servertProperties = new Properties();
servertProperties.setProperty(ServerDataProvider.JCO_GWHOST, "172.31.64.74");
servertProperties.setProperty(ServerDataProvider.JCO_GWSERV, "sapgw01");
servertProperties.setProperty(ServerDataProvider.JCO_PROGID, "JCO_SERVER");
servertProperties.setProperty(ServerDataProvider.JCO_REP_DEST, "ABAP_AS_WITH_POOL");
servertProperties.setProperty(ServerDataProvider.JCO_CONNECTION_COUNT, "2");
createDataFile(SERVER_NAME1, "jcoServer", servertProperties);
static void createDataFile(String name, String suffix, Properties properties)
File cfg = new File(name + "." + suffix);
if(!cfg.exists())
try
FileOutputStream fos = new FileOutputStream(cfg, false);
properties.store(fos, "for tests only !");
fos.close();
catch(Exception e)
throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e);
static class MyIDocHandler implements JCoIDocHandler
public void handleRequest(JCoServerContext serverCtx, IDocDocumentList idocList)
System.out.println("IN Handler"); - THIS DIDNT PRINT on the CONSOLE FileOutputStream fos=null;
OutputStreamWriter osw=null;
try
IDocXMLProcessor xmlProcessor =
JCoIDoc.getIDocFactory().getIDocXMLProcessor();
fos=new FileOutputStream(serverCtx.getTID()+"_idoc.xml");
osw=new OutputStreamWriter(fos, "UTF8");
xmlProcessor.render(idocList, osw,
IDocXMLProcessor.RENDER_WITH_TABS_AND_CRLF);
osw.flush();
catch (Throwable thr)
thr.printStackTrace();
finally
try
if (osw!=null)
osw.close();
if (fos!=null)
fos.close();
catch (IOException e)
e.printStackTrace();
static class MyIDocHandlerFactory implements JCoIDocHandlerFactory
private JCoIDocHandler handler = new MyIDocHandler();
public JCoIDocHandler getIDocHandler(JCoIDocServerContext serverCtx)
System.out.println("Handler Object created and invoked");
return handler;
static class MyThrowableListener implements JCoServerErrorListener, JCoServerExceptionListener
public void serverErrorOccurred(JCoServer jcoServer, String connectionId, JCoServerContextInfo serverCtx, Error error)
System.out.println(">>> Error occured on " + jcoServer.getProgramID() + " connection " + connectionId);
error.printStackTrace();
public void serverExceptionOccurred(JCoServer jcoServer, String connectionId, JCoServerContextInfo serverCtx, Exception error)
System.out.println(">>> Error occured on " + jcoServer.getProgramID() + " connection " + connectionId);
error.printStackTrace();
static class MyStateChangedListener implements JCoServerStateChangedListener
public void serverStateChangeOccurred(JCoServer server, JCoServerState oldState, JCoServerState newState)
// Defined states are: STARTED, DEAD, ALIVE, STOPPED;
// see JCoServerState class for details.
// Details for connections managed by a server instance
// are available via JCoServerMonitor
System.out.println("Server state changed from " + oldState.toString() + " to " + newState.toString() + " on server with program id "
+ server.getProgramID());
static void step2SimpleServer()
JCoIDocServer server;
try
server = JCoIDoc.getServer(SERVER_NAME1);
catch(JCoException ex)
throw new RuntimeException("Unable to create the server " + SERVER_NAME1 + ", because of " + ex.getMessage(), ex);
//JCoServerFunctionHandler stfcConnectionHandler = new StfcConnectionHandler();
server.setIDocHandlerFactory(new MyIDocHandlerFactory());
//factory.registerHandler("STFC_CONNECTION", stfcConnectionHandler);
// additionally to step 1
MyThrowableListener eListener = new MyThrowableListener();
server.addServerErrorListener(eListener);
server.addServerExceptionListener(eListener);
MyStateChangedListener slistener = new MyStateChangedListener();
server.addServerStateChangedListener(slistener);
server.start();
System.out.println("Server Started");
System.out.println("The program can be stoped using <ctrl>+<c>");
static class MyTIDHandler implements JCoServerTIDHandler
Map<String, TIDState> availableTIDs = new Hashtable<String, TIDState>();
public boolean checkTID(JCoServerContext serverCtx, String tid)
// This example uses a Hashtable to store status information. But usually
// you would use a database. If the DB is down, throw a RuntimeException at
// this point. JCo will then abort the tRFC and the R/3 backend will try
// again later.
System.out.println("TID Handler: checkTID for " + tid);
TIDState state = availableTIDs.get(tid);
if(state == null)
availableTIDs.put(tid, TIDState.CREATED);
return true;
if(state == TIDState.CREATED || state == TIDState.ROLLED_BACK)
return true;
return false;
// "true" means that JCo will now execute the transaction, "false" means
// that we have already executed this transaction previously, so JCo will
// skip the handleRequest() step and will immediately return an OK code to R/3.
public void commit(JCoServerContext serverCtx, String tid)
System.out.println("TID Handler: commit for " + tid);
// react on commit e.g. commit on the database
// if necessary throw a RuntimeException, if the commit was not
// possible
availableTIDs.put(tid, TIDState.COMMITTED);
public void rollback(JCoServerContext serverCtx, String tid)
System.out.println("TID Handler: rollback for " + tid);
availableTIDs.put(tid, TIDState.ROLLED_BACK);
// react on rollback e.g. rollback on the database
public void confirmTID(JCoServerContext serverCtx, String tid)
System.out.println("TID Handler: confirmTID for " + tid);
try
// clean up the resources
// catch(Throwable t) {} //partner wont react on an exception at
// this point
finally
availableTIDs.remove(tid);
public void execute(JCoServerContext serverCtx)
String tid = serverCtx.getTID();
if(tid != null)
System.out.println("TID Handler: execute for " + tid);
availableTIDs.put(tid, TIDState.EXECUTED);
private enum TIDState
CREATED, EXECUTED, COMMITTED, ROLLED_BACK, CONFIRMED;
public static void main(String[] a)
// step1SimpleServer();
step2SimpleServer();
// step3SimpleTRfcServer(); -
Mapping Problem. Do I need a UDF?
Hello,
I have the following scenario.
Source File
<ORDER>
<ITEMS>
<ITEM>
<NUM>10</NUM>
<CONDITIONS>
<CONDITION>
<TYPE>T1</TYPE>
<VALUE>V1</VALUE>
</CONDITION>
<CONDITION>
<TYPE>T2</TYPE>
<VALUE>V2</VALUE>
</CONDITION>
</ITEM>
</ITEMS>
</ORDER>
I have to map this to an IDOC with the structure
<E1BPITEM>
<NUM>10</NUM>
</E1BPITEM>
<E1BPCOND>
<NUM>10</NUM>
<TYPE>T1</TYPE>
<VALUE>V1</VALUE>
</E1BPCOND>
<E1BPCOND>
<NUM>10</NUM>
<TYPE>T2</TYPE>
<VALUE>V2</VALUE>
</E1BPCOND>
I am using graphical mapping. everything works well until I have an order with no conditions at all.
in that case in all subsequent orders the NUM fields are mapped incorrectly.
my mapping:
<NUM> ... THIS IS MY PROBLEM
<TYPE> (in context items) -> exists -> createif -> E1BPCOND
<TYPE> (in context items) -> splitbyvalue (each) ->TYPE
<VALUE> (in context items) -> splitbyvalue (each) ->VALUE
Do I need a UDF or can I solve this using graphical mapping? I have never written a UDF that uses Reultlist. what do I need to know?
Thanks,
YoniThanks for the helpful answer. It looks nicer than my graphical mapping but still the same problem. When there is an order with no conditions one SUPPRESS is added to condition type and value queues but not to the NUM queue.
Source XSD:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="com:post:sd:sales" targetNamespace="com:post:sd:sales">
<xsd:element name="sales_new_MT" type="sales_new_DT" />
<xsd:complexType name="sales_new_DT">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
e1cb7e20f38211dcb9b00019bb2d97c0
</xsd:appinfo>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="FILE_HEADER">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
2af82de0557311dccef00019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="SYS_CODE" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
2af82de1557311dc87e70019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="HAFK_CASH" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c00771411dcc5c80019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="HAFK_CH" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c01771411dcbef00019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="HAFK_CR" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c02771411dc8ecf0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="SUM_NO_ORD" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c03771411dcb4f00019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="WORK_DATE" type="xsd:date">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c04771411dc8f860019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="MAAZAN" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c05771411dc8b240019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="SNIF" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c06771411dcbe960019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="ASHNAV" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c07771411dcc16e0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ORDERS">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
2af82de4557311dcb4530019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ORDER" minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
2af82de5557311dcb61a0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="SERV_DATE" type="xsd:date" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
2af82de6557311dccabe0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="PRICE_DATE" type="xsd:date" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
2af82de7557311dca7f20019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="SNIF" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
2af82de8557311dcc78b0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="ASHNAV" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c08771411dc8b350019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="ORDER_ID" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c09771411dcbfef0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="USER_ID" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c0a771411dca75c0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="INVOICE" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c0b771411dcc40f0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="ORD_TYPE" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c0c771411dccc710019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="ORD_TEXT" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c0d771411dcb34c0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="MAAM_ORDER" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
6d52d3f0ac7811dca1640019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="CUSTOMERS">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
2af82de9557311dca4d70019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="CUSTOMER" minOccurs="0" maxOccurs="10">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
2af82dea557311dc9f370019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="PARTN_ROLE" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
2af82deb557311dc93ef0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="PARTN_NUMB" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
2af82dec557311dc98400019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="NAME" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c0e771411dc8c650019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="COUNTRY" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c0f771411dc9e620019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="CITY" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c10771411dc856a0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="POST_CODE1" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c11771411dcb0840019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="STREET" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c12771411dc91cd0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="HOUSE" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c13771411dc964f0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ITEMS">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
2af82ded557311dc94570019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ITEM" maxOccurs="unbounded">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
2af82dee557311dc9bbd0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="CONDITIONS" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
ab4c79b0ac7111dc9f0e0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="CONDITION" minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
ab4c79b1ac7111dccbef0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="COND_TYPE" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
4379b3c0ac7611dc8f8f0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="COND_VAL" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
4379b3c1ac7611dc80610019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="CNDS" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
9fca6e70ce7d11dcb57a0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="CND" minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
9fca6e71ce7d11dc88aa0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="CNDT" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
9fca6e72ce7d11dcb18a0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="CNDV" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
9fca6e73ce7d11dcb4760019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="MKT_SAP" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
2af82def557311dca2150019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="NUM" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
844eb460c37611dc97ff0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="ITEM_CATEG" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c14771411dca0a30019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="QTY" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c15771411dcbf590019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="LEGACY" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c16771411dcb8e20019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="STOCK" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
6d4040e0ac7911dc8caf0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="MAAM_ITEM" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
2af82df2557311dc921c0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="ITEM_TEXT" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c19771411dc96fa0019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="REF_NUMBER" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo source="http://sap.com/xi/TextID">
987d6c1a771411dcce450019bb5c48d9
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Target XSD is IDOC SALESORDER_CREATEFROMDAT2.SALESORDER_CREATEFROMDAT202
with maxoccurs changed for multiple idoc scenario.
sample file (2 orders , first with no conditions and second with 3 conditions):
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<ns0:sales_new_MT xmlns:ns0="com:post:sd:sales">
<FILE_HEADER>
<WORK_DATE>20080310</WORK_DATE>
<SYS_CODE>Z02</SYS_CODE>
</FILE_HEADER>
<ORDERS>
<ORDER>
<SERV_DATE>20080310</SERV_DATE>
<SNIF>101</SNIF>
<ASHNAV>131</ASHNAV>
<ORDER_ID>20080310101</ORDER_ID>
<USER_ID>40076416</USER_ID>
<ORD_TYPE>ZOR1</ORD_TYPE>
<MAAM_ORDER>A</MAAM_ORDER>
<CUSTOMERS>
<CUSTOMER>
<PARTN_ROLE>AG</PARTN_ROLE>
<PARTN_NUMB>40000001</PARTN_NUMB>
</CUSTOMER>
</CUSTOMERS>
<ITEMS>
<ITEM>
<NUM>10</NUM>
<MKT_SAP>Z230000163</MKT_SAP>
<QTY>1</QTY>
<LEGACY>163</LEGACY>
<MAAM_ITEM>1</MAAM_ITEM>
</ITEM>
</ITEMS>
</ORDER>
<ORDER>
<SERV_DATE>20080310</SERV_DATE>
<SNIF>101</SNIF>
<ASHNAV>301</ASHNAV>
<ORDER_ID>20080310101</ORDER_ID>
<USER_ID>32547747</USER_ID>
<ORD_TYPE>ZOR1</ORD_TYPE>
<MAAM_ORDER>A</MAAM_ORDER>
<CUSTOMERS>
<CUSTOMER>
<PARTN_ROLE>AG</PARTN_ROLE>
<PARTN_NUMB>40000001</PARTN_NUMB>
</CUSTOMER>
</CUSTOMERS>
<ITEMS>
<ITEM>
<NUM>10</NUM>
<MKT_SAP>Z220000060</MKT_SAP>
<QTY>1</QTY>
<LEGACY>160</LEGACY>
<MAAM_ITEM>1</MAAM_ITEM>
</ITEM>
<ITEM>
<NUM>20</NUM>
<MKT_SAP>Z220000071</MKT_SAP>
<QTY>1</QTY>
<LEGACY>171</LEGACY>
<MAAM_ITEM>1</MAAM_ITEM>
<CONDITIONS>
<CONDITION>
<COND_TYPE>ZST1</COND_TYPE>
<COND_VAL>433.67</COND_VAL>
</CONDITION>
</CONDITIONS>
</ITEM>
<ITEM>
<NUM>30</NUM>
<MKT_SAP>Z220000074</MKT_SAP>
<QTY>6</QTY>
<LEGACY>174</LEGACY>
<MAAM_ITEM>1</MAAM_ITEM>
<CONDITIONS>
<CONDITION>
<COND_TYPE>ZST1</COND_TYPE>
<COND_VAL>1296.33</COND_VAL>
</CONDITION>
</CONDITIONS>
</ITEM>
<ITEM>
<NUM>40</NUM>
<MKT_SAP>Z220000075</MKT_SAP>
<QTY>10</QTY>
<LEGACY>175</LEGACY>
<MAAM_ITEM>1</MAAM_ITEM>
<CONDITIONS>
<CONDITION>
<COND_TYPE>ZST1</COND_TYPE>
<COND_VAL>17221.00</COND_VAL>
</CONDITION>
</CONDITIONS>
</ITEM>
<ITEM>
<NUM>50</NUM>
<MKT_SAP>Z220000076</MKT_SAP>
<QTY>41</QTY>
<LEGACY>176</LEGACY>
<MAAM_ITEM>1</MAAM_ITEM>
</ITEM>
</ITEMS>
</ORDER>
</ORDERS>
</ns0:sales_new_MT>
Thanks,
Yoni -
PI Mapping problem - Repeating target nodes
Hello PI buddies!
My PI mapping problem is as follows:
I have a source IDoc which I wish to map to a JDBC Message Type.
In the Idoc I have 2 repeating sections that I wish to combine to create a new node in the target for each combination of the 2 repeating sections. The source and desired target message structures are pasted below. In summary for every combination of "sales_org" and "relationship" I want to create an "Access" node. In my example there are 2 "sales_org" and 5 "relationship". I would therefore like to generate 10 "Access" nodes.
I want to achieve this if possible using PI mapping and its standard functions. Please help!
SOURCE MESSAGE TYPE:
<?xml version="1.0" encoding="UTF-8" ?>
<Z_CRMXIF_PARTNER_SAVE_M01>
<IDOC BEGIN="1">
<EDI_DC40 SEGMENT="1">
<TABNAM>EDI_DC40</TABNAM>
</EDI_DC40>
<E101CRMXIF_PARTNER_COMPLEX SEGMENT="1">
<APPL_SNAME>CRMXIF_PARTNER_COMPLEX</APPL_SNAME>
<E101CRMXIF_PARTNER_HEADER SEGMENT="1">
</E101CRMXIF_PARTNER_HEADER>
<E101BUS_EI_CENTRAL_DATA SEGMENT="1">
<E101BUS_EI_ROLES SEGMENT="1">
<APPL_SNAME>BUS_EI_ROLES</APPL_SNAME>
<CURRENT_STATE>X</CURRENT_STATE>
<E101BUS_EI_BUPA_ROLES SEGMENT="1">
<APPL_SNAME>BUS_EI_BUPA_ROLES</APPL_SNAME>
<DATA_KEY>ZBUP02</DATA_KEY>
</E101BUS_EI_BUPA_ROLES>
<E101BUS_EI_BUPA_ROLES SEGMENT="1">
<APPL_SNAME>BUS_EI_BUPA_ROLES</APPL_SNAME>
<DATA_KEY>ZCRM01</DATA_KEY>
</E101BUS_EI_BUPA_ROLES>
<E101BUS_EI_BUPA_ROLES SEGMENT="1">
<APPL_SNAME>BUS_EI_BUPA_ROLES</APPL_SNAME>
<DATA_KEY>ZCRM02</DATA_KEY>
</E101BUS_EI_BUPA_ROLES>
<E101BUS_EI_BUPA_ROLES SEGMENT="1">
<APPL_SNAME>BUS_EI_BUPA_ROLES</APPL_SNAME>
<DATA_KEY>ZCRM03</DATA_KEY>
</E101BUS_EI_BUPA_ROLES>
<E101BUS_EI_BUPA_ROLES SEGMENT="1">
<APPL_SNAME>BUS_EI_BUPA_ROLES</APPL_SNAME>
<DATA_KEY>ZCRM04</DATA_KEY>
</E101BUS_EI_BUPA_ROLES>
</E101BUS_EI_ROLES>
</E101BUS_EI_CENTRAL_DATA>
<E101CRMT_BUS_EI_DATA SEGMENT="1">
<Z101RMT_BUS_EI_R3_SALESAREA SEGMENT="1">
<APPL_SNAME>ZCRMT_BUS_EI_R3_SALESAREA</APPL_SNAME>
<Z101ZCRMT_BUS_R3_SALES_AREA SEGMENT="1">
<APPL_SNAME>ZCRMT_BUS_R3_SALES_AREA</APPL_SNAME>
<ZZSALES_ORG>1000</ZZSALES_ORG>
<ZZCHANNEL>01</ZZCHANNEL>
<ZZDIVISION>00</ZZDIVISION>
</Z101ZCRMT_BUS_R3_SALES_AREA>
<Z101ZCRMT_BUS_R3_SALES_AREA SEGMENT="1">
<APPL_SNAME>ZCRMT_BUS_R3_SALES_AREA</APPL_SNAME>
<ZZSALES_ORG>2000</ZZSALES_ORG>
<ZZCHANNEL>01</ZZCHANNEL>
<ZZDIVISION>00</ZZDIVISION>
</Z101ZCRMT_BUS_R3_SALES_AREA>
</Z101RMT_BUS_EI_R3_SALESAREA>
</E101CRMT_BUS_EI_DATA>
</E101CRMXIF_PARTNER_COMPLEX>
</IDOC>
</Z_CRMXIF_PARTNER_SAVE_M01>
DESIRED TARGET MESSAGE TYPE:
<?xml version="1.0" encoding="UTF-8"?>
<ns0:MT_CTX001_JDBC_In xmlns:ns0="http://mycompany.co.uk/pi/CTXIN001">
<SQLStatement1>
<dbTable Action="INSERT">
<Table>customer_relationship</Table>
<Access>
<sales_org>1000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZBUP02</relationship>
</Access>
<Access>
<sales_org>2000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZBUP02</relationship>
</Access>
<Access>
<sales_org>1000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZCRM01</relationship>
</Access>
<Access>
<sales_org>2000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZCRM01</relationship>
</Access>
<Access>
<sales_org>1000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZCRM02</relationship>
</Access>
<Access>
<sales_org>2000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZCRM02</relationship>
</Access>
<Access>
<sales_org>1000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZCRM03</relationship>
</Access>
<Access>
<sales_org>2000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZCRM03</relationship>
</Access>
<Access>
<sales_org>1000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZCRM04</relationship>
</Access>
<Access>
<sales_org>2000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZCRM04</relationship>
</Access>
</dbTable>
</SQLStatement1>
</ns0:MT_CTX001_JDBC_In>
Edited by: Jim Kendall on Apr 22, 2010 12:48 PM
Edited by: Jim Kendall on Apr 22, 2010 12:50 PMSOURCE MESSAGE TYPE:
<?xml version="1.0" encoding="UTF-8" ?>
<Z_CRMXIF_PARTNER_SAVE_M01>
<IDOC BEGIN="1">
<EDI_DC40 SEGMENT="1">
<TABNAM>EDI_DC40</TABNAM>
</EDI_DC40>
<E101CRMXIF_PARTNER_COMPLEX SEGMENT="1">
<APPL_SNAME>CRMXIF_PARTNER_COMPLEX</APPL_SNAME>
<E101CRMXIF_PARTNER_HEADER SEGMENT="1">
</E101CRMXIF_PARTNER_HEADER>
<E101BUS_EI_CENTRAL_DATA SEGMENT="1">
<E101BUS_EI_ROLES SEGMENT="1">
<APPL_SNAME>BUS_EI_ROLES</APPL_SNAME>
<CURRENT_STATE>X</CURRENT_STATE>
<E101BUS_EI_BUPA_ROLES SEGMENT="1">
<APPL_SNAME>BUS_EI_BUPA_ROLES</APPL_SNAME>
<DATA_KEY>ZBUP02</DATA_KEY>
</E101BUS_EI_BUPA_ROLES>
<E101BUS_EI_BUPA_ROLES SEGMENT="1">
<APPL_SNAME>BUS_EI_BUPA_ROLES</APPL_SNAME>
<DATA_KEY>ZCRM01</DATA_KEY>
</E101BUS_EI_BUPA_ROLES>
<E101BUS_EI_BUPA_ROLES SEGMENT="1">
<APPL_SNAME>BUS_EI_BUPA_ROLES</APPL_SNAME>
<DATA_KEY>ZCRM02</DATA_KEY>
</E101BUS_EI_BUPA_ROLES>
<E101BUS_EI_BUPA_ROLES SEGMENT="1">
<APPL_SNAME>BUS_EI_BUPA_ROLES</APPL_SNAME>
<DATA_KEY>ZCRM03</DATA_KEY>
</E101BUS_EI_BUPA_ROLES>
<E101BUS_EI_BUPA_ROLES SEGMENT="1">
<APPL_SNAME>BUS_EI_BUPA_ROLES</APPL_SNAME>
<DATA_KEY>ZCRM04</DATA_KEY>
</E101BUS_EI_BUPA_ROLES>
</E101BUS_EI_ROLES>
</E101BUS_EI_CENTRAL_DATA>
<E101CRMT_BUS_EI_DATA SEGMENT="1">
<Z101RMT_BUS_EI_R3_SALESAREA SEGMENT="1">
<APPL_SNAME>ZCRMT_BUS_EI_R3_SALESAREA</APPL_SNAME>
<Z101ZCRMT_BUS_R3_SALES_AREA SEGMENT="1">
<APPL_SNAME>ZCRMT_BUS_R3_SALES_AREA</APPL_SNAME>
<ZZSALES_ORG>1000</ZZSALES_ORG>
<ZZCHANNEL>01</ZZCHANNEL>
<ZZDIVISION>00</ZZDIVISION>
</Z101ZCRMT_BUS_R3_SALES_AREA>
<Z101ZCRMT_BUS_R3_SALES_AREA SEGMENT="1">
<APPL_SNAME>ZCRMT_BUS_R3_SALES_AREA</APPL_SNAME>
<ZZSALES_ORG>2000</ZZSALES_ORG>
<ZZCHANNEL>01</ZZCHANNEL>
<ZZDIVISION>00</ZZDIVISION>
</Z101ZCRMT_BUS_R3_SALES_AREA>
</Z101RMT_BUS_EI_R3_SALESAREA>
</E101CRMT_BUS_EI_DATA>
</E101CRMXIF_PARTNER_COMPLEX>
</IDOC>
</Z_CRMXIF_PARTNER_SAVE_M01>
DESIRED TARGET MESSAGE TYPE:
<?xml version="1.0" encoding="UTF-8"?>
<ns0:MT_CTX001_JDBC_In xmlns:ns0="http://mycompany.co.uk/pi/CTXIN001">
<SQLStatement1>
<dbTable Action="INSERT">
<Table>customer_relationship</Table>
<Access>
<sales_org>1000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZBUP02</relationship>
</Access>
<Access>
<sales_org>2000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZBUP02</relationship>
</Access>
<Access>
<sales_org>1000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZCRM01</relationship>
</Access>
<Access>
<sales_org>2000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZCRM01</relationship>
</Access>
<Access>
<sales_org>1000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZCRM02</relationship>
</Access>
<Access>
<sales_org>2000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZCRM02</relationship>
</Access>
<Access>
<sales_org>1000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZCRM03</relationship>
</Access>
<Access>
<sales_org>2000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZCRM03</relationship>
</Access>
<Access>
<sales_org>1000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZCRM04</relationship>
</Access>
<Access>
<sales_org>2000</sales_org>
<dist_channel>01</dist_channel>
<division>00</division>
<relationship>ZCRM04</relationship>
</Access>
</dbTable>
</SQLStatement1>
</ns0:MT_CTX001_JDBC_In> -
Hi Experts,
I am facing problem with mapping for standard SalesOrder Idoc ORDERS.ORDER05.
My Source Structure is: X12 EDI850
<G_SPO1> (occrance 1..100000)
<S_PO1> (occurance is 1..1)
<D_234/>
<D_234_2/>
<D_234_3/>
<D_234_4/>
<D_234_5/>
<D_234_6/>
<D_234_7/>
<D_234_8/>
<D_234_9/>
<D_234_10/>
</S_PO1>
</G_SPO1>
Target Structure is:
E1EDP01
--->E1EDP19
--->IDTNR
Functionality is passing material numbers of EDI customers to IDTNR field in E1EDP19 filed under segment E1EDP01.
From source i will get set of material numbers, for one set 10 material numbers(In source you can find 10 fields for 10 material numbers)
Requirement: I need to send those material numbers to IDTNR (One to one mapping ).
For getting 10 material numbers i just duplicated segment E1EDP19 in target side and mapped one field of source to IDTNR target in each segment. Totally mapped 10 source fields in 10 segments.
If 20 material numbers I will get two sets <G_SPO1> will repeat two times, each time 10 material numbers. So I mapped G_SPO1 to E1EDP01
S_PO1 to E1EDP19.
My out put is coming as 10 E1EDP19 segments under E1EDP01 if 10 materail numbers.
But problem is ECC team asking to get one E1EDP19 line item value under E1EDP01 line item header. They are not accepting duplicate E1EDP19 segments under header E1EDP01.
How to acheive this with my requirement.
Appreciate your hellp on this.
Thanks & Regards,
A.Neelima.There is no relation between D_234 and D_356.
I want to pass D_356 to KTEXT in all E1EDP01 segments which ever i will get based on the condition we implemented for E1EDP01.
Present its coming only for E1EDP01 first segment (for which i used condition with D_234), its not coming for remaining 9 E1EDP01 segments (for which i used conditions with D_234_2 to D_234_10)
If i pass sample input payload:
<S_ST>
<S_PID>
<D_350>Description</D_350>
</S_PID>
<G_SPO1>
<S_PO1>
<D_234>1</D_234>
<D_234_2/>2</D_234_2>
<D_234_3/>
<D_234_4/>
<D_234_5/>
<D_234_6/>
<D_234_7/>
<D_234_8/>
<D_234_9/>
<D_234_10/>
</S_PO1>
</G_SPO1>
<G_SPO1>
<S_PO1>
<D_234>3</D_234>
<D_234_2>4<D_234_2>
<D_234_3/>
<D_234_4/>
<D_234_5/>
<D_234_6/>
<D_234_7/>
<D_234_8/>
<D_234_9/>
<D_234_10/>
</S_PO1>
</G_SPO1>
</S_ST>
Coming Output Now: (KTEXT field is missing in last two segments)
<E1EDP01>
<E1EDP19>
<IDTNR>1</IDTNR>
<KTEXT>Decription</KTEXT>
</E1EDP19>
</E1EDP01>
<E1EDP01>
<E1EDP19>
<IDTNR>3</IDTNR>
<KTEXT>Decription</KTEXT>
</E1EDP19>
</E1EDP01>
<E1EDP01>
<E1EDP19>
<IDTNR>2</IDTNR>
</E1EDP19>
</E1EDP01>
<E1EDP01>
<E1EDP19>
<IDTNR>4</IDTNR>
</E1EDP19>
</E1EDP01>
Expected Output:
<E1EDP01>
<E1EDP19>
<IDTNR>1</IDTNR>
<KTEXT>Decription</KTEXT>
</E1EDP19>
</E1EDP01>
<E1EDP01>
<E1EDP19>
<IDTNR>3</IDTNR>
<KTEXT>Decription</KTEXT>
</E1EDP19>
</E1EDP01>
<E1EDP01>
<E1EDP19>
<IDTNR>2</IDTNR>
<KTEXT>Decription</KTEXT>
</E1EDP19>
</E1EDP01>
<E1EDP01>
<E1EDP19>
<IDTNR>4</IDTNR>
<KTEXT>Decription</KTEXT>
</E1EDP19>
</E1EDP01>
Thnaks & Regards,
A.Neelima. -
Mapping problem with Wireless Keyboard and Japanese iPhone
Hi everyone:
This seems to be a slightly obscure question -- at least, I can't find a ready answer for it with the search terms I've tried, possibly because most people don't use this particular accessory with the iPhone.
I have an iPhone 4 that I bought from and use on Softbank, the carrier in Japan, where I live. While visiting the United States recently, I bought an Apple Wireless Keyboard from an Apple retailer. I wanted to carry it with me for use with my iPhone, so I would reliably have a convenient way to access the Internet without being confined to the touchscreen keyboard. (I live in a rural area where WiFi spots are uncommon, but my iPhone's access to Softbank's data network is fairly good and consistent.)
However, to my frustration, I can't use the keyboard due to a mapping problem. The Bluetooth connection is fine -- the iPhone can discover the keyboard. However, the mapping is off: typing "Q" gets me "A," typing "Z" gets me "W", numbers and punctuation are off, etc. The key point: This is NOT a problem with the International Keyboard settings (under the Settings -> General -> Keyboard -> International Keyboards menu). I have the Keyboard setting set to QWERTY, which is the layout of the Apple keyboard; I have tried all the other possibilities, just in case. None of them work. Setting the Keyboard setting to QWERTY does not make the external QWERTY keyboard map correctly.
The rather ironic addendum is this: While on a recent trip to Tokyo, I visited the Apple store in Shibuya and, after concluding the main business of my visit (discussing my MacBook's battery problems with an English-speaking staffer), I took out my iPhone and keyboard and asked him about my mapping problem. He started with the Keyboard menu, tried the same things I had tried, realized they weren't working, and puzzled over the problem for a while. Then he did this: He hit a key combination (I believe) that brought up a menu on the iPhone's screen. "Ah, there's your problem," he said, and selected a new setting. The problem was instantly fixed.
To my chagrin, however, I neglected to write down what "Ken" had done to fix the problem. Argh... I was looking at the iPhone upside-down; I'd already taken up more than half an hour; people were waiting, and I guess, being used to living in the countryside now, that I'm not used to Shibuya crowds any more. Anyway, I didn't take careful notes or ask him to walk me through it, and now I cannot recall or repeat what he did. And I still can't use my keyboard!
Any ideas or advice, anyone? How did "Ken" fix my problem, and how can I repeat it? Much, much appreciated, in advance.THAT'S IT. Sir, you have solved my problem. Thank you!!
And I feel a little silly; this will doubtless seem to an expert as if it should have been obvious all along. But isn't that always the way in hindsight?
Here's what happened: The key combination I was trying to remember was "Apple/command + space on the hardware keyboard," as you just said above. The "menu" it brings up is, apparently, a list of keyboards. I take it that this list is the same as the list of the "virtual" keyboards on the iPhone? I have never had more than one external keyboard -- the Apple Wireless -- but I do have several keyboards active virtually, as the iPhone in Japan seems to come with both the "Nihongo Ten-key" and the "Nihongo Romaji" keyboards active, and I added several other languages as well.
When I hit "Apple/command + space," this list comes up on the iPhone's touchscreen. Highlighted and checked at the top is "English," just as if it had been selected all along. But nonetheless, when I first turn on and pair my keyboard with the iPhone, I need to perform this key-combination action, as if to "reselect" English, and then the keyboard promptly starts working properly as QWERTY. I can only assume that one of the others had been default-selected before -- presumably one of the Nihongo ones? -- and that this was causing the interference.
Thank you again! You have made me and my wireless keyboard very happy.
Maybe you are looking for
-
How do I change my username and email address?
I am unable to find where to change my iTunes Store username and email address. There's nowhere on this site to be able to change it. Can I only change it through iTunes?
-
My bbm is not working over wifi connection.
Hey, I just bought blackberry z10 in kuwait and my carrier is Viva , and i tried to connect the bbm over wifi it's not work for viva router ONLY !!! I dont know where is the problem !! but when I try to connect on other wifi it's work and looking fin
-
I bought the new, and my first MacBook Pro 13" a little over a month ago for college and love it, but have started to realize a couple problems I can't seem to solve. The bottom of the MacBook becomes very very hot in a short amount of time, and I re
-
Document Search - how to add new document with link to ALL
CRM 5.0, can easily add documents in the ICWC under the Document Search or gui t-code CRM_KW but the linkage is to me. How can I change or create the link to to "ALL" so all users can find them in the search.
-
Computer crashing after system update to 10.6.4
Hi. I'm on a macbook pro. Everything was wonderful until the update. Now I'm crashing seemingly randomly. in Mail in safari at start up --- never getting past the apple I just hold the powerbutton to crash it...restart. It works for a while and then