2017-12-21 6 views
1

SAPシステムの顧客をC#アプリケーションから検索する必要があります。 C#.NETコネクタを使用しています。 は、私が「C」の文字で始まる名前を持つすべての顧客を取得するにはBAPI「BAPI_CUSTOMER_FIND」を呼び出そうとしました、これは私のコードです:C#sap-connectorでSAP顧客を検索

SAPConnectionConfigurator cfg = new SAPConnectionConfigurator(); 
RfcDestinationManager.RegisterDestinationConfiguration(cfg); 
RfcDestination dest = RfcDestinationManager.GetDestination("mySAPdestination"); 
RfcRepository repo = dest.Repository; 
IRfcFunction customerList = repo.CreateFunction("BAPI_CUSTOMER_FIND"); 
customerList.SetValue("MAX_CNT", "100"); 
IRfcTable searchFields = customerList.GetTable("SELOPT_TAB"); 
searchFields.Insert(); 
searchFields.CurrentRow.SetValue("COMP_CODE", ""); 
searchFields.CurrentRow.SetValue("TABNAME", "KNA1"); 
searchFields.CurrentRow.SetValue("FIELDNAME", "NAME1"); 
searchFields.CurrentRow.SetValue("FIELDVALUE", "C*"); 
customerList.Invoke(dest); 
IRfcTable results = customerList.GetTable("RESULT_TAB"); 

呼び出しが正常に動作しますが、私は読んする方法がわかりません結果。私は顧客のリストを必要とするが、RESULT_TABの表は、この奇妙な構造を有する:

https://www.sapdatasheet.org/abap/tabl/bapikna111.html

どのように顧客のリストを取得することができますか?間違ったBAPIを呼びますか?

答えて

1

この場合、テーブルRESULT_TABには元の検索パラメータと警告メッセージが含まれている行が1つしか含まれていない可能性があります。プレースホルダの使用を許可するには、パラメータPL_HOLD'X'に設定する必要があります。顧客を含むとCUSTOMERNUMBER -

結果がある場合は、あなたが(検索フィールドを変更し、その結果があまりにも変化しますが、フィールドNAME1で検索するので)実際の顧客名を含むフィールドFIELDVALUEで、テーブルRESULT_TABに複数の行が表示されます数。あなたの結果の

セットより多くの結果がMAX_CNT,である場合は、メッセージタイプIを参照してくださいよ、ID FN、数063´最後の行のあなたのログオン言語でメッセージとセットが(もっとあるあなたを伝えますXの結果より)。

検索が全く結果が得られなかった場合は、構造RETURN警告メッセージ(メッセージタイプW、ID FN、数802)と別の警告メッセージタイプWを含むべきテーブルRESULT_TABで単一の行を含むことになります、 ID FN、数字065と、ログオン言語の説明文で、検索で見つかったアカウントがないことを示しています。

IRfcTableを読む方法を知りたい場合は、その内容を繰り返してください。基本的にIRfcStructure項目のリストです。

foreach(IRfcStructure row in returnTable) 
{ 
    var customerNumber = row.GetString("CUSTOMERNUMBER"); 
} 
+0

CUSTOMERNUMBERのリストでBAPIを呼び出し、custumers(custumersのリスト)のすべての詳細を返すことは可能ですか? – TeoVr81

+0

そうは思わない。通常、SAP BAPIは、検索パラメータや単一オブジェクトの詳細情報に基づいて基本一覧を提供します。 –

関連する問題