D365勉強メモ 変更処理

項目変更の実装

■ハンドラ実装

[ExtensionOf(formStr(MainAccount))]
final class salesTablexxx_Extension
{
  [FormControlEventHandler(formControlStr(salesTable, salesTable_xxxFields), FormControlEventType::Modified)]
    public static void salesTable_xxxFields_OnModified(FormControl sender, FormControlEventArgs e)
    {
        boolean allowEdit = true;

      // レコード対象
        salesTable salesTable = sender.formRun().dataSource().cursor();
        // データソース対象
        FormDataSource salesTable_ds = sender.formRun().dataSource();

        //  "はい"の場合
        if (salesTable.salesTable_xxxFields)
        {
            // 入力不可
            salesTable.salesTable_xxxFields = null;
            allowEdit = false;
        }

        // salesTable_xxxFields制御
        salesTable_ds.object(fieldnum(salesTable, salesTable_xxxFields)).enabled(allowEdit);
   }
}

-----------------------------------------------------------------------------------------------

プロジェクトにより、メソッドで実装するのが要求されること。

■メソッド実装(1)

 

[ExtensionOf(formControlStr(salesTable, salesTable_xxxFields))]
internal final class salesTableForm_xxxFields_Extension
{
    /// <summary>
    /// xxxFields 変更後処理
    /// </summary>
    /// <returns>ret</returns>
    public boolean modified()
    {
        boolean ret;
        ret = next modified();

        boolean allowEdit = true;

        // Control
        FormControl fctrl = any2Object(this) as FormControl;
        // form
        FormRun fr = fctrl.formRun();

        // dataSource
        FormDataSource fds = fr.dataSource(tableStr(salesTable));

        //  "Yes"の場合
        if (this.value() == NoYes::Yes)
        {
            // 入力不可
            fds.object(fieldNum(salesTable, xxxFields)).setValue('');
            allowEdit = false;
        }

        // 制御
        fds.object(fieldNum(salesTable, xxxFields)).enabled(allowEdit);

        return ret;
    }
}

-----------------------------------------------------------------------------------------------

■メソッド実装(2)

テーブル項目に対するバリデーションや、変更など共通的な処理は、データソースなかに実装すること。

[ExtensionOf(formDataFieldStr(salesTable, salesTable, fields))]
internal final class salesTable_salesTable_fieldsxxx_Extension
{
    public void modified()
    {       
        boolean allowEdit = true;
        FormDataObject df = any2Object(this) as FormDataObject;

        next modified();

        FormDataSource ds = df.datasource();
        salesTable salesTable = ds.cursor();

        if(salesTable.fields)
        {
            ds.object(fieldNum(salesTable, fields)).setValue('');
            allowEdit = false;
        }

         ds.object(fieldnum(salesTable, fields)).enabled(allowEdit );
    }

}