Инструменты пользователя

Инструменты сайта


axapta:класс:runbase

AxForum: http://www.axforum.info/forums/showthread.php?s=&threadid=823 http://forum.mazzy.ru/index.php?showtopic=1846 ../Extends/Object

toc

Введение

Класс RunBase служит базовым классом для создания классов-действий – классов, которые выполняют одно некоторое действие. Если вы хотите выполнять действие в качестве пакетного задания, надо наследоваться от RunBaseBatch

Как обычно, изучение класса RunBase начинается с рассмотрения примеров в стандартной Axapte таких как классы Tutorial_RunbaseBatch, Tutorial_RunbaseForm, являющимися наследниками RunBase. В основе лежит концепция формирования формы диалога из класса. Перед разработкой диалога необходимо определится с дизайном и функционалом. Это упростит разработку. Например, откуда будет вызываться диалог. Обычно это использование ПунктМеню.

Рассмотрим пример изменения дня рождения у сотрудника. Для запуска диалога необходимо определить, как минимум, следующие методы : classDeclaration, pack, unpack, dialog, main. При вызове класса активизируется статический метод main(). В нем определяется вызов диалога. Для добавления заголовка на форму необходимо использовать метод description. Для получения значения даты из диалога используется метод getFromDialog(). Для получения текущего курсора используется метод initFromArgs(). Выполнение необходимого функционала можно закладывать в run() или do().

Создаем класс

public class Example_RunBase extends Run Base
{
    EmplTable emplTable;
    //определение пременной в диалоге
    transDate transDate;
 
    //определение поля диалога
    dialogField dlgTransDate;
 
    // как правило стандартный набор
    #define.CurrentVersion(1)
    #define.Version1(1)
    #localmacro.CurrentList //хранение переменной
        transDate
    #endmacro
}

Методы pack и unpack можно переносить без изменений

public Object dialog()
{
    DialogRunBase dialog = super();
    ;
    //определяется форма диалога, количесто полей, закладок.
    dlgTransDate = dialog.addFieldValue(typeid(transDate),transDate);
    return dialog;
}
static ClassDescription description()
{
    return "Разработка диалога"; //определяем заголовок формы
}
public boolean getFromDialog()
{
    ;
    // получение значения даты с диалога
    transDate = dlgTransDate.value();
 
    return super();
}
static void main(Args _args)
{
    Example_RunBase example;
    ;
    //можно использовать для запрета вызова не через menuItem
    if (!_args || _args.dataset() != tableNum(EmplTable))
        throw error(strfmt("@SYS25516"));
    // активизируем класс
    example = new Example_RunBase();
    //получаем значение курсора
    example.initFromArgs(_args); 
    //стандартный набор запускающий диалог
    if (example.prompt())
        example.run();
}
public void initFromArgs(Args _args)
{
    ;
    emplTable = _args.record(); //получаем значение курсора
}
void run() //выполняем необходимые действия
{
    boolean ok = true;// при нажатии
    ;
    if (ok)
        emplTable.BirthDate=transDate;
}

Размещаем на форме EmplTable menuItemButton, вызывающий наш класс и проверяем. Это самый простейший пример использования класса. Кто хочет использовать дополнительные возможности то будет полезным знать о других методах класса

Описание методов

1. CanGoBatch Возвращает True если возможна пакетная обработка (т.е. можно указать когда запускать обработку и как часто ее запускать в автоматическом режиме) Возвращает False если пакетная обработка не возможна 2. CheckCloseDialog() Вызывается при закрытии диалога (CloseOk) 3. cleanupDialog() Вызывается при закрытии диалога (CloseCancel 4. Dialog() Вызывается из метода Prompt() и возвращает класс запуска формы dialog, ormRun 5. DalogTask() Вызывается из метода task() в диалоге 6. GetFromDialog() Вызывается из метода CheckFromDialog() 7. GetLast() Метод необходисо вызывать в классе наследнеке для получения сохраненных параметров при последнем вызаве этого класса (работает метод pack() и unpack()) 8. InitParmDefault() Вызывается если неудалось найти сохраненные параметры методом GetLast() 9. LastFalueDataAreaId() В какой компании идет работа 10. LastValueUserId() Пользователь. 11. pack() Через этот метод сохраняются параметры обработки

    return [#CurrentVersion, #CurrentList];

#CurrentVersion – макрос (local) версия сохранненных параметров #CurrentList – макрос (local) сохраняемые параметры 12. parmProgress() Метод Set/Get RunBaseProgress (прогресс) 13. progress*() методы для работы с прогрессом 14. Promt() Вызывается из класса наследника этот метод открываент диалог и если нажата кнопка OK и метод Validate() вернул True тогда метод Prompt() вернет значениеTrue If (this.Promt()) This.Run() 15. RunBase() Return this; 16. SaveLast() Вызывается из метода Prompt() если в диалоге нажта кнопка OK Метод сохраняет параметры (вызов метод pack()) 17. unpack() Распаковка параметров

int version = runbase::getVersion(packedClass);
switch (version)
{
    case #CurrentVersion:
        [version,#CurrentList] = packedClass;
        return true;
    default :
        return false;
}
return false;

18. Validate() Вызывается при закрытии диалога (CloseOk) 19. static GetDescription(ClassId) Возвращет описание класса наследника

static str Description() // лучше чтобы этот метод был в наследние
{
   return <Описание класса>
}
 
void run() // Пример метода Run()
{
    if (! This.Validate()) // только если вызывается форма, а не диалог
        throw Error('');
 
    try
    {
        progress.progressinit()
        ttsbegin;
 
        While{
            progress.inccount();
            progress.settext();
            …
        }
 
        ttscommit;
    }
    catch (exception::DeadLock)
    {
        retry;
    }
}

Потомки

Диаграмма

axapta/класс/runbase.txt · Последнее изменение: 2018/04/13 22:43 (внешнее изменение)