AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX Blogs
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.04.2008, 20:05   #1  
Blog bot is offline
Blog bot
Участник
 
25,643 / 848 (80) +++++++
Регистрация: 28.10.2006
axStart: Derive from Derived RunbaseBatch classes.
Источник: http://axstart.spaces.live.com/Blog/...C0A0!292.entry
==============


We all know how to extend from a runbaseBatch. But you have to be carful if you extend from that derived class again. You still want the integration with pack/unpack the correct way.
Example: We want an additional text field on the dialog when posting a movement journal. For this example we have to override the next methods:
·        Dialog
·        getFromDialog
·        pack
·        uppack
The class that we gone adapt is InventJournalCheckPost_Movement.

Application hierarchy tree

First we have to add the new field in the class declaration:
class InventJournalCheckPost_Movement extends JournalCheckPostLedger
{
    name text;
    DialogFIeld dlgField;
 
    #define.CurrentVersion(1)
    #define.Version1(1)
    #localmacro.CurrentList
        text
    #endmacro
}
 
The super() call in the getfromdialog , dialog and validate is similar like normal derived methods from runbaseBatch.
Object dialog()
{
    DialogRunbase ret;
    ret = super();
    dlgField = ret.addFieldValue(typeid(string),myString,'text');
    return ret;
}
boolean getFromDialog()
{
    boolean ret;
    ret = super();
    text = dlgField.value();
    return ret;
}
public boolean validate(Object calledFrom)
{
    boolean ret;
    ret = super(calledFrom);
    if(!text)
        ret = checkFailed('missing text');
    return ret;
}
 
Now we have to add the super() in on the right place in the pack and unpack. The trick is that we add the container created by super() on the end of our own container. (We create nested containers)
container  pack()
{
    return [#CurrentVersion, #CurrentList, super()];
}
public boolean unpack(container packedClass)
{
    boolean         ret;
    Integer         version    = RunBase::getVersion(packedClass);
    container       base;
 
    switch (version)
    {
        case #CurrentVersion:
            [version, #CurrentList,base] = packedClass;
            ret = super(base);
            break;
 
        default:
            this.initParmDefault();
            ret = false;
    }
    return ret;
}
 
Finally you want to use the information in the process.  The run method in the class JournalCheckPost contains the global setup of processing the movement. Derive the right runXXXX method in the InventJournalCheckPost_Movement class and keep calling super() in that method. In this derived method you can use your new text field and integrate it in the process.


Источник: http://axstart.spaces.live.com/Blog/...C0A0!292.entry
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axStart: What methods are called when a runbaseBatch process is executed? Blog bot DAX Blogs 0 11.03.2008 20:05
Передача функции в качестве параметра lemchey_white DAX: Программирование 20 21.01.2008 22:51
axStart: don't extend AX foundation classes, you lose performance Blog bot DAX Blogs 6 09.01.2008 13:21
axStart: Making singleton objects from classes, DLL and CLR’s in AX. Blog bot DAX Blogs 2 04.01.2008 00:48
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:03.