tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:Integration Workbookを読んでHerokuとForce.com連携について勉強しました

f:id:tyoshikawa1106:20150404235700p:plain

開発者向けワークブック

はじめに

チュートリアルを始める前に以下の準備をしておきます。

  • ステップ 1: Warehouse データモデルをインストールする
  • ステップ 2: Heroku アカウントを作成する
  • ステップ 3: Heroku Toolbelt をインストールする

SalesforceのDeveloper組織にパッケージをインストールしてHerokuのアカウントを作成しておけばいいみたいです。

チュートリアル 1

Heroku アプリケーションの新規作成

ステップ 1: GitHub プロジェクトをコピーする

次のコマンドで実行できます。

git clone https://github.com/sbob-sfdc/spring-mvc-fulfillment-base

f:id:tyoshikawa1106:20150405012234p:plain

f:id:tyoshikawa1106:20150405012506p:plain

ステップ 2: Heroku プロジェクトを作成する

1. コマンドラインターミナルで、ディレクトリを前のステップで作成した spring-mvc-fulfillment-baseフォルダに変更します。

cd spring-mvc-fulfillment-base

2. 次のコマンドを実行して Heroku にログインします (必要に応じて、Heroku ログイン情報を続けて入力します)。

heroku login

f:id:tyoshikawa1106:20150405013006p:plain

3. 次のコマンドを実行して、Heroku に新しいアプリケーションを作成します。

heroku create

f:id:tyoshikawa1106:20150405013838p:plain

Herokuにアプリが作成されます。
f:id:tyoshikawa1106:20150405014028p:plain

4. ローカルコードを Heroku にリリースするには、次のコマンドを実行します。

git push heroku master

f:id:tyoshikawa1106:20150405014445p:plain

5. プロセスが完了したら、次のコマンドを実行して既存のアプリケーションをプレビューできます。

heroku open

f:id:tyoshikawa1106:20150405014824p:plain

f:id:tyoshikawa1106:20150405014540p:plain

ステップ 3: アプリケーションをテストする

このステップでは、アプリケーションの簡易テストを実行してその動作を確認する方法を説明します。
1. ブラウザタブまたはウィンドウで、https://{appname}.herokuapp.com に移動します。
f:id:tyoshikawa1106:20150405015157p:plain

2. [Ajax @Controller Example (Ajax @Controller の例)] をクリックします。
f:id:tyoshikawa1106:20150405015222p:plain

3. 別のブラウザタブまたはウィンドウで、Force.comインスタンスの Warehouse アプリケーションを開きます。
f:id:tyoshikawa1106:20150405015411p:plain

4. [Invoices (請求書)] をクリックし、既存の請求書を選択するか、必要に応じて新しい請求書を作成します。
f:id:tyoshikawa1106:20150405015440p:plain

5. ブラウザの URL バーで、請求書レコード ID を選択します。これは、URL の salesforce.com より後の部分すべてです。a01E0000000diKc のようになります。ID をクリップボードにコピーします。
f:id:tyoshikawa1106:20150405015523p:plain

6. Heroku アプリケーションが表示されているブラウザウィンドウまたはタブに戻ります。
f:id:tyoshikawa1106:20150405015222p:plain

7. 請求書レコード ID を [Id] の下の項目に貼り付けます。
f:id:tyoshikawa1106:20150405015620p:plain


8. [Create (作成)] をクリックします。この請求書 ID で注文が作成されます。この注文は、Salesforce の注文レコードとは異なります。
f:id:tyoshikawa1106:20150405015747p:plain

9. [OK] をクリックします。次のようなページが表示されます。
f:id:tyoshikawa1106:20150405015832p:plain


とりあえずHerokuアプリケーションを作成して動かすところまで確認できました。

チュートリアル 2

Warehouse アプリケーションと外部サービスの接続

ステップ 1: 請求書で外部 ID 項目を作成する

1. Salesforce 組織にログインします。

2. [設定] から[作成] > [オブジェクト] > [請求書]をクリックして、請求書カスタムオブジェクトに移動します。

3. [カスタム項目 & リレーション] までスクロールダウンし、[新規] をクリックします。

4. 項目のデータ型で [テキスト] を選択し、[次へ] をクリックします。

5. 項目表示ラベルに「OrderId」と入力し、項目の長さに「6」と入力します。デフォルトの項目名「OrderId」を承認します。

6. [外部 ID] チェックボックスをオンにして、[次へ] をクリックします。

7. [次へ] をクリックしてデフォルトを承認してから、[保存] をクリックします

f:id:tyoshikawa1106:20150405022103p:plain

ステップ 2: リモートサイトレコードを作成する

1. [設定] から、[セキュリティのコントロール] > [リモートサイトの設定] をクリックします。

2. [新規リモートサイト] をクリックします。

3. [リモートサイト名] 項目に、「FulfillmentWebService」(スペースなし) と入力します。

4. [リモートサイトの URL] 項目に、「https://{appname}.herokuapp.com」と入力します。

5. [保存] をクリックして、残りのデフォルト値を受け入れます。

これで、アプリケーション内の任意の Apex コードで、チュートリアル 1 でリリースした履行 Web サービスをコールできます。

f:id:tyoshikawa1106:20150405021313p:plain

ステップ 3: インテグレーション Apex クラスを作成する

Apexクラス: Integrationを作成します。

Integration Workbook Tutorial Apex Class

※{appname} を Heroku アプリケーション名に置き換えることを忘れないでください。
f:id:tyoshikawa1106:20150405022400p:plain

ステップ 4: @future メソッドをテストする

