現在表示中:

このページでは、ワークフローで使用する REST API について説明します。

REST API では次の操作が可能です。

  • ワークフローサービスの開始と停止
  • ワークフローモデルの作成、更新、削除
  • ワークフローインスタンスの起動、休止、再開、終了
  • 作業項目の完了、委任

注意:

ワークフローコンソールでは REST API を多く使用します。Web 開発用の Firefox の拡張機能である Firebug を使用すると、コンソールの操作時に HTTP トラフィックを追跡できます。例えば、POST リクエストにより AEM サーバーに送信されたパラメーターと値を確認できます。

このページでは、AEM がローカルホストのポート 4502 で動作しており、インストールコンテキストが「/」(ルート)であると想定しています。実際のインストール状況が異なる場合は、HTTP リクエストが適用される URI を実際の状況に合わせて変更してください。

GET リクエストに対応するレンダリングは JSON レンダリングです。GET の URL の拡張子は、次のように .json となる必要があります。

http://localhost:4502/etc/workflow.json

ワークフローインスタンスの管理

以下の HTTP リクエストメソッドが、次の URL に適用されます。

http://localhost:4502/etc/workflow/instances

   
HTTP リクエストメソッド
 アクション
 GET 使用可能なワークフローインスタンスをリストします。
 POST

新しいワークフローインスタンスを作成します。パラメーターを以下に示します。

- 「model」:対応するワークフローモデルの ID(URI)

- 「payloadType」:ペイロードのタイプ(JCR_PATH または URL など)を格納します。

ペイロードはパラメーター「payload」として送信されます。新しいワークフローインスタンスリソースの URL を格納したロケーションヘッダーを持つ 201(CREATED)の応答が返されます。

状態によるワークフローインスタンスの管理

以下の HTTP リクエストメソッドが、次の URL に適用されます。

http://localhost:4502/etc/workflow/instances.{state}

   
HTTP リクエストメソッド
 アクション
 GET 使用可能なワークフローインスタンスとその状態(RUNNING、SUSPENDED、ABORTED または COMPLETED)を一覧表示します

ID によるワークフローインスタンスの管理

以下の HTTP リクエストメソッドが、次の URL に適用されます。

http://localhost:4502/etc/workflow/instances/{id}

   
HTTP リクエストメソッド
 アクション
 GET それぞれのワークフローモデルへのリンクを含むインスタンスデータ(定義とメタデータ)を取得します。
 POST インスタンスの状態を変更します。新しい状態がパラメーター「state」として送信されます。状態は、RUNNING、SUSPENDED または ABORTED のいずれかでなければなりません。

新しい状態にアクセスできない場合(強制終了したインスタンスを休止にするなど)は、409(CONFLICT)の応答がクライアントに返されます。

ワークフローモデルの管理

以下の HTTP リクエストメソッドが、次の URL に適用されます。

http://localhost:4502/etc/workflow/models

   
HTTP リクエストメソッド
 アクション
 GET 使用可能なワークフローモデルを一覧表示します。
 POST 新しいワークフローモデルを作成します. パラメーター「title」を送信すると、指定されたタイトルで新しいモデルが作成されます。JSON モデル定義をパラメーター「model」として付加すると、指定された定義に応じて新しいワークフローモデルが作成されます。

新しいワークフローモデルリソースの URL を格納したロケーションヘッダーを持つ 201 の応答(CREATED)が返されます。

モデル定義を「modelfile」というファイルパラメーターとして付加した場合も同じことが起こります。

「model」パラメーターと「modelfile」パラメーターのどちらの場合も、シリアル化フォーマットを定義するには、「type」という追加パラメーターが必要です。新しいシリアル化フォーマットは、OSGI API を使用して統合できます。標準の JSON シリアライザーは、ワークフローエンジンに付属しています。そのタイプは JSON です。フォーマットの例は、以下を参照してください。

例:ブラウザーで http://localhost:4502/etc/workflow/models.json へのリクエストをおこなうと、次のような json ファイルが取得されます。

[

    {"uri":"/etc/workflow/models/collab/comment_moderation"}

    ,{"uri":"/etc/workflow/models/dam/dam_asset_syncer_and"}

    ,{"uri":"/etc/workflow/models/dam/delete_asset"}

    ,{"uri":"/etc/workflow/models/dam/delete_dam_asset"}

    ,{"uri":"/etc/workflow/models/dam/dam_set_last_modified"}

    ,{"uri":"/etc/workflow/models/dam/dam_update_dam_content_create"}

    ,{"uri":"/etc/workflow/models/dam/dam_update_dam_content_del"}

    ,{"uri":"/etc/workflow/models/dam/dam_update_var_folder_create"}

    ,{"uri":"/etc/workflow/models/dam/dam_update_var_folder_delete"}

    ,{"uri":"/etc/workflow/models/dam/update_asset"}

    ,{"uri":"/etc/workflow/models/dam/update_from_lightbox"}

    ,{"uri":"/etc/workflow/models/my_workflow"}

    ,{"uri":"/etc/workflow/models/newsletter_example"}

    ,{"uri":"/etc/workflow/models/product_of_the_day"}

    ,{"uri":"/etc/workflow/models/publish_example"}

    ,{"uri":"/etc/workflow/models/request_for_activation"}

    ,{"uri":"/etc/workflow/models/request_for_deactivation"}

    ,{"uri":"/etc/workflow/models/scheduled_activation"}

    ,{"uri":"/etc/workflow/models/scheduled_deactivation"}

    ,{"uri":"/etc/workflow/models/translation"}

    ,{"uri":"/etc/workflow/models/welcome_new_employees"}

]

