ビジネス サービスを使用して BC フィールドの値を更新しようとしています。実行中に次のエラーが発生します。
ORA-01407: cannot update ("SIEBEL".""."MODIFICATION_NUM") to NULL.
Modification Num はシステム フィールドであるため、その特定の列に触れることさえありません。このエラーが発生する理由を理解できません。
ビジネス サービスを使用して BC フィールドの値を更新しようとしています。実行中に次のエラーが発生します。
ORA-01407: cannot update ("SIEBEL".""."MODIFICATION_NUM") to NULL.
Modification Num はシステム フィールドであるため、その特定の列に触れることさえありません。このエラーが発生する理由を理解できません。
ここで考えられるのは、Service Write Record が、条件付きで実行されているビジネス コンポーネントでコードを呼び出し、それ自体がビジネス コンポーネント コードから Write Record を強制していることです。これは、ビジネス コンポーネント コード内で明示的に行うことも、スクリプトがコンポーネントとやり取りできるいくつかの方法で暗黙的に行うこともできます。これが発生すると、Modification Number を 1 ずつインクリメントしようとしている Service Write Record は、可能な BC コードによってこの Modification Number がインクリメントされ、このエラーが発生するため、これを行うことができなくなります。解決するには、問題のある BC をチェックアウトし、PreSetFieldValue、SetFieldValue、PreWriteRecord などのイベントのコードをコメント アウトして、初期テストとしてエラーが引き続き発生するかどうかを確認します。
MODIFICATION_NUMを見ると、レコードが保存されるたびに常に1ずつ増加します。これが、別のユーザーがレコードを変更したかどうかをSiebelが検出する方法だと思います。これを試すことができます:レコードの更新を開始しますが、まだ保存しないでください。別のコンピューターまたは別のブラウザーウィンドウから別のユーザーとしてログインし、まったく同じレコードを更新して保存します。ここで、最初のユーザーに戻り、レコードを保存してみます。エラーメッセージが表示されます。
とにかく、新しいレコードを作成する場合は、MODIFICATION_NUMを0に設定します。レコードを更新する場合は、MODIFICATION_NUMを1増やします。
ただし、一般的には、EIMまたはその他の公式にサポートされている手段(Java Data Beanなど)を使用してSiebelレコードを更新することをお勧めします。
実行しようとした更新ステートメントを投稿する必要があります。これは、列属性で列に null 値を許可しないように明確に定義されている場合に、列の値を null に更新しようとするためのエラーであるためです。
最初のステップは、mod 番号を消去しようとしている buscomp を見つけることです。これを行うには、mod 番号を更新している SQL (エラーが表示される直前のもの) を見つけ、その SQL を実行している buscomp を見つける必要があります (SQL の直前の ObjMgrSqlObjLog ログ エントリから)。ObjMgrSqlLog イベントと ObjMgrSqlObjLog イベントの両方を 4 に変更してエラーを再現すると、探しているものが得られるはずです。
次に、MODIFICATION_NUM 列にマップされている buscomp のフィールド (複数可) を見つけます。
最後に、そのフィールドをクリアしている原因を突き止め、修正します。スクリプト、統合ポイント、ワークフロー プロセス、buscomp ユーザー プロップなどの可能性があります。
幸運を。
コードに誤りがある可能性があります (ヘルプを得るには、ここにサンプルを投稿する必要があります!)、関連する Siebel オブジェクトの構成に何か問題があります (基になる BC をチェックして、誰かが持っているかどうかを確認してください)。エラーの原因となる構成またはコードを追加した場合)、またはこれは Siebel の既知のバグです (Siebel SupportWeb で検索してください)。
おそらく、同じ関数またはメソッドで WriteRecord() を 2 回使用しています。確認していただけますか?
よろしくお願いします。
カスタム フィールドを MODIFICATION_NUM にマップし (これは決して行うべきではありません)、コードまたは UI でこのフィールドをアクティブにしたと推測できます。MODIFICATION_NUM 列の使用については、BC を確認してください。
使用しているユーザー ID を確認してください。通常、その ID の DB で書き込みアクセスが許可されていない場合は、modification_num が null で更新される可能性があります。