В состав Microsoft Dynamics NAV входит обработчик образцов документов, модуль Codeunit 8703 Обработчик мобильных документов, обрабатывающий запросы на создание новых клиентов. Данный обработчик получает документы запросов, поступающие с мобильных устройств, на которых запущен образец приложения из Microsoft Dynamics® Mobile. В Microsoft Dynamics Mobile обработчики документов обрабатывают входящие документы запросов, определенные с помощью типов документов. В Microsoft Dynamics NAV предусмотрено пять типов образцов документов. Дополнительные сведения см. в разделе Практическое руководство. Настройка типов мобильных документов в Microsoft Dynamics NAV Classic.

В этом модуле Codeunit демонстрируется простой обработчик документов, обрабатывающий один документ запроса, однако в состав Microsoft Dynamics NAV входит и более сложный обработчик документов, модуль Codeunit 8725 Обработчик документов приложения «Мобильные продажи»., с которым можно ознакомиться в дизайнере объектов. Дополнительные сведения см. в разделе Обработка документов для приложения «Мобильные продажи».

В этом разделе приведены примеры определения обработчика документов в Microsoft Dynamics NAV. Дополнительные сведения см. в разделе Определение обработчиков документов в Microsoft Dynamics NAV.

Обработка документов в модуле Codeunit 8703 «Обработчик мобильных документов»

В обработчике документов содержится код для обработки одного или нескольких типов входящих документов. В стандартной реализации, в модуле Codeunit 8703 Обработчик мобильных документов, содержится одна функция обработки документов, CreateCustomerHandle, которая позволяет обрабатываться один тип документов запросов, поступающих с мобильного устройства. В этом разделе анализируется соответствие модуля Codeunit требованиям к обработчикам документов, описанным в разделе Определение обработчиков документов в Microsoft Dynamics NAV.

В следующей таблице описываются глобальные функции модуля Codeunit.

Название Описание

CreateCustomerHandle

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

CustomerNodeHandle

Используется для обработки части документа запроса, в которой указывается название клиента, адрес электронной почты и группа скидок клиента.

CreditLimitNodeHandle

Используется для обработки части документа запроса, в которой указываются сведения о кредитном лимите клиента.

ContactNodeHandle

Используется для обработки части документа запроса, в которой указываются контактное лицо клиента.

SaveResult

Используется для обновления очереди мобильных документов и отправки документа ответа на мобильное устройство.

Для демонстрации принципа обработки входящих документов этим модулем Codeunit далее будет описан раздел OnRun и следующие функции:

  • CreateCustomerHandle;

  • CustomerNodeHandle;

  • SaveResult.

Функции CreditLimitNodeHandle и ContactNodeHandle аналогичны функции CustomerNodeHandle.

Раздел OnRun

В следующем примере кода демонстрируется раздел OnRun в обработчике мобильных документов.

Изображение кнопки копирования кодаКопировать код
OnRun(VAR Rec : Record "Mobile Document Queue")
CONSISTENT(FALSE);

CASE "Document Type" OF
  'CreateCustomer':
	CreateCustomerHandle(Rec);
  ELSE
	ERROR(Text000,"Document Type");
END;

CONSISTENT(TRUE);

В разделе OnRun код выполняется для записи в таблице «Мобильные документы - очередь». В коде в C/SIDE используется функция CONSISTENT, обеспечивающая выполнение модуля Codeunit в форме одной транзакции. Дополнительные сведения см. в разделе, посвященном функции CONSISTENT, в Документации для разработчиков и ИТ-специалистов Microsoft Dynamics NAV 2009.

В параметре CASE объект CreateCustomer — это название типа документа, обрабатываемого данным модулем Codeunit. Если модуль Codeunit поддерживает несколько типов документов, они перечисляются в этом параметре. CreateCustomerHandle — это функция, обрабатывающая документы запросов.

Функция CreateCustomerHandle

В следующем примере кода содержатся разделы из функции CreateCustomerHandle в обработчике мобильных документов.

Прежде всего функция проверяет права доступа мобильного пользователя, отправившего документ запроса.

Изображение кнопки копирования кодаКопировать код
WITH Permission DO
  MobPermissionMgt.CheckPermission(
	MobDocQueue."Mobile User ID","Object Type"::"Table Data",DATABASE::Customer,
	"Read Permission"::" ","Insert Permission"::Yes,"Modify Permission"::" ",
	"Delete Permission"::" ","Execute Permission"::" ");

В этом коде демонстрируется использование функции CheckPermission модуля Codeunit Управление правами мобильных пользователей для проверки наличия у мобильного пользователя соответствующих прав доступа к каждой таблице, к которой обращается документ запроса. В этом примере у мобильного пользователя должны быть права доступа для вставки записей в таблицу Клиент, поскольку документ запроса предназначен для создания клиентов.

ПримечаниеПримечание

Такая проверка прав доступ не заменяет собой систему безопасности Microsoft Dynamics NAV. Мобильным пользователям должны быть назначены соответствующие роли безопасности.

Далее функция считывает XML-данные документа запроса.

Изображение кнопки копирования кодаКопировать код
MobDocQueue.LoadXMLRequestDoc(XMLRequestDoc);

XMLRootNode := XMLRequestDoc.documentElement;

XMLNodeList := XMLRootNode.childNodes;

