Skip to main content

 

 

 

 
Language:
 
 
 
OutSystems

ビジネスプロセステクノロジー(BPT)

データ移行に関する最も重要なトピックの1つは、ビジネスプロセステクノロジー(BPT)に関連したものです。この場合、システムエンティティとハイブリッドエンティティがあり、これによって移行プロセスが複雑になることが主な理由です。

エンティティリレーションモデル

以下の図は、BPTプロセスに関連するエンティティ、プロセス定義と入出力定義、対応する入出力インスタンスを持つプロセスのアプリケーションインスタンスの間の関係と、それらの定義との関係を示しています。

BPTエンティティリレーションモデル

また、プロセスに属するアクティビティもあります。

プロセスに属するBPTアクティビティ

上記のエンティティのレコードは、以下のソースから生成できます。

  • Service Studio:

    • 新しいまたは変更されたプロセスやアクティビティを含むeSpaceのパブリッシュ
  • Service Center

    • プロセスやアクティビティの状態の読み取りと変更
  • LifeTime

    • プロセスやアクティビティを含む別の環境へのアプリケーションのプッシュ
    • API
  • 詳細については、「OutSystems API」をご覧ください。

インスタンスエンティティ(赤色)は、それらのソースが実行時のアプリケーションの使用状況であるためハイブリッドです。この場合、エンティティはアプリケーション開発によって変更されず、OutSystemsプラットフォームで管理されます。ただし、実行時のアプリケーションの使用によってデータが反映されます。

考慮事項

全般

  • システム定義エンティティ(読み取り専用)。 定義エンティティは、BPTフローが設計および実装されたeSpaceをパブリッシュした後、反映され変更されます。この情報は、データ移行プロセスでは移行や変更が行われません。

  • 外部キーの依存関係。 ユーザー識別子(Created_ByLast_Modified_BySyspended_ByUser_IdGroup_Id)などの環境間で異なる外部キーのマッピングを忘れずに行ってください。

  • IDを環境間でマッピングするにはSS_Keyを使用します。定義エンティティの識別子を異なる環境間でマッピングするには、eSpaceのSS_KEYSS_Key``を組み合わせて使用します。これらのSS_Keyを常に一緒に使用する場合は、環境間で一意かつ同一になります。

    IDがすでにマッピングされているか、挿入後にのみマッピングされるかによって、異なるソリューションやアプローチを使用して異なる環境間でIDをマッピングしてから、移行された外部キーに変更を適用することができます。その後、2ステップのアプローチを使用して外部キーにnullのレコードを挿入し、2番目のイテレーションで必要に応じて外部キーを更新する方法のほか、一時テーブルを使用する別のアプローチが可能です。

  • マルチテナントエンティティ プロセスインスタンス、アクティビティインスタンス、関連する入出力インスタンスのエンティティは、マルチテナントにすることができます。使用されているテナントのIDが環境間で同じであるかどうかを確認します。

  • 非アクティブな定義。 非アクティブな(Is_ActiveフラグがFalseに設定されている)プロセスや関連する情報も移行する必要性や要求があるかどうかを確認します。非アクティブな定義のプロセスや、非アクティブな入出力定義からの入出力を持つプロセスのほか、非アクティブである可能性があるアクティビティ定義とアクティビティ出力定義があります。

  • プロセスステータス。 プロセスステータス(Active、Closed、Suspended、Terminated)のすべてまたは一部のみを移行する必要性や要求があるかどうかを確認します。

  • スケジューラ。 移行ガイドの前提要件をご覧ください。

プロセス

  • プロセス定義、入出力定義、プロセスステータス(静的)は移行されません。これらのエンティティは、実装されたソリューションに基づいてOutSystemsプラットフォームで管理されます。
  • プロセス定義エンティティはeSpaceで設計および実装されたときに設定されます。eSpaceのパブリッシュ後、プロセス定義の設計および実装状況に応じてプロセス情報がプロセス定義に反映されます。
  • データベーストリガーによって開始するようにプロセスを設定できます(なお、この設定はアプリケーションの開発時に行います)。この場合、eSpaceのパブリッシュ後、OutSystemsプラットフォームによってトリガーされるターゲットエンティティで新しいトリガーが作成されます。プロセスにはこのエンティティ識別子の必須入力があり、トリガーされるエンティティに関連するOSEVTエンティティにレコードを作成します。たとえば、Order Createで開始がトリガーされるOrderProcesaという名前のプロセスには入力OrderIdがあり、Orderエンティティ(OSUSR_ABC_Order)のデータベースで新しいトリガーが作成され、対応するOrder Eventエンティティ(OSEVT_ABC_Order)に新しいレコードが挿入されます。
  • 外部キーの循環依存関係に注意します。アクティビティインスタンスの場合、プロセスエンティティにはParent_Process_IdTop_Process_Idがあり、これらはプロセスエンティティ自体の外部キー(循環外部キー)です。たとえば、プロセスがサブプロセスではない場合、Top_Process_IdはIdと同じ値になります。

