Oracle Siebel CRMむベントモデルパヌト1

この蚘事は、Oracle Siebel CRMに粟通しおおり、3局アヌキテクチャを十分に理解しおいる人を察象ずしおいたす。



システムを蚭蚈するずきは、ビゞネスコンポヌネントレコヌドの䜜成たたは削陀、アプレットのボタンのクリック、フィヌルドの線集、デヌタの保存など、さたざたなナヌザヌアクションにどのように応答するかをよく理解するこずが重芁です。 䞀方では顧客の芁件を実装し、他方ではさらなるサポヌトずスケヌリングのコストを増加させないアヌキテクチャを正確に䜜成するには、Oracle Siebel CRMがナヌザヌたたはプロシヌゞャが開始するすべおのむベントを凊理する方法を知る必芁がありたす。



䞀般に、各オブゞェクト内のむベントの凊理はいく぀かの段階を経たす。

  1. 分岐前
  2. 暙準ハンドラヌ
  3. 分岐埌








むベントモデル



実際、分岐前ず分岐埌はスタブであり、その内郚に開発者は独自のハンドラヌを蚘述する、぀たりむベント凊理アルゎリズムを䜜成する機䌚がありたす。 このアルゎリズムが蚘述されおいるブランチの遞択は、暙準ハンドラが䜕をするかによっお異なりたす。 この蚘事では、ビゞネスコンポヌネントレベルで最もよく䜿甚される2぀のむベント、 SetFieldValue フィヌルド倀の曎新ずWriteRecord デヌタベヌスぞの倉曎の保存に぀いお詳しく説明したす。



SetFieldValue-スクリプト



連絡先ビゞネスコンポヌネントずその[勀務先電話番号]フィヌルドに぀いお考えたす。 これは、ナヌザヌが線集できる共通の基本フィヌルドです。 珟圚、このフィヌルドの即時倉曎埌プロパティは「Y」に蚭定されおいたす。



即時倉曎



このプロパティが正確に行うこずは、埌で説明したす。



次に、 Contactビゞネスコンポヌネントレベルでこのようなスクリプトを怜蚎したす。



function BusComp_PreSetFieldValue (FieldName, FieldValue) { if (FieldName == "Work Phone #") { TheApplication().RaiseErrorText(": " + this.GetFieldValue("Work Phone #")); } return (ContinueOperation); }
      
      





実際、ハンドラヌは、暙準のハンドラヌの前に呌び出されるSetFieldValueむベントのPre-Branchブランチに曞き蟌たれたす。 ナヌザヌが[勀務先電話番号]フィヌルドを曎新したい堎合はどうなりたすか この堎合、システムぱラヌを衚瀺する必芁があり、実際、暙準ハンドラヌを呌び出すこずはできたせん。



新しい倀を入力する前でした。







新しい倀の入力







別のフィヌルドに切り替えた埌







次のこずが刀明したした。



初期段階では、3぀のレベルすべおで、倀は同じでしたフォヌマット甚に調敎され、DTYPE_PHONEフィヌルドのタむプによっお決定されたす。



その埌、ナヌザヌはアプレットレベルのテキストボックス「Work」に新しい倀を入力したした。 この時点で、ビゞネスコンポヌネントレベルおよびテヌブルレベルでは、倀は倉曎されおいたせん。



ナヌザヌが「Work」テキストボックスからフォヌカスを切り替えた埌、アプレットはビゞネスコンポヌネントレベルでSetFieldValueむベントをトリガヌしたした。 この時点で、システムはBusComp_PreSetFieldValue関数内にスクリプトがあるこずを確認し、それを実行し始めたした。 このスクリプトのフレヌムワヌク内で、[Work Phone]フィヌルドの珟圚の倀が読み取られ、TheApplication。RaiseErrorText関数を介しおこの倀が衚瀺されたした。 この関数は、暙準ハンドラぞのむベントの凊理をそれぞれ終了し、システムは分岐埌ブランチに到達したせんでした。 その結果、叀い電話の倀が゚ラヌテキストに衚瀺され、アプレットレベルでは新しい倀も保存されたせん。





次に、同じ状況を考えお、このスクリプトをSetFieldValueむベントのポストブランチに転送したす。



 function BusComp_SetFieldValue (FieldName) { if (FieldName == "Work Phone #") { TheApplication().RaiseErrorText(": " + this.GetFieldValue("Work Phone #")); } }
      
      





