[sc_request]テーブルの[state]と[sc_req_item]テーブルの[state]の違いについて教えてください。

果鈴前
Tera Contributor

workflowstudioにてフローを作成していた時に、
①[sc_request]テーブルの[state] と、

[sc_request]テーブルの[state].png

②[sc_req_item]テーブルの[state]、

[sc_req_item]テーブルの[state].png

  

二つの[state]が存在していることがわかりました。それぞれの違いについて教えていただけないでしょうか?

①[sc_request]テーブルの[state]だけ更新した場合、
②[sc_req_item]テーブルの[state]だけを更新した場合はどうなるのでしょうか?
それぞれのステータスのズレが生じてしまうのでしょうか、そこも気になります。 





2 REPLIES 2

Koichiro Hiray1
Tera Contributor

参考になるか分かりませんが、、、
いずれもtaskを継承したテーブルであり、フィールドとしてはどちらも実態はtask.stateの様です。

 

以下の記事を見る限りsc_requestとsc_req_itemは1:Nの関係となるため、

ここから類推するに用途としてはsc_req_item.stateが各要求アイテムの状態管理、

sc_request.stateは要求単位の状態管理に分類されると思います。

一般的な考えに基づけば子アイテムの状態を全て処理してから親アイテムの状態を変更するのが適切かなと思いますが、Servicenow側で勝手にやってくれる部分もあると思うので、厳密に設計したいのなら後述する様に全てのトリガースクリプトをトレースすることになるかもです。(もしかしたらちょうどよい公開記事などあるかも知れませんが、、、)

※普通に考えるなら親が子を管理する関係上、親を先に変更したのちに子を変更すると不整合が生じるか再計算が生じるのかなと


https://www.servicenow.com/docs/ja-JP/bundle/xanadu-it-service-management/page/product/planning-and-...

 

また、sc_request.stateはフォームエレメントに含まれていない事から、内部的に状態管理するためのもの(=ユーザやスクリプトによる入力を想定していない)と思います。

全て洗い出してはいないですが、以下の様なビジネスルールでハンドリングされている様です。

■sc_request(①に係る一部回答)

request closure

→SNCパッケージ内機能のためソースは読めませんでしたが、cancelRelatedRecords()という名前を見る限りでは、closed_cancelledがセットされた場合、関連する子アイテムをキャンセルしてくれそうです。


Set Request State
→approvalの承認結果に応じてstateとrequest_stateを決定する


■sc_req_item(②に係る一部回答)
Reduce request price - item change

→価格の再計算処理。stateの変更トリガーでも動作。

 

reject approval on closed incomplete
→stateに4がセットされるとapprovalはrejectedとなる

 

Close Tasks Due to Cancellations

→stateがRequest Cancelledに遷移すると関連するすべてのsc_task.stateを4に変更する

 

※厳密にどの様なふるまいをするかはこれらビジネスルールや他トリガー(あるなら、EventQueueのAction等)をトレースする必要があります。

t_sadahisa
Giga Guru

ご認識の通りテーブルが異なりますので、同じ列名であっても異なる情報です。

 

該当項目がどのような意味を持つのかということに関しては、実際に各テーブルをどのように使われるかに依存します。

 

以下、私の理解について共有させていただきますが、デモデータなどを確認して、ご自身で使い方を検討いただくと良いかと思います。

 

◆私の理解

sc_requestでは申請自体を管理し、sc_req_itemでは申請により要求された内容を管理する認識です。

 

具体的には、

例えばあたらしく入社した方がいた場合に、

社員証、パソコン、携帯電話を払い出すとします。

sc_requestでは 新入社員向け備品の払い出し申請 みたいな感じでレコードを作り、

 

sc_req_item では

社員証

パソコン

携帯電話

みたいなレコードを作成して、それぞれの払い出し状況を管理します。

 

 

以上、お力になれれば幸いです。