Axapta 如何使用active()方法x++

Axapta 如何使用active()方法x++,axapta,microsoft-dynamics,x++,dynamics-365-operations,Axapta,Microsoft Dynamics,X++,Dynamics 365 Operations,好的,我做到了。它很好用。谢谢你的帮助。这是我的密码。现在我只需要以不同的形式调用我的命令按钮来禁用它并在那里创建一个信息。有人可以看看吗?在我的代码中,我得到了引用错误 [ExtensionOf(formdatasourcestr(ProdTableListPage, ProdTable))] final class ProdParmReportFinishedActiveWG_Extension { public int active() { int ret; next

好的,我做到了。它很好用。谢谢你的帮助。这是我的密码。现在我只需要以不同的形式调用我的命令按钮来禁用它并在那里创建一个信息。有人可以看看吗?在我的代码中,我得到了引用错误

[ExtensionOf(formdatasourcestr(ProdTableListPage, ProdTable))]
final class ProdParmReportFinishedActiveWG_Extension
{

 public int active()
{
    int ret;
    next Active();

    {
        ProdTable tableBuffer = this.cursor();
        ProdTable prodtable;


        if(tableBuffer.ProdId == tableBuffer.CollectRefProdId
             && tableBuffer.ProdStatus != ProdStatus::ReportedFinished)
            {
               select firstonly RecId,ProdId from ProdTable where
            ProdTable.CollectRefProdId == tableBuffer.ProdId
             && ProdTable.Prodstatus != ProdStatus::ReportedFinished
                && tableBuffer.RecId != prodtable.RecId;
            {
                    Global::info(strFmt("%1 , %2",
            prodtable.prodid, prodtable.recid));

                    // FormButtonControl mybutton = this.FormRun().design().controlname(formControlStr(ProdParmReportFinished, Ok)) as FormButtonControl;
                    //  mybutton.enabled(false);
            }

        }
        else
        {

            Global::info(strFmt("%1 , %2, %3, %4",
            tableBuffer.prodid, tableBuffer.CollectRefProdId, tableBuffer.InventRefType, tableBuffer.ProdStatus));
        }

    }
    return ret;
}

}

我希望每次用户更改其实际行时都使用此代码,但它只运行一次并应用于我的所有行

使用selectionChanged方法而不是active


事实上,在您认为应该使用active的大多数用例中,您可能正在寻找selectionChanged或OnSelectionChanged事件作为处理程序。

您可以共享完整的代码吗?添加了完整的代码。但我仍然需要对其进行修改。作为一项合理性检查,您是否尝试过添加类似infostrfmt%1、prodTable.RecId!=0; 在方法中,看看您的查询是否正确?@AlexKwitny此代码为我返回false。我在这里输入过多。我仍然想知道如何更新这个值,但我的目标不同。我没有使用overvrite默认值并禁用此字段,而是禁用了表单上的submit按钮。没有人可以继续它。至于扩展,我应该在最后一个类中使用fromstr还是formdatasoucestr?第二个问题是如何将当前行用于select语句?我需要检查选择的行始终使用x++编译时函数,如formdatasourcestr,以确保正确访问formrun和formdatasource对象的编译时检查。要循环遍历标记的网格记录,请使用此MultiSelectionHelper类。MultiSelectionHelper::createfromcaller或MultiSelectionHelper::Construction with parmFormDatasource取决于您的场景。您能给我看一个代码示例吗?我是x++新手,所以我很难编写这样的新代码。首先,我需要检查用户是否指向RefID=ProdID的行,然后我认为这更简单?只有这样,我才需要检查所有的RefID,即相同的ProdID但具有不同的ProdID 1 RefID始终具有相同的ProdID和其他一些ProdID。如果用户指向一行,我假设您的意思是触发OnSelectionChange事件。找到网格的数据源并为该事件创建一个新的事件处理程序。然后循环遍历需要与当前formdatasource.cursor记录进行比较的表的所有记录。此数据源网格的形式与ProdTableListPage不同。所以我需要创建两个最终类?一个用于此列表页,一个用于ProdParm?或者我可以从最后一个类运行代码,我需要签入ListPage,但实际更改需要在ProdParm中完成,只需禁用OK按钮并添加警告标签。