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