Использование xml-портов с веб-сервисами Dynamics NAV

В продолжение недавней Интернет-трансляции (см. здесь), предоставляю Вам пошаговое руководство по созданию XML–порта и использованию его для импорта данных в NAV.
Прежде всего, необходимо создать наш XML-порт и убедиться, что он содержит все необходимые нам элементы и значения.

С целью устранения возможных путаниц, для Родительского элемента, установил свойство «MinOccurs» = 1. В целом для XML-порта, значения свойств «UseDefaultNamespace» и «DefaultNamespace» были изменены, как показано ниже:

Кроме того, в моем XML-порте нет кода, но естественно, манипуляции с данными будут выполнены в соответствии с созданным функционалом XML-порта. Теперь перейдем к Кодеюниту:

ImportDim(VAR DimImport : XMLport DimImport) Return : Text[30]
DimImport.IMPORT;
EXIT('Import Run');

В основном ты рассмотрели, как создать и запустить XML-порт для импорта данных, а теперь давайте вернемся к веб-службам, которые мы запускаем. Все что нам сейчас нужно сделать, это настроить веб-службы, используя форму 810:

Помните, что реальное имя Кодеюнита не должно совпадать с названием указанной здесь службы. Итак, теперь мы переходим в Visual Studio и начинаем работать с тем, что у нас есть. Первое, что мы увидим, это WSDL описание, включающее описание нашего XML-порта.

Мы видим, RootDimension элементы, которые состоят из нескольких элементов измерения. Также мы можем видеть определение элемента Dimension, включающее поля, которые используются для импорта измерений в NAV.
В Visual Studio создадим новый «Windows Forms» проект:

В созданном проекте добавим веб-ссылку на кодеюнит: http://localhost:7047/DynamicsNAV/WS/Codeunit/DimensionImport.
Подробнее о том, как добавить веб-ссылку можно найти в Developer and IT Pro Documentation,
На моей новой форме, я создал поля для ввода Кода (Dimension Code) и Названия (Dimension Name) измерения и кнопку Создать (Create).

При нажатии на кнопку «Create» будет выполняться указанный ниже код:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;  

namespace NAV2009SP1WSDemo
{  
    using WSDI;  
    public partial class Form1 : Form  
    {  
        public Form1()  
        {  
            InitializeComponent();  
        }  
 
        private void button1_Click(object sender, EventArgs e)  
        {  
            //Убедитесь, что ResultLabel не содержит текста после нескольких запусков
            ResultLabel.Text = "";  

            //Создайте экземпляр веб-сервиса (WS), установите права доступа и в URL укажите компанию для которой будет запускаться веб-служба.
            DimensionImport NAVImport = new DimensionImport();  
            NAVImport.UseDefaultCredentials = true;  
            NAVImport.Url = "http://localhost:7047/DynamicsNAV/WS/CRONUS%20International%20Ltd/Codeunit/DimensionImport";  
             
            // Прежде всего создадим наш Родительский элемент
            RootDimensions RootDim = new RootDimensions();
            // Далее мы создадим Список для управления нашими (возможными) множественными измерениями
            List<Dimension> DimList = new List<Dimension>();
             // И потом мы создает экземпляр измерения
            Dimension Dim = new Dimension();  
             if (dimInputCode.Text != "" && dimInputName.Text != "")  
            {  
                // Мы присваиваем переменной Dim значения введенные в текстовые поля
                Dim.DimensionCode = "AREA";  
                Dim.Code = dimInputCode.Text;  
                Dim.Name = dimInputName.Text;
                 // Далее добавляем измерение к нашему списку
                DimList.Add(Dim);  
                 //Для получения списка измерений «привязанных» к родительскому элементу, выполняем следующее
                RootDim.Dimension = DimList.ToArray();  
                try  
                {  
                    // Далее мы отправляем данные в NAV и получаем результат выполнения
                    ResultLabel.Text = NAVImport.ImportDim(ref RootDim);
                 }  
                catch (Exception ex)  
                {  
                    //Показываем возможное исключение  
                    ResultLabel.Text = ex.ToString();  
                }  
            }  
            else  
            {  
                // Проверка того, что все значения измерения заполнены
                ResultLabel.Text = "Both values must be filled";  
            }  
         }  
    }
}

Наше замечательное приложение готово для запуска и все, что нам необходимо сделать, это нажать клавишу F5:

На текущий момент мы создали XML-порт, выполнили его запуск, используя кодеюнит и передали ему данные об измерении указанные на созданной нами форме.

Оригинал статьи лежит здесь: http://blogs.msdn.com/b/nav/archive/2009/11/06/using-dataports-with-web-services.aspx

Автор:

Количество статей, опубликованных автором: 3. Дополнительная информация об авторе появится вскоре.

Комментарии (Один комментарий)

  1. Андрей

    Спасибо большое за ценный материал.
    Здесь рассказано как сделать импорт данных из внешней процедуры в Нав. А как правильно сделать импорт данных из веб сервиса другого сервере Нав через его веб сервис.
    Спасибо!

Добавить комментарий