如何从x ++创建表单数据源中的新记录

时间:2013-08-12 10:04:34

标签: dynamics-ax-2009 axapta

表单Journal Voucher(AR> Journal> PaymentJournal>点击按钮Lines)。我想从x ++代码创建一个新记录。

我在按ctrl+n时调用的形式为viz create(),initvalue(),ledgerJournalEngine_custPayment等等,这些方法很少见。我们如何通过x ++代码使用这些方法来使用标准功能创建记录。

帮助。

3 个答案:

答案 0 :(得分:3)

在您详细阐述之前,我认为您正在尝试创建自己的自定义表单来扩展日记功能。如果您只是尝试创建工具,则只需创建一个新的Settlement Using Cust Group按钮即可。在单击的事件中,调用您的事务标记表单或您执行的任何操作以获取要使用的事务。然后把这样的东西放进去:

void clicked()
{
    ;

    element.lock();

    super();

    // Put your code here to call the open transaction editing code

    // CREATE THIS CUSTOM METHOD on C\LedgerJournalEngine_CustPayment\settleTransCustGroup
    ledgerJournalEngine.settleTransCustGroup(ledgerJournalTable);

    ledgerJournalTrans_ds.active();
    ledgerJournalTrans_ds.reread();
    ledgerJournalTrans_ds.executeQuery();

    //recalculate balances
    ledgerJournalEngine.newJournalActive(ledgerJournalTable, true);
    element.firstField();
    element.unLock();
}

然后在你创建的新方法中,我命名为settleTransCustGroup,你可以在testLedgerJournalSpecTrans建模中循环你的记录,类似于这个(在引擎类上创建的自定义方法):

void settleTransCustGroup(LedgerJournalTable    _ledgerJournalTable)
{
    LedgerJournalTrans      ledgerJournalTrans;
    ;
    // Turn this stuff into a loop and default whatever else you need
    ledgerJournalTrans.clear();
    ledgerJournalTrans.initValue();
    ledgerJournalTrans.AccountNum = '100003';
    ledgerJournalTrans.AmountCurCredit = 10;
    this.initValue(ledgerJournalTrans);
    ledgerJournalTrans.insert();
    this.write(ledgerJournalTrans);

    ledgerJournalTrans.clear();
    ledgerJournalTrans.initValue();
    ledgerJournalTrans.AccountNum = '100005';
    ledgerJournalTrans.AmountCurCredit = 15;
    this.initValue(ledgerJournalTrans);
    ledgerJournalTrans.insert();
    this.write(ledgerJournalTrans);
}

答案 1 :(得分:1)

通常,您的X ++代码看起来像这样:

static void InsertRecord(Args _args)
{
    LedgerJournalTrans  ledgerJournalTrans;
    ;

    ledgerJournalTrans.AccountNum = "10000";
    ledgerJournalTrans.AmountCurCredit = 50.64;
    ledgerJournalTrans.AccountType = LedgerJournalACType::Ledger;
    ledgerJournalTrans.insert();
}

您可以根据需要替换字段和值。如果缺少任何字段,错误将显示在infolog中(例如,如果您要运行上述操作,则会出现“必须指定货币代码”错误),因此请确保解决所有必填字段。

在大多数情况下,您还可以在分配值之前调用ledgerJournalTrans.initValue();,以使用默认的AX值预先填充记录。我相信这与您在表单上使用Ctrl + N时看到的内容相同。在上面的示例中,这样做将导致填写货币代码,并且正确保存记录(至少在我们的系统上)。

答案 2 :(得分:1)

在其他评论中引用的框架中没有神奇的方法来调用标准功能。对于每种分类帐类型(会计,库存,订单,付款等),创建和初始化行的方式不同,如果您希望日记帐正确发布,则必须按照这种特定方式进行操作。

在Google的X ++代码中有很多例子可以为几乎所有类型的代码插入日记帐事务。这并不容易,但至少它总是几乎相同的代码,并且可以很容易地重复使用。