アクティビティ

  • アクティビティ定義、アクティビティの出力定義、アクティビティの種類(静的)、アクティビティのステータス(静的)は移行されません。これらのエンティティは、実装されたソリューションに基づいてOutSystemsプラットフォームで管理されます。
  • Conditional Startは、別のエンティティの作成時または更新時に開始をトリガーできるアクティビティの一種です。「Start On」条件を使用して定義されたこのタイプのアクティビティがインスタンス化されると、トリガーされるエンティティのイベントエンティティ(OSEVT)でアクティビティごとに新しい行がサブスクライブされて挿入されます。たとえば、Orderが更新されたときに開始をトリガーするConditional Startアクティビティの場合、このアクティビティを含むプロセスまたはサブプロセスが開始すると、Orderイベントエンティティ(OSEVT_ABC_Order)に新しい行が挿入され、Orderエンティティのトリガー(OSUSR_ABC_Order)がサブスクライブされます。
  • Human ActivityとWaitアクティビティは、別のエンティティの作成時または更新時に終了をトリガーできるアクティビティの一種です。「Close On」条件を使用して定義されたこれらのタイプのアクティビティのいずれかがインスタンス化されると、トリガーされるエンティティのイベントエンティティ(OSEVT)でアクティビティごとに新しい行がサブスクライブされて挿入されます。たとえば、Orderが更新されたときに終了をトリガーするWaitアクティビティの場合、このアクティビティを含むプロセスまたはサブプロセスが開始すると、Orderイベントエンティティ(OSEVT_ABC_Order)に新しい行が挿入され、Orderエンティティのトリガー(OSUSR_ABC_Order)がサブスクライブされます。
  • アクティビティインスタンステーブルには自己参照のPrecedent_Activity_Id外部キーがあり、データを移行するときに注意が必要です。

イベントキュー

スケジューラは2つのOSSYSエンティティキューを使用して、BPTによってトリガーされるタスクを実行します。

  • OSSYS_BPM_Event - 軽量プロセスジョブの場合
  • OSSYS_BPM_Event_Queue - 通常プロセスジョブの場合

移行プロセスの前に、こちらのエンティティが空になっていることを確認する必要があります。つまり、スケジューラによって処理待ちのキュー内にあったタスクがすべて処理され、移行プロセスの途中で一切変更が加えられないようにします。

