Axapta 动力学ax x++;网格修正法

Axapta 动力学ax x++;网格修正法,axapta,x++,Axapta,X++,我想请求撤销 假设我有一个表格。在这个网格中,我有两个字段。第一个字段是orderId,第二个字段是invoiceId。 每个字段都有一个重载的修改方法 假设我的要求是,如果您在第一个字段中填写orderId,那么invoiceId应该自动填写在字段2中。同样的事情也应该以相反的方式发生。如果我填写了invoiceId,那么相关的orderId应该自动位于field1中 例如,如果注释掉一个方法的相关代码,则可以很好地工作,但只能在一个方向上工作 但如果我想让它双向工作,我的ax客户端就停止工作

我想请求撤销

假设我有一个表格。在这个网格中,我有两个字段。第一个字段是orderId,第二个字段是invoiceId。 每个字段都有一个重载的修改方法

假设我的要求是,如果您在第一个字段中填写orderId,那么invoiceId应该自动填写在字段2中。同样的事情也应该以相反的方式发生。如果我填写了invoiceId,那么相关的orderId应该自动位于field1中

例如,如果注释掉一个方法的相关代码,则可以很好地工作,但只能在一个方向上工作

但如果我想让它双向工作,我的ax客户端就停止工作。 看起来像是通过修改的方法进行无限循环,调试程序无法帮助我

我的假设是…这个修正方法重叠问题有没有合适的解决方案

modified()// method for invoice Field
{
   SalaryProvRevisions table = SalaryProvRevisions_ds.getFirst(1) ?    SalaryProvRevisions_ds.getFirst(1) :SalaryProvRevisions_ds.cursor();
   table.OrderId=SalarayProvInvoiceHandler::getOrderIds(table.InvoiceId);
.
.
.
.
}

modified()// method for ordeid field
{
   SalaryProvRevisions table = SalaryProvRevisions_ds.getFirst(1) ? SalaryProvRevisions_ds.getFirst(1) : SalaryProvRevisions_ds.cursor();
   table.InvoiceId=SalarayProvInvoiceHandler::getInvoiceId(table.OrderId);
.
.
.
.
}
当然,这个故事还有其他一些问题,比如一个orderId可能与很多invoiceid相关。。但是已经解决了

非常感谢


Nikos

您的
修改的
方法在方法开始时没有调用
super()
,这可能是原因。此外,由于缺少返回类型,您无法编译列出的方法

我建议您在表的
modifiedField
方法中进行自定义

public void modifiedField(FieldId _fieldId)
{
    super(_fieldId);
    switch (_fieldId)
    {
        case fieldnum(SalaryProvRevisions, OrderId):
            this.InvoiceId = SalaryProvRevisions::getInvoiceId(this.OrderId);
            break;
        case fieldnum(SalaryProvRevisions, InvoiceId):
            this.OrderId = SalaryProvRevisions::getOrderId(this.InvoiceId);
            break;
    }
}

我会将get方法的位置移到它们真正属于的表本身。

是的,我将其移到表级别,效果很好。我认为您也是正确的……getInvoiceId和getOrderId方法也应该在表中。谢谢。