AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.07.2020, 22:31   #1  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
D365FO: Использование веб-сервиса через SOAP
В качестве образца использования веб-сервиса можно взять файл https://github.com/microsoft/Dynamic...ion/Program.cs, однако в конечном счете все нужно будет собрать в один проект на C#, поэтому начинаем с того, что создаем проект на C# типа Console Application. Мы можем создать проект любого типа - главное, чтобы он мог бы быть напрямую запущен пользователем.
Нажмите на изображение для увеличения
Название: SNAG_Program-0050.png
Просмотров: 113
Размер:	26.5 Кб
ID:	12884
В созданном проекте для авторизации по токену будет не хватать ссылки на библиотеку Microsoft.IdentityModel.Clients.ActiveDirectory (см узел References)
Название: SNAG_Program-0051.png
Просмотров: 1126

Размер: 15.7 Кб
Поэтому эту библиотеку нужно добавить путем выполнения команды в Visual Studio: Tools - NuGet Package Manager - Package Manager Console
Нажмите на изображение для увеличения
Название: SNAG_Program-0052.png
Просмотров: 108
Размер:	24.5 Кб
ID:	12886
Цитата:
Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
Выполнять команду в консоли стоит, щелкнув предварительно на Solution, а не на Project

Теперь в проект нужно добавить из заготовок от Microsoft следующие файлы:
ClientConfiguration.cs (с правками по параметрам авторизации)
OAuthHelper.cs (без правок)
SoapHelper.cs (без правок)
Также добавляем Service Reference
Нажмите на изображение для увеличения
Название: SNAG_Program-0053.png
Просмотров: 116
Размер:	34.0 Кб
ID:	12887
указав путь к веб-сервису (и нажав кнопку Go), а также указав имя Tutorial_CustServiceReference, под которым веб-сервис будет представлен в коде
Нажмите на изображение для увеличения
Название: SNAG_Program-0054.png
Просмотров: 115
Размер:	22.5 Кб
ID:	12888

Далее пишем вот такой вот класс Program.cs. Обращаю внимание, что parm-методы воспринимаются на C#, как свойства (property) класса, а перечень карточек клиента - как массив.
X++:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using AuthenticationUtility;
using SoapUtility;
using System.ServiceModel;
using System.ServiceModel.Channels;

namespace Tutorial_ConsumeServiceSOAP
{
    class Program
    {
        public const string serviceGroupName = "Tutorial_CustServiceGroup";
        public const string serviceName = "Tutorial_LabCustService";
        static void Main(string[] args)
        {
            var aosUriString = ClientConfiguration.Default.ActiveDirectoryResource;
            string bearerKey;

            bearerKey = OAuthHelper.GetAuthenticationHeader(true);

            var serviceUriString = SoapUtility.SoapHelper.GetSoapServiceUriString(serviceGroupName, aosUriString);

            EndpointAddress endpointAddress = new System.ServiceModel.EndpointAddress(serviceUriString);
            var binding = SoapUtility.SoapHelper.GetBinding();

            var client = new Tutorial_CustServiceReference.Tutorial_LabCustServiceClient(binding, endpointAddress);
            var channel = client.InnerChannel;

            Tutorial_CustServiceReference.CallContext refContext = new Tutorial_CustServiceReference.CallContext();
            refContext.Company = "RUMF";
            refContext.Language = "ru";
            refContext.PartitionKey = "initial";

            using (OperationContextScope operationContextScope = new OperationContextScope(channel))
            {
                HttpRequestMessageProperty requestMessage = new HttpRequestMessageProperty();
                requestMessage.Headers[OAuthHelper.OAuthHeader] = bearerKey;
                OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestMessage;
                Tutorial_CustServiceReference.Tutorial_CustServiceContract result;
                Tutorial_CustServiceReference.Tutorial_CustServiceContract[] colResult;
                result = ((Tutorial_CustServiceReference.Tutorial_LabCustService)channel).getCustDetail(new Tutorial_CustServiceReference.getCustDetail(refContext, "RUMF-000001")).result;
                
                Console.WriteLine(string.Format("{0} | {1} | {2}", result.parmCustAccount, result.parmCustAccountName, result.parmCustGroupId));

                colResult = ((Tutorial_CustServiceReference.Tutorial_LabCustService)channel).getCustListOfGroup(new Tutorial_CustServiceReference.getCustListOfGroup(refContext, "Орг")).result;
                foreach (Tutorial_CustServiceReference.Tutorial_CustServiceContract iterator in colResult)
                {
                    Console.WriteLine(string.Format("{0} | {1} | {2}", iterator.parmCustAccount, iterator.parmCustAccountName, iterator.parmCustGroupId));
                }
            }
            Console.ReadLine();
        }
    }
}
Все билдим, запускаем, проверяем. Само собой, база данных должна содержать те данные, которые мы хотим получить.
У меня (на моей базе) получается такой результат:
Название: Снимок.PNG
Просмотров: 829

Размер: 24.8 Кб
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 09.12.2020 в 08:55.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX 2012 Создание сервиса по шагам sukhanchik DAX: Программирование 16 26.08.2021 12:26
littleax: Simple Rest API in D365FO, D365F, D365SCM Blog bot DAX Blogs 0 23.06.2020 14:12
sertandev: How to receive D365FO push notifications using Azure Notification Hubs Blog bot DAX Blogs 0 04.07.2019 18:11
sertandev: How to integrate D365FO with Microsoft Flow using the new Business Events Blog bot DAX Blogs 0 23.05.2019 16:11
erconsult: Copy-paste with keyboard script 2: from Excel to D365FO Blog bot DAX Blogs 0 03.08.2018 11:12

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:22.