|
几个问题
提几个问题:
一、参数@list_of_cols_val_tab_del,只携带了对象的主键。
比如单据,则为Docentry,
那么,当我需要对单据的明细行进行处理时,需要的主键应该是Docentry and LineNum,这个时候,这个行号我该到哪去取呢?用游标的话,我担心性能受影响。
二、经过测试发现,在触发[SBO_SP_TransactionNotification]之前,SBO已经完成了全部的数据库更新,包括相关对象的更新。
比如采购收货单。
在触发存储过程之前,SBO还更新了:
采购订单OPOR的openqty
仓库日记帐OINM
库存帐本OITW
物料主数据OITM的onhand,onorder。。。
财务日记帐OJDT
等等。。总之,相关的内容都已经更新完毕,而这些都可以通过select查询到。
但是因为@error被置为1,则这一切的更新都被取消了。
我不确定是否是rollback之前的更新select也可以查询到?
如果不是rollback的关系,那么这意味着SBO是否有一种内部机制,可以完整地“删除”凭证并完整地回退所有相关数据。这可是很多人在做假帐时梦寐以求的好东东。
通过SQL跟踪找到这套机制。。。。。。。。如果可以封装好来调用的话。。等于是抛开SAP自己编DI了。。我担心版权的问题。因为那样SBO无论静态的表结构还是动态的数据流程都过于透明了。
甚至也可以因此而抛弃DI而放心地直接使用SQL语句直接更新数据库。甚至可以象网络游戏一样,编写脱机外挂客户端,甚至直接用Excel + VBA替换掉整个SBO客户端,踢开License。。那样太疯狂,估计要上法庭了。。这只是一个笑话。
三、使用这个存储过程,将在每个对象更新时触发,因此自定义代码一定要考虑性能问题,稍有不慎,应该会导致系统性能的大幅下降,而这种下降,不知情的人是很难检查出来的。
这也引出了另外一个问题,与楼主所推荐的想法不同,我认为这个存储过程,依然需要由SQL方面专业的“技术顾问”来修改,而不应该由“实施顾问”来操作。绝大多数非技术专业出身的实施顾问所具备的简单SQL查询知识,应该还远不足以驾驭好这个存储过程啊。 |
|