[Cloud] Sales CloudにProcess Cloud Serviceの画面を埋め込む

このエントリは、JPOUG Advent Calendar 2016の12月23日分です。
JPOUG Advent Calendar 2016
https://jpoug.doorkeeper.jp/events/53797
昨日は@mutatsuさんでした。
分割読み込みでフラッシュバック問合せの利用
https://mutatsu.wordpress.com/2016/12/22/%E5%88%86%E5%89%B2%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%A7%E3%83%95%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%83%90%E3%83%83%E3%82%AF%E5%95%8F%E5%90%88%E3%81%9B%E3%81%AE%E5%88%A9%E7%94%A8/
今年は仕事色の薄い内容を書きたかったのですが、色々ありまして、「OracleのSaaSとPaaSを組み合わせる」という、昨年に引き続き非常に仕事色の濃いエントリでございます……。

ユースケースと要求事項

見積作成にあたり値引き率が高い場合、その値引率に対し上長から承認を得る必要がある、という業務上のルールは多くの企業で存在します。商談を管理するシステムであれば、そういった要求に対応するため、基本的な承認ワークフロー機能を有していることがほとんどです。ところが、20%までは上長の承認不要、20~40%は1段(直接の上長のみ)、40~60%までは2段、それ以上は3段、4段…といった具合に、値引き率に応じて承認階層を増やす仕組みまで備わっていることは少ないようです。
こういった多段階承認の要求を実現する場合、別の汎用ワークフロー製品を組み合わせることがよくありますが、今度は、以下のような要求が出てきます。
  • 承認申請をあげるために別システムのUIを開き、コピー&ペーストするなんて論外でしょ
  • 情報転記を自動化できたとしても、やはり明示的に別システムにログインするのではなく、ワークフローのUIが組み込まれていて欲しいなぁ
  • ワークフロー製品とのために別のIDを使ってログインしたくないので、Single Sign-onは必須ですな
このような要求事項を解決するにはどうすればよいでしょうか。

今回利用するもの

今回は、Oracle Sales CloudとOracle Process Cloud Service (PCS) を組み合わせた例をご紹介します。PCSで作成した承認申請アプリケーションの開始フォームを、Oracle Sales CloudのUIに埋め込み、Sales Cloudのデータを初期値としてPCSのUIに設定できれば、要求事項は解決できそうに見えます。具体的には、以下のような感じです。
  • Sales Cloudの営業>商談に新しいタブを追加する
  • 当該タブにPCSで作成したアプリケーションのUIを埋め込む
  • タブをクリックすると、Sales Cloudのデータを初期値として利用したPCSの開始フォームが開く
その前に、PCSとSales Cloudについて…。

Oracle Process Cloud Service (PCS)って?

Oracle Cloud Platformの一つのサービスで、クラウド上で利用可能なBPM (Business Process Management) ツールです。PCSはワークフローに必要な機能だけでなく、ビジネスルール機能も備えています。そのため、先ほどのユースケースのように、ビジネスルールを使って値引率に応じて承認階層を算定したり、値引き率が低い場合には上長の承認無しでプロセスを進めたり、といった判断のロジックをプロセスに埋め込まずに、後から変更できるよう外出しすることができます。
PCSの詳細は以下のURLからどうぞ。ただ、Java Cloud ServiceやDatabase Cloud Serviceと異なり、試使用のリクエストはWebページからできませんので、ご所望の方は、貴社担当の日本オラクルの営業にお問合せください。
Process Cloud Service
http://cloud.oracle.com/ja_JP/process

Oracle Sales Cloudって?

