AX2009更新表单字段值

AX2009 update form field value

我想自动更新 NumberSequenceTable 表单的 Format 字段。目的是在手动输入数据时帮助用户。

例如,最好使用 号码序列代码 最大 .

字段的串联值更新此字段

考虑了一会儿后,我决定更改 底层 table NumberSequenceTable。我通过向现有的 switch 语句添加另一个 case 来更改其 "modifiedField" 方法。我认为这是在这种情况下公认的最佳做法:

public void modifiedField(fieldId _fieldId)
{
    #Define.DefaultCleanInterval(24)
    #Define.DefaultCacheSize(10)

    str sequenceFormat;


    super(_fieldId);

    switch (_fieldId)
    {
        ....

        //BEGINING
        case fieldnum(NumberSequenceTable, NumberSequence):
            if (this.NumberSequence && this.Highest && !this.Format)
            {

               sequenceFormat = System.Text.RegularExpressions.Regex::Replace(int2str(this.Highest), "[0-9]", "#");
               this.Format = strFmt("%1_%2",this.NumberSequence, sequenceFormat);

            }
            break;
         //END 

        default :
            break;
    }
} 

我之前的解决方案涉及覆盖表单字段上的"enter"方法。然而,这不符合最佳实践。出于信息目的,我将初始解决方案粘贴到此处。

public void enter()
{
    str sequenceNode;
    str sequenceValue;
    str maxValue;
    str formatValue;
    ;

    super();


    //Get required fields value
    sequenceNode = numberSequenceTable_ds.object(fieldnum(NumberSequenceTable,NumberSequence)).getValue();
    maxValue = numberSequenceTable_ds.object(fieldnum(NumberSequenceTable,Highest)).getValue();
    formatValue = numberSequenceTable_ds.object(fieldnum(NumberSequenceTable,Format)).getValue();

    if(sequenceNode && maxValue && !formatValue) {

    //Match regex pattern
    maxValue =  System.Text.RegularExpressions.Regex::Replace(maxValue, "[0-9]", "#");
    sequenceValue = strFmt("%1_%2",sequenceNode,maxValue);

    //Change field value
    numberSequenceTable_ds.object(fieldnum(NumberSequenceTable,Format)).setValue(sequenceValue);
    this.update();
    }
}