特定のワークフローモデルの管理

以下の HTTP リクエストメソッドが、次の URL に適用されます。

http://localhost:4502{uri}

ここで、{uri} はリポジトリ内のモデルノードへのパスです。

   
HTTP リクエストメソッド
 アクション
 GET モデル(定義とメタデータ)の HEAD バージョンを取得します。
 PUT モデルの HEAD バージョンを更新します(新しいバージョンを作成します)。

モデルの新しいバージョンのすべてのモデル定義を「model」というパラメーターとして追加する必要があります。さらに、新しいモデルの作成時には「type」パラメーターが必要で、値は「JSON」にする必要があります。
 POST PUT の場合と同じ動作です。AEM ウィジェットは PUT 操作をサポートしていないので、これが必要になります。
 DELETE モデルを削除します。ファイアウォールやプロキシの問題を解決するために、値 DELETE の X-HTTP-Method-Override ヘッダーエントリを格納した POST も DELETE リクエストとして受け入れられます。

例:ブラウザーで http://localhost:4502/etc/workflow/models/publish_example.-1.json へのリクエストをおこなうと、次のコードのような json ファイルが返されます。

{
  "description": "This example shows a simple review and publish process.",
  "title": "Publish Example",
  "jcr:predecessors": [
  ],
  "sling:resourceType": "cq/workflow/components/model",
  "jcr:uuid": "675f04fd-eb3c-44b9-9921-90926c8fc0f0",
  "jcr:versionHistory": "44fb918c-b081-47d8-95b8-dbd68b9cce08",
  "jcr:baseVersion": "75ce2903-9159-4bf7-8b0d-af232e252fbb",
  "jcr:primaryType": "cq:WorkflowModel",
  "jcr:isCheckedOut": false,
  "metaData": {
    "tags": "wcm",
    "jcr:primaryType": "nt:unstructured"
  },
  "nodes": {
    "jcr:primaryType": "nt:unstructured",
    "node0": {
      "title": "Start",
      "description": "The start node of the workflow.",
      "type": "START",
      "jcr:primaryType": "cq:WorkflowNode",
      "metaData": {
        "jcr:primaryType": "nt:unstructured"
      }
    },
    "node1": {
      "title": "Validate Content",
      "description": "Validate the modified content.",
      "type": "PARTICIPANT",
      "jcr:primaryType": "cq:WorkflowNode",
      "metaData": {
        "PARTICIPANT": "admin",
        "jcr:primaryType": "nt:unstructured"
      }
    },
    "node2": {
      "title": "Publish Content",
      "description": "Publish the modified content.",
      "type": "PROCESS",
      "jcr:primaryType": "cq:WorkflowNode",
      "metaData": {
        "PROCESS_AUTO_ADVANCE": "true",
        "PROCESS": "com.day.cq.wcm.workflow.process.ActivatePageProcess",
        "jcr:primaryType": "nt:unstructured"
      }
    },
    "node3": {
      "title": "End",
      "description": "The end node of the workflow.",
      "type": "END",
      "jcr:primaryType": "cq:WorkflowNode",
      "metaData": {
        "jcr:primaryType": "nt:unstructured"
      }
    }
  },
  "transitions": {
    "jcr:primaryType": "nt:unstructured",
    "node0#node1": {
      "to": "node1",
      "from": "node0",
      "jcr:primaryType": "cq:WorkflowTransition",
      "metaData": {
        "jcr:primaryType": "nt:unstructured"
      }
    },
    "node1#node2": {
      "to": "node2",
      "from": "node1",
      "jcr:primaryType": "cq:WorkflowTransition",
      "metaData": {
        "jcr:primaryType": "nt:unstructured"
      }
    },
    "node2#node3": {
      "to": "node3",
      "from": "node2",
      "jcr:primaryType": "cq:WorkflowTransition",
      "metaData": {
        "jcr:primaryType": "nt:unstructured"
      }
    }
  }
}

バージョンによるワークフローモデルの管理

以下の HTTP リクエストメソッドが、次の URL に適用されます。

