中。
创建存储过程
AD_PInstance和AD_PInstance_Para表
应用程序中调用存储过程都需要在表AD_PInstance中注册。表AD_PInstance_Para中存放了报表和流程窗口中相应的存储过程的参数的值。
表AD_PInstance:
AD_PInstance_ID:表的标识符。
AD_Process_ID:与在应用程序字典中存放存储过程信息的表AD_Process相关联的外键。
Record_ID:如果在窗口中调用存储过程,这一列存放当前记录的ID。
IsProcessing:存储过程在执行中时这一列为“Y”。有些存储过程会检查相关的存储过程是否正在运行。
AD_User_ID:调用存储过程的用户ID。
Result:存放存储过程运行的结果。
ErrorMsg:存放存储过程输出的信息。
表AD_PInstance_Para:
Parametername:对应于数据库列名的参数名称。
P_String和P_String_TO:当字段是文本框或列表框时插入的值。
P_Number和P_Number_TO:当字段是数字框或外键时插入的值。
P_Date和P_Date_TO:当字段是日期型时插入的值。
Info和Info_TO:
当参数定义为一个范围内的值而不是指定的一个值时用_TO的后缀。使用这个参数生成的弹出窗口会有两个标签为From和To的字段。之后可以按其中的值来过滤
查询结果。
存储过程的输入参数
应用程序调用存储过程时仅传递一个参数到数据库,就是对应的AD_PInstance_ID。
我们需要一个中介存储过程来从应用程序或一个不同的存储过程来调用另一个存储过程。因为从一个存储过程调用另一个存储过程时是不知道AD_PInstance_ID的。可以参考C_Order_Post和C_Order_Post1。主存储过程调用时需要有足够的参数,包括AD_PInstance_ID。被调用的中介存储过程仅有一个关于AD_PInstance的参数。这个存储过程仅有一个到主存储过程的调用,其中除了AD_PInstance其余参数都是空的。在主存储过程中必须区分AD_PInstance是否为空来管理调用的结果和输出信息。
从AD_PInstance表中获取有用的信息
在存储过程的开始我们也许会想要从AD_PInstance和AD_PInstance_Para两个表中知道一些必须的信息保存到变量中。如果没有参数那么用SELECT就可以了。如果有多个参数那么可能需要使用游标。参见C_Debt_Payment_Create。
Record_ID存放窗口中当前的活动记录的ID(如当处理Order时的C_Order_ID)。如果存储过程中有Update或Insert子句,AD_User_ID可以用于验证用户权限。
AD_Update_PInstance存储过程
该存储过程用于更新AD_PInstance的状态。其他存储过程必须在开始和结束时调用该存储过程。
参数:
p_PInstance_ID:将要被更新的AD_PInstance_ID。
p_AD_User_ID:执行更新的AD_User_ID。
p_IsProcessing:存储过程的状态。
p_Result:存储过程的结果。
p_Message:存储过程的输出信息。
在开始调用时设置Processing='Y':
AD_UPDATE_PINSTANCE(p_PInstance,NULL,'Y',NULL,NULL);
在结整调用或引发例外时需要设置Processing='N'和相应的执行结果和输出信息:
AD_UPDATE_PINSTANCE(p_PInstance_ID,v_User,'N',v_Result,v_Message);
存储过程执行的结果有3种。按不同的结果会显示不同的包含输出信息的对话框。结果为0表示错误(红色对话框),1表示成功(绿色对话框)和2表示警告(黄色对话框)。如果输出信息是NULL将作为成功来处理。
例外和错误管理
存储过程的错误信息只能依靠对应的AD_PInstance的结果来管理。所以所有的例外必须被正确的处理。
当在存储过程中触