すべお同じアクションを繰り返し、わずかに異なる結果が衚瀺されたす。







たず、゚ラヌテキストに新しい倀が衚瀺されたす。 第二に、ナヌザヌに衚瀺される゚ラヌにもかかわらず、入力された倀はそのたた残りたす。



システムがPost Branchの実行に到達した堎合、暙準ハンドラヌぱラヌなしで実行を完了したず䞻匵できたす。 したがっお、䞊蚘の䟋から、暙準のSetFieldValueハンドラヌはビゞネスコンポヌネントレベルでフィヌルド倀を曎新するず結論付けるこずができたす。 テヌブルレベルでは、この時点で䜕も倉わっおいないこずに泚意するこずが重芁です。 これを確認するには、デヌタベヌスに察しお簡単なク゚リを実行したす。





䞊蚘の䟋から、SetFieldValueむベントのPre-Branchでビゞネスコンポヌネントフィヌルドにアクセスするず、システムは新しい倀が入力される前に存圚しおいたフィヌルドの珟圚の倀を返したす。 䞀方、SetFieldValueむベントの分岐埌のビゞネスコンポヌネントフィヌルドにアクセスするず、システムはナヌザヌが入力した倀を返したす。



SetFieldValue-実行時むベント



䞊蚘のすべおの原則は、分岐埌および分岐前のハンドラヌがスクリプトではなくランタむムむベントメカニズムによっお起動された堎合に機胜したす。



これを実蚌するために、この単玔な怜蚌ルヌル管理-デヌタ怜蚌を怜蚎しおください。







1が0に等しくなるこずはないため、システムがこのルヌルにアクセスするたびに、ナヌザヌぱラヌメッセヌゞを受け取り、その時点でトリガヌされたむベントの凊理を停止したす。 Data Validation Managerは、別の蚘事に倀する別の倧きなトピックです。 ここでは、その蚭定の機胜に぀いおは説明したせん。



このルヌルを実行するには、1぀のアクションでアクションセット管理-ランタむムむベントを䜜成する必芁がありたす。 このアクションのパラメヌタヌを衚に瀺したす。

アクションタむプ バスサヌビス
ビゞネスサヌビス名 デヌタ怜蚌マネヌゞャヌ
ビゞネスサヌビス方法 怜蚌する
ビゞネスサヌビスのコンテキスト 「ルヌルセット名」、「SBL連絡先ダミヌ怜蚌」


その結果、ハンドラヌの準備が敎い、察応するむベントにアタッチする必芁がありたす。 これを行うには、むベントを䜜成したす。







この堎合、[電子メヌルアドレス]フィヌルドが曎新されるず、ContactビゞネスコンポヌネントのSetFieldValueむベントのPre-Branchブランチでハンドラヌが起動されたす。 条件匏に泚意を払うこずが重芁です。 そのフレヌムワヌク内で、システムは[電子メヌルアドレス]フィヌルドから倀を読み取り、この倀の長さが3文字未満であるこずを確認する必芁がありたす。 条件が満たされた堎合のみ、ハンドラヌが起動されたす。



これで、個人の䜏所の倉曎にシステムがどのように察応するかを確認できたす。



電子メヌルには、最初にsiebel@oracle.comが入力されたす。







長さが3文字未満の新しい倀を入力したす。







別のフィヌルドに切り替えた埌







システムぱラヌを衚瀺したせんでした。 倀は同じたたです。 したがっお、条件Len[Email Address]<3は合栌したせんでした。 ぀たり、その時点でシステムは、[Email Address]フィヌルドの叀い倀siebel@oracle.comず等しいを考慮し、この倀の長さが3を超えおいるこずを認識し、ハンドラヌを開始したせんでした。 ゚ラヌは発生せず、ビゞネスコンポヌネントフィヌルドは正垞に曎新されたした。



このフィヌルドに叀い倀を入力した堎合







別のフィヌルドに移動したす。







次に、最初にナヌザヌに゚ラヌが衚瀺され、次にフィヌルドの倀が倉曎されたせん。 実際、䞀床に2぀の゚ラヌを受け取りたした。1぀目はシステム゚ラヌ、2぀目はデヌタ怜蚌の゚ラヌです。 この堎合、最初のものを取り陀く方法を誰かが知っおいるなら、コメントに曞いおください。 SetFieldValueむベントの暙準ハンドラヌの原理を理解しおいる堎合、結果は非垞に論理的です。



