Ошибка установки параметра таблицы в BAPI

Итак, я впервые делаю это и отправляю структуру в BAPI, которая была создана кем-то другим, BAPI работает, я пробовал это в SAP, но теперь нам нужна наша основная система, чтобы использовать ее.

Это структура:

В значениях есть 3 значения...

Хорошо, поэтому я могу правильно подключиться и получить информацию, но я получаю сообщение об ошибке, и я думаю, что это связано с подготовкой структуры перед отправкой...

Вот код:

public string SendASFEmail(string id, string tipo, string correo)
        {
            string idCompuesto = "0000" + id;         
            SAPConnection sapConnection = new SAPConnection();
            RfcDestination rfcDes = sapConnection.getRfcDestination(sapConnection);
            RfcRepository rfcRep = rfcDes.Repository;
            IRfcFunction fun = rfcRep.CreateFunction("ZSLCM_UPDATE_EMAIL");
            //Create the structure with id, tipo and correo
            IRfcTable tablaEntrada = fun.GetTable("T_CORREOS_IN");
            //Assign parameters
            RfcStructureMetadata stru = rfcRep.GetStructureMetadata("T_CORREOS_IN");
            IRfcStructure datos = stru.CreateStructure();
            datos.SetValue("ZFKK_FAM", idCompuesto);
            datos.SetValue("BPKI", tipo);
            datos.SetValue("SMTP_ADDR", correo);
            tablaEntrada.Append(datos);
            fun.SetValue("T_CORREOS_IN", tablaEntrada);
            // RUN
            fun.Invoke(rfcDes);

            //Success and get the out table which contains the same parameters plus message in column #4 
            IRfcTable tablaSalida = fun.GetTable("T_CORREOS_OUT");
            DataTable dtMessages = GetDataTableFromRFCTable(tablaSalida); //this is to take the out structure and just get the string
            string respuesta = dtMessages.Rows[0][3].ToString();
            return respuesta;
        }

И я все время получаю ошибку:

Дополнительная информация: метаданные для StructureOnly T_CORREOS_IN недоступны: NOT_FOUND: для T_CORREOS_IN нет активной таблицы имен

1 ответ

Ваша проблема в заявлении:

RfcStructureMetadata stru = rfcRep.GetStructureMetadata("T_CORREOS_IN");

Функция API GetStructureMetadata( )читает структуру репозитория SAP (!), а не параметры модуля RFC, отсюда и ошибка.

Для заполнения RFC-таблицы вам понадобится что-то вроде этого:

IRfcFunction fn = repo.CreateFunction("ZSLCM_UPDATE_EMAIL");
var correos = fn.GetTable("T_CORREOS_IN");
foreach (ListViewItem lvi in correos.Items)
{
    //Create new correos row
    correos.Append();

    //Populate current row with data from list
    correos.SetValue("ZFFK_FAM", lvi.SubItems[0].Text);
    correos.SetValue("BKPI", lvi.SubItems[1].Text);
    correos.SetValue("SMTP_ADDR", lvi.SubItems[2].Text);
}

Вот справочный ответ также с.NetdataTable тип образца.

Прочтите официальную справку о функциях NCo.

Другие вопросы по тегам