LedgerJournalEngine和LedgerJournalCheckPost

axapta dynamics-ax-2009 microsoft-dynamics

3714 观看

3回复

82 作者的声誉

我正在使用C#创建和发布Dynamics AX Ledger日记帐。

我想使用AX附带的两个辅助类,

LedgerJournalEngine和LedgerJournalCheckPost,用于验证我创建的期刊。

我的问题是:

1.)你如何获得错误列表 - >来自这些课程或其他课程的学券?

2.)你能模拟AX交易中的帖子并将其回滚吗?

2-a。)如果您回滚交易中的帖子,AX是否足够聪明,可以重复使用已回滚的凭证号码?

作者: tradotto 的来源 发布者: 2011 年 7 月 27 日

回应 (3)


1

16656 作者的声誉

你考虑过使用AIF吗?

如果您坚持直接致电AX,这是一种简单的方法:

创建静态X ++方法并调用它们:

  1. 用于创建期刊
  2. 用于创建日记帐行,将字段作为参数
  3. 发布日记,返回infolog(作为字符串)

让AX方法使用分类帐过帐类进行管道处理。

发布是全部或全部(可能将错误行传输到新期刊)。如果出现错误,将重复使用凭证号码。这意味着,我猜,凭证编号是在发布时分配的,可以在期刊名称上设置。

可以将infolog返回值转换为字符串以简化C#端。

要转换为字符串的X ++代码:

client server static str infoCon2List(container c)
{
    TextBuffer t = new TextBuffer();
    str info;
    int i;
    int n;
    for (i = 1; i <= conlen(c); i += 2)
    {
        info = conpeek(c,i+1);
        n = strFind(info,'\t',strLen(info),-99999);
        t.appendText(strFmt('%1\t%2\t%3\n', conpeek(c,i), n > 1 ? strReplace(subStr(info,2,n-2), '\t', '\\') : '', substr(info,n+1,9999)));
    }
    return t.getText();
}

打电话的方式:

int e = infolog.num();
try
{
    doThePosting(...);
}
catch //anything
{
    exceptionTextFallThrough();
}
return Info::infoCon2List(infolog.copy(e+1,infolog.num()));
作者: Jan B. Kjeldsen 发布者: 27.07.2011 01:59

1

82 作者的声誉

决定

我结束了:

public static ERSImport_Errors PostJournal(int64 _journalRecID)
{
    LedgerJournalTable          ledgerJournaltable;
    LedgerJournalCheckPost      ledgerJournalCheckPost;
    LedgerJournalID             errorJournalID;
    LedgerJournalEngine         lje;
    ERSImport_Errors             errors;

    boolean                     ret = true;//True we posted this journalRecID
    LedgerJournalTrans          ledgerJournalTrans;
    ;

    errors = new ERSImport_Errors();
    select crosscompany ledgerjournaltable where ledgerjournaltable.RecId == _journalRecID;

    if(ledgerJournalTable == null)
        throw error("Could not find ledger journal table provided");

    changecompany(ledgerJournalTable.dataAreaId)
    {
        ledgerJournalCheckPost = LedgerJournalCheckPost::newLedgerJournalTable(ledgerJournalTable,NoYes::Yes,NoYes::No);
        lje = LedgerJournalEngine::construct(ledgerJournalTable.JournalType);
        lje.newJournalActive(ledgerJournalTable,true);
        ledgerJournalCheckPost.parmLedgerJournalEngine(lje);
        try
        {
            ledgerJournalCheckPost.run();
        }
        catch
        {
            while select ledgerJournalTrans where ledgerJournalTrans.JournalNum == ledgerJournalTable.JournalNum
            {
                if(lje.errorExists(ledgerJournalTrans.Voucher))
                {
                    errors.addError(lje.errorLog(ledgerJournalTrans.Voucher),ledgerJournalTrans.RecId);
                }
            }
        }
    }
    return errors;
}
作者: tradotto 发布者: 29.07.2011 12:53

0

1 作者的声誉

你能分享一下你的“ERSImport_Errors()”类代码吗?

谢谢,迈克

作者: Mike 发布者: 05.07.2019 11:42
32x32