powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / Создание заказа в SAP из .NET-приложения
14 сообщений из 39, страница 2 из 2
Создание заказа в SAP из .NET-приложения
    #37427079
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RfcSessionManager.BeginContext(SapRfcDestination);
BapiSalesOrder.Invoke(SapRfcDestination);
CommitFunction.Invoke(SapRfcDestination);
RfcSessionManager.EndContext(SapRfcDestination);судя по всему, вы открыли еще одну сессию и комитете ее, но она не видит заказ, сделанный в другой сессии
...
Рейтинг: 0 / 0
Создание заказа в SAP из .NET-приложения
    #37429793
s.t.a.s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С созданием заказа разобрался. Но возникла непредвиденная проблема - не удается запустить веб-сервис, использующий .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);.
...
Рейтинг: 0 / 0
Создание заказа в SAP из .NET-приложения
    #37429797
s.t.a.s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще раз повторюсь, в онлайне из VisualStudio и WCF-сервис, и обычный веб-сервис отлично отрабатывают, заказ создается без проблем. Но как только публикую их на веб-сервер - выдается ошибка.
При этом другие веб-методы веб-сервисов работают в любом случае (и в онлайн-отладке, и при размещении на IIS-е) нормально, т.е. проблема именно при работе с SAP.Middleware.Connector.RfcDestinationManager.
...
Рейтинг: 0 / 0
Создание заказа в SAP из .NET-приложения
    #37429799
s.t.a.s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сам код веб-метода:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
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;
        }
...
Рейтинг: 0 / 0
Создание заказа в SAP из .NET-приложения
    #37429837
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сап логон на веб сервере стоит? нужные системы прописаны в etc/services?
...
Рейтинг: 0 / 0
Создание заказа в SAP из .NET-приложения
    #37429853
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
судя по всему NCo 3.0 существенно переделан и не сказать, чтобы в нужную сторону. сап логон ему вроде больше не нужен

RfcDestination SapRfcDestination = RfcDestinationManager.GetDestination("WDA");WDA - это что? где реально у вас прописывает хост, номер системы, мандант и т.п.?
...
Рейтинг: 0 / 0
Создание заказа в SAP из .NET-приложения
    #37429910
s.t.a.s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подключение реализовано в классе SAPConnectionManager, а он в свою очередь наследует IDestinationConfiguration.
...
Рейтинг: 0 / 0
Создание заказа в SAP из .NET-приложения
    #37429914
s.t.a.s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WDA - это имя подключения. Как я написал выше, само подключение реализовано в другом классе:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
public class SAPConnectionManager : IDestinationConfiguration
{
        public RfcConfigParameters GetParameters(String destinationName)
        {
            if ("WDA".Equals(destinationName))
            {
                RfcConfigParameters parms = new RfcConfigParameters();
                parms.Add(RfcConfigParameters.AppServerHost, "192.168.1.1");
                parms.Add(RfcConfigParameters.SystemNumber, "00");
                parms.Add(RfcConfigParameters.SystemID, "WDA");
                parms.Add(RfcConfigParameters.User, "user_name");
                parms.Add(RfcConfigParameters.Password, "password");
                parms.Add(RfcConfigParameters.Client, "300");
                parms.Add(RfcConfigParameters.Language, "RU");
                parms.Add(RfcConfigParameters.PoolSize, "10");
                parms.Add(RfcConfigParameters.MaxPoolSize, "10");
                parms.Add(RfcConfigParameters.IdleTimeout, "600");
                return parms;
            }
            else return null;
        }
        public bool ChangeEventsSupported()
        {
            return false;
        }
        public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;
}
...
Рейтинг: 0 / 0
Создание заказа в SAP из .NET-приложения
    #37429918
s.t.a.s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вестниксап логон на веб сервере стоит? нужные системы прописаны в etc/services?

SAP Logon стоит. В качестве веб-сервера используется IIS.
...
Рейтинг: 0 / 0
Создание заказа в SAP из .NET-приложения
    #37429925
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрите в systems32/drivers/etc/services на той машине, где работает нормально. там есть что-то вроде sapmsWDA tcp/3600?
...
Рейтинг: 0 / 0
Создание заказа в SAP из .NET-приложения
    #37429960
s.t.a.s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, есть sapmsWDA 3600/tcp.
Просто отладку и размещение веб-сервисов делаю на одной и той же машине. Соот-но, на одной и той же машине при отладке веб-сервис работает, и на той же машине на IIS тот же веб-сервис не работает.

Сложилось впечатление, что сервис в Visual Studio запускается под одним пользователем, а сервис под IIS-ом - под другим (точнее в Application Pool стоит по умолчанию удостоверение NetworkService).
...
Рейтинг: 0 / 0
Создание заказа в SAP из .NET-приложения
    #37430714
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вряд ли я вам помогу в этой ситуации. может быть дело в уровне Trust-а, может IIS не все библиотеки видит
как вариант, попробуйте отладиться под IIS (или под IIS Express), а не под встроенным веб сервером, найдите точное место где вылетает. мне кажется, что вылетает он намного раньше, чем вы указали
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Создание заказа в SAP из .NET-приложения
    #39410498
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
таже самая проблема (

жалко что не отписались об решении.
проблема именно в некоректно создаваемом destination на серваке,
если конкретнее то как я подозреваю все дело в SystemAttributes, они при создании destination заполняются данными сервера.

решение пока не нашел (
...
Рейтинг: 0 / 0
Создание заказа в SAP из .NET-приложения
    #39410502
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
s.t.a.sДа, есть sapmsWDA 3600/tcp.
Просто отладку и размещение веб-сервисов делаю на одной и той же машине. Соот-но, на одной и той же машине при отладке веб-сервис работает, и на той же машине на IIS тот же веб-сервис не работает.

Сложилось впечатление, что сервис в Visual Studio запускается под одним пользователем, а сервис под IIS-ом - под другим (точнее в Application Pool стоит по умолчанию удостоверение NetworkService).


sapmsWDA и 3600/tcp нужно указать в конфигурации (destinationconfig)?
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / Создание заказа в SAP из .NET-приложения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]