使用 CustVendOpenTransManager 标记 VendTransOpen

VendTransOpen marking with CustVendOpenTransManager

我在 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.

时会发生一些事情

使用调试我能够检查它,我认为异常是由 for 循环抛出的..

是否有机会得到关于此的提示?

尝试将您的 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)