Поделиться через


Выполнение пользовательских сценариев X++ с нулевым временем простоя

Эта функция позволяет отправлять и выполнять развертываемые пакеты, содержащие пользовательские сценарии X++, без необходимости проходить через Microsoft Dynamics Lifecycle Services (LCS) или приостанавливать систему. Таким образом, можно исправить небольшие несоответствия данных, не вызывая простоя.

Преимуществом использования сценария X++ для коррекции незначительных несоответствий данных является то, что система автоматически корректирует все связанные таблицы при выполнении сценария. Такой подход позволяет гарантировать целостность исправления и снизить риск внесения новых несоответствий.

Важно

Эта функция предназначена только для исправления незначительных несоответствий данных. Это не следует использовать в следующих целях или других целях:

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

Эта функция позволяет авторизованным пользователям изменять сущности и их записи напрямую, не требуя выполнения бизнес-логики, связанной с этими сущностями. Эти изменения могут привести к проблемам с целостностью данных. Таким образом, организация может потребовать от внутренних и внешних аудиторов (или других аналогичных заинтересованных лиц) получать утверждение и разрешение перед и/или после запуска сценария. В целях соответствия требованиям изменения, влияющие на некоторые характеристики, также могут быть раскрыты во внешних отчетах (например, финансовых отчетах) или в отчете правительственным органам. Ваша организация несет единоличную ответственность за любые изменения данных, внесенные в ее данные с помощью этой функции, любые утверждения и разрешения или раскрытие этих изменений и соответствие применимым законам. Вы несете все риски при использовании этой функции.

Все развертываемые пакеты, отправленные в систему, проходят через обязательный рабочий процесс. В качестве меры предосторожности и для обеспечения разделения обязанностей пользователю, который отправляет развертываемый пакет, не разрешается его утверждать для следующих шагов в бизнес-процессе. Другой пользователь должен утвердить. Однако после утверждения пакета пользователь, который отправил его, получит разрешение на выполнение оставшихся шагов.

Система требует, чтобы все развертываемые пакеты проходили через тестовое выполнение. Перед тем как будет разрешено выполнение сценария для производственных данных, пользователь должен проверить правильность результатов, выбрав пункт Принять журнал тестирования. Если выходные данные неверны, пользователь должен пометить пакет как "сбой", выбрав Отменить. В этом случае сценарий не будет разрешен для запуска в производственных данных.

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

Как показано на следующем рисунке, система предоставляет подробные сведения о том, как были выполнены все развертываемые пакеты в X++ и какие сущности были затронуты.

Страница сведений о сценарии.

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

Эта функция предоставляет следующие обязанности. Администраторы могут использовать эти обязанности для управления доступом к функции.

  • Ведение пользовательских сценариев — эта обязанность дает возможность отправлять, тестировать, проверять и выполнять пользовательские сценарии X++ в средах (приемочное тестирование пользователем [UAT] и производство).
  • Утвердить пользовательские сценарии — эта обязанность дает возможность утверждать отправленный пользовательский сценарий X++. Утверждение является обязательным шагом перед тем, как сценарий можно будет проверить, подтвердить и выполнить.

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

Создание готового к развертыванию пакета

Для этой функции требуется регулярный развертываемый пакет, который может быть создан в Visual Studio. Инструкции см. в разделе Создание готовых к развертыванию пакетов моделей.

В развертываемом пакете должен быть ровно один выполняемый класс X++. Другими словами, он должен иметь один класс, включающий метод с следующей подписью.

public static void main(Args _args)

Примечание

Название основного метода должно быть в нижнем регистре.

Пример кода

В следующем примере кода показано, как можно структурировать развертываемый пакет.

class MyScriptClassForIssueXYZ
{
    public static void main(Args _args)
    {
        if (curExt() != 'DAT')
        {
            throw error("This script must run in the DAT company!");
        }

        ttsbegin;

        MyTable myTable;

        update_recordset myTable
            setting myField = 17
            where myTable.myReference == 'xyz';

        if (myTable.RowCount() != 1)
        {
            throw error("Not updating the expected row!");
        }

        info("Success");
  
        ttscommit;
    }

}

Рекомендации

