2019.04.18

【MuleSoftクイックスタートガイド】最初のSaaSアプリケーションとの接続

  • このエントリーをはてなブックマークに追加
  • follow us in feedly
gettyimages (10512)

※この記事は、下記Mulesoftの記事を、許可を得ていち早く翻訳したものです。 https://developer.mulesoft.com/guides/quick-start/connecting-your-first-saas-applications

このガイドでは、クイックスタートシリーズのガイド1ガイド2、およびガイド3で作成した作業を活用して、Anypoint Design Centerのflow designerを使用して次のことを行う方法を学びます。

  • スケジュールに従って実行されるサービスを作成します。
  • 2つのデータソースからデータを収集して統合します。
  • ステークホルダーに情報を伝えるために異なるシステムにデータを送信します。

なぜAnypoint Design CenterでAPIを開発するのか?

Anypoint Design CenterのFlow desingerはWebベースのグラフィカルインターフェースで基本的な開発を行うために最適化されています。Flow desingerの利点として次の機能があります。

  • REST Connectを介してAPI仕様から自動生成されたコネクターを素早く活用します。
  • システム間でデータを送受信するためのコネクタをクリックだけで追加できます。
  • DataSenseを利用して視覚的にデータをマッピングできます。
  • アプリケーションを早く簡単にクラウドにデプロイできます。

準備

  1. もしまだAnypoitPlatformの30日無料のアカウント登録を行っていない場合、ここでアカウントの登録を行ってください。Anypoint Exchangeで既存の資産にアクセスしたり、Flow Designerで新しいMuleアプリケーションを作成するのにアカウントが必要になります。
  2. Slack API Tokenの取得。
  3. Salesforce Developer環境にサインアップしてアカウントを取得してください。アカウント情報が後程必要となります。
  4. Salesforceのセキュリティトークンのリセットを行い、新しいトークンをメールで取得してください。こちらも後程必要となります。

Design CenterでAPIをブリッジします。

Design CenterでMuleアプリケーション構築し2つのAPIを統合することによって、実際のビジネスプロセスを推進することができます。作成しようとしているサービスは、スケジューリングされた日時に、次のタスクを実行します。

  1. Salesfroceよりリード情報をすべて取得します。 これらのリード情報はSalesforceのDeveloperアカウントを生成した際に自動で作成されます。
  2. 商品APIをコールして特定の商品の情報を取得します。
  3. リードと商品の情報を集計して、セールスチームのメンバーがリードを引き込む際の情報を把握できるようにします。
  4. CSVデータに変換します。
  5. CSVデータをSlackの特定のチャンネルや個人に向けてアップロードします。

Muleアプリケーションの作成

まず始めにAnypoint Design Centerに移動して新しいMuleアプリケーションのプロジェクトを作成します。

  1. Createボタン → Mule Application
  2. アプリケーション名を入力(e.g. 「Weekly-Product-Leads」)
  3. Createボタンを押下
  4. Go straight to canvasリンクを押下してモーダル画面を閉じてください。

スケジューラートリガーを追加

プロジェクトを作成すると、Muleアプリケーションの最初のフローのキャンバスに移動します。このキャンバスでは、さまざまなコンポーネントを追加してさまざまなプロセスを実行し、タスクを完成させることができます。

アプリケーションがスケジュールで起動するように、Schedulerコンポーネントをトリガーとして追加します。

  1. Trigerボタンを押下して新しいトリガーを追加します。
  2. 表示されたモーダル画面でSchedulerを選択します。
  3. 以下の値でSchedulerを設定します。(以下の設定でスケジューラーはアプリケーション開始後すぐに起動し、以後5分間隔で起動します)
    ・Scheduling Strategy: Fixed Frequency
    ・Time Unit: Minutes
    ・Frequency: 5
    ・Start Delay: 0
  4. 右上のXボタンをクリックしてモーダル画面を閉じます。 代替テキスト

Salesforce queryの追加