プロセスを開発して別のエンティティレコードの作成などの別のエンティティイベントで開始するように定義した場合、またはプロセス内にアクティビティが存在する場合、OutSystemsプラットフォームでは以下が行われます。

  • プロセスによってトリガーされるエンティティに割り当てられるトリガーが作成または更新されます(OSUSR_
  • プロセスによってトリガーされるエンティティに関連するイベントエンティティに新しいレコードが挿入されます(OSEVT_)。これはプロセス定義の識別子と関連付けられます。

また、別のエンティティイベントで開始(Conditional Startのアクティビティタイプ)または終了(Human ActivityまたはWaitのアクティビティタイプ)するアクティビティを開発した場合、OutSystemsプラットフォームでは以下が行われます。

  • プロセスによってトリガーされるエンティティに割り当てられるトリガーが作成または更新されます(OSUSR_
  • 新しいアクティビティがインスタンス化されると、アクティビティによってトリガーされるエンティティに関連するイベントエンティティに新しいレコードが挿入されます(OSEVT_)。これはアクティビティ識別子と関連付けられます

トリガーされたエンティティで新しいレコードが作成または更新されると、トリガーによって関連するイベントエンティティが確認され、プロセス構成またはアクティビティとイベントエンティティの内容に基づいて、スケジュールによって処理されるジョブがキューに挿入されます。

OutSystemsプラットフォームによるBPTエンティティの管理の仕組み - 例

このセクションでは、OutSystemsプラットフォームによるBPTエンティティの管理の仕組みの例を示します。

プロセスの開始

プロセス

「Candidate Selection」という名前のプロセスがあり、「Candidate Insertion」によってトリガーされるとします。 「John Doe」という名前の応募者を作成し、Candidateエンティティレコードフォームに入力します。これにより、プロセスIDを持つ新しいプロセスインスタンスが実行時に作成されます。 プロセスは、Service Centerで確認することができます。

BPTエンティティによるプロセスの開始

プロセスはプロセスエンティティに保存されます。以下のコマンドを使用して、最後に挿入されたプロセスを表示することができます。

SELECT Top 1 
    OSSYS_BPM_Process.*
    , OSSYS_BPM_Process_Status.NAME StatusName
FROM OSSYS_BPM_Process
INNER JOIN OSSYS_BPM_Process_Status 
    ON OSSYS_BPM_Process.STATUS_ID = OSSYS_BPM_Process_Status.id
ORDER BY ID Desc
Id 11266
Label John Doe
Created 11/26/2019 12:03:25 PM
Created_By
Process_Def_Id 38
Parent_Process_Id
Parent_Activity_Id
Top_Process_Id 11266
Status_Id 1
Last_Modified 11/26/2019 12:03:25 PM
Last_Modified_By
Suspended_At 1/1/1900 12:00:00 AM [Null]
Suspended_At
StatusName Active

起動されたプロセスに関する情報をいくつか確認することができます。StatusNameはそのレコードの一部ではありません。これは、プロセスの最初の状態を知らせるためにあります。Candidateの作成によってプロセスが起動されましたが、Candidate IDを確認できるこのエンティティ上にこのプロセスはありません。このプロセスには識別子があります。それを使用してProcess_Inputから入力変数を取得し、Process_Id 11266に関連付けます。

プロセスの入力

SELECT
    OSSYS_BPM_Process_Input.*
FROM OSSYS_BPM_Process_Input
WHERE OSSYS_BPM_Process_Input.Process_Id = 11266
Id 32973
Input_Def_Id 79
Process_Id 11266
SS_Key ff1e6212-66f3-4eaf-9018-6eb58b8ed465.#EventGeneratedInput
Name CandidateId
Data_Type rtInteger
Input_Value 21
SS_Type bt44832b6b-eaf6-481b-b355-2eaaa488dbc4*8bfa817a-1092-472c-a14e-bc9e2ad9403b

このレコードはこのプロセスに関して確認できるすべての入力であり、パラメータの1つはCandidateIdという名前です。基本型がInteger型として表示されますが、実際には識別子です。 SS_Typeがこのようなコンテンツを持つ場合、エンティティ識別子であることを示しています。 どのエンティティであるかを特定するには、以下を確認します。

bt44832b6b-eaf6-481b-b355-2eaaa488dbc4*8bfa817a-1092-472c-a14e-bc9e2ad9403b

太字の44832b6b-eaf6-481b-b355-2eaaa488dbc4は、eSpaceのSS_Keyです。

8bfa817a-1092-472c-a14e-bc9e2ad9403bは、エンティティのSS_keyです。 以下のコマンドは、このプロセス関連するエンティティ名とエンティティの物理テーブルを表示します。

SELECT 
    Name,
    Physical_Table_Name 
FROM OSSYS_ENTITY
INNER JOIN OSSYS_ESPACE 
    ON OSSYS_ENTITY.ESPACE_ID = OSSYS_ESPACE.Id 
        AND OSSYS_ESPACE.SS_KEY = '44832b6b-eaf6-481b-b355-2eaaa488dbc4'
WHERE OSSYS_ENTITY.SS_KEY = '8bfa817a-1092-472c-a14e-bc9e2ad9403b'

結果はCandidateOSUSR_3ar_Candidate(エンティティ名と物理テーブル名)で、Candidateがこのプロセスに関連付けられていることがわかります。

SELECT
    *
FROM OSUSR_3ar_Candidate
WHERE Id = 21

ヒント: 通常、識別子にはIdという名前が付けられます。Service Centerでその画面に戻ってプロセス名またはインスタンスIDのリンクをクリックすると、以下のコマンドを使用して識別子名を取得することができます。

SELECT OSSYS_ENTITY_Attr.Name
FROM OSSYS_ENTITY
INNER JOIN OSSYS_ENTITY_Attr 
    ON OSSYS_ENTITY.PRIMARYKEY_SS_KEY = OSSYS_ENTITY_Attr.ss_Key 
    AND OSSYS_ENTITY_Attr.IS_ACTIVE=1
    AND OSSYS_ENTITY.ID = OSSYS_ENTITY_Attr.ENTITY_ID
WHERE OSSYS_ENTITY.Physical_Table_name = 'OSUSR_3ar_Candidate'

アクティビティ

以下の図では、プロセスに接続しているすべてのアクティビティが表示されています。「Listening」状態のアクティビティが2つあります。現在のアクティビティは「Screen Candidate」で状態は「Ready」です。

プロセスに接続しているBPTアクティビティ

アクティビティの内容を確認するには、以下のコマンドを使用します。

SELECT 
    OSSYS_BPM_Activity.ID
    ,OSSYS_BPM_Activity.ACTIVITY_DEF_ID
    ,OSSYS_BPM_Activity.PROCESS_ID
    ,OSSYS_BPM_Activity.NAME
    ,OSSYS_BPM_Activity.USER_ID
    ,OSSYS_BPM_Activity.CLOSED
    ,OSSYS_BPM_Activity.STATUS_ID
FROM OSSYS_BPM_Activity
WHERE OSSYS_BPM_Activity.Process_Id = 11266
Id Activity_Def_Id Process_Id Name User_Id Closed Status_Id
213828 245 11266 Start 11/26/2019 12:03:25 PM 5
213829 242 11266 ScreenCandidate 1/1/1900 12:00:00 AM 9
213830 249 11266 NewInterview 1/1/1900 12:00:00 AM 8
213831 247 11266 Dismiss 1/1/1900 12:00:00 AM 8

プロセスの開始ステップが完了しました。

プロセスの完了

プロセスを完了するには、以下の手順を実行して変更内容を確認する必要があります。

プロセス

以下のコマンドを実行します。


SELECT OSSYS_BPM_Process.*,OSSYS_BPM_Process_STATUS.Name
FROM OSSYS_BPM_Process
INNER JOIN OSSYS_BPM_Process_STATUS 
    ON OSSYS_BPM_Process.Status_Id = OSSYS_BPM_Process_STATUS.Id
WHERE OSSYS_BPM_Process.Id = 11266

結果は以下のようになります。

Id 11266
Label John Doe
Created 11/26/2019 12:03:25 PM
Created_By
Process_Def_Id 38
Parent_Process_Id
Parent_Activity_Id
Top_Process_Id 11266
Status_Id 2
Last_Modified 11/26/2019 17:27:25 PM
Last_Modified_By
Suspended_At 1/1/1900 12:00:00 AM [Null]
Suspended_At
StatusName Closed

フィールドが変更され、Status_Idが2 [Closed]に設定され、Last_Modifiedも変更されていることがわかります。

プロセスの出力

入力パラメータはプロセス全体を通じて変更されないため、プロセスの入力についてはここでは説明しません。出力テキストパラメータが作成され、John Doeの面接結果が保持されました。結果を表示するには、以下のコマンドを使用します。

SELECT OSSYS_BPM_Process_Output.*
FROM OSSYS_BPM_Process_Output
WHERE OSSYS_BPM_Process_Output.Process_Id = 11266
Id 1
Output_Def_Id 5
Process_Id 11266
SS_Key 57408c29-4dd2-448d-b37e-19059eecf8e2
Name Result
Data_Type rtText
Output_Value Passed with distinction
SS_Type rtText

Process_Idはこのプロセスと同じ値と同じであり、Output_Def_IdProcess_Output_Defの値です。 以下の図の3行目を確認してください。この場合、値は識別子ではなく、テキストの一部分です。

アクティビティ

プロセスに関係するすべてのアクティビティを表示するには、以下のコマンドを使用します。

SELECT 
    OSSYS_BPM_Activity.ID
    ,OSSYS_BPM_Activity.ACTIVITY_DEF_ID
    ,OSSYS_BPM_Activity.PROCESS_ID
    ,OSSYS_BPM_Activity.NAME
    ,OSSYS_BPM_Activity.USER_ID
    ,OSSYS_BPM_Activity.CLOSED
    ,OSSYS_BPM_Activity.STATUS_ID
FROM OSSYS_BPM_Activity
WHERE OSSYS_BPM_Activity.Process_Id = 11266
ORDER BY OSSYS_BPM_Activity.Created

結果には、最初の2つのレコードと最後の行が表示されます。プロセスIDに関連する各アクティビティ行にアクティビティ定義があります。ラベルを確認できるほか、このプロセスは完全に終了しているため終了日も確認できます。Status_Idは、すべての行で5です。静的エンティティActivity_Statusで値5を確認すると、5がClosedを意味することがわかります。

Id Activity_Def_Id Process_Id Name Closed Status_Id
213828 245 11266 Start 11/26/2019 12:03:25 PM 5
213829 242 11266 ScreenCandidate 11/26/2019 17:09:15 PM 5
213876 273 11266 SetResult 11/26/2019 17:27:25 PM 5
213877 244 11266 End 11/26/2019 17:27:25 PM 5

アクティビティの出力

プロセスに含まれるアクティビティから渡される入出力パラメータが保存されている場所を確認するには、以下のコマンドを実行します。

SELECT 
    OSSYS_BPM_Activity.Name Activity,
    OSSYS_BPM_Activity_Output.*
FROM OSSYS_BPM_Process
INNER JOIN OSSYS_BPM_Activity 
    ON OSSYS_BPM_Process.Id = OSSYS_BPM_Activity.Process_Id 
INNER JOIN OSSYS_BPM_Activity_Output 
    ON OSSYS_BPM_Activity.Id = OSSYS_BPM_Activity_Output.Activity_Id 
WHERE OSSYS_BPM_Process.Id = 11266
ActivityName Id Output_Def_Id Activity_Id Name Data_Type Output_Value SS_Type
ScreenCandidate 69729 33 213829 Done rtBoolean TRUE rtBoolean
WaitForAllFeedback 69733 30 213841 ActivityInterviewId rtInteger 17 bt4...190
NewInterview 69737 29 213868 ActivityInterviewId rtInteger 19 bt4...190
WaitForAllFeedback 69738 30 213870 ActivityInterviewId rtInteger 19 bt4...190

このクエリを使用して、5列目にあるパラメータ名でActivityNameを確認することができ、シートの値を以下のスクリーンショットと比較することができます。

BPTスケジューラ

トリガーされるプロセスとアクティビティ

スケジューラは、アクティビティおよびプロセス定義、キューおよびイベントキューに基づいてプロセスとアクティビティを管理します。キューおよびイベントキューのデータソースはトリガーです。

例: Personという名前のエンティティとAnimalという名前の別のエンティティが作成されました。 トリガー名とその内容を表示するには、以下のコマンドを繰り返し使用します。

SELECT t.name Name, m.definition Definition
FROM sys.triggers t
INNER JOIN sys.sql_modules m 
    ON t.object_id = m.object_id

以下のテーブルは、見つかった20件の結果を示しています。最初に、ChangePersonプロセスを作成し、LaunchOnパラメータにCreatePersonエンティティアクションを入力します。次に、eSpaceをパブリッシュします。最後に、コマンドをもう一度実行して、新しいトリガーが作成されたことを確認します。

Name Definition
OSTRG_EI__OSUSR_EP8_THEENTITY CREATE TRIGGER [OSTRG_EI__OSUSR_EP8_THEENTITY]
OSTRG_EI__OSUSR_GTU_PERSON CREATE TRIGGER [OSTRG_EI__OSUSR_GTU_PERSON]
OSTRG_EI__OSUSR_EUG_THEENTITY CREATE TRIGGER [OSTRG_EI__OSUSR_EUG_THEENTITY]

トリガーの内容は、OSUSR_GTU_PERSONテーブルに対して実行される挿入操作や更新操作のたびに有効化されます。トリガーの実行では、OSEVT_GTU_PERSONテーブル内の情報を確認し、関連する構成がある場合は、OSSYS_BPM_EVENT(軽量プロセスの場合)またはOSSYS_BPM_EVENT_QUEUE(軽量プロセス以外の場合)に行を挿入します。次に、スケジューラによってOSSYS_BPM_EVENTOSSYS_BPM_EVENT_QUEUEテーブルが処理されます。

トリガーされるとCreatePersonアクションのLaunchOnとなり、Personエンティティに属するプロセスを作成しました。

これで、トリガーされるとUpdatePersonアクション中にClosedOnとなるアクティビティを作成できます。

また、StartOnとなるように定義されたプロセスに対して作成されたトリガーは、StartOnまたはClosedOnとなるように定義されたアクティビティに対して使用されるものと同じです。 この例では、トリガーの名前はSOSTRG_EI__OSUSR_GTU_PERSONです。