错误ORA-01407更新业务服务中的字段

时间:2009-12-15 06:31:05

标签: siebel

我正在尝试使用业务服务更新BC字段的值。执行时我收到以下错误:

ORA-01407: cannot update ("SIEBEL".""."MODIFICATION_NUM") to NULL.

由于修改号是系统字段,因此我甚至无法触摸该特定列。无法理解为什么会出现此错误。

9 个答案:

答案 0 :(得分:1)

我认为这可能是您的服务写入记录正在调用有条件运行的业务组件上的代码,然后自己从业务组件代码强制写入记录。这可以在业务组件代码中明确地完成,也可以通过脚本与组件交互的一些方式隐式完成。一旦发生这种情况,那么尝试将修改号加1的服务写入记录就无法这样做,因为此修改号会被可能的BC代码递增而您会收到此错误。为了解决这个问题,我会查看有问题的BC并注释​​掉PreSetFieldValue,SetFieldValue,PreWriteRecord等事件的代码,看看错误是否仍然作为初始测试发生。然后,您需要隔离导致错误的BC代码部分。

答案 1 :(得分:0)

答案 2 :(得分:0)

如果查看MODIFICATION_NUM,每次保存记录时它总是会增加1。我相信这是Siebel检测其他用户是否修改了记录的方式。您可以尝试这样做:开始更新记录,但不要保存它。以不同的用户身份从另一台计算机或单独的浏览器窗口登录,并更新完全相同的记录,然后保存。现在回到第一个用户并尝试保存记录。你会收到一条错误信息。

无论如何,如果您创建新记录,请将MODIFICATION_NUM设置为0.如果更新记录,请将MODIFICATION_NUM增加1.

通常,建议使用EIM或其他官方支持的方法(例如Java Data Bean)来更新Siebel记录。

答案 3 :(得分:0)

请检查您正在使用的用户ID ..通常,如果没有在id为..更新modification_num的数据库中给出写访问权限

答案 4 :(得分:0)

您的代码中可能有错误(您必须在此处发布示例以获取任何帮助!),相关Siebel对象的配置中存在一些混乱(检查底层BC以查看如果有人添加了导致错误的配置或代码,或者这是Siebel中的已知错误(在Siebel SupportWeb上搜索)。

答案 5 :(得分:0)

第一步是找到试图清空你的mod号码的buscomp。要做到这一点,你必须找到更新mod号的SQL(它将是你的错误出现之前的那个),然后找到运行该SQL的buscomp(来自紧接SQL之前的ObjMgrSqlObjLog日志条目)。将ObjMgrSqlLog和ObjMgrSqlObjLog事件都转为4并重现您的错误,这应该可以为您提供所需的信息。

接下来,找到buscomp上映射到MODIFICATION_NUM列的字段(或字段)。

最后,找出清除该字段并修复它的内容。可以是脚本,集成点,工作流程,buscomp用户道具等......

祝你好运。

答案 6 :(得分:0)

一个好的猜测是,您已将自定义字段映射到MODIFICATION_NUM(您永远不应该这样做),并通过代码或在UI中激活此字段。检查您的BC是否使用MODIFICATION_NUM列。

答案 7 :(得分:0)

请检查有问题的BC是否有一个映射到modification_num列的字段(系统列永远不应该添加到自定义字段中),或者检查写入记录事件本身是否正在调用显式保存记录的自定义服务,该服务应该抛出“您尝试修改的记录已经被修改”等不同的错误

答案 8 :(得分:0)

可能你在相同的函数或方法中使用WriteRecord()两次。你能检查一下吗?

最诚挚的问候。