0

以下の JCo コードを使用して、SAP で購入情報レコード (ME11) を作成しようとしています。

必ず実行され、エラーはスローされませんが、SAP で新しく作成された情報レコードを取得できません。ME13 では、情報レコードが見つかりませんと表示されます。私は何が欠けているかを知ることができますか?

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

2 に答える 2

1

私は間違っているかもしれませんが、あなたが埋めた構造のコピーを取得していると思います. 関数の実行の直前に「setValue」のセットを追加して、これをテストできますか。

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

それ以外の場合は、関数に外部ブレークポイントを追加する可能性があります (Java 関数の実行により、ABAP でデバッグ セッションがトリガーされます)。

  • ABAPの値と実行を確認します
  • 関数はエラーをスローしないと言いますが、コードにエラーチェックが表示されません。関数は、ABAP 側で成功またはエラーを示す構造体またはテーブルを返す必要があります (たとえば、タイプ BAPIRETURN1)。JCO は、ABAP ダンプまたは無効なパラメーターがある場合にのみ、それ自体でエラーをトリガーします。

よろしく

于 2011-12-17T21:32:22.523 に答える
0

@PATRYの良い答えに加えて:

  1. コミット作業を忘れている可能性があります。
  2. 私は通常、Java から使用する前に ABAP で小さなテスト プログラムを作成します。Java から Abap デバッガーをトリガーすることはできますが、通常は時間をかける価値があります。
  3. @PATRY が言うように、戻りパラメータを無視するのは悪い考えです。
于 2015-12-29T23:49:53.080 に答える