これで、察象ずなるむベントに小さな倉曎を加えるこずができたす。







この堎合、ハンドラヌはSetFieldValueむベントのポストブランチにバむンドされたす。 それ以倖はすべおそのたたですが、システムの動䜜は倧幅に異なりたす。



これらの倉曎埌、システムは「電子メヌル」テキストボックスに倀siebel@oracle.comを入力しおも「誓う」こずはありたせん。







ただし、3文字未満の倀を入力しようずするず、次のこずが起こりたす。







ナヌザヌにぱラヌメッセヌゞが衚瀺されたすが、倀はビゞネスコンポヌネントフィヌルドに残りたす。 条件匏が新しく入力された倀の長さを確認したため、゚ラヌメッセヌゞが衚瀺されたした。 ただし、゚ラヌは分岐埌、぀たり暙準ハンドラヌの䜜業埌に発生したため、入力した倀はそのたた残りたした。



曞き蟌み蚘録



暙準のSetFieldValueむベントハンドラが実際にアプレットレベルからビゞネスコンポヌネントレベルに倀をドロップする堎合、暙準のWriteRecordハンドラはビゞネスコンポヌネントレベルからテヌブルレベルにデヌタをドロップしたす。 ぀たり、察応するテヌブルのデヌタが曎新され、システムの他のナヌザヌが衚瀺できるようになりたす。







SetFieldValueずWriteRecordの違いは、最初のケヌスではフィヌルドが個別に曎新され、2番目のケヌスでは倉曎がすべおのフィヌルドのデヌタベヌスにすぐに送信されるずいう事実にありたす。



開発者が独自のハンドラを蚘述しお、それをWrite-RecordむベントのPre-Branchにアタッチするず、システムはデヌタベヌスにデヌタを曞き蟌む前にすべおのアクションを実行したす。 したがっお、分岐前ブランチで゚ラヌが発生した堎合、デヌタベヌス内のデヌタは倉曎されず、逆も同様です。分岐埌ブランチで゚ラヌが発生した堎合、これは暙準プロセッサに圱響せず、デヌタベヌス内のデヌタが曎新されたす。



この事実を知っおいれば、ビゞネスロゞックをより有胜に実装できたす。 たずえば、プレブランチでは、さたざたなデヌタ怜蚌手順をハングアップしお、「曲線」情報がデヌタベヌスに入らないようにする必芁がありたす。 通知手順をポストブランチに添付できたす。 たずえば、アプリケヌションが䜕らかの段階に進んだずきに電子メヌルメッセヌゞを送信するように構成したす。



即時倉曎



「即時倉曎埌」フィヌルドのプロパティは、「Y」に等しい堎合、ナヌザヌが倉曎を行っおカヌ゜ルを別の堎所に移動しようずしたずきに、察応するフィヌルドのSetFieldValueむベントをトリガヌする必芁があるこずをシステムに䌝えたす。 蚭定されおおらず、ほずんどのフィヌルドで蚭定されおいる堎合、WriteRecordむベント凊理の䞀郚ずしおSetFieldValueむベントが発生したす。 ぀たり、システムは、アプレットレベルからビゞネスコンポヌネントのレベルに転送されおいないデヌタを調べ、各フィヌルドでSetFieldValueを起動し、その埌でWriteRecordが起動したす。



結論



Oracle Siebel CRMがむベントを凊理する方法を考えるず、Pre-Branch WriteRecordむベントでデヌタ怜蚌を実行するこずをお勧めしたす。 この堎合、ナヌザヌが䜜成したレコヌドを保存しようずするず、システムはどのフィヌルドでデヌタが特定のビゞネスロゞックに察応しおいないかを瀺したす。 ナヌザヌは適切な調敎を行い、再床すべおを保存しようずしたす。



ランタむムむベントはSetFieldValueむベントのPre-Branchにあるずきに新しい倀にアクセスできないため、各フィヌルドの倀を確認するにはスクリプトが必芁です。



䞊蚘のすべおの原則は、ナヌザヌがむンタヌフェむスを介しお倉曎を行うずきだけでなく、EAI統合が機胜しおいるずき、たたはスクリプトがSetFieldValueメ゜ッドを盎接起動するずきにも適甚されたす。 䟋bcContact.SetFieldValue「電子メヌルアドレス」、「rrr@kk.ru」。



All Articles