Как я могу получить массив данных из пользовательского интерфейса, используя веб-сервисы на основе мыльных контрактов - PullRequest
0 голосов
/ 09 ноября 2018

Я знаю, как извлечь данные из пользовательского общего запроса с использованием стандартных веб-сервисов на основе мыла / страниц.

Вот мой код для стандартных веб-сервисов для получения результатов от пользовательского интерфейса:

    static void Main(string[] args)
    {
        GI000081.Screen context = new GI000081.Screen();
        context.Url = "http://localhost/AcumaticaDB181000062/(W(6))/Soap/GI000081.asmx";

        context.CookieContainer = new System.Net.CookieContainer();

        LoginResult loginResult = context.Login("admin", "Passw0rd");

        if (loginResult.Code != ErrorCode.OK)
        {
            throw new Exception(loginResult.Message);
        }

        GI000081.Content GI000081Content;
        GI000081Content = context.GetSchema();  //.IN202500GetSchema();

       //Here's the code to obtain the GI data:
        string[][] GI000081Data = context.Export
       (new Command[] {
        GI000081Content.Result.AccountID,
        GI000081Content.Result.Address,
        GI000081Content.Result.CustomerID,
        GI000081Content.Result.AccountName
       },
        null,  //This is the filter - none here, so null..
        0,
        false,
        false
       );
    }

Мой запрос, могу ли я получить пример кода C # для того, как это сделать, используя основанные на контракте веб-сервисы. Я знаю, как расширить конечную точку и получить ссылку на файл / службу wsdl для моего пользовательского общего запроса, но я не знаю синтаксиса для фактического вызова.
Заранее спасибо ...

1 Ответ

0 голосов
/ 09 ноября 2018

Просто чтобы убедиться, что вы правильно создали объект в конечной точке, убедитесь, что объект верхнего уровня содержит только параметры и что у него есть дочерний объект с деталями типа, содержащий все результаты. Если параметра нет, тогда объект верхнего уровня может быть пустым.

Вот пример кода, который я использовал

class Program
{
    static void Main(string[] args)
    {
        DefaultSoapClient client = new DefaultSoapClient();
        client.Login("admin", "admin", null, null, null);

        try
        {
            BatchPaymentsInq batch = new BatchPaymentsInq
            {
                Result = new BatchPaymentsInqResult[] 
                {
                    new BatchPaymentsInqResult { ReturnBehavior = ReturnBehavior.All }
                }
            };

            var result = client.Get(batch);
        }
        catch(Exception ex)
        {

        }
        finally
        {
            client.Logout();
        }
    }
}

Edit:

Вот как я расширил свою конечную точку, чтобы использовать ее с контрактным SOAP API

Web Service Endpoint

Таким образом, основная сущность с именем BatchPaymentsInq указывает на экран Generic Inquiry и не будет иметь никакого поля в нем, поскольку вы упомянули об отсутствии параметра.

Подсубъект Result представляет собой массив BatchPaymentsInqResult - объекта, созданного для содержания полей в таблице результатов запроса.

...