动态ax x ++网格修改方法

时间:2016-09-21 12:17:21

标签: axapta x++

我想问一个问题。

让我们说我有一个网格形式。在这个网格中我有两个字段。第一个字段是orderId,第二个字段是invoiceId。 每个字段都有一个重载的修改方法。

让我们说我的要求是,如果你在第一个字段中填写orderId,那么invoiceId应该自动填写在字段2中。同样应该以对立的方式发生。如果我填写invoiceId,那么自动相关的orderId应该在field1中自动完成。

例如,如果注释掉一个方法的相关代码,那么工作正常,但只能在一个方向上进行。

但如果我希望它能为两个方向工作,我的斧头客户就会停止工作。 通过修改后的方法看起来像无限循环,debuger无法帮助我。

我的决定是......对于这种修改后的方法是否存在重叠问题的适当解决方案?

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有关..但已经解决了它们。

非常感谢,

尼科斯

1 个答案:

答案 0 :(得分:3)

您的modified方法在可能的方法开头没有调用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方法的位置移动到它们真正属于的表本身。