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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.06.2012, 13:39   #1  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от yuh Посмотреть сообщение
Отсюда - другой вопрос: а как это происходит в AX? Нечто подобное? И если да, то какие именно классы используются для создания журналов?
Например, вот набросок кода создания журнала платежей для какой-то старой версии Аксапты:

X++:
void createIncomingJournal()
{

LedgerJournalNameId incomingName;
LedgerJournalTable incomingJournal;

ledgerJournalTrans incomingTrans;
ledgerJournalTrans ledgerJournalTrans;

LedgerJournalEngine ljeIn;
LedgerJournalEngine ledgerJournalEngine;

NumberSeq numSeq;
ProjTable projTable;
RContractTable rct;
RContractPartnerType rctType;

;

ttsbegin;
select forupdate incomingJournal;
incomingJournal.clear();
incomingJournal.initValue();
incomingJournal.JournalName=incomingName;
incomingJournal.insert();

ljeIn = new BMLedgerJournalEngine(null);
ljeIn.newJournalActive(incomingJournal);

if(ljeIn)
{
while select lines
    {
        ledgerJournalTrans=incomingTrans;
        ledgerJournalEngine=ljeIn;
        select forupdate ledgerJournalTrans;
        ledgerJournalTrans.clear();

        ledgerJournalTrans.TransDate=lines.PaymDate;
        ledgerJournalTrans.currencyCode=lines.CurrencyID;
        ledgerJournalTrans.ExchRate=lines.ExchRate;

        ledgerJournalTrans.initValue();
        ledgerJournalTrans.JournalNum=incomingJournal.JournalNum;
        ledgerJournalEngine.numberSeqFormHandlerJournal().parmLedgerJournalTrans(ledgerJournalTrans);
        ledgerJournalEngine.formMethodDataSourceCreatePost();
        ledgerJournalEngine.initValue(ledgerJournalTrans);

        ledgerJournalTrans.TransDate=lines.PaymDate;
        ledgerJournalTrans.currencyCode=lines.CurrencyID;
        ledgerJournalTrans.ExchRate=lines.ExchRate;

        ledgerJournalTrans.accountType=lines.AccountType;
        ledgerJournalTrans.AccountNum=lines.Account;
        ledgerJournalTrans.offsetAccountType=lines.offsetAccountType;
        ledgerJournalTrans.OffsetAccount=lines.offsetAccount;

        if(AmountDebit)
            ledgerJournalTrans.AmountCurDebit=lines.AmountDebit;
        else if(AmountCredit)
            ledgerJournalTrans.AmountCurCredit=lines.AmountCredit;

        ledgerJournalTrans.Txt=lines.TransTxt;
        ledgerJournalTrans.DocumentNum=lines.DocumentNum;
        ledgerJournalTrans.DocumentDate=lines.PaymDate;

        ledgerJournalTrans.validateWrite();
        ledgerJournalEngine.preWrite(ledgerJournalTrans);
        ledgerJournalEngine.formMethodDataSourceWritePre();
        ledgerJournalTrans.write();
        ledgerJournalEngine.write(ledgerJournalTrans);
    }
}
ttscommit;
if(ljeIn)
    info(strfmt("Создан журнал входящих платежей %1", incomingJournal.JournalNum));
}
Но тут повезло, что был класс BMLedgerJournalEngine. В общем, еще раз повторю - бизнес логика может быть и на форме и в этом случае будут вызываться не только табличные триггеры. Ну вот разве в NAV не так? Обратите внимание на вызов различных "formMethod". Некоторые из подобных классов без открытия формы и не инициализируешь.

Цитата:
Сообщение от yuh Посмотреть сообщение
Олег, спасибо за ответ! Я когда это прочитал, чуть было сам не засомневался. А потом еще раз подумал и утвердился: да, именно так и происходит в NAV!
Поспрашивал коллег, занимающихся NAV. У них другое мнение. В сферическом идеальном случае да, вызывать табличные триггеры достаточно. Но так это и в AX так. А в реальности бывает и код на формах, который при вызове табличных триггеров, естественно, не сработает.
Старый 06.06.2012, 13:58   #2  
yuh is offline
yuh
Участник
 
14 / 10 (1) +
Регистрация: 30.08.2011
Цитата:
Сообщение от oip Посмотреть сообщение
Поспрашивал коллег, занимающихся NAV. У них другое мнение.
Ну вот, а я бросился было искать мануалы, научающие девелоперов всегда располагать код бизнес-логики в таблицах; при программном создании записей всегда вызывать OnValidate, OnInsert и OnModify;...
По крайней мере, так нас учили раньше и гордо называли это "Navision Way".
Может, с выходом более поздних версий что-то поменялось, и теперь этот путь уже не такой прямой
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: New Content for Microsoft Dynamics AX 2012 : October 2011 Blog bot DAX Blogs 0 27.10.2011 17:11
axinthefield: Dynamics AX Event IDs Blog bot DAX Blogs 0 01.03.2011 22:11
daxdilip: Whats New in Dynamics AX 2012 (A brief extract from the recently held Tech Conf.) Blog bot DAX Blogs 7 31.01.2011 12:35
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
Arijit Basu: AX 2009 - Quick Overview Blog bot DAX Blogs 4 19.05.2008 14:47

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

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

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