Creating Purchase Info Record in SAP

帅比萌擦擦* 提交于 2019-12-12 04:02:16

问题


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);

回答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




回答2:


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.


来源:https://stackoverflow.com/questions/8534602/creating-purchase-info-record-in-sap

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!