開発者コンソールから次の処理を実行。正常に実行されるか確認します。

// Get an Invoice__c for testing
Invoice__c invoice = [SELECT ID FROM Invoice__c LIMIT 1];
// Call the postOrder method to test the asynchronous call
Integration.postOrder(new List<Id>{invoice.id});

f:id:tyoshikawa1106:20150405022900p:plain


エラーメッセージが表示されたときはレコードが存在していない可能性があります。次のように作成すると解決します。
f:id:tyoshikawa1106:20150405023511p:plain


デバッグログに次のように表示されれば正常に実行できています。
f:id:tyoshikawa1106:20150405023316p:plain


Herokuのアプリ側でレコードが作成されています。
f:id:tyoshikawa1106:20150405025331p:plain

ステップ 5: @future メソッドをコールするトリガを作成する

次のApexトリガを作成します。(Invoice__c)

Integration Workbook Tutorial Apex Trigger

ステップ 6: 完全なインテグレーションパスをテストする

作成したApexトリガの動作確認を行います。
1. Warehouse アプリケーションを選択します。

2. [請求書] タブをクリックします。

3. 最近のいずれかの請求書をクリックすると、請求書に OrderId がないことがわかります。
f:id:tyoshikawa1106:20150405024329p:plain

4. [Status (状況)] がすでに [Closed (完了)] になっている場合は、[Closed (完了)] という単語をダブルクリックして[Open (進行中)] に変更し、[保存] をクリックします。

5. [Status (状況)] の値をダブルクリックして [Closed (完了)] に変更し、[保存] をクリックします。これで、非同期コールアウトがトリガされます。
f:id:tyoshikawa1106:20150405025456p:plain

6. 数秒待機してから、ブラウザのページを更新します。

7. OrderId 項目に外部注文 ID が表示されます。


これでうまくいくはずでしたが、Apexトリガからだとなぜかエラーに・・・
f:id:tyoshikawa1106:20150405025612p:plain


開発者コンソールからはうまくいったのでここはスキップします。とりあえず非同期処理でHerokuアプリのレコードを更新する雰囲気はこんな感じでした。

チュートリアル 3

Heroku アプリケーションの更新

ステップ 1: 接続アプリケーションを設定する

1. [設定] で、[作成] > [アプリケーション] をクリックします。

2. [接続アプリケーション] セクションで、[新規] をクリックします。
f:id:tyoshikawa1106:20150405125118p:plain

3. [接続アプリケーション名] に、アプリケーション名を入力します。

4. プログラムからアプリケーションを参照するときに使用する [API 参照名] を入力します。API 参照名は、デフォルトの空白を除いた名前になります。

5. [取引先責任者 メール] を指定します。

6. API ([OAuth 設定の有効化]) で、[OAuth 設定の有効化] を選択します。

7. [コールバック URL] に「https://{appname}.herokuapp.com/_auth」と入力します。

8. [選択した OAuth 範囲] 項目で、[フルアクセス (フル)] および [ユーザに代わっていつでも要求を実行
(refresh_token、offline_access)] を選択し、選択された OAuth 範囲にそれを追加します。

9. [保存] をクリックします。
f:id:tyoshikawa1106:20150405125445p:plain

ステップ 2: 新しい分岐でアプリケーションを更新する

1. コマンドラインに戻り、現在の場所が spring-mvc-fulfillment-base フォルダであることを確認しま
す。
f:id:tyoshikawa1106:20150405130047p:plain

2. 次のコマンドを入力して「full」分岐をフェッチし、主分岐にマージします。これらの操作をすべて 1 つの手順で行います。

git pull origin full

f:id:tyoshikawa1106:20150405130151p:plain

a. 次に進む前に、組織に戻ります。
b. [設定] で、[作成] > [アプリケーション] をクリックします。
c. [接続アプリケーション設定] セクションで、アプリケーション名をクリックします。
d. [コンシューマの秘密] の横にある、[クリックして公開] をクリックします。
f:id:tyoshikawa1106:20150405130246p:plain:w300

e. 表示された数値をコピーするには、キーボードコントロールを使用します。


3. Heroku アプリケーションに対して、アクセスキーを設定する必要があります。次の項目を入力します。

heroku config:add OAUTH_CLIENT_KEY=PUBLICKEY OAUTH_CLIENT_SECRET=PRIVATEKEY

f:id:tyoshikawa1106:20150405130718p:plain


PUBLICKEY を[コンシューマ鍵]で置き換えます。同様に、PRIVATEKEY をコンシューマの秘密で置き換えます。コマンドラインで入力する前に、この操作をテキストエディタで行うと便利です。


4. 次のコマンドを実行して、ローカルの変更を Heroku に転送します。

git push heroku master

f:id:tyoshikawa1106:20150405130922p:plain

5. ブラウザのタブまたはウィンドウで https://{appname}.herokuapp.com に移動し、変更内容を確認します (必要に応じてブラウザを最新の情報に更新します)。


ここでエラー・・・
f:id:tyoshikawa1106:20150405131216p:plain


多分設定がどこか間違ってるんですけど、ちょっと疲れたので今回はここまで、Integration Workbookの内容的には次の内容が残っています。

チュートリアル 4: Force.com Canvas を使用したアプリケーションの Salesforce への追加

Force.com CanvasをつかってHerokuアプリをSalesforce上で表示するということなので、以前試してこの辺と似た内容だと思います。


Git / 接続アプリケーション / Auth認証の辺りはまだ理解できていないことが多いのでもっと勉強しないとって思いました。