客户端界面绑定一数据集(FF_ClientRecordSet),在编辑一条新记录时,需要按照业务规则显示默认值。由于新记录不是从后台数据库返回的,而是客户端通过调用FF_ClientRecordSet::Append()添加的,因此不能利用数据库的默认值特性。
前台新记录默认各字段为NULL,若要为字段赋予初始值,有3种方法。
1)通过宿主代码访问FF_ClientRecordSet类修改新记录的值
该方法需要修改宿主代码,而且字段名等都是跟业务相关的,因此修改后的代码也是与业务相关的,不具备通用性。在客户化模块中使用该方法是合理的。
2)通过脚本访问FF_ClientRecordSet类修改新记录的值
开发平台暂时没有开放FF_ClientRecordSet类的各种访问接口
3)支持客户端数据集的默认值(CDefault)特性,类似数据库的默认值,当在客户端新增记录时,给具有默认值的字段赋予初始值。
例如:
<Field Name="编码类型" Code="tb_gdsn_jjy_extern_attr.goodsTypeID" Type="Int" CDefault="1"/>
该示例说明:编码类型字段的客户端默认值为1.当客户端调用FF_ClientRecordSet::Append方法新增记录,新记录的编码类型字段值初始为1。
CDefault属性是Client Default的缩写,意为客户端默认值。之所以区分客户端默认值,是因为考虑到未来可能扩展到服务器默认值,因此提前增加区分标志便于日后系统升级。
实现细节:
FF_ClientRecordSet通过vcl的TClientDataSet实现,其字段基类TField的DefaultExpression属性可以设置默认值。
以下为DefaultExpression属性的说明:
Set DefaultExpression to provide a default value for a field. DefaultExpression can be any valid SQL value expression that does not refer to field values. If the expression contains literals other than numeric values, they must appear in quotes.
注意:
通过以下方式设置字段,将不能设置字段的部分属性,
ClientDataSet1->FieldDefs->Add("OrderNo",ftFloat);
正确的方式是new一个TField的子类,如TFloatField,然后添加到记录集中,代码如下:
TFloatField* Field = new TFloatField(NULL);
Field->FieldName = "编码类型";
Field->DefaultExpression = "1";
Field->DataSet = ClientDataSet;