问题描述
|
我想知道是否有人知道SAP B1(SAP Business One)如何生成它在各种表中使用的唯一主键。我正在谈论的示例包括OCRD.DocEntry和OCPR.CntctCode。这些是整数列,它们会自动“递增”。
执行此操作的典型方法包括标识列(例如SQL Server),序列(例如Oracle)或持有以编程方式递增的Nextval的手动序列表。尽我所知,B1不在这些列中使用任何这些技术。那么如何处理它们呢?
我正在查看的特定实例正在使用SQL Server数据库。
是的,我很清楚这样一个事实,我不需要了解内部工作情况,也不必在数据库中随意摆弄,等等。这只是困扰我我不知道他们是怎么做的!如果有人能解释,我将不胜感激。
解决方法
SAPB1使用ONNM表生成新的唯一编号。添加文档后,将发生以下情况。
SQL事务开始
使用更新锁从ONNM表中查询下一个号码
用新的数字(+1)更新ONNM表。
该文档已添加
SQL事务已提交。
运行带有更新锁的SQL SELECT语句将返回当前行,同时锁定该行直到事务结束。您可以确保在选择行和事务结束之间没有其他用户可以更改该行。
您可以使用SQL事件探查器监视在SAP B1中执行操作时执行的语句。这是获取下一个要在报价中使用的数字的行。报价为ObjectType 23。
从[dbo]中选择T0。*。[ONNM]在T0中(带上锁)的T0。[ObjectCode] = \ '23 \'
,SAP B1使用ONNM生成序列号。
它为其中注册的每个对象维护一个自动键。并根据自动键序列号生成。
对于每个添加事件,此自动键将增加+1