Создание событий в Navision

В этом разделе приведен упрощенный пример инициирования событий бизнес-логикой Navision. Система Navision просто обнаруживает условие и немедленно инициирует событие.

  1. Определить и проанализировать имеющуюся проблему. Здесь рассматривается задача: уведомить о блокировке клиента (изменении статуса Блокировка с False на True).

  2. Решить, какие данные должны содержаться в объекте XMLport. Например, идентификационный номер и имя клиента, дата изменения, код менеджера. Код менеджера можно использовать для фильтрации в Business Notification, с тем чтобы каждый менеджер получал уведомления о своих клиентах.

  3. Создать объект XMLport, содержащий нужные данные. В руководстве разработчика приложений и электронной справке C/SIDE имеются все необходимые сведения. В этом примере объект можно назвать "Клиент" (хотя можно и установить некое соглашение об именах, например назвать этот объект "Уведомление о клиенте"). Следует помнить, что это имя отображается в качестве "бизнес-объекта" в Конструкторе уведомлений.
    Примечание.
    В именах TagNames не допускаются пробелы, а для свойства Format/Evaluate объекта XMLport должно быть установлено значение "XML Format/Evaluate" (это значение не по умолчанию, его необходимо изменить самостоятельно).

  4. Добавить в объект XMLport событие с помощью конструктора событий Events Designer (доступ из меню View, параметр XMLports Events). В этом примере событие можно назвать "HasBeenBlocked" (Блокирован). Это имя также отображается в Конструкторе уведомлений.

Теперь требуется найти, где должно инициироваться событие в бизнес-логике. В данном примере это должен быть триггер OnModify в таблице Customer (Клиент) (естественно, при этом не охватывается случай, когда при создании клиента статус Блокировано сразу устанавливается в состояние True, но рассмотрение подобных случаев и не входило в наши намерения. Достаточно рассмотреть ситуации, в которых незаблокированный клиент становится заблокированным).

  1. Чтобы инициировать событие в бизнес-логике, необходимо объявить созданный объект XMLport как локальную переменную. Можно, например, присвоить ей имя "CustXMLDoc" (Это имя не отображается в Конструкторе уведомлений).

  2. Затем следует добавить в триггер OnModify следующий код: 
    IF Blocked = Blocked::All THEN
    IF Blocked <> xRec.Blocked THEN
    CustomerXMLDoc.HasBeenBlocked();

  3. Теперь можно с помощью Конструктора уведомлений создать схему, управляющую этим событием, которое будет доступно как событие "HasBeenBlocked" бизнес-объекта "Клиент".

Проверка

Этот пример явно упрощен. Однако большинство решений могут быть ненамного сложнее. Здесь возникает вопрос о способах проверки решения и поиска ошибок. Если пользователи, которые должны получать уведомления, не получают их, имеется по меньшей мере три источника ошибок: (1) бизнес-логика Navision, (2) схема в Business Notification, (3) настройка инфраструктуры, например неполадки почтового сервера и т. п. Кроме того, возможен дефект любого из компонентов системы. Чтобы проверить, действительно ли в Navision инициируется нужное событие, можно заменить код

CustXMLDoc.Blocked();

другим, например:

DIALOG.MESSAGE('%1 blocked', Name);

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