display method & edit method & cach display & sec
当我们在使用一个表做显示或操作时,需要用到另一个表的数据或该表的数据必须经过处理才可以显示时,可以考虑使用edit/display方法。
Display 方法:
修饰符display所修的方法,其返回值将被作为一个不可以修改的值在form和report上显示。如果你希望这个值可以被编辑,就是要edit方法。
<1> Display方法的书写位置:
Display修饰符可以被用于以下方法:
(1) Table下的方法
(2) Form下的方法
(3) Form data source下的方法
(4) Report下的方法
(5) Report design下的方法
Table下的display方法可以在多个form和report上重用。 Display 方法会在form被重绘时执行。不要在display方法上写复杂并且耗时的技术或操作。
被隐藏的tab页上的display方法不会被调用。并且,display方法可以被cach起来。
<2> 创建display方法
其格式如下:
将display修饰符放在返回值的前边,并且display方法必须有返回值。如:
display Amount amount()
当display方法被写在form data source下时,必须将data source作为参数传递给该display方法。当display的返回值被显示在form的grid control上时,需要将该display方法写在数据源下。如下:
display InventQty accumulated(InventBudgetInvent Budget)
除此之外,display方法不需要参数。
<3> 使用display方法
当作form control和report control上使用display方法时,控件的数据类型和display方法返回值的类型必须一致。
(1) 在form control上使用display
a) 设置control的DataSource属性为该display方法做在的dataSource。如果该属性为空,则默认该display方法被定义在form下。
b) 设置control的DataMethod属性为该display方法的方法名。
同时也可以设置control的ExtendedDataType和ArrayIndex属性。如果ExtendedDataType被设置,则该control会继承该EDT的格式、帮助信息等等。
如果该display方法返回一个array时,将ArrayIndex设置为0表示array的所有元素都会被显示在该control上。如果将ArrayIndex设置为一个非零正数n时,只有数组的第n个元素被显示。
(2) 在report control 上使用display
a) 设置control的Table属性为该display方法所属的table。如果该属性为空,默认该display方法是在report下被定义。
b) 设置control的DataMethod属性为该display方法的方法名。
可以参考:http://msdn.microsoft.com/en-us/library/aa595058(AX.10).aspx
二.Caching display方法
当display方法是在aos上做计算,或记录需要从服务器端传递到客户端时,可以通过cach来提高display方法的性能。
当数据被从后台数据库获取到后,display方法的的数据会被赋值,当form data source 调用reread方法时,这些数据会被刷新。
将一个display方法cach起来需要通过如下步骤:
1) 定位到使用该display方法的form上
2) Override该display方法所在的data source的Init方法,在该init方法的super()之后,调用FormDataSource.cacheAddMethod方法。cacheAddMethod方法的第一个参数是要被cach的display方法的方法名,第二个参数(默认为true)标识在一条记录被写到数据库时是否更新该display方法。
可以参考:http://msdn.microsoft.com/en-us/library/aa596691(AX.10).aspx
三. Edit 方法
被edit修饰符所修饰的方法,其返回值可以被显示在form上,同时用户可以编辑这个值。
<1> edit方法的书写位置:
a) Table下的方法
b) Form下的方法
c) Form data source下的方法
Table下的edit方法可以在多个form下重用。
当form在重绘时会调用edit方法,不要在edit方法中写复杂且耗时的操作。
被隐藏的tab页上的edit方法不会被调用。
<2> 创建edit方法
a) 在table下创建edit方法时,其格式如下:
edit FreeTxt txtDefault(boolean Set, FreeTxt Txt)
将edit写在返回值的前边,第一个参数是boolean类型,用于表示用户是否在control中输入或添加了值,第二个参数被用于存放用户所输入的值,该参数的数据类型必须和control的数据类型一致。
b) 在form下创建edit方法时,其格式如下:
edit Amount settle(boolean set, CustTrans _CustTrans, Amount U)
第一个参数是boolean类型,用于表示用户是否在control中输入或添加了值,第二个参数是该edit方法所在的data source,第三个参数用于存放用户所输入或编辑的值,该参数的数据类型必须和control的数据类型一致。
Edit方法也必须有返回值。
<3>edit方法的使用:
当作form control和report control上使用edit方法时,控件的数据类型和edit方法返回值的类型必须一致。
(1) 在form control上使用edit
c) 设置control的DataSource属性为该edit方法做在的dataSource。如果该属性为空,则默认该edit方法被定义在form下。
d) 设置control的DataMethod属性为该edit方法的方法名。
同时也可以设置control的ExtendedDataType和ArrayIndex属性。如果ExtendedDataType被设置,则该control会继承该EDT的格式、帮助信息等等。
如果该edit方法返回一个array时,将ArrayIndex设置为0表示array的所有元素都会被显示在该control上。如果将ArrayIndex设置为一个非零正数n时,只有数组的第n个元素被显示。
可以参考:http://msdn.microsoft.com/en-us/library/aa637541(AX.10).aspx
四.数据的保密性
内核会自动执行Record level security检查,但当时有display和edit方法时会绕过Record level security检查,而在display和edit方法中可以访问一下不在权限内的数据,如果直接将这些数据显示出来,就会失去数据的保密性。所以在使用display和edit方法时,需要显示的做安全检查(如果需要的话)。
详细可参考:http://msdn.microsoft.com/en-us/library/aa879172(AX.10).aspx