使用CustVendOpenTransManager进行VendTransOpen标记

时间:2015-12-17 16:00:45

标签: axapta microsoft-dynamics dynamics-ax-2012 dynamics-ax-2012-r3

我在VendOpenTrans上有一个按钮并实现了它的点击方法。

我认为这会有效,但我得到一个例外并且AX关闭..

void clicked()
{
   LedgerJournalTrans ledgerJournalTrans;
   VendTransOpen vto;

   super();

   switch (originator.TableId)
   {
      case tableNum(LedgerJournalTrans):
          ledgerJournalTrans = element.args().record();
    }



for ( vto = vendTransOpen_ds.getFirst(0); vto; vto = vendTransOpen_ds.getNext() )
{
    //vendTransOpen_ds.markRecord(vto, 1);
    if (vto.RecId)
    {
        if (manager.getTransMarked(vto) == NoYes::No)
        {
           select Invoice from vendTrans
               where vto.AccountNum == vendTrans.AccountNum &&
                 vto.RefRecId == vendTrans.RecId;

              if (ledgerJournalTrans.Invoice == vendTrans.Invoice)
              {
                // Mark transaction for settlement
                 showError = NoYes::No;
                 manager.updateTransMarked(vto, NoYes::Yes);
                 showError = NoYes::Yes;
              }
          }
      }

    // Update dynamic controls & refresh form as auto-redraw is not triggered
     element.updateDesignDynamic();
     element.redraw();

 }
vendTransOpen_ds.refreshEx(-2);
}

如果我注释掉以下行,它将起作用,基本上标记网格中的所有行。

//select Invoice from vendTrans
     //where vto.AccountNum == vendTrans.AccountNum &&
          //vto.RefRecId == vendTrans.RecId;

//if (ledgerJournalTrans.Invoice == vendTrans.Invoice)
//{
     // Mark transaction for settlement
        showError = NoYes::No;
        manager.updateTransMarked(vto, NoYes::Yes);
        showError = NoYes::Yes;
//}

所以,更明确的是, manager.updateTransMarked(vto,NoYes :: Yes);

这样,它有效。据我所知,当我添加select时会发生一些事情。

使用debug我能够检查它,我认为for循环抛出异常..

有没有机会对此有所暗示?

1 个答案:

答案 0 :(得分:2)

尝试将for循环定义更改为:

for (vto = vendTransOpen_ds.getFirst(0) ? vendTransOpen_ds.getFirst(0) : vendTransOpen_ds.cursor(); vto; vto = vendTransOpen_ds.getNext())

并改变这一点:

select Invoice from vendTrans
    where vto.AccountNum == vendTrans.AccountNum &&
          vto.RefRecId == vendTrans.RecId;

    if (ledgerJournalTrans.Invoice == vendTrans.Invoice)
    {

对此:

if (ledgerJournalTrans.Invoice == vto.vendTrans().Invoice)