В следующем списке описываются рекомендации по успешному написанию, реализации и запуску сценария. Список не является исчерпывающим, и он должен рассматриваться только для руководства.

  • Обязательно подготовьте запись сообщения об успешном выполнении в конце сценария. Таким образом, вы сможете увидеть, что сценарий выполнен без исключений.
  • Обязательно добавьте явную обработку области транзакции.
  • Обязательно используйте существующую бизнес-логику, например методы update(), но не обходите бизнес-логику с помощью методов doUpdate(), doInsert() и doDelete(). Этот подход позволяет гарантировать правильность обработки зависимых данных. Кроме того, это значительно снизит риск последующей несогласованности данных.
  • Обязательно утверждайте контекст компании. Этот подход будет предоставлять общие ошибки при запуске сценария. Например, он определит, выполняется ли сценарий в неправильной компании.
  • Обязательно подтвердите, что количество затронутых записей соответствует вашим ожиданиям. При таком подходе будут обнаружены данные, которые были неожиданно смещены в системе во время подготовки сценария.
  • Обязательно используйте уникальные имена классов для каждого сценария (например, включив ссылку на рабочий элемент в имя). Этот подход предотвратит конфликт имен при отправке сценария. Если требуется новая итерация сценария, убедитесь, что ей присвоено новое имя.
  • Обязательно протестируйте каждый сценарий в непроизводственной среде. Проверьте предполагаемое влияние и непреднамеренные побочные эффекты для связанных данных. Убедитесь, что все бизнес-процессы, которые могут быть затронуты, успешно завершены, и после этого их можно полностью завершить.

Отправка и выполнение развертываемого пакета

Для отправки и выполнения сценария используйте следующую процедуру.

  1. В приложении для управления финансами и операциями перейдите в раздел Администрирование системы > Периодические задачи > База данных > Настраиваемые сценарии.

  2. Выберите Отправить.

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

  4. После этого сценарий должен быть утвержден пользователем, отличным от того, который его отправил. Утверждающий должен выполнить следующие шаги:

    1. Перейти в Администрирование системы > Периодический > База данных > Настраиваемые сценарии.
    2. Выберите сценарий для утверждения, а затем выберите Сведения.
    3. В области действий на вкладке Workflow-процесс процесса в группе Начало выберите Утвердить или Отклонить. Если выбрать Утвердить, сценарий помечается как утвержденный и разблокирован для тестирования. Если выбрано значение Отклонить, сценарий заблокирован. В обоих случаях событие записывается в журнал, а копия сценария сохраняется в системе.
  5. Сценарий необходимо проверить, чтобы убедиться в том, что он предназначен для выполнения этой задачи. Тестер может быть тем же, что и отправитель или утверждающий, или может быть сторонним пользователем, имеющим необходимые разрешения. Тесте должен выполнить следующие шаги:

    1. Перейти в Администрирование системы > Периодический > База данных > Настраиваемые сценарии.

    2. Выберите сценарий для тестирования, а затем выберите Сведения.

    3. В области действий на вкладке Workflow-процесс процесса в группе Тест выберите Выполнить тест. Сценарий запускается внутри временной проводки, которая автоматически прерывается системой при сборе различных журналов и инструкций SQL.

    4. После завершения выполнения сценария просмотрите журналы и убедитесь, что результаты отвечают вашим ожиданиям. Выполните одно из следующих действий.

      • Если результаты проверки устраивают, выберите Принять журнал тестирования в группе Тест на вкладке Workflow-процесс процесса области действий, чтобы разрешить выполнение сценария. Журнал событий будет отражать тот факт, что сценарий был протестирован, и будет указывать, кто его тестировал и когда.
      • Если результаты проверки не устраивают, выберите Отменить в группе Завершение на вкладке Workflow-процесс процесса области действий, чтобы не допустить выполнение сценария. Система сохранит копию сценария вместе с журналом его журнала.
  6. Когда вы уверены, что сценарий соответствует вашим ожиданиям, выберите Выполнить в группе Выполнить на вкладке Workflow-процесс процесса в области действий, чтобы выполнить его. Эта команда выполняет те же действия, что и в предыдущем тестовом запуске, но проводка будет выполнена в конце.

  7. После завершения выполнения сценария проверьте результат и убедитесь, что сценарий работал правильно. Выполните одно из следующих действий.

    • Если результаты удовлетворительные, выберите Цель разрешена в группе Завершение на вкладке Workflow-процесс процесса в области действий. Журнал событий будет отражать тот факт, что сценарий успешно выполнен, и будет указывать, кто проверил сценарий и когда. Сценарий сохранен, но теперь заблокирован и не может быть выполнен повторно.
    • Если результаты неудовлетворительные, выберите Цель не разрешена в группе Завершение на вкладке Workflow-процесс процесса в области действий. Журнал событий будет отражать тот факт, что сценарий не достиг плановой цели, и будет указывать, кто выполнял сценарий и когда. Сценарий сохранен, но теперь заблокирован и не может быть выполнен повторно. Однако система не будет автоматически отменять действие сценария. Возможно, потребуется написать, импортировать и выполнить новый сценарий, чтобы отменить действие, вызванное сбойным сценарием в системе.

Выбор на последнем шаге определяет конечное состояние сценария. Процесс можно повторять по мере необходимости.

Отправка и выполнение развертываемого пакета в LCS

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

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