すべての新しいリードに対してSalesforceクエリを実行するには、Salesforce connectorをキャンバスに追加し、対応する操作を選択して設定します。

  1. ボタンをクリックして新しいコンポーネントをフローに追加します。
  2. スクロールしてSalesforce connectorを選択します。
  3. queryを選択します。
  4. Click here to set it upリンクを押下して以下の設定を行ってください。
    ・Connection Type: Username Password
    ・Username: (準備のセクションのステップ3で取得したSalesforceのアカウント情報)
    ・Password: (準備のセクションのステップ3で取得したSalesforceのアカウント情報)
    ・Security Token: (準備のセクションのステップ4で取得したSalesforceのセキュリティトークン)
    Testをクリックして、設定が正しいことを確認出来たら、Saveボタンを押下してください。
    代替テキスト

次にSalesforce Query項目にリードオブジェクトのいくつかの項目を返すSOQLクエリを入力します。

sql SELECT Id,FirstName,LastName,Company,Email,Phone FROM Lead WHERE CreatedDate = THIS_MONTH

ボタンを押下してモーダル画面を閉じてください。 代替テキスト

変数を代入する

編集を作成してセットします。Transformモジュールを追加してSlackにエクスポートしたい全てデータを含む変数を作成する必要があります。

  1. キャンバス上でボタンをクリック
  2. Transformを選択
  3. Output payloadの下矢印 → 鉛筆アイコン → Edit Transformation小窓を開きます。
  4. Typeで「vars」を選択してNameを「productLeads」とします。
  5. Saveボタンをクリック
  6. モーダル画面の下部にあるタブでscriptを選択し、変換スクリプトとして下記のDataWeave Codeを指定します。

「//」を指定してコメントを追加することができます。コメントはDataWeaveエンジンでは読み込まれない記述ですが、多くのエンジニアがコードを読む助けとなります。

// Specify the language as DataWeave 2.0
%dw 2.0

// Define the output data type. 
output application/csv

// Denote the end of header section and beginning of body where transformation code is written
---

// Initialize the variable as an empty list (array)
[]
DataWeave Code

代替テキスト

左側のセクションには、DataSenseを使用したこれまでのプロセスから現在のTransformコンポーネントに入るまでのすべての入力変数のデータ構造が含まれています。

中間チェックポイント

SalesforceコネクタのOutputはリードの配列であり、リードの配列の各要素には「Product_Purchased__c」というフィールドが含まれています。このフィールドには今後使用する商品IDが含まれています。この設定により次のようなフローが必要となります。

  1. リストを1つずつ順番に繰り返して各リードを見てください。
  2. Product APIを使用して各リードの商品情報を取得します。このガイドでは固定の商品のID=「1295527d-d3c7-11e7-9c84-06bf056d193e」を使用します。
  3. 商品情報とリード情報をマージします。
  4. 最初のステップに戻りすべてのリードが終わるまで繰り返します。
  5. マージしたデータをCSVファイルに変換してSlackへプッシュします。

繰り返し処理

リードの配列分繰り返し処理を行うにはforeach scopeを追加する必要があります。リードの配列が含まれている変数が「payload」で、その配列のリードの1レコードずつ処理する繰り返し処理を追加する必要があります。

  1. キャンバス上でforeachコンポーネントを追加します。
  2. 以下の設定を行います。
    ・Collection: payload
    ・Batch Size: 1
    ・Root Message Variable Name: rootMessage
    ・Counter Variable Name: counter

既存の資産を再利用する

Anypoint Exchangeの公開リポジトリで利用可能な商品APIがすでにあるので(このガイドの1、2、3を完了している場合は、そこで作成したものを利用することも可能です)、最小限の作業でほとんどコーディングなしでAPIを見つけてサービスを利用できます。次のステップはこのサービスから商品情報を入手することです。

  1. 「DevRel-Quick Start Product API」コンポーネントをForeachスコープ内に追加し、Click here to set it upリンクをクリックしてコネクタの設定を追加します。
  2. 以下を設定します。それ以外の項目は初期値のままにしてください。
    ・Username: mulesoft
    ・Password: mulesoft
  3. コネクタの設定を保存します。 代替テキスト

コネクターの設定を行った後、「Get Product By Product Id」操作の設定を行います。そのためには商品IDの値を渡す必要があります。現在のリードは変数payloadに設定されています。

  1. 固定の商品IDをURIパラメータに指定します。
    ・ Product Id: 1295527d-d3c7-11e7-9c84-06bf056d193e(これは当社の商品DBにある「Lion Mane Costume」の商品IDです) 代替テキスト

