Skip to content
mazzy edited this page Dec 29, 2019 · 12 revisions

SysArgs – это набор статических методов на языке X++ для класса SysArgs в Microsoft Dynamics AX 2009, Microsoft Dynamics AX 2012 и Axapta 4.0.

Get methods возвращают требуемое значение или бросают исключение

  • getCallerFormName
  • getEnum
  • getEnumDefault
  • getMarkedRecIds
  • getRecord

Check methods возвращают boolean, не бросают исключений

  • checkCallerType
  • checkEnum
  • checkEnumType
  • checkFormDatasource
  • chackParm
  • checkRecord
  • checkRecordExists
  • checkRecordTableIds

Assert methods ничего не возвращают. Бросают исключение, если в аргументах не подходящие параметры. Статические методы.

  • assertCallerFormName
  • assertCallerType
  • assertEnum
  • assertEnumType
  • assertFormDatasource
  • assertParm
  • assertRecord
  • assertRecordExists
  • assertRecordTableIds

Ensure methods возвращают исходный args, что позволяет записывать цепочку ensure методов при инициализации переменных. Бросают исключение, если в аргументах не подходящие параметры. Методы объекта.

  • ensureCallerFormName
  • ensureCallerType
  • ensureEnum
  • ensureEnumType
  • ensureFormDatasource
  • ensureParm
  • ensureRecord
  • ensureRecordExists
  • ensureRecordTableIds

Пример 1

Стало:

reqTrans = SysArgs::getRecord(args, reqTrans.TableId);

Вместо:

if (args.dataset() == tablenum(ReqTrans) && args.record().RecId)
    reqTrans = args.record();
else
    throw error(Error::missingFormActiveBuffer(element.name()));

Пример 2

Стало:

SysArgs::assertCallerType(args, classnum(FormRun)); // пропустит дальше, только если вызвали из формы. Иначе бросит исключение.
if( SysArgs::checkRecord(args, tablenum(ProdTable)) )
{
    ...

Вместо:

if (args && args.caller() && args.dataset() == tablenum(ProdTable) && args.record().RecId)
{
    // проверили, что есть вызвавший класс. нет проверки, что вызвали именно из формы
    ...

Пример 3 для ax2012

Стало:

public static void main(Args args)
{
    ProdTable prod = args.ensureCallerType(classnum(FormRun)).getRecord(tablenum(ProdTable));
    ...

Вместо:

public static void main(Args args)
{
    ProdTable prod;

    if (args && args.caller() && args.dataset() == tablenum(ProdTable) && args.record().RecId)
    {
        prod = callerForm.args().record();
        ...
Clone this wiki locally