0

I am trying to create a Purchase Info Record (ME11) in SAP using the below JCo code:

It executes without fail and throws no error, but i am not able to get the newly created info record in SAP. In ME13 it says info record not found. Can i know what am i missing?

IFunctionTemplate ft1 = mRepository.getFunctionTemplate("ZME_INITIALIZE_INFORECORD");
    JCO.Function function1 = ft1.getFunction();
    mConnection.execute(function1);

    IFunctionTemplate ft = mRepository.getFunctionTemplate("ZME_DIRECT_INPUT_INFORECORD");
    JCO.Function function = ft.getFunction();
    JCO.ParameterList importparams =function.getImportParameterList();

    //  Setting HeadData Structure Information
    JCO.Structure headStructure = importparams.getStructure("I_EINA");
    //headStructure.setValue("105","MANDT");
    //headStructure.setValue("5300259768", "INFNR");
    headStructure.setValue("MYPART0006", "MATNR");      
    //headStructure.setValue("MYPART0006", "IDNLF");
    headStructure.setValue("100002","LIFNR");
    headStructure.setValue("10000","MATKL");
    headStructure.setValue("KGS","MEINS");
    headStructure.setValue("1","UMREZ");
    headStructure.setValue("1","UMREN");
    headStructure.setValue("SG","URZLA");
    headStructure.setValue("KGS","LMEIN");
    //headStructure.setValue("0000005300259768","URZZT");

    JCO.Structure headStructure1 = importparams.getStructure("O_EINA");
    //headStructure1.setValue("105","MANDT");
    //headStructure1.setValue("5300259768", "INFNR");
    headStructure1.setValue("MYPART0006", "MATNR");     
    //headStructure1.setValue("MYPART0006", "IDNLF");
    headStructure1.setValue("100002","LIFNR");
    headStructure1.setValue("10000","MATKL");
    headStructure1.setValue("KGS","MEINS");
    headStructure1.setValue("1","UMREZ");
    headStructure1.setValue("1","UMREN");
    headStructure1.setValue("SG","URZLA");
    headStructure1.setValue("KGS","LMEIN");

    //headStructure1.setValue("0000005300259768","URZZT");
    System.out.println("General Data Set");

    JCO.Structure purchaseDataStructure = importparams.getStructure("I_EINE");
    //purchaseDataStructure.setValue("105","MANDT");
    //purchaseDataStructure.setValue("5300259768", "INFNR");
    purchaseDataStructure.setValue("1000","EKORG");
    purchaseDataStructure.setValue("1000", "WERKS");
    purchaseDataStructure.setValue("003","EKGRP");
    purchaseDataStructure.setValue("USD","WAERS");
    purchaseDataStructure.setValue("3","APLFZ");
    purchaseDataStructure.setValue("1","PEINH");
    purchaseDataStructure.setValue("1","BPUMZ");
    purchaseDataStructure.setValue("1","BPUMN");
    purchaseDataStructure.setValue("1000","EFFPR");     
    purchaseDataStructure.setValue("0001","BSTAE");     
    purchaseDataStructure.setValue("100000","NETPR");
    purchaseDataStructure.setValue("X","KZABS");

    JCO.Structure purchaseDataStructure1 = importparams.getStructure("O_EINE");
    //purchaseDataStructure1.setValue("105","MANDT");
    //purchaseDataStructure1.setValue("5300259768", "INFNR");
    purchaseDataStructure1.setValue("1000","EKORG");
    purchaseDataStructure1.setValue("1000", "WERKS");
    purchaseDataStructure1.setValue("003","EKGRP");
    purchaseDataStructure1.setValue("USD","WAERS");
    purchaseDataStructure1.setValue("3","APLFZ");
    purchaseDataStructure1.setValue("1","PEINH");
    purchaseDataStructure1.setValue("1","BPUMZ");
    purchaseDataStructure1.setValue("1","BPUMN");
    purchaseDataStructure1.setValue("1000","EFFPR");        
    purchaseDataStructure1.setValue("0001","BSTAE");        
    purchaseDataStructure1.setValue("100000","NETPR");
    purchaseDataStructure1.setValue("X","KZABS");

    mConnection.execute(function);

    IFunctionTemplate ft2 = mRepository.getFunctionTemplate("ZME_POST_INFORECORD");
    JCO.Function function2 = ft2.getFunction();

    JCO.ParameterList importparams2 =function2.getImportParameterList();
    importparams2.setValue("MYPART0006", "I_MATNR");
    importparams2.setValue("MYPART0006", "O_MATNR");
    mConnection.execute(function2);
Sandra Rossi
  • 11,934
  • 5
  • 22
  • 48
Raj
  • 255
  • 2
  • 6
  • 17
  • I haven't received any correct answer yet. I am trying something else to create the Purchasing record. Once successful i will post the correct solution. – Raj Dec 22 '11 at 05:25

2 Answers2

1

I could be wrong, but i think you're getting a copy of the structure that you fill. could you test this by adding a set of "setValue" just before the execution of the function ie :

importparams.setValue("I_EINA", headStructure);
importparams.setValue("O_EINA", headStructure1);
importparams.setValue("I_EINE", purchaseDataStructure);
importparams.setValue("O_EINE", purchaseDataStructure1);
mConnection.execute(function);

otherwise, a possibility is to add an external break-point into your function (the execution of the java function will trigger a debugging session in ABAP),

  • and check what the values are in ABAP, and the execution
  • you say the function does not throws any error, but i don't see any error checking in your code. your function should return a struct or table indicating success or errors in the ABAP side (type BAPIRETURN1 for exemple). JCO will trigger an error by itself only if there is an ABAP dump or invalid parameters.

regards

PATRY Guillaume
  • 4,287
  • 1
  • 32
  • 41
  • HI Patry, Thanks for your reply. I tried your suggestion but still its the same. Regarding Debugging in ABAP can you please tell me how to do that. My apologies being new to SAP and ABAP. – Raj Dec 19 '11 at 05:00
  • transaction se37 will allow you to look at the code for the function module. you then put your cursor on the line of interest (the first execution line in your case), and put an external break point (there is a icon on the menu bar). During execution, the debugger will popup in your SAPGUI. You should use the same login for your program and yourself for this to function. Check the parameters at the start of execution, and look at the end of execution. – PATRY Guillaume Dec 29 '11 at 11:40
0

In addition to the good answer of @PATRY:

  1. you might have forgotten a commit work.
  2. I usually write a small test program in ABAP before I use it from Java. Usually worth the time, though you can trigger the Abap debugger from Java.
  3. As @PATRY says ignoring return parameters as you do is a bad idea.
Gerd Castan
  • 6,275
  • 3
  • 44
  • 89