FOR i := 1 TO XMLNodeList.length DO BEGIN
  XMLCurrNode := XMLNodeList.item(i - 1);
  MobXMLMgt.GetAttribute(XMLCurrNode,'name',AttributeValue);
  CASE AttributeValue OF
	'CustomerDetailTasklet': XMLCustomerNode := XMLCurrNode.firstChild;
	'CustomerCreditLimitDetailTasklet': XMLCreditlimitNode := XMLCurrNode.firstChild;
	'CustomerContactDetailTasklet': XMLContactNode := XMLCurrNode.firstChild;
	ELSE
	ERROR(Text001,AttributeValue);
  END;
END;

В данном коде CustomerDetailTasklet, CustomerCreditLimitDetailTasklet и CustomerContactDetailTasklet — это имена тасклетов в файле UserRole.xml для мобильного приложения. Используемое в этом примере приложение является образцом приложения Microsoft Dynamics Mobile. Дополнительные сведения см. в руководстве по взаимодействию в Microsoft Dynamics Mobile в Интернете.

Функция CreateCustomerHandle разбивает XML-документ на разделы, соответствующие тасклетам. Затем каждый раздел передается отдельной функции, обрабатывающей бизнес-логику для этого тасклета. Например, XMLCustomerNode — это раздел XML-документа, соответствующий тасклету CustomerDetailTasklet. Выполнение обработки функцией CustomerNodeHandle будет рассмотрено позже.

Далее функция вставляет запись в таблицу Клиент, вызывает три функции для обработки каждого из трех разделов тасклета, а затем сохраняет измененные записи в таблицах Клиент и Мобильные документы - очередь.

Изображение кнопки копирования кодаКопировать код
Customer.INIT;
Customer.INSERT(TRUE);

CustomerNodeHandle(XMLCustomerNode,Customer);
CreditLimitNodeHandle(XMLCreditlimitNode,Customer);
ContactNodeHandle(MobDocQueue,XMLContactNode,Customer);

Customer.MODIFY(TRUE);

RecRef.GETTABLE(Customer);
MobDocMgt.LogInsertion(MobDocQueue,RecRef);

SaveResult(MobDocQueue,Customer);

В этом примере оператор CustomerNodeHandle(XMLCustomerNode,Customer); вызывает функцию CustomerNodeHandle и передает раздел XML, содержащий сведения о клиенте. SaveResult — это функция, обновляющая очередь мобильных документов в соответствии с результатами обработки. Эта процедура описана в одном из следующих разделов.

Функция CustomerNodeHandle

В следующем примере кода демонстрируется функция, обрабатывающая раздел тасклета XML-документа, в данном случае — это функция CustomerNodeHandle из обработчика мобильных документов. В обработчике мобильных документов функция CreateCustomerHandle передает раздел документа запроса, содержащий сведения о клиенте, функции CustomerNodeHandle. Этот раздел соответствует тасклету CustomerDetailTasklet в образце приложения Microsoft Dynamics Mobile.

Изображение кнопки копирования кодаКопировать код
MobXMLMgt.FindNode(XMLCustomerNode,'name',XMLCurrNode);
Customer.VALIDATE(Name,XMLCurrNode.text);

MobXMLMgt.FindNode(XMLCustomerNode,'email',XMLCurrNode);
Customer.VALIDATE("E-Mail",XMLCurrNode.text);

MobXMLMgt.FindNode(XMLCustomerNode,'type',XMLCurrNode);
Customer.VALIDATE("Customer Disc. Group",XMLCurrNode.text);

В этом коде MobXMLMgt — это глобальная переменная для модуля Codeunit 8704 Управление моделью DOM в XML-коде для мобильных устройств. Функция CustomerNodeHandle использует функцию FindNode для извлечения информации о названии клиента, адресе электронной почты и группе скидок клиента. Затем эта функция вызывает функцию VALIDATE для новой записи в таблице Клиент для указания соответствующих значений полей для нового клиента и их проверки. Дополнительные сведения см. в разделе, посвященном функции VALIDATE, в Документации для разработчиков и ИТ-специалистов Microsoft Dynamics NAV 2009.

ПримечаниеПримечание

Код в функции CustomerNodeHandle задает как элементы во входящем XML-документе, так и соответствующие поля в таблице Клиент. Для обработки XML-документа необходимо знать его структуру. Структуру можно определить по схеме, используемой для мобильного приложения. Дополнительные сведения см. в руководстве по взаимодействию в Microsoft Dynamics Mobile в Интернете.

Функция SaveResult

В следующем примере кода демонстрируется функция, создающая ответ мобильному пользователю и обновляющая очередь мобильных документов в соответствии с новым статусом документа запроса. В обработчике мобильных документов функция SaveResult вызывается из функции CreateCustomerHandle после обработки документа запроса.

Изображение кнопки копирования кодаКопировать код
WITH MobDocQueue DO BEGIN
  MobDocMgt.CreateXMLResponseDocCompleted(XMLResultDoc,"Message ID",STRSUBSTNO(Text002,Customer.TABLECAPTION,Customer."No."));

  XMLRootNode := XMLResultDoc.documentElement;
  MobXMLMgt.AddElement(XMLRootNode,'responseData','',XMLRootNode.namespaceURI,XMLCreatedNode);
  MobXMLMgt.AddElement(XMLCreatedNode,'newCustomerAccount',Customer."No.",XMLRootNode.namespaceURI,XMLCreatedNode);

  SaveXMLResultDoc(XMLResultDoc);
  Status := Status::Completed;
  MODIFY;
END;

Код использует функции в модулях Codeunit 8701 Управление мобильными документами и 8704 Управление моделью DOM в XML-коде для мобильных устройств с целью создания XML-документа, отправляющего ответ мобильному пользователю, а затем обновляет запись в таблице Мобильные документы - очередь.

См. также