Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Salesforce Hack Challenge 2014

2,325 views

Published on

Published in: Technology
  • Be the first to comment

Salesforce Hack Challenge 2014

  1. 1. Force.com 募集管理アプリケーション オープンソース賞
  2. 2. 名前:吉川 大樹 http://tyoshikawa1106.hatenablog.com/ @tyoshikawa1106 +TaikiYoshikawa tyoshikawa1106 tyoshikawa1106
  3. 3. Salesforce1 Platformの機能を有効活用できている点と コードの公開によりサンプルコードとして活用可能な点が高評価
  4. 4. Force.com サイトの入力フォームから応募者情報を登録します。
  5. 5. 画面下側にある登録ボタンで入力した情報を登録できます。
  6. 6. 正常に登録されるとメッセージが表示されます。
  7. 7. 登録された情報は応募者オブジェクトの詳細ページで 確認できます。
  8. 8. 応募者情報が登録されるとApexトリガーで 登録者にメールを送信します。
  9. 9. Apexトリガーのメール送信処理でエラーが発生した場合は、 送信メールエラーログオブジェクトにエラー情報が登録されます。
  10. 10. 登録された応募者情報はスケジュールバッチにより、 Chatterフィードに自動共有されるようになっています。
  11. 11. Chatter共有は応募者管理グループに対して行います。 これにより対象のユーザにのみ共有可能です。
  12. 12. Chatter投稿は対象の応募者レコードにも紐付いています。 これにより詳細ページからフィードを確認することも可能です。
  13. 13. Chatter共有処理は応募者オブジェクトの投稿済み項目が チェックありのレコードのみを対象としています。
  14. 14. ダッシュボードでどのような応募者が多いのか簡単に分析できます。
  15. 15. Salesforce1モバイルアプリでモバイル端末から 応募者情報にアクセスできます。
  16. 16. Chatterのアンケート機能やダッシュボードも利用できます。
  17. 17. Salesforce1モバイルアプリ用に 検索画面を用意しています。 以下のスキルを使って開発しました。 ・BootstrapSF1 ・KnockoutJs ・RemoteObjects
  18. 18. 検索は前方一致検索です。 レコードを選択すると詳細ページへ 遷移します。
  19. 19. サイトゲストユーザはAPIを有効化することができません。 RemoteObjectsの登場でJSから登録処理が可能になりました。 サイトゲストユーザプロファイル システム管理者プロファイル
  20. 20. サイトゲストユーザでRemoteObjectsによる登録処理を 実行した際に実行権限のエラーが発生しました。
  21. 21. 応募者オブジェクトの作成権限を付け忘れていたことが エラーの原因でした。
  22. 22. BootstrapSF1を利用すると『apex:composition』や『apex:include』の タグ読み込み時に一部スタイルが適用されませんでした。 今回はサイトテンプレートの使用を諦めました。
  23. 23. 当初、サイトのゲストユーザが応募者を登録したタイミングで、 ApexトリガーからFeedItemオブジェクトをINSERTする予定でした。 管理者ユーザでは正常に実行できましたが、ゲストユーザではエラーとなりました。
  24. 24. 管理者権限で実行できるスケジュールバッチで処理することで解決しました。
  25. 25. Chatter API in ApexはWinter 15のバージョンアップで 一部クラスの使用方法が変更されました。
  26. 26. Chatter API in Apexのテストでは 『@isTest(SeeAllData=true)』の宣言が必要
  27. 27. Chatter API in ApexでのChatter投稿は DML処理の扱いになるのでループ内で処理できません。
  28. 28. 今回、画面開発ではKnockoutJsを利用しました。 まだ理解できていないことが多かったので思うように動作せず苦労しました。
  29. 29. 応募者情報のChatter共有処理で使用するグループ名は カスタム設定に持たせました。 グループ名変更はコードの修正を行わずに対応できます。
  30. 30. カスタム設定の設定種別は階層型を利用しています。 ※組織レベルに定義できれば問題ない為です。
  31. 31. 画面に表示するラベルやメッセージなどは カスタム表示ラベルの値を表示するようにしています。 ※JSファイル内では使用できません。
  32. 32. テストクラス内で用意するデータを作成する共通クラスを用意しています。 必須項目や入力規則が追加されたときの修正箇所を少なくできます。
  33. 33. 共通クラスのテストクラスで使用方法を確認できます。 入力規則などの追加によるエラーはここのテストで確認できます。
  34. 34. Controllerにすべての処理を書いたりするとメンテナンスが大変です。 Helperクラスを用意してその辺の問題を解決しています。
  35. 35. ApexトリガーでもHelperクラスを用意することで Handlerクラスの処理がスッキリすると思います。
  36. 36. Intriguing Design Pattern for Scheduled APEX http://advancedapex.com/2012/11/14/scheduledapex/
  37. 37. https://github.com/tyoshikawa1106/Salesforce-Hack-Challenge-2014 Salesforce Hack Challenge 2014

×