С созданием заказа разобрался. Из .Net-овского приложения заказ создается успешно. Но возникла непредвиденная проблема - не удается запустить веб-сервис, использующий .Net Conector. Точнее, веб-сервис нормально запускается, даже в онлайн-отладке все отлично работает (заказ создается), но как только размещаешь веб-сервис на сервер и пытаешься протестировать веб-метод создания заказа, выдает ошибку: "The type initializer for 'SAP.Middleware.Connector.RfcDestinationManager' threw an exception.".
Реализовал уже 2 варианта веб-сервисов: SOAP, WCF. Результат одинаков.
В блоке InnerException для SOAP-овского варианта пишет, что "Event handlers can only be bound to HttpApplication events during IHttpModule initialization.". К чему это, понятия не имею. Валится на BapiSalesOrder.Invoke(SapRfcDestination);.
Еще раз повторюсь, в онлайне из VisualStudio и WCF-сервис, и обычный веб-сервис отлично отрабатывают, заказ создается без проблем. Но как только публикую их на веб-сервер - выдается ошибка.
Прим.: Другие веб-методы веб-сервисов при этом работают в любом случае нормально, т.е. проблема именно при работе с SAP.Middleware.Connector.RfcDestinationManager.
Привожу сам код:
Code:
public string SAPCreateOrder(string AccountSAPCode, string OfferingSAPCode, int Quantity, float Price)
{
IDestinationConfiguration dest = new SAPConnectionManager();
RfcDestinationManager.RegisterDestinationConfiguration(dest);
RfcDestination SapRfcDestination = RfcDestinationManager.GetDestination("WDA");
RfcRepository SapRfcRepository = SapRfcDestination.Repository;
//RfcSessionManager.BeginContext(SapRfcDestination);
IRfcFunction BapiSalesOrder = SapRfcRepository.CreateFunction("BAPI_SALESORDER_CREATEFROMDAT2");
IRfcFunction CommitFunction = SapRfcRepository.CreateFunction("BAPI_TRANSACTION_COMMIT");
IRfcTable ORDER_PARTNERS = BapiSalesOrder.GetTable("ORDER_PARTNERS");
ORDER_PARTNERS.Append();
/* Роль - получатель */
ORDER_PARTNERS.SetValue("PARTN_ROLE", "WE");
/* Получатель */
//ORDER_PARTNERS.SetValue("PARTN_NUMB", "0060125914");
ORDER_PARTNERS.SetValue("PARTN_NUMB", AccountSAPCode);
ORDER_PARTNERS.Append();
/* Роль - заказчик */
ORDER_PARTNERS.SetValue("PARTN_ROLE", "AG");
/* Заказчик */
//ORDER_PARTNERS.SetValue("PARTN_NUMB", "0060125914");
ORDER_PARTNERS.SetValue("PARTN_NUMB", AccountSAPCode);
IRfcStructure order_header_inx = BapiSalesOrder.GetStructure("ORDER_HEADER_INX");
order_header_inx.SetValue("UPDATEFLAG", "I");
order_header_inx.SetValue("DOC_TYPE", "X");
order_header_inx.SetValue("SALES_ORG", "X");
order_header_inx.SetValue("DISTR_CHAN", "X");
order_header_inx.SetValue("DIVISION", "X");
IRfcStructure order_header_in = BapiSalesOrder.GetStructure("ORDER_HEADER_IN");
/* Тип документа - Стандартный заказ */
order_header_in.SetValue("DOC_TYPE", "TA");
/* Компания-продавец (Сбытовая организация) */
order_header_in.SetValue("SALES_ORG", "12");
/* Канал сбыта */
order_header_in.SetValue("DISTR_CHAN", "00");
/* Сектор */
order_header_in.SetValue("DIVISION", "00");
IRfcTable ORDER_ITEMS_INX = BapiSalesOrder.GetTable("ORDER_ITEMS_INX");
IRfcTable ORDER_ITEMS_IN = BapiSalesOrder.GetTable("ORDER_ITEMS_IN");
ORDER_ITEMS_INX.Append();
ORDER_ITEMS_IN.Append();
/* Признак операции (I-вставка, U - обновление, D - удаление) */
ORDER_ITEMS_INX.SetValue("UPDATEFLAG", "I");
/* Порядковый номер */
ORDER_ITEMS_INX.SetValue("ITM_NUMBER", "000001");
ORDER_ITEMS_IN.SetValue("ITM_NUMBER", "000001");
/* Продукт */
ORDER_ITEMS_INX.SetValue("MATERIAL", "X");
//ORDER_ITEMS_IN.SetValue("MATERIAL", "000000000041000423");
ORDER_ITEMS_IN.SetValue("MATERIAL", OfferingSAPCode);
/* Количество */
ORDER_ITEMS_INX.SetValue("TARGET_QTY", "X");
//ORDER_ITEMS_IN.SetValue("TARGET_QTY", "2");
ORDER_ITEMS_IN.SetValue("TARGET_QTY", Quantity.ToString());
/* Завод */
ORDER_ITEMS_INX.SetValue("PLANT", "X");
ORDER_ITEMS_IN.SetValue("PLANT", "1201");
IRfcTable ORDER_SCHEDULES_INX = BapiSalesOrder.GetTable("ORDER_SCHEDULES_INX");
IRfcTable ORDER_SCHEDULES_IN = BapiSalesOrder.GetTable("ORDER_SCHEDULES_IN");
ORDER_SCHEDULES_INX.Append();
ORDER_SCHEDULES_IN.Append();
/* Признак операции (I-вставка, U - обновление, D - удаление) */
ORDER_SCHEDULES_INX.SetValue("UPDATEFLAG", "I");
/* Порядковый номер */
ORDER_SCHEDULES_INX.SetValue("ITM_NUMBER", "000001");
ORDER_SCHEDULES_IN.SetValue("ITM_NUMBER", "000001");
/* Количество */
ORDER_SCHEDULES_INX.SetValue("REQ_QTY", "X");
//ORDER_SCHEDULES_IN.SetValue("REQ_QTY", "2");
ORDER_SCHEDULES_IN.SetValue("REQ_QTY", Quantity.ToString());
IRfcTable ORDER_CONDITIONS_INX = BapiSalesOrder.GetTable("ORDER_CONDITIONS_INX");
IRfcTable ORDER_CONDITIONS_IN = BapiSalesOrder.GetTable("ORDER_CONDITIONS_IN");
ORDER_CONDITIONS_INX.Append();
ORDER_CONDITIONS_IN.Append();
/* Признак операции (I-вставка, U - обновление, D - удаление) */
ORDER_CONDITIONS_INX.SetValue("UPDATEFLAG", "I");
/* Порядковый номер */
ORDER_CONDITIONS_INX.SetValue("ITM_NUMBER", "000001");
ORDER_CONDITIONS_IN.SetValue("ITM_NUMBER", "000001");
/* Порядковый номер условия(прайса) */
ORDER_CONDITIONS_INX.SetValue("COND_COUNT", "01");
ORDER_CONDITIONS_IN.SetValue("COND_COUNT", "01");
/* Код расчета цены */
ORDER_CONDITIONS_INX.SetValue("COND_TYPE", "Z000");
ORDER_CONDITIONS_IN.SetValue("COND_TYPE", "Z000");
/* Цена */
ORDER_CONDITIONS_INX.SetValue("COND_VALUE", "X");
ORDER_CONDITIONS_IN.SetValue("COND_VALUE", Price.ToString());
/* Валюта */
ORDER_CONDITIONS_INX.SetValue("CURRENCY", "X");
ORDER_CONDITIONS_IN.SetValue("CURRENCY", "EUR");
/* По идее, код единицы измерения (шт) */
ORDER_CONDITIONS_INX.SetValue("COND_P_UNT", "X");
ORDER_CONDITIONS_IN.SetValue("COND_P_UNT", "1");
BapiSalesOrder.Invoke(SapRfcDestination);
CommitFunction.Invoke(SapRfcDestination);
//RfcSessionManager.EndContext(SapRfcDestination);
string ResultMessage = "";
IRfcTable res = BapiSalesOrder.GetTable("RETURN");
for (int i = 0; i < res.Count; i++)
{
ResultMessage = ResultMessage + res[i].GetString("MESSAGE");
}
RfcDestinationManager.UnregisterDestinationConfiguration(dest);
return ResultMessage;
}