字段校验
- 在D365项中新建一个Table。
- 双击点开,选择Methods->Override->validateField
- 以表名称位TestTable举例,假设其拥有Id(Integer),Name(str),Age(Integer) 三个字段
初始代码为:
public boolean validateField(FieldId _fieldIdToCheck)
{
boolean ret;
ret = super(_fieldIdToCheck);
// 若super校验正确进入自定义校验
return ret?ret:Your_Class::function1(this, _fieldIdToCheck);
}
将校验逻辑添加至super方法之后,例如在此判断Name和Age在修改或者插入时是否符合规则,则Your_Class代码示例为:
public class Your_Class
{
public static boolean function1(TestTable _line,FieldId fieldId)
{
// 若修改的是Name字段的值,判断当前所选中修改后的行数据的Name是否大于20
if (fieldId == fieldNum(TestTable, Name))
{
return strLen(_line.Name)>20;
}
// 若修改的是Age字段的值,判断Age
if (fieldId == fieldNum(TestTable, Age))
{
return _line.Age <= 100 && _line.Age >= 18;
}
}
}
注意,此方法将在数据校验时调用,避免在这个方法中的super()被调用前直接更新数据,保证安全性
绑定更新
- 依旧以TestTable举例,此时我们为其添加三个新的字段A(Integer),B(Integer)和C(Integer)并要求在A或B更新值时自动更新C的值使A+B=C
- 进入TestTable,选择Methods->Override->modifiedField
- 与数据校验相似,我们将modifiedField简化为以下代码
public void modifiedField(FieldId _fieldId)
{
super(_fieldId);
Your_Class::function2(this, _fieldId);
}
- 在Your_Class中添加新的方法function2:
public static void function2(TestTable _line,Field _field)
{
if (_field == fieldNum(TestTable, A) || _field == fieldNum(TestTable, B))
{
// 当更新的字段为A或者B时,自动计算C的值
_line.C = _line.A+_line.B;
}
}