我正在尝试使用业务服务更新 BC 字段的值。在执行它时,我收到以下错误:
ORA-01407: cannot update ("SIEBEL".""."MODIFICATION_NUM") to NULL.
由于修改编号是一个系统字段,因此我什至不可能触及该特定列。无法理解为什么会出现此错误。
我正在尝试使用业务服务更新 BC 字段的值。在执行它时,我收到以下错误:
ORA-01407: cannot update ("SIEBEL".""."MODIFICATION_NUM") to NULL.
由于修改编号是一个系统字段,因此我什至不可能触及该特定列。无法理解为什么会出现此错误。
我认为这里很可能是您的服务写入记录正在调用有条件运行的业务组件上的代码,然后它本身会从业务组件代码中强制写入记录。这可以在业务组件代码中显式完成,也可以通过脚本与组件交互的某些方式隐式完成。一旦发生这种情况,那么试图将修改号增加一的服务写入记录将无法这样做,因为此修改号会被可能的 BC 代码增加,并且您会收到此错误。为了解决这个问题,我会检查有问题的 BC 并注释掉 PreSetFieldValue、SetFieldValue、PreWriteRecord 等事件的代码,并查看错误是否仍然作为初始测试发生。
一个很好的猜测是您已将自定义字段映射到 MODIFICATION_NUM(您永远不应该这样做)并通过代码或在 UI 中激活该字段。检查您的 BC 以了解 MODIFICATION_NUM 列的使用情况。
请检查有问题的 BC 是否有一个映射到 modify_num 列的字段(系统列不应添加到自定义字段),或检查写入记录事件本身是否正在调用显式保存记录的自定义服务,这应该会引发不同的错误“您尝试修改的记录已被修改”之类的
可能是您的代码有错误(您必须在此处发布示例以获得任何帮助!),或者相关 Siebel 对象的配置出现问题(检查底层 BC 以查看是否有人添加了导致错误的配置或代码),或者这是 Siebel 中的一个已知错误(在 Siebel SupportWeb 上搜索)。
如果您查看 MODIFICATION_NUM,每次保存记录时它总是会增加一。我相信这就是 Siebel 检测其他用户是否修改了记录的方式。您可以试试这个:开始更新记录,但不要保存它。从不同的计算机或只是一个单独的浏览器窗口以不同的用户身份登录并更新完全相同的记录,然后保存。现在回到第一个用户并尝试保存记录。您将收到一条错误消息。
无论如何,如果您创建一条新记录,请将 MODIFICATION_NUM 设置为 0。如果您更新一条记录,请将 MODIFICATION_NUM 增加 1。
不过,通常建议使用 EIM 或其他官方支持的方法(例如 Java 数据 Bean)来更新 Siebel 记录。
您必须发布您尝试运行的更新语句,因为当 column 属性将列定义为明确不允许其中包含空值时,ora 错误专门用于尝试将列值更新为空。
请检查您正在使用的用户 id ..通常如果在该 id 的数据库中没有给出写访问权限 ..它可能会使用 null 更新 modify_num
第一步是找到试图清除您的模组编号的总线计算机。为此,您必须找到更新 mod 编号的 SQL(它将是您的错误出现之前的那个),然后找到运行该 SQL 的 buscomp(从 SQL 之前的 ObjMgrSqlObjLog 日志条目)。将 ObjMgrSqlLog 和 ObjMgrSqlObjLog 事件都设置为 4 并重现您的错误,这应该会为您提供所需的内容。
接下来,在 buscomp 上找到映射到 MODIFICATION_NUM 列的字段(或多个字段)。
最后,找出清除该字段的内容并修复它。可以是脚本、集成点、工作流程、buscomp 用户道具等...
祝你好运。
可能您在同一个函数或方法中使用了两次 WriteRecord()。你能检查一下吗?
此致。