Box Developer Blog
Published in

Box Developer Blog

Box for Salesforce開発の入門ガイド: パート2

Box for Salesforce

パート2では、Box for Salesforce複合アプリのカスタマイズについて紹介します。パート1を読んでいない方は、パート1に戻ってお読みいただくことをお勧めします。

今回のブログでは、前回のコードスニペットの変更とテストクラスの追加について説明します。前回は、APEXクラスとトリガーを追加してデフォルトの管理型パッケージの動作を変更し、それぞれのオブジェクトの種類の下にフォルダを作成するのではなく、取引先の下ですべてのフォルダを一元管理するようにしました。ところが、ユーザーは依然として [Create Folder (フォルダを作成)] ボタンをクリックする必要がありました。

それを変更しましょう。

ソリューションの説明

変更を加える前に、開発者が [Create Folder (フォルダを作成)] ボタンを削除する理由と削除による影響について説明します。

[Create Folder (フォルダを作成)] ボタン

ユーザーのエクスペリエンスをよりシームレスにするために、Boxをご利用の多くのお客様が [Create Folder (フォルダを作成)] ボタンの削除を求めています。(コード変更の前に作成されたオブジェクトをバックフィルするために) 取引先または商談が作成または更新されると常にフォルダが自動的に作成されます。

ボタンを削除するには、以前のAPEXクラスを編集し、新しいトリガーを2つ追加する必要があります。

変更前の注意点: 拡張性の観点から、[Create Folder (フォルダを作成)] ボタンを削除すると、BoxおよびSalesforce APIの制限を受ける場合があります。大規模な組織で数千のレコードが予想される場合は、古いフォルダやコラボレーションをクリーンアップするためのプロセスを作成する必要があります。ここではそのプロセスについて説明しませんが、ソリューションを実装する際に計画する必要があります。また、Box Consultingの担当者がベストプラクティスについてアドバイスしてくれる場合もあります。

完成したコードは、パート1で使用したリポジトリのbox-salesforce-demo-102フォルダにあります。または、このまま進めることも可能です。

APEXクラスの編集

パート1で作成したクラスは、createRecordFoldersという新しいメソッドを追加することで、取引先フォルダと商談フォルダを自動的に作成するよう拡張することができます。このメソッドは、次に作成するトリガーからレコードIDのリストを受け取り、IDごとに、フォルダが存在しない場合はフォルダを作成します。

Visual Studio Codeでパート1のRecordFolderHandlerクラスを開いたら、下の新しいメソッドをコピーしてファイルに貼り付けて保存することができます。

パート1のRecordFolderHandlerクラス
新しいRecordFolderHandlerクラス

APEXトリガーの追加

取引先レコードと商談レコードの作成または更新を監視するために、APEXクラスで新しいメソッドを呼び出すためのトリガーが2つ必要です。

これらのトリガーは、Visual Studio CodeのターミナルでSFDX CLIを使用して作成することができます。トリガーを作成すると、トリガーコードファイルとそれぞれのxmlメタデータファイルが作成されます。

次のコマンドでは、挿入後および更新後にすべての取引先sObjectでイベントを監視するAccountTriggerというトリガーを作成し、指定されたパスに新しいファイルを配置します。

sfdx force:apex:trigger:create -n AccountTrigger -s Account -e 'after insert,after update' -d <PATH TO YOUR TRIGGERS FOLDER>

次のコマンドでは、挿入後および更新後にすべての商談sObjectでイベントを監視するOpportunityTriggerというトリガーを作成し、指定されたパスに新しいファイルを配置します。

sfdx force:apex:trigger:create -n OpportunityTrigger -s Opportunity -e 'after insert,after update' -d <PATH TO YOUR TRIGGERS FOLDER>
SFDX CLIのトリガー作成コマンド

各トリガーには、次のコードを含める必要があります。

AccountTrigger
OpportunityTrigger

テストクラス

コードが思ったとおりに動作しているかを確認するには、ソリューション内にテストを作成することが不可欠です。Salesforceは、テストとコードカバー率の要件を文書化しました。具体的には、本番環境に展開されるコードの75%に有効なテストクラスを用意する必要があります。上記の例はサンドボックス環境に展開されていますが、そのテストクラスを作成しましょう。

ここまでに、取引先や商談が作成または更新されたらそのフォルダを自動的に作成し、商談フォルダを取引先フォルダの下に移動するという2つの処理を行うクラスを作成しました。さらに3つのトリガーも作成しました。そのうち2つは、取引先と商談の作成または更新を監視し、残りの1つはFRUPテーブルへのレコードの追加を監視します。

上記はすべてテストする必要があります。

次のコマンドでは、FRUPTriggerのテストAPEXクラスを作成します。これは、新しいFRUPレコードの挿入をテストします。

sfdx force:apex:class:create -n FRUPTriggerTest -d <PATH TO YOUR CLASSES FOLDER>

下のコードをコピーして、新しいファイルに貼り付けて保存します。

FRUPTriggerテストクラス

次のコマンドでは、AccountTriggerのテストAPEXクラスを作成します。これは、取引先レコードの挿入と更新の両方をテストします。

sfdx force:apex:class:create -n AccountTriggerTest -d <PATH TO YOUR CLASSES FOLDER>

下のコードをコピーして、新しいファイルに貼り付けて保存します。

AccountTriggerテストクラス

次のコマンドでは、OpportunityTriggerのテストAPEXクラスを作成します。これは、商談レコードの挿入と更新の両方をテストします。

sfdx force:apex:class:create -n OpportunityTriggerTest -d <PATH TO YOUR CLASSES FOLDER>

下のコードをコピーし、新しいファイルに貼り付けて保存します。

OpportunityTriggerテストクラス

次のコマンドでは、RecordFolderHandlerクラスのテストAPEXクラスを作成します。これは、新しい取引先オブジェクトのフォルダの作成に加え、取引先のメインフォルダの下への商談フォルダの移動をテストします。

sfdx force:apex:class:create -n RecordFolderHandlerTest -d <PATH TO YOUR CLASSES FOLDER>

下のコードをコピーして、新しいファイルに貼り付けて保存します。

RecordFolderHandlerクラス

テストを実行するには、コードを展開する必要があります。

展開

上記のコードをすべて記述したら、Visual Studio Codeのターミナルウィンドウでdeployコマンドを実行して変更を展開できます。

sfdx force:source:deploy -m ApexClass,ApexTrigger

成功すると、以下の画面が表示されます。

展開成功

テストを実行するには、次のコマンドを実行します。

sfdx force:apex:test:run --testlevel RunLocalTests

その結果、それに続く次のコマンドが生成されます。このコマンドを実行すると、以下のテスト成功画面が表示されます。

sfdx force:apex:test:report -i <TEST ID> -u <YOUR USER>
Visual Studio Codeでのテストの実行

これで、新しい取引先と新しい商談を作成して、実際の環境で変更をテストできるようになります。いずれかのオブジェクトを作成すると、フォルダが自動的に作成され、さらに商談フォルダは取引先フォルダの下に移動することがわかります。

自動的に作成された取引先フォルダ

その他のリソース

Box for Salesforce開発者ツールキットのメソッドの一覧

管理者向け設定ガイド

SalesforceでのBox Signボタンの作成に関するガイド

APEXコードサンプル

FAQ

いつものように、質問がある場合は、Boxの開発者向けフォーラムに英語で投稿してください。

サンディエゴのブラックスビーチ

--

--

News and stories for working with the Box APIs

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store