導入時に困らないAppExchangeアプリ設計

Salesforceをご利用の方々ならば、もう説明不要かと思いますが、AppExchangeというSalesforce上で動作するアプリケーションを公開するマーケットプレイスが提供されています。

https://appexchangejp.salesforce.com/

ユーザはこのAppExchangeサイトから有償/無償のアプリケーションを自分の組織やSandBoxにインストールして利用することができ、上手に利用すればゼロから自前でカスタマイズするよりも手軽にSalesforceに機能を追加することができます。

我々、テラスカイメンバは次のような形でAppExchangeと関わることが多いです。

  • AppExchangeを利用したお客様のSalesforce導入支援
  • 自分たちでAppExchangeを開発
  • お客様のAppExchange開発を支援

アプリケーションの設計時において、セキュリティ面はAppExchangeリリース前にセキュリティレビューに合格する必要があるため、テクニカルレビューなどを通じて考慮されていくのですが、導入時以降を踏まえた設計に関しては、経験してみて学ぶことも多いのが実情です。

これまでのAppExchange導入時に苦労してきた経験をもとに、Salesforceのカスタマイズ性と共存できるAppExchange設計として、最近特に気にかけているの注意事項を3つほどご紹介したいと思います。



ISVforceドキュメント

まずは本家から公開されているISVforceドキュメントを必ず読んでおきましょう。

公開にあたってのセキュリティレビューやその他、開発におけるお作法が記載されていますので

まずはこれを読んで、開発からAppExchangeサイトでの公開、その後の管理までの流れを理解しておくことが大事です。



標準オブジェクト/標準項目の利用

業務アプリケーションを開発する場合、取引先や担当者といったデータの管理が必要となるケースが多いですが、そのAppExchangeアプリケーションが必要とする取引先や担当者のレコードを、Salesforce標準オブジェクトである「取引先(Account)」や「取引先責任者(Contact)」で管理すべきかどうかは、慎重に検討して決定したほうがよいでしょう。

AppExchangeをインストールしようとする利用者が、すでにSalesforceを利用中の場合、それらの標準オブジェクトにはすでにお客様固有の要件に基づく様々なカスタマイズが行われています。入力規則や、項目ラベル、時には管理するデータ種別など、開発メンバが想定もしていないようなカスタマイズが実施されている場合もあります。

例えば、取引先責任者の「誕生日項目(標準項目:birthday)」を「名刺交換した日」として利用されている組織に、誕生日項目から年齢計算する数式項目を持っているアプリケーションをインストールする場合、その年齢は正しい値を示さないことになりますね。

また、個人取引先が有効化されている環境でもアプリケーションが動作する必要がある場合は、それを考慮にいれた設計・開発・テストが必要となります。



Apexトリガの拡張性

標準オブジェクトにApexトリガを開発する場合はもちろん、AppExchangeアプリ内のオリジナルのオブジェクトに対してApexトリガを開発する場合も、アプリケーションの仕様上、拡張を許さないような場合を除いてその拡張性を考慮しておく方がよいでしょう。

例えばApexトリガ内で集計を行っている場合や、関連レコードを作成している場合には、初期データ移行時にそれらのApexトリガ処理を停止したいといった要件が発生する可能性が大いにあります。

または、導入後お客様が、AppExchangeで提供されているロジックを拡張したいといった固有のご要件にすべてパッケージ内で開発対応しなくてもよいような拡張性を持たすことを検討しておいたほうがよいでしょう。

具体的には、カスタム設定などを利用して、Apexトリガを無効化にするフラグを持たせたり、パッケージで提供するビジネスロジックをglobalかつvirtualなものとして定義しておき、Apexクラスを上書きできるような仕組みを提供することを検討します。



以上

幸せなAppExchange開発と幸せなAppExchange導入のきっかけになれば幸いです。