今風に言えば、Customer Experienceの向上を支援するためのSaaSです。昔風に言えば、顧客管理・営業支援のアプリケーションです。
Sales Cloud
https://cloud.oracle.com/ja_JP/sales-cloud

    Single sign-onはどうやって実現する?

    PCSとSales Cloudが同一アイデンティティドメインに所属していれば、同じユーザーID、パスワードでアクセスできます。さらに、Federated Single Sing-On使えば、オンプレミスで使っているLDAP、例えばActive Directoryに登録されたユーザーとパスワードでアクセスできます。Federated Single Sing-Onに関しては、詳しくは以下のドキュメントをご覧ください。
    Oracle Sales Cloud Securing Oracle Sales Cloud Release 11
    Implementing Federated Single Sign-On
    https://docs.oracle.com/cloud/latest/salescs_gs/OSCUS/OSCUS1728626.htm#OSCUS1728626

    Oracle® Cloud Using Oracle Process Cloud Service 16.4.5
    Configuring Federated SSO and Authentication
    https://docs.oracle.com/cloud/latest/process_gs/CPRCW/GUID-02911F68-A3E1-4E69-A1F5-06E65FB936F0.htm#CPRCW-GUID-02911F68-A3E1-4E69-A1F5-06E65FB936F0

    PCSで実施しておくこと

    まず、アプリケーションを作成します。今回は、単純にSales CloudにUIを貼り付けられればよいので、以下のようなプロセスにしています。


    実際に運用する場合は、UIからプロセスを開始し、値引き率で承認階層を判定、結果を起票者に通知するとともに、承認されたものについては、Sales Cloudの情報を更新するようなアプリケーションにする必要があるでしょう。


    フォームは、今回はシンプルにSales CloudのOpportunity IDとOpportunity Nameを表示するだけにしていますが、実際に利用するなら、Sales Cloudの情報を色々表示することになるでしょう。


    Sales CloudにUIを埋め込むためには、PCSのEmbeddable Process UI Componentsを使います。
    Oracle® Cloud Using Oracle Process Cloud Service 16.4.5
    Embedding Process UI Components in Other Applications
    http://docs.oracle.com/cloud/latest/process_gs/CPRCW/GUID-66587F65-C081-4961-BE92-6B1766586C14.htm#CPRCW-GUID-66587F65-C081-4961-BE92-6B1766586C14
    IFRAMEで取り出すためのコンポーネントがあるので、今回はそれを使います。URLは以下のようです。
    https://{PCSのURL}/bpm/components/pages/startform.html
    例えば、こんな感じです。
    https://process-xxxx.process.yyy.oraclecloud.com/bpm/components/pages/startform.html
    JSON形式でパラメータを設定すると、起動対象のPCSアプリケーションを指定することができます。以下はその例です(見やすくするため改行を入れていますが、実際には当然ながら1行で指定します)。
    https://process-xxxx.process.yyy.oraclecloud.com/bpm/components/pages/startform.html?startformData=
    {
      "processDefId":"default~Application!1.0~Process",
      "serviceName":"Process.service",
      "processName":"Process",
      "title":"てすと",
      "operation":"start",
      "startType":"START_PCS_FORM",
      "isDocsEnabled":true
    }
    [注意]
    ここで出てくるstartTypeには、旧来のBasic FormであればSTART_FORMを、新しいWeb Formの場合は、START_PCS_FORMを指定する必要があります。
    processDefId、serviceName、processName、operationなどは、以下のPCSのREST APIを使って取得した結果を設定します。
    REST API for Oracle Process Cloud Service
    Retrieve Process Definitions
    http://docs.oracle.com/cloud/latest/process_gs/CPRRA/op-process-definitions-get.html
    以下は取得結果の例です。
    {
      "levels": 0,
      "links": [
        {
          "href": "https://process-xxxx.process.yyy.oraclecloud.com/bpm/api/3.0/process-definitions",
          "length": 0,
          "rel": "self"
        },
        {
          "href": "https://process-xxxx.process.yyy.oraclecloud.com/bpm/api/3.0/",
          "length": 0,
          "rel": "parent"
        }
      ],
      "items": [
        {
          "processDefId": "default~Application!1.0~Process",
          "processName": "Process",
          "application": "default",
          "revision": "1.0",
          "domain": "default",
          "interfaces": [
            {
              "title": "Start from OSC(1.0)",
              "serviceName": "Process.service",
              "operation": "start",
              "startType": "START_PCS_FORM",
              "category": "",
              "args": [
                {
                  "name": "formArg",
                  "type": "{http://xmlns.oracle.com/bpm/forms/schemas/DemoForm}DemoForm",
                  "location": "https://process-xxxx.process.yyy.oraclecloud.com/soa-infra/services/default/Application!1.0*soa_ad130b2e-fdf1-403f-9f88-552345f0e06b/forms/schemas/DemoForm.xsd",
                  "schema": null,
                  "primitive": false
                }
              ],
              "formMetadata": "webform://appId=;formId=;oId=;service=Process.service;operation=start;dn=default/Application!1.0*soa_ad130b2e-fdf1-403f-9f88-552345f0e06b/Process;formName=DemoForm;ns=http://xmlns.oracle.com/bpmn/bpmnCloudProcess/Application/Process;href=https://process-xxxx.process.yyy.oraclecloud.com/bpm/api/3.0/webforms/default~Application!1.0~Process~80a9e329-9f29-4052-9f38-fc5856a21ca1~a0d16f69-77e8-4431-97a6-97b5015d9100"
            }
          ],
          "processIcon": {
            "initials": "A",
            "colorCode": "rgb(197,182,79)"
          },
          "isDocsEnabledFlag": true,
          "isConversationEnabledFlag": false
        }
      ]
    }
    
    開始フォームに初期値を設定するためには、startform.htmlのパラメータとして、payloadを付けます。今回の場合は、opportunityIDとnameというテキストフィールドに初期値を設定するため、以下のような感じです(見やすくするため改行を入れていますが、実際には当然ながら1行で指定します)。
    https://process-xxxx.process.yyy.oraclecloud.com/bpm/components/pages/startform.html?startformData=
    {
      "processDefId":"default~Application!1.0~Process",
      "serviceName":"Process.service",
      "processName":"Process",
      "title":"てすと",
      "operation":"start",
      "startType":"START_PCS_FORM",
      "isDocsEnabled":true
    }
    &payload=
    {
      "opportunityID":"300000130602218",
      "name":"なまえ"
    }
    [注意]
    この開始フォームに初期値を設定する方法は、Web Formでのみ利用可能で、Basic Formでは使えません。

    できあがったら、アプリケーションをデプロイしておきます。

    Sales Cloudで実施しておくこと

    Sales Cloudには、サンドボックスという機能があり、これを使うと実運用中のサービスに影響を与えずに、カスタマイズの実施および動作確認することができます(もちろんカスタマイズが完了後、そのカスタマイズ内容を公開することもできます)。今回はサンドボックス環境で動作確認しています。
    カスタマイズのライフサイクルについては、以下のドキュメントをご覧ください。
    Oracle Sales Cloud Customizing Sales Release 11
    Customization Life Cycle
    https://docs.oracle.com/cloud/latest/salescs_gs/OACEX/OACEX1607004.htm#OACEX1607004
    ページにタブを追加するといったカスタマイズ手順は、以下ドキュメントをご覧下さい。
    Oracle Sales Cloud Customizing Sales Release 11
    Extending Simplified Pages
    Working with Subtabs
    https://docs.oracle.com/cloud/latest/salescs_gs/OACEX/OACEX1078865.htm#OACEX1906352
    Sales Cloudの設定の肝は、WebコンテンツのURLです。
    URLとして、上記のEmbeddable Process UIのstartform.htmlを指定するわけですが、下図の[URL定義]>[スクリプトの編集]に文字列として指定します。つまり、ダブルクォートで囲む必要があります。そのため、必然的にJSONのダブルクォートはエスケープする必要があります。

    Sales Cloudからのデータを初期値として渡したいので、Opportunityオブジェクトの内部IDであるOpportunity ID (OptyId) と、Opportunity Name (Name) を使い、文字列を連結してURLを作成していきます。最終的なURL文字列は以下のようになります(見やすくするため改行を入れていますが、実際には当然ながら1行で指定します)。
    "https://process-xxxx.process.yyy.oraclecloud.com/bpm/components/pages/startform.html?startformData=
    {
      \"processDefId\":\"default~Application!1.0~Process\",
      \"serviceName\":\"Process.service\",
      \"processName\":\"Process\",
      \"title\":\"てすと\",
      \"operation\":\"start\",
      \"startType\":\"START_PCS_FORM\",
      \"isDocsEnabled\":true
    }
    &payload=
    {
      \"opportunityID\":\"" + OptyId.toString() + "\",
      \"name\":\"" + Name + "\"
    }"
    URLを指定後、設定を保存しておきます。

    動作確認

    [営業]>[商談]を開きます。


    任意の商談をクリックします。この例ではTecra Data Inc.をクリックしています。このTecra Data Inc.がOpportunityオブジェクトのOpportunity Nameに相当します。


    作成したSub Tabをクリックします。


    無事にPCSアプリケーションのフォームが開き、Sales CloudのUIに埋め込まれていることがわかります。初期値として、Tecra Data Inc.も確認できます。


    コードらしいコードをほとんど書かずにUIを埋め込むことができました。開発者の立場からすると、コードを書きたくなるのですが、要望が各ツールの標準機能で賄え、さくっと作ることが求められるのであれば、こういうしくみを積極的に使うのもありですね。

    明日12月24日は吉田もとたかさんです。
    Happy holidays and have a great weekend!

    0 件のコメント:

    コメントを投稿