Получение таблицы SAP Bapi (не экспортируется) после обработки - Использование Sap Connector 3.0
Друзья. В настоящее время я использую BAPI по умолчанию SAP. Я использовал любой Z* один, созданный abappers или мной.
Я код в C# VB. Вопрос о том, что такое бапи, состоит в том, что в настоящее время я вижу 2 таблицы: одну с параметрами, а другую с результатом.
Пока что мне удалось заполнить один параметрами, но я не знаю, как извлечь информацию из полученной таблицы.
Я искал в интернете без ответа. Я не знаю, правильно ли я это делаю или нет.:П
Я публикую свой код, чтобы любой мог мне помочь.
Благодарю.
String include = "I", rango = "EQ";// EQ - BT -- Equal o Between
DataTable dt = new DataTable("ws_clientes_contactos");
dt.Columns.Add("PARTNEREMPLOYEEID", typeof(String));
dt.Columns.Add("CUSTOMER", typeof(String));
dt.Columns.Add("LASTNAME", typeof(String));
dt.Columns.Add("FIRSTNAME", typeof(String));
dt.Columns.Add("SEX", typeof(String));
dt.Columns.Add("TITLE_P", typeof(String));
dt.Columns.Add("LANGU_P", typeof(String));
dt.Columns.Add("LANGUP_ISO", typeof(String));
dt.Columns.Add("COUNTRY", typeof(String));
dt.Columns.Add("COUNTRYISO", typeof(String));
dt.Columns.Add("CITY", typeof(String));
dt.Columns.Add("POSTL_COD1", typeof(String));
dt.Columns.Add("REGION", typeof(String));
dt.Columns.Add("STREET", typeof(String));
dt.Columns.Add("TEL1_NUMBR", typeof(String));
dt.Columns.Add("FAX_NUMBER", typeof(String));
dt.Columns.Add("FUNCTION", typeof(String));
dt.Columns.Add("SORT1_P", typeof(String));
dt.Columns.Add("ADDRESS", typeof(String));
dt.Columns.Add("PERS_NO", typeof(String));
dt.Columns.Add("E_MAIL", typeof(String));
try
{
RfcDestination SapRfcDestination = RfcDestinationManager.GetDestination("DEV");
RfcRepository SapRfcRepository = SapRfcDestination.Repository;
IRfcFunction bapigetcontactlist = SapRfcRepository.CreateFunction("BAPI_CUSTOMER_GETCONTACTLIST");
IRfcTable CUSTOMERRANGE, CONTACTADDRESSDATA;
CUSTOMERRANGE = bapigetcontactlist.GetTable("CUSTOMERRANGE");
//LLENA TABLA FILTROS DE LA BAPI
if (Opc == "B")
{
rango = "BT";
}
CUSTOMERRANGE.Append();
CUSTOMERRANGE.SetValue("SIGN", include);
CUSTOMERRANGE.SetValue("OPTION", rango);
CUSTOMERRANGE.SetValue("LOW", ClienteMin);
if (Opc == "B") // BETWEEEN
{
CUSTOMERRANGE.SetValue("HIGH", ClienteMax);
}
else // EQUAL = LWO
{
CUSTOMERRANGE.SetValue("HIGH", " ");
}
bapigetcontactlist.SetValue("MAXROWS", 1000);
//DataTable dtt = CreateDataTable(CUSTOMERRANGE);
bapigetcontactlist.SetValue("CUSTOMERRANGE", CUSTOMERRANGE);
CONTACTADDRESSDATA = bapigetcontactlist.GetTable("CONTACTADDRESSDATA");
bapigetcontactlist.Invoke(SapRfcDestination);
IRfcTable Result = bapigetcontactlist["CONTACTADDRESSDATA"].GetTable();
for (Int16 i = 0; i < (Result.RowCount); i++)
{
DataRow dr = dt.NewRow();
dr["PARTNEREMPLOYEEID"] = CONTACTADDRESSDATA[i].GetString(0);
dr["CUSTOMER"] = CONTACTADDRESSDATA[i].GetString(1);
dr["LASTNAME"] = CONTACTADDRESSDATA[i].GetString(2);
dr["FIRSTNAME"] = CONTACTADDRESSDATA[i].GetString(3);
dr["SEX"] = CONTACTADDRESSDATA[i].GetString(4);
dr["TITLE_P"] = CONTACTADDRESSDATA[i].GetString(5);
dr["LANGU_P"] = CONTACTADDRESSDATA[i].GetString(6);
dr["LANGUP_ISO"] = CONTACTADDRESSDATA[i].GetString(7);
dr["COUNTRY"] = CONTACTADDRESSDATA[i].GetString(08);
dr["COUNTRYISO"] = CONTACTADDRESSDATA[i].GetString(9);
dr["CITY"] = CONTACTADDRESSDATA[i].GetString(10);
dr["POSTL_COD1"] = CONTACTADDRESSDATA[i].GetString(11);
dr["REGION"] = CONTACTADDRESSDATA[i].GetString(12);
dr["STREET"] = CONTACTADDRESSDATA[i].GetString(13);
dr["TEL1_NUMBR"] = CONTACTADDRESSDATA[i].GetString(14);
dr["FAX_NUMBER"] = CONTACTADDRESSDATA[i].GetString(15);
dr["FUNCTION"] = CONTACTADDRESSDATA[i].GetString(16);
dr["SORT1_P"] = CONTACTADDRESSDATA[i].GetString(17);
dr["ADDRESS"] = CONTACTADDRESSDATA[i].GetString(18);
dr["PERS_NO"] = CONTACTADDRESSDATA[i].GetString(19);
dr["E_MAIL"] = CONTACTADDRESSDATA[i].GetString(20);
dt.Rows.Add(dr);
}
2 ответа
Я наконец нашел то, что происходило. Когда я выполнял BAPI в SAP, я просто написал код клиента. Без левой накладки 000.
Но когда я позвонил, мне просто нужно было добавить нули в код клиента.
CUSTOMERRANGE.SetValue("LOW", "000" + ClienteMin);
Ну, я никогда не использовал SAP Connector (у меня его тоже нет), но я постараюсь ответить на ваш вопрос;
Я вижу в вашем коде, что вы пытаетесь вернуть полученную таблицу данных в "CONTACTADDRESSDATA", однако вы еще не вызывали функцию "BAPI_CUSTOMER_GETCONTACTLIST", поэтому я думаю, что она пуста.
Затем вы вызываете BAPI и сохраняете результирующий набор данных в переменной IRfcTable 'Result'.
После этого вы пытаетесь прочитать "CONTACTADDRESSDATA", но, как я уже указывал, он пуст.
bapigetcontactlist.SetValue("CUSTOMERRANGE", CUSTOMERRANGE); // Context
CONTACTADDRESSDATA = bapigetcontactlist.GetTable("CONTACTADDRESSDATA"); // Here you try to get the datatable.
bapigetcontactlist.Invoke(SapRfcDestination); // Then you invoke the function
IRfcTable Result = bapigetcontactlist["CONTACTADDRESSDATA"].GetTable(); // The datatable you're trying to read is set here.
for (Int16 i = 0; i < (Result.RowCount); i++)
{
DataRow dr = dt.NewRow();
dr["PARTNEREMPLOYEEID"] = CONTACTADDRESSDATA[i].GetString(0); // Try to replace 'CONTACTADDRESSDATA' with 'Result'
dr["CUSTOMER"] = CONTACTADDRESSDATA[i].GetString(1);
Я проанализировал ваш код на основе этого вопроса.
Надеюсь, поможет.