http://localhost:4502/etc/workflow/models/{id}.{version}

   
HTTP リクエストメソッド
 アクション
 GET 指定されたバージョンのモデルのデータを取得します(存在する場合)。

(ユーザーの)インボックスの管理

以下の HTTP リクエストメソッドが、次の URL に適用されます。

http://localhost:4502/bin/workflow/inbox

   
HTTP リクエストメソッド
 アクション
 GET ユーザーのインボックスにある作業項目を一覧表示します。ユーザーは、HTTP 認証ヘッダーによって識別されます。
 POST URI がパラメーター「item」として送信される作業項目を完了し、一致するワークフローインスタンスを次のノードに進めます。次のノードは、パラメーター「route」(1 ステップ戻る場合はパラメーター「backroute」)によって定義されます。

パラメーター「delegatee」を送信した場合は、パラメーター「item」によって識別される作業項目が、指定された参加者に委任されます。

WorkItem ID による(ユーザーの)インボックスの管理

以下の HTTP リクエストメソッドが、次の URL に適用されます。

http://localhost:4502/bin/workflow/inbox/{id}

   
HTTP リクエストメソッド
 アクション
 GET WorkItem ID によって識別されるインボックスの WorkItem のデータ(定義とメタデータ)を取得します。

ワークフローエンジンの管理

以下の HTTP リクエストメソッドが、次の URL に適用されます。

http://localhost:4502/etc/workflow

   
HTTP リクエストメソッド
 アクション
 GET ワークフローエンジンの状態(OSGi SCR サービスコンポーネントの状態の一覧を取得するには OSGI ドキュメントを参照してください)と設定パラメーターを取得します。
 POST ワークフローエンジンを開始または停止します。新しい状態がパラメーターとして送信されます。状態は ACTIVE または DISABLED のどちらかです。

新しい状態にアクセスできない場合(既に停止しているワークフローエンジンを停止するなど)は、ステータス 409 の応答(CONFLICT)がクライアントに返されます。

例:ブラウザーで http://localhost:4502/etc/workflow.json へのリクエストをおこなうと、次のような json ファイルが取得されます。

{
    state: "ACTIVE"
    component.name: "com.day.cq.workflow.impl.CQWorkflowService"
    cq.workflow.models: "/etc/workflow/models"
    cq.workflow.group: "workflow-users"
    service.vendor: "Day Management AG"
    cq.workflow.instances: "/etc/workflow/instances"
    cq.workflow.superuser: "[Ljava.lang.String;@44945113"
    service.pid: "com.day.cq.workflow.impl.CQWorkflowService"
    component.id: "197"
    cq.workflow.workspace: "crx.default"
    service.description: "%cq.workflow.service.description"
    cq.workflow.job.retry: "3"
    cq.workflow.inbox: "workflow-inbox"
}

基本的な例とハウツー

ワークフローを開始する方法

ワークフローを開始するには、次のように POST を実行します。

  • URL:http://localhost:4502/etc/workflow/instances
  • 使用するパラメーター:
    • model:モデル ID
    • payload:ペイロード
    • payloadType:ペイロードの種類
    • (オプション)startComment:コメント
    • (オプション)workflowTitle:ワークフローのタイトル

curl を使用した例:

curl -u admin:admin -d "model=/etc/workflow/models/request_for_activation/jcr:content/model&payload=/content/geometrixx/en/company&payloadType=JCR_PATH&workflowTitle=myWorkflowTitle" http://localhost:4502/etc/workflow/instances

実行中のすべてのワークフローのリストを取得する方法

実行中のすべてのワークフローのリストを取得するには、次の URL に対して GET を実行します。

http://localhost:4502/etc/workflow/instances.RUNNING

curl を使用した例:

curl -u admin:admin http://localhost:4502/etc/workflow/instances.RUNNING.json

古いワークフローを停止する方法

古いワークフローを停止するには、次のように POST を実行します。

  • URL:http://localhost:4502/etc/workflow/instances/{id}
  • 使用するパラメーター:
    • state:値は必ず「ABORTED」にします。

curl を使用した例:

curl -u admin:admin -d "state=ABORTED"  http://localhost:4502/etc/workflow/instances/{id}

注意:

古いワークフローをすべて curl を使用して停止するには、スクリプトを作成して、古い各ワークフローを全体でループ処理し、各ワークフローを上記のコマンドによって停止します。

ワークフローのタイトルを変更する方法

ワークフローコンソールの「インスタンス」タブに表示されているワークフローのタイトルを変更するには、次のように POST コマンドを送信します。

  • URL:http://localhost:4502/etc/workflow/instances/{id}
  • 使用するパラメーター:
    • action:値は必ず「UPDATE」にします。
    • workflowTitle:ワークフローのタイトル

curl を使用した例:

curl -u admin:admin -d "action=UPDATE&workflowTitle=myWorkflowTitle" http://localhost:4502/etc/workflow/instances/{id}

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー