2016-04-20 10 views
1

Siebel 7.8アプリケーションで非常に奇妙な動作が検出されました。Siebel NextRecordメソッドが次のレコードに移動しない

Processing activity '1-23456' 
Processing activity '1-56789' 
Processing activity '1-ABCDE' 
Processing activity '1-ABCDE' 

Exception: The selected record has been modified by another user since it was retrieved. 
Please continue. (SBL-DAT-00523) 

だから、基本的に、それはBCからいくつかのレコードを処理し、その後、明らかに:私たちはこのような何かを取得し、ログファイルに

var bo:BusObject; 
var bc:BusComp; 

try { 
    bo = TheApplication().GetBusObject("Service Request"); 
    bc = bo.GetBusComp("Action"); 
    bc.InvokeMethod("SetAdminMode", "TRUE"); 
    bc.SetViewMode(AllView); 
    bc.ClearToQuery(); 
    bc.SetSearchSpec("Status", "='Unscheduled' OR ='Scheduled' OR ='02'"); 
    bc.ExecuteQuery(ForwardOnly); 
    var isRecord = bc.FirstRecord(); 
    while (isRecord) { 
     log("Processing activity '" + bc.GetFieldValue("Id") + "'"); 
     bc.SetFieldValue("Status", "03"); 
     bc.WriteRecord(); 
     isRecord = bc.NextRecord(); 
    } 
} catch (e) { 
    log("Exception: " + e.message); 
} finally { 
    bc = null; 
    bo = null; 
} 

:これは、ビジネス・サービスの一部でありますランダム、それは "つまらない"。 NextRecord呼び出しが実行されておらず、代わりに同じレコードを再度処理するようなものです。

SBL-DAT-00523エラーを回避するためにSetFieldValueとWriteRecordを削除すると、ログファイルに2回のアクティビティが2回表示されます(2回のみ)。

この現象の原因は何ですか?

答えて

2

ビジネスコンポーネント "アクション"のように見えますが、1つの基本レコードに対して複数のレコードを返すことができ、ForwardOnlyモードを使用してBCをクエリできます。

たとえば、テーブルS_EVT_ACTには、カスタム列X_PHONE_NUMBER = '12345678'を持つレコードが1つあり、テーブル 'S_CONTACT'に 'MAIN_PH_NUM'という同じ値 '12345678'のレコードが2つあります。だから、とき、あなたはこのようにSQLを使用して、これらの2つのテーブルを結合します:

SELECT T1.* FROM SIEBEL.S_EVT_ACT T1, SIEBELS_CONTACT T2 
WHERE T1.X_PHONE_NUMBER = T2.MAIN_PH_NUM 

あなたが同じT1.ROW_IDで、二つのレコードを取得します結果として。

eScriptでForwardOnlyカーソルモードを使用すると、まったく同じ状況が発生します。この場合、Siebelは返されたデータベースのすべてを取得します。 ForwardOnlyモードでクエリが実行されている間、ビジネスコンポーネントを反復するのは大きなミスです。この場合、Siebelは重複したレコードを除外します(ForwardBackwardモードでも実行されるため、通常のUIクエリーにも当てはまります)ので、代わりにForwardBackwardモードを使用する必要があります。

これは、実際には、ForwardOnlyとForwardBackwardのカーソルモードの中で最も重要であまり知られていない違いです。

+0

シエルにとっても、信じられないほどです。 **ありがとうございました!! **私は百万年後にそれを理解していないでしょう。 – AJPerez

1

は、そのクエリモード

bc.ExecuteQuery(のForwardOnly)を変更してみてください。

to前へ戻る

関連する問題