有关知识点

工作流讲究的是数据在用户之间高效流转,如果设计的时候,多多针对单行处理,会比处理整个表更加高效。
例如某行编辑完毕,需要保存此行以流转到下一流程,显然单单保存此行会比保存整个表快很多。
FoxTable的DataRow和Row均有以下方法,用于处理单行数据:

方法 说明
Save 保存此行
Load 重新加载此行
Reject 撤销对此行的修改
Remove 移除此行

通过DataRow或Row执行上述方法,效果是一样的,实际上通过Row执行上述方法的时候,调用的就是DataRow的同名方法。
同时为Row和DataRow提供这些方法,虽然有些冗余,但有利于简洁编码。

此外工作流还需要及时从后台加载待处理的数据,显然用追载的方法,将后台新增待处理数据追加到表中,比重新加载整个表要高效很多。

DataTable的AppendLoad方法用于追载数据,语法:

AppendLoad(Filter,Save)

Filter:字符型,用于设置追载条件。
Save: 可选参数,逻辑型,是否在追载数据前先保存现有数据,默认为True,既先保存后追载。

AppendLoad会返回一个集合,包含所有追载的行(DataRow)。

需要注意的是:

1、必须确保即将追载的行,并不存在于表中,也就是这些行之前并未加载,否则将报错。
2、AppendLoad适合追载少量数据,大量数据一般用Load重新加载。

示例:

假定甲、乙两个用户同时编辑表A,甲负责增加行,并输入部分列的数据,乙负责输入其它列的数据。
我们需要为乙用户设计一个按钮,用于将打开项目以来,甲用户新增加的行追载到表中,按钮的代码为:

Dim id As Integer = DataTables("表A").Compute("Max(_Identify)")
Dim
Filter As String = "[_Identify] > " & id
DataTables
("表A").AppendLoad(Filter, False
)

上述代码先计算出表A中"_Identify"列的最大值,然后从后台追载"_Identify"列的值大于此最大值的行,这些行就是甲用户新增加的行。

提示:甲用户新增行并输入数据后,必须保存,乙用户才可追载此新增加的行,这是因为AppendLoad是从后台追载的,如果新增行没有保存,后台就不存在此行, 乙用户也就谈不上追载了。


本页地址:http://www.foxtable.com/webhelp/topics/2279.htm