変数「payload」には後で使用する必要があるリードデータが含まれているので、リードデータが上書きされないように、商品APIの商品データを新しい変数に格納しましょう。

  1. Advancedタブを選択します。
  2. 以下を入力します。
    ・ Target Variable: product
    ・ Target Value: payload
    代替テキスト

Taget Valueは「payload」をしていますが、実際には商品APIから返されたレスポンスの出力である一時的なローカル変数を参照しており、実際の「payload」とは異なる変数です。(実際のpayloadには現在、リード情報が設定されています。)

データを集約する

この時点で、必要なすべてのデータを「key:value」形式のデータで取得できました。このデータをこれからに「CSV」形式のデータに変換する必要があります。 1. foreachスコープ内にTransformコンポーネントを追加します。OutputをpayloadからproductLeadsに変換します。鉛筆アイコンをクリックして以下のように指定します。

  • Type: vars
  • Name: productLeads
  1. モーダル画面下部にあるScriptタブを選択して、以下のDataWwave変換コードを入力してください。
%dw 2.0
output application/csv
---
// This sets a default value of an empty array to vars.productLeads just in case it's not set. It will then append the object we want to it.
(vars.productLeads default []) ++ [
    {
        // This is a 1:1 mapping of values from the payload (contains lead data) and product variables
        firstName: payload.FirstName,
        lastName: payload.LastName,
        company: payload.Company,
        email: payload.Email,
        phone: payload.Phone,
        productModel: vars.product.model,
        productPrice: vars.product.price.amount.currencyValue,
        productCurrency: vars.product.price.amount.currency,
        productDescription: vars.product.description
    }
]
DataWwave変換コード

Slackにアップロードする

最後のステップはSlackコネクターを追加して設定することです。

  1. ボタン(foreachスコープの外側)をクリックする
  2. Slackコネクターを選択
  3. File - Uploadを選択
  4. まずClick here to set it upをクリックしてSlackの設定を行います。
    Connection Typeに任意のものを指定します。このガイドでは1 - Token Connectionをお勧めします。
    ・SlackよりTokenを取得します。
    ・取得したTokenを貼り付けます。
    Saveボタンをクリックします。

次にFile - Uploadオペレーションの設定を行います。以下のとおりに設定を行ってください。

  • Content: vars.productLeads
  • Channels: [“YOUR USER/CHANNEL HERE”]
    e.g. ["account_development","@xyzuser"]
  • File Name: "Product-Lead.csv"
  • Title: This week’s product leads
  • Initial Comment:
  • File Type: text/csv

もし会社のアカウントでtokenの生成の権限がない場合、無料のSlack workspaceをご利用ください

動作確認

キャンバスにすべての設定が完了したら、クイックテストを実行して期待通りに動作することを確認します。アプリケーションを実行するには、ページのヘッダにある緑色の「実行」ボタンを押すだけです。これでMuleアプリケーションが一時的なワークスペースにロードされます。

代替テキスト

SlackチャンネルまたはユーザーへのDM(選択したものに応じて)内に、以下のように添付ファイルとしてアップロードされたCSVを含む新しいメッセージが表示されます。(5分ごとに実行されます。)

代替テキスト

メモ:Salesforce Developerアカウントには、APIの呼び出しに制限があります。SalesforceコネクタからAPI制限を超えたというエラーが発生した場合は、新しいアカウントにサインアップする必要があります。

スケジューラーのクーロンセッティング

Muleアプリケーションは動作することがわかったので、毎週月曜日の午前8時にcronジョブとして実行するように変更します。

  1. Schedulerコネクターをクリックして設定ダイアログを表示する
  2. Scheduling Strategycronを選択
  3. Expressionに毎週月曜日の午前8時を指定
  4. Time zoneにJavaのtime zoneフォーマットで記述(e.g. Asia/Tokyo) 代替テキスト

アプリケーションのデプロイ

デプロイの準備が整いました。CloudHubにアップして実行するにはいくつかのクリックを行うだけです。

  1. flow designerの上部にあるDeployボタンをクリックします
  2. アプリケーションをデプロイする環境を選択します。(e.g. sandbox)
  3. アプリケーション名を指定します。
  4. Deployボタンをクリック

おめでとうございます。これで2つのAPIからデータを定期的に取得し、データ型を変換し、集約し、別のサービスにデータをアップロードするアプリケーションを(ほとんどコードを記述せずに)構築することができました。

36 件
     
  • banner
  • banner

関連する記事