AX2009更新表单字段值

时间:2018-02-08 11:03:09

标签: axapta x++ dynamics-ax-2009

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

例如,此字段最好使用字段数字序列代码最大的连接值进行更新。

enter image description here

1 个答案:

答案 0 :(得分:0)

经过一段时间的思考,我决定更改基础表 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;
    }
} 

我以前的解决方案涉及覆盖表单字段上的“输入”方法。但是,这不符合最佳做法。出于信息目的,我在这里粘贴了最初的解决方案。

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();
    }
}