Sitecore CMS のワークフローの中で、Webhook を実行して外部に対して処理のリクエストをすることができます。今回はこの動作に関して確認をしていきます。
ワークフローで webhook を利用する
Sitecore の以下のバージョン以降、ワークフローの中に webhook を仕込むことが可能となっています。
- Sitecore XM Cloud
- Sitecore Experience Manager 10.3 以降
- Sitecore Experience Platform 10.3 以降
管理しているアイテムのワークフローに対して、アクションを追加する際に Webhook を選択できるようになっています。
また、サンプルの Workflow としても webhook が含まれているワークフローが用意されています。
今回はこのサンプルのワークフローを利用して、コンテンツの承認が完了したら webhook を動かすように設定をして、どのような動きをするのか確認していきます。
ワークフローの設定
今回は標準の Page のテンプレートに対して Webhook を利用しているワークフローを適用して動作確認をしていきます。まず、/sitecore/templates/Project/sxastarter/Page/__Standard Values で Page を作成した時のアイテムのデフォルトの値を設定できるようになっているため、作成をした段階で下書きになるように以下のようにワークフローを設定します。
続いてワークフローの実行の際の Webhook の設定を、今回も webhook.site のサービスを利用して検証します。
これで Workflow の設定が完了しました。
アイテムの作成、テスト
アイテムを作成する
今回は Web ページとして動作させることなく、アイテムの作成と Webhook の動作確認だ毛を進めていきます。まず、Test のアイテムを作成して、以下のようにコンテンツを設定しておきます。
作成したワークフローは下書きのままとなっています。
ワークフローを進める
作成をしたアイテムのワークフローを進めていきます。下記の画面は Submit をしたあと、承認待ちのステータスになっている状況です。
ワークフローが完了した段階で、以下のように webhook.site には Json のデータが渡されていいます。
データを確認する
取得したサンプルデータは以下の通りです。
{
"ActionID": "d743186e-4fdd-4f06-859c-b6955fb2feb6",
"ActionName": "Webhook Submit Action",
"Comments": [{ "Key": "Comments", "Value": "" }],
"DataItem": {
"Language": "en",
"Version": 1,
"Id": "cc12f8c5-7355-4013-9147-0d9d26705f3b",
"Name": "Test",
"ParentId": "1f9e052e-27bb-4ca0-a46a-9303d9e1fee3",
"TemplateId": "ecbedbd8-54be-430e-b89e-681ee99e575d",
"TemplateName": "Page",
"MasterId": "00000000-0000-0000-0000-000000000000",
"SharedFields": [
{
"Id": "c7c26117-dbb1-42b2-ab5e-f7223845cca3",
"Value": "<image mediaid=\"{8E2AFE51-1415-4B7A-A3D2-EF48F49DB3F9}\" />"
},
{
"Id": "a4f985d9-98b3-4b52-aaaf-4344f6e747c6",
"Value": "{C9892497-0D1B-4A3F-B47C-62AB8B5AAFD7}"
}
],
"UnversionedFields": [],
"VersionedFields": [
{
"Id": "9f28e75d-2eaa-495a-93e0-e873da727ac7",
"Value": "Test",
"Version": 1,
"Language": "en"
},
{
"Id": "6e8afedc-d855-49de-ba2e-cc83f3c1947b",
"Value": "<h1>Test header 1</h1>\n<p>Paragraph</p>\n<p>paragraph</p>\n<h2>Test Header 2</h2>\n<p>Paragraph</p>",
"Version": 1,
"Language": "en"
},
{
"Id": "4e0720e9-9d50-4ddc-87cf-ecd65e8e94c8",
"Value": "Test",
"Version": 1,
"Language": "en"
},
{
"Id": "25bed78c-4957-4165-998a-ca1b52f67497",
"Value": "20240816T002532Z",
"Version": 1,
"Language": "en"
},
{
"Id": "8cdc337e-a112-42fb-bbb4-4143751e123f",
"Value": "fb7b5148-7341-4bf4-b29f-871d9817961d",
"Version": 1,
"Language": "en"
},
{
"Id": "d9cf14b1-fa16-4ba6-9288-e8a174d4d522",
"Value": "20240816T003018Z",
"Version": 1,
"Language": "en"
},
{
"Id": "badd9cf9-53e0-4d0c-bcc0-2d784c282f6a",
"Value": "sitecore\\test@sitecore.com",
"Version": 1,
"Language": "en"
},
{
"Id": "3e431de1-525e-47a3-b6b0-1ccbec3a8c98",
"Value": "{72E21251-85B0-4A13-B181-FCE910B08232}",
"Version": 1,
"Language": "en"
},
{
"Id": "001dd393-96c5-490b-924a-b0f25cd9efd8",
"Value": "<r />",
"Version": 1,
"Language": "en"
}
]
},
"Message": "",
"NextState": null,
"PreviousState": {
"DisplayName": "Awaiting Approval",
"FinalState": false,
"Icon": "applications/16x16/document_ok.png",
"StateID": "{0B9F5233-0D63-41C1-A56B-542C71ECFAA4}",
"PreviewPublishingTargets": []
},
"UserName": "sitecore\\test@sitecore.com",
"WorkflowName": "Sample Webhook Workflow",
"WebhookItemId": "d743186e-4fdd-4f06-859c-b6955fb2feb6",
"WebhookItemName": "Webhook Submit Action"
}
少しデータを確認していきます。上記の JSON のデータの中には Workflow に関する情報も含まれていますが、この中でポイントとなるのは DataItem の中身となります。この中のデータを参照していくと以下のようになります。
項目名 | 値 |
---|---|
Id | アイテム ID |
Name | アイテム名 |
ParentId | 親のアイテム ID |
TemplateId | テンプレート ID |
VersionedFields | アイテムで持っているフィールド |
また VersiondFields の中にいくつか項目があります。今回はわかりやすく、それぞれの ID ではなくフィールド名を調べていくと以下のようになります。
ID | 値 | フィールド名 |
---|---|---|
9f28e75d-2eaa-495a-93e0-e873da727ac7 | Test | Title |
6e8afedc-d855-49de-ba2e-cc83f3c1947b | <h1>Test header 1</h1>\n<p>Paragraph</p>\n<p>paragraph</p>\n<h2>Test Header 2</h2>\n<p>Paragraph</p> | Content |
4e0720e9-9d50-4ddc-87cf-ecd65e8e94c8 | Test | Navigation Title |
25bed78c-4957-4165-998a-ca1b52f67497 | 20240816T002532Z | __Created |
8cdc337e-a112-42fb-bbb4-4143751e123f | fb7b5148-7341-4bf4-b29f-871d9817961d | __Revision |
badd9cf9-53e0-4d0c-bcc0-2d784c282f6a | account name | __Updated by |
3e431de1-525e-47a3-b6b0-1ccbec3a8c98 | {72E21251-85B0-4A13-B181-FCE910B08232} | __Workflow state |
001dd393-96c5-490b-924a-b0f25cd9efd8 | <r /> | __Lock |
上記のように、この項目に対してアイテムが持っているコンテンツの主な情報が含まれている形です。
まとめ
今回はワークフローに対して Webhook のアクションを追加して、アイテムのデータがどのように Webhook を通じて渡されているのかを確認しました。これらの情報を利用することで、アイテム ID およびコンテンツの情報が Json でを利用して、外部で処理をして、API を通じて処理をすることが可能になります。