~前編~」の続きとなる後編です。Learning(以下AzureML)の機械学習を使って学ばせて、見積もりをする時に工数を予測しようというものです。前編ではAzureML側で学習済モデルを作り、WebAPIとして公開するところまで作りました。後編となる今回はSalesforceからAzureMLのWebAPIを呼び出し、見積の情報を渡して学習結果から返される予測された工数を表示してみましょう。流れとしては以下のようになります。見積オブジェクトの標準レイアウトにVisualforceを埋め込んで、そこからボタンで処理を起動します。ボタンが押されるとApexのControllerで画面に表示している見積レコードからJSONを作り、AzureMLのWebAPIへ渡します。前編で作成した学習済みのモデルが渡ってきた見積情報から実績工数を算出してJSONで返します。それを受け取ったら画面上に「実績工数はこのくらいかかる見込みですよ」と表示させることにします。リモートサイトの設定まずSalesforceから外部サイト(今回はAzure)を呼び出すためには、あらかじめリモートサイトに登録しておく必要があります。設定メニューからリモートサイトを新規作成します。URLはAzureML側で作成したAPIのドキュメントページに書いてあるリクエストのエンドポイントを参照してください。私の場合はWorkSpaceを東南アジアに作ったので、URLは「https://asiasoutheast.services.azureml.net」としています。Apexを作る続いて今回のメインとなるApexを作っていきましょう。全体のコードを提示して、後でポイントとなる部分をいくつか解説していきます。set;}}}基本的にやることは見積レコードからAPIの仕様に沿ったJSONを作り、その後APIを呼び出す。結果のJSONを受け取り画面に表示する。いったJOSNを作ればいいかというのはAzureML側で作ったWebAPIのドキュメントにサンプルが自動生成されています。今回はこんな感じです。{}}"ColumnNames"に項目名、"Values"に配列で値を入れたJSONを作るようです。いうことでSOQLで必要な情報を取得しJSONを作ります。values);getFieldLabelでは項目のAPI名からラベル名を取得しています。最初からAzureML側のインターフェースをAPI参照名で作っておけばこの辺は省略できますが、今回はAzureML側での分かりやすさを優先しました。createRequestJsonでAPIの仕様に沿ったJSONを作っています。次にリクエストを作成して投げています。h.send(req);リクエストのエンドポイントはAPIドキュメントに記載されています。KEYをセットします。こちらもAzureML側のWebAPIのページに記載されています。ヘッダーをセットし、ボディにリクエストのJSONをセットしたらコールします。後は戻ってきた結果を画面に表示するだけです。res.getBody();}getScoreでは戻ってきたJSONから工数予測値を抜き出しています。JSONの戻りの形式もAPIドキュメントにサンプルが載っているので確認すると良いでしょう。これでApexは完成です。Visualforceを作るVisualforceは簡単です。style="display:none"/></apex:form><p>{!screenMsg}</p></apex:page>標準ページレイアウトに埋め込むのでstandardControllerで見積オブジェクトを指定し、拡張クラスとして作成したApexクラスを指定します。後はボタンを実装してactionにApexクラスで作ったリクエストコールの処理を呼び出すだけです。最後はVisualforceを見積オブジェクトのページレイアウトに配置します。完成したので画面から実行してみましょう。実行結果サンプルで入力した見積は5人参画で7ヶ月の見積でしたが、予測工数が47.5人月でした。このままだと炎上プロジェクト待ったなしになので、メンバーや期間を再考した方がいいかもしれません。(あくまでシナリオ上のお話ですが)最後に前編後編に渡ってAzureとSalesforceで機械学習を使った連携をご紹介しました。SalesforceではIQだけではなく今後もAIに関連するサービスが出てくる見込みですが、おそらく汎用的なAIサービスはプラットフォームとして出してこないと思われます。個人的な憶測ですが、あくまでSalesCloud、ServiceCloud、MarketingCloudなどのサービスの補助的な位置づけとして、AIの機能を提供されるのではないかと思います。した時に独自のアプリケーションに機械学習を取り入れたい場合、AzureやAmazonなどのクラウドサービスを組み合わせてみるというのは一つの選択肢になるでしょう。教育など、活用のエリアはまだまだ沢山あります。今後さらに機械学習の知識が必要となる場面も増えてくると思われるので、ぜひこの機会に触ってみてください。検索クラウドやるならテラスカイ。求む!Salesforce開発エンジニア。