SBO_SP_TransactionNotification这个存储过程主要应用于页面操作(数据库操作)的放行和阻止。当返回0时放行(commit),当返回1时阻止(回滚)。
-- ADD YOUR CODE HERE if @object_type=‘22‘ and @transaction_type in (‘A‘,‘U‘) /*开始-判定是否超过价格清单中的价格*/ BEGIN declare @visorder nvarchar set @visorder=(select top 1 T1.visorder+1 from --查找行号 OPOR T0 INNER JOIN POR1 T1 ON T0.DocEntry = T1.DocEntry --订单主表和从表关联 where (T1.DocEntry=@list_of_cols_val_tab_del) --条件1,从表主键等于传进来的主键值 AND ISNULL(T0.U_owtm,-1)<>1 --条件2,非审批提交 and (T1.INMPRICE+T1.LineVat/T1.Quantity --条件3,税后价格 >ISNULL((select T2.Price from ITM1 T2 where T2.PriceList=(SELECT TOP 1 T3.ListNum FROM dbo.OCRD T3 WHERE T3.CardCode=T0.CardCode) and T1.ItemCode=T2.ItemCode),0))--价格清单中的价格 ) if @visorder is not null --如果不为空证明存在这种数据,返回行号 begin select @error=1 select @error_message=N‘第‘+@visorder+N‘行物料的价格超过允许的范围‘ end end /*结束-判断是否超过价格清单中的价格*/
我们在add your code here部分加入此段代码可以实现如下功能:如果采购订单中任何一行物料的价格高于为供应商预设的价格,则阻止并报错。
其中 if @object_type=‘22‘ and @transaction_type in (‘A‘,‘U‘)用作判断(1)操作来自于哪个数据对象,22代表采购订单;(2)是何种操作,A和U代码新增或更新。也就是说,当对采购订单进行更新或新增操作时会触发下面的代码。SQL逻辑:将采购订单主表和从表关联,取出从表中的行号。当行号不为空证明超价格限制的行,报错;为空证明无此类行,通过。 条件1:找到被操作的采购订单记录; 条件2:非审批状态; 条件3:物料行的税后价格大于供应商预设的价格。错误信息:向S001供应商购买A0001物料,预设价格未10RMB,订单上填写的税后价格未11.7元,阻止。
1-1SBO学习心得(存储过程应用)
时间: 2024-11-04 08:36:46