В состав 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-документа, отправляющего ответ мобильному пользователю, а затем обновляет запись в таблице Мобильные документы - очередь.