株式会社セールスフォース・ドットコム  ビジネス開発本部 Apex プラットフォーム  コア開発者向けセミナー
<ul><li>このセミナーの意図 </li></ul><ul><ul><li>Apex プラットフォームを、もっと深く知っていただく </li></ul></ul><ul><ul><li>AppExchange アプリケーション開発のブートキ...
Agenda <ul><li>なぜ Salesforce が「プラットフォーム」になったのか </li></ul><ul><li>Apex  アプリケーションについて </li></ul><ul><li>Salesforce のデータベース <...
Salesforce が「プラットフォーム」になった理由 <ul><li>当初:営業支援( SFA )のアプリをオンデマンドで提供 </li></ul><ul><li>ビジネスとしての成功には、「共有された環境」と「自由なカスタマイズ」を両立で...
Apex プラットフォームの特徴:マルチテナント型アーキテクチャ 企業 A 企業 B 企業 C Salesforce 組織 A Salesforce 組織 B Salesforce 組織 C ユーザ 管理者 ユーザ 管理者 ユーザ 管理者 企業...
Apex アプリケーションについて
Apex アプリケーションの分類 Salesforce 上ですべて動作するアプリケーション 外部の Web サイトから API を介して連携するアプリケーション Salesforce ネイティブ オンデマンド 連携 クライアント 連携 クライア...
Salesforce ネイティブアプリケーションの特徴 <ul><li>Salesforce 外部のサーバやプログラムを必要としない </li></ul><ul><ul><li>ユーザの導入が容易 </li></ul></ul><ul><li>...
Salesforce のデータベース
Salesforce の標準データモデル <ul><li>Salesforce は「企業アプリケーション」のためのプラットフォーム </li></ul><ul><li>一般的な企業活動に必要なデータモデルは、すでに標準で登録済み </li></...
標準データモデルの関連図(抜粋) Owner CreatedBy LastModifiedBy Who/What Tasks/Events/ OpenActivities/ActivityHistories Account Opportunit...
データベース・スキーマの拡張 <ul><li>アプリケーション開発者が独自に必要なデータモデルを追加構築可能 </li></ul><ul><ul><li>独自の「テーブル(表)」を追加できる </li></ul></ul><ul><ul><li...
用語の整理 <ul><li>RDB における「テーブル(表)」   Salesforce では  「オブジェクト」 </li></ul><ul><li>RDB における「カラム(列)」   Salesforce では  「項目(フィールド)...
カスタムオブジェクトの定義 <ul><li>管理者が Salesforce にログインし、ブラウザ上で定義する </li></ul><ul><ul><li>設定    開発    カスタムオブジェクト    新規カスタムオブジェクト </...
オブジェクト ID <ul><li>レコードには常に一意のオブジェクト ID が付与される </li></ul><ul><ul><li>RDB における主キー( Primary Key )に相当 </li></ul></ul><ul><ul><...
リレーションと親子関係 <ul><li>A が B を参照しているとき </li></ul><ul><ul><li>B は A の「親」であり、 A は B の「子」になっている </li></ul></ul><ul><ul><li>A と B...
Apex API  &  SOQL
Apex API  と  SOQL <ul><li>Apex API : Salesforce  内のデータベースへのアクセス手段 </li></ul><ul><ul><li>データベースの検索・更新・作成・削除 </li></ul></ul>...
Apex API  のメソッド種類 convertLead, merge, process  SFDC 処理 getServerTimestamp, getUserInfo, setPassword, resetPassword ユーティリティ...
SOQL <ul><li>SQL に似たクエリ記述文 </li></ul><ul><li>テーブルをまたいだ検索 (SOQL-Relationship) </li></ul>SELECT Account.Id, Account.Name,   ...
リレーションシップ・クエリ <ul><li>複数テーブルをまたがる問い合わせ( SQL の JOIN に相当) </li></ul><ul><li>親子のリレーションをたどってレコードを検索 </li></ul><ul><ul><li>親:最大...
条件( WHERE 句)による絞込み <ul><li>サポートしている比較演算子 </li></ul><ul><ul><li>=, !=, <, <=, >, >=, LIKE, IN, NOT IN, INCLUDES, EXCLUDES <...
Count()  関数、 ORDER BY 、 LIMIT 句 <ul><li>件数のみを取得したい場合、 count() 関数を利用 </li></ul><ul><li>ORDER BY でレコードを整列、 LIMIT でレコード数上限指定 ...
カスタムオブジェクトと Apex API <ul><li>標準オブジェクト、項目の場合 </li></ul><ul><ul><li>API 参照名  =  オブジェクト(項目)名 </li></ul></ul><ul><li>カスタムオブジェク...
標準項目 <ul><li>カスタムオブジェクト定義時に自動的に作成される標準項目 </li></ul>CreatedById (項目名)、 CreatedBy (リレーション名) 作成者  LastModifiedById (項目名)、 Las...
カスタムオブジェクトでの問い合わせの例 部署 Department__c Department__r Employees__r Manager__r Workers__r SELECT Name, Hiredate__c  FROM Emplo...
レコードの共有設定とアクセスコントロール <ul><li>通常カスタムオブジェクトを作成したときは、組織内の全ユーザがレコードを参照・更新可能になっている </li></ul><ul><ul><li>誰でもレコードの上書き更新ができてしまう状態...
デフォルトの共有設定の変更 (1) (2) (3)
Apex API を利用したレコード個別の共有設定 <ul><li>オブジェクトの共有設定を「非公開」あるいは「公開/参照のみ」とすると、データベース内に「 ( オブジェクト名 )__Share 」というオブジェクトが自動的に追加される </l...
項目の更新履歴 <ul><li>カスタムオブジェクトの作成時に「項目履歴管理」をチェックしておくと、レコードの更新が記録される </li></ul><ul><ul><li>データベース内に「 ( オブジェクト名 )__History 」というオ...
S コントロールと AJAX Toolkit
S コントロール <ul><li>ユーザインターフェースを記述する HTML コンポーネント </li></ul><ul><li>HTML+JavaScript で画面を記述 </li></ul>例: Google Maps  上に 取引先デー...
AJAX Toolkit <ul><li>S コントロールから Apex API にアクセスするための JavaScript で書かれたツールキット </li></ul><ul><li>利用には S コントロール内に指定の JavaScript...
S コントロール  + AJAX Toolkit のアーキテクチャ 4. AJAX による API リクエストの送信 AJAX Toolkit S コントロール Apex API Salesforce  データベース 1. S コントロール内の...
例)  Hello World <html> <head> <script type=&quot;text/javascript&quot;  src=&quot;/soap/ajax/9.0/connection.js&quot;></scr...
例) 取引先を検索、テーブルで一覧表示 <html> <head> <script type=&quot;text/javascript&quot; src=&quot;/soap/ajax/9.0/connection.js&quot;></...
Google Maps とのマッシュアップ <ul><li>地図情報に取引先情報を重ね表示する S コントロール </li></ul><ul><li>チュートリアル </li></ul><ul><ul><li>Apex Developer Ne...
コーディングにおける TIPS
同期リクエストと非同期リクエスト <ul><li>AJAX Toolkit  の API 呼び出しでは、同期および非同期リクエストの選択が可能 </li></ul><ul><ul><li>同期    サーバから値が返却されるまで処理がストップ...
どちらが望ましい? <ul><li>同期レスポンス待ちの間、ユーザの操作をブロックさせないためには、実アプリケーションではできるだけ非同期リクエストがよい </li></ul><ul><li>同期リクエストの利用は API テスト時、あるいは時...
オープンソース AJAX ライブラリの利用 <ul><li>AJAX の画面描画記述は煩雑になりがち </li></ul><ul><ul><li>  既存の JavaScript UI ライブラリを利用して、アプリケーションのコードが複雑にな...
Dojo Toolkit  の利用例 <ul><li>SWOT 分析表 </li></ul><ul><ul><li>( AppExchange 公開済) </li></ul></ul><ul><li>シンプル掲示板 </li></ul>
S コントロールからの画像ファイルの利用 <ul><li>画像をドキュメントファイルとしてアップロード </li></ul><ul><li>ドキュメントの参照 URL をコピーして HTML に貼り付け </li></ul><ul><ul><l...
S コントロールを含む画面遷移 <ul><li>標準画面    カスタム S コントロール </li></ul><ul><ul><li>カスタムボタン、カスタムリンクなどを利用 </li></ul></ul><ul><ul><li>「差し込み...
差し込み項目でパラメータ受け取り {!Account.Id} 株式会社四川商会 差し込み項目 標準のレコード詳細画面 カスタムボタン  /  カスタムリンク カスタム S コントロール 展開された値 {!Account.Name} 001700...
URLFOR 関数による画面遷移 <ul><li>S コントロールの差し込み項目内で URLFOR 関数を用いて、遷移先の URL を取得 </li></ul><ul><ul><li>例)  HelloWorld カスタム S コントロールの ...
Summary
Apex アプリケーション開発について <ul><li>Salesforce ネイティブ環境のみでも、複雑なアプリケーション構築が可能 </li></ul><ul><ul><li>S コントロールと Apex API の組み合わせ </li><...
Apex Platform Development Partner Program <ul><li>Apex  プラットフォーム上でのアプリケーション開発能力のあるパートナーを認定する制度 </li></ul><ul><li>要件 </li><...
Appendix
Appendix  :  AJAX Tools <ul><li>Apex API をオンライン上でテスト可能な開発者向けアプリケーション </li></ul><ul><ul><li>S コントロールの編集、 SOQL の実行、シェルによる対話的...
Appendix :  開発用サンプルデータセット <ul><li>API や SOQL を試そうとしても… </li></ul><ul><ul><li>そもそもデータベースにレコードが入っていないとあまり意味がない </li></ul></u...
Appendix  : 「ユーザ  (User) 」 <ul><li>Salesforce 組織にアクセスするユーザの情報を管理 </li></ul><ul><ul><li>ユーザ名とパスワードが付与され、 Salesforce にログインが可...
Appendix  : 「取引先  (Account) 」 <ul><li>顧客企業/事業者の情報を管理 </li></ul><ul><li>取引先名、電話番号、住所(請求先/発送先)、従業員数などの企業情報を格納 </li></ul><ul>...
Appendix  : 「取引先責任者  (Contact) 」 <ul><li>取引先に所属している個人の情報を管理 </li></ul><ul><li>氏名、役職、電話番号、 E メールなどの個人情報を格納 </li></ul><ul><l...
Appendix  : 「商談  (Opportunity) 」 <ul><li>現在進行中の(あるいは完了した)案件情報を管理 </li></ul><ul><li>現在のフェーズや商談全体の金額などの情報を格納 </li></ul><ul><...
Appendix  : 「 ToDo (Task) 」 および 「行動  (Event) 」 <ul><li>行動 (Event)  </li></ul><ul><ul><li>カレンダー上のスケジュール情報 </li></ul></ul><u...
Upcoming SlideShare
Loading in …5
×

Apexコアデベロッパーセミナー070726 配布用

11,758 views

Published on

2007/07/26のコアデベロッパーセミナー(API, Sコントロール)の資料です

Published in: Business, Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
11,758
On SlideShare
0
From Embeds
0
Number of Embeds
136
Actions
Shares
0
Downloads
138
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Apexコアデベロッパーセミナー070726 配布用

  1. 1. 株式会社セールスフォース・ドットコム  ビジネス開発本部 Apex プラットフォーム コア開発者向けセミナー
  2. 2. <ul><li>このセミナーの意図 </li></ul><ul><ul><li>Apex プラットフォームを、もっと深く知っていただく </li></ul></ul><ul><ul><li>AppExchange アプリケーション開発のブートキャンプ </li></ul></ul><ul><ul><li>開発者コミュニティの活性化 </li></ul></ul><ul><li>質問について </li></ul><ul><ul><li>ご質問は随時承ります </li></ul></ul>はじめに
  3. 3. Agenda <ul><li>なぜ Salesforce が「プラットフォーム」になったのか </li></ul><ul><li>Apex アプリケーションについて </li></ul><ul><li>Salesforce のデータベース </li></ul><ul><li>Apex API & SOQL </li></ul><ul><li>S コントロールと AJAX Toolkit </li></ul><ul><li>コーディングにおける TIPS </li></ul><ul><li>Summary </li></ul>
  4. 4. Salesforce が「プラットフォーム」になった理由 <ul><li>当初:営業支援( SFA )のアプリをオンデマンドで提供 </li></ul><ul><li>ビジネスとしての成功には、「共有された環境」と「自由なカスタマイズ」を両立できるかどうかが大きな鍵だった </li></ul><ul><li>柔軟かつ強固なアプリケーションプラットフォームの設計で、顧客ごとのカスタマイズ用件を吸収 </li></ul><ul><li>SFA 分野での成功を活かし、さらなる飛躍のため、温めてきたプラットフォーム層を解放 </li></ul><ul><li>オンデマンドでのデータベース+アプリケーション実行環境への発展  Apex プラットフォーム </li></ul>
  5. 5. Apex プラットフォームの特徴:マルチテナント型アーキテクチャ 企業 A 企業 B 企業 C Salesforce 組織 A Salesforce 組織 B Salesforce 組織 C ユーザ 管理者 ユーザ 管理者 ユーザ 管理者 企業 A 企業 B 企業 C Salesforce 組織 A Salesforce 組織 B Salesforce 組織 C 申し込んだ企業にそれぞれ仮想的なデータベースインスタンス( Salesforce 組織)が割り与えられる データベースのスキーマ(テーブル構成)やレコード情報はそれぞれの企業ごとにプライベートに隔離
  6. 6. Apex アプリケーションについて
  7. 7. Apex アプリケーションの分類 Salesforce 上ですべて動作するアプリケーション 外部の Web サイトから API を介して連携するアプリケーション Salesforce ネイティブ オンデマンド 連携 クライアント 連携 クライアント端末やイントラネットから API を介して連携するアプリケーション
  8. 8. Salesforce ネイティブアプリケーションの特徴 <ul><li>Salesforce 外部のサーバやプログラムを必要としない </li></ul><ul><ul><li>ユーザの導入が容易 </li></ul></ul><ul><li>運用やスケーラビリティに気を使う必要がない </li></ul><ul><ul><li>サービス提供に関する固定コストが発生しない </li></ul></ul><ul><ul><li>サービス拡大時の追加投資も必要なし </li></ul></ul><ul><ul><li>サービスレベルが Salesforce と同等に保証される </li></ul></ul><ul><li>多彩なアプリケーションの可能性 </li></ul><ul><ul><li>S コントロールと Apex API を使えば、作成できるアプリケーションの幅はかなり大きい </li></ul></ul><今回の内容はこの分類のアプリケーションの構築方法が中心>
  9. 9. Salesforce のデータベース
  10. 10. Salesforce の標準データモデル <ul><li>Salesforce は「企業アプリケーション」のためのプラットフォーム </li></ul><ul><li>一般的な企業活動に必要なデータモデルは、すでに標準で登録済み </li></ul><ul><ul><li>自社の営業社員、従業員、スタッフ  ユーザ (User) </li></ul></ul><ul><ul><li>顧客企業  取引先( Account ) </li></ul></ul><ul><ul><li>顧客企業の従業員     取引先責任者( Contact ) </li></ul></ul><ul><ul><li>スケジュール、活動履歴  行動予定( Event )、 TODO ( Task ) </li></ul></ul><ul><li>営業支援、マーケティング用途のためのデータモデル </li></ul><ul><ul><li>見込み客  リード( Lead ) </li></ul></ul><ul><ul><li>案件情報  商談( Opportunity ) </li></ul></ul><ul><li>サポートサービスのためのデータモデル </li></ul><ul><ul><li>問い合わせ  ケース( Case ) </li></ul></ul><ul><ul><li>FAQ 情報  ソリューション( Solution ) </li></ul></ul>
  11. 11. 標準データモデルの関連図(抜粋) Owner CreatedBy LastModifiedBy Who/What Tasks/Events/ OpenActivities/ActivityHistories Account Opportunities Contacts Account ※ 詳細は Appendix を参照 取引先責任者 Contact 取引先 Account 商談 Opportunity ユーザ User ToDo Task 行動 Event
  12. 12. データベース・スキーマの拡張 <ul><li>アプリケーション開発者が独自に必要なデータモデルを追加構築可能 </li></ul><ul><ul><li>独自の「テーブル(表)」を追加できる </li></ul></ul><ul><ul><li>既存のテーブルに新しい「カラム(列)」を追加できる </li></ul></ul><ul><ul><li>テーブル間に任意の「リレーション(関連)」を定義できる </li></ul></ul>従業員 部署 部署 従業員 部下 上司 <ul><li>所在地 </li></ul><ul><li>コストセンター </li></ul><ul><li>従業員番号 </li></ul><ul><li>入社日 </li></ul><ul><li>年俸 </li></ul>
  13. 13. 用語の整理 <ul><li>RDB における「テーブル(表)」  Salesforce では  「オブジェクト」 </li></ul><ul><li>RDB における「カラム(列)」  Salesforce では  「項目(フィールド)」 </li></ul><ul><li>標準で定義されているテーブル( Account, Contact など)  「標準オブジェクト」 </li></ul><ul><li>アプリケーション開発者が追加で定義したテーブル  「カスタムオブジェクト」 </li></ul>
  14. 14. カスタムオブジェクトの定義 <ul><li>管理者が Salesforce にログインし、ブラウザ上で定義する </li></ul><ul><ul><li>設定  開発  カスタムオブジェクト  新規カスタムオブジェクト </li></ul></ul>
  15. 15. オブジェクト ID <ul><li>レコードには常に一意のオブジェクト ID が付与される </li></ul><ul><ul><li>RDB における主キー( Primary Key )に相当 </li></ul></ul><ul><ul><li>15 桁( or 18 桁)の英数字 </li></ul></ul><ul><ul><li>詳細画面の URL に表示される </li></ul></ul><ul><ul><li>実は全 Salesforce 内で一意になる </li></ul></ul><ul><li>関連(リレーション)は参照するレコードの ID をたどることによって実現 </li></ul>
  16. 16. リレーションと親子関係 <ul><li>A が B を参照しているとき </li></ul><ul><ul><li>B は A の「親」であり、 A は B の「子」になっている </li></ul></ul><ul><ul><li>A と B の関係は多:1 </li></ul></ul><ul><li>標準オブジェクトのリレーションの例 </li></ul><ul><ul><li>「取引先」は「取引先責任者」の親 </li></ul></ul>取引先責任者 Contact Contacts Account 親 子 取引先 Account
  17. 17. Apex API & SOQL
  18. 18. Apex API と SOQL <ul><li>Apex API : Salesforce 内のデータベースへのアクセス手段 </li></ul><ul><ul><li>データベースの検索・更新・作成・削除 </li></ul></ul><ul><ul><li>Web サービス標準に準拠( SOAP 、 WSDL ) </li></ul></ul><ul><ul><li>多彩な言語環境から利用可能 </li></ul></ul><ul><ul><ul><li>Java /.NET / JavaScript / PHP/ Ruby on Rails… </li></ul></ul></ul><ul><li>SOQL : レコード検索のための問い合わせ言語 </li></ul><ul><ul><li>SOQL : Sforce Object Query Language </li></ul></ul><ul><ul><li>Apex API の検索処理におけるメッセージ文として利用される </li></ul></ul>
  19. 19. Apex API のメソッド種類 convertLead, merge, process SFDC 処理 getServerTimestamp, getUserInfo, setPassword, resetPassword ユーティリティ describeGlobal, describeSObject, describeLayout, describeTabs, describeSoftphoneLayout 定義情報 getUpdated, getDeleted 同期 create, update, delete, upsert, undelete データ処理 query, queryMore, retrieve, search, queryAll 検索 login ログイン メソッド名 メソッド種類
  20. 20. SOQL <ul><li>SQL に似たクエリ記述文 </li></ul><ul><li>テーブルをまたいだ検索 (SOQL-Relationship) </li></ul>SELECT Account.Id, Account.Name, (SELECT Contact.FirstName, Contact.LastName FROM Account.Contacts) FROM Account SELECT Id, Name FROM Account WHERE BillingState = ' 東京都 ' LIMIT 10 SELECT Contact.Id, Contact.FirstName, Contact.LastName, Account.Id, Account.Name FROM Contact
  21. 21. リレーションシップ・クエリ <ul><li>複数テーブルをまたがる問い合わせ( SQL の JOIN に相当) </li></ul><ul><li>親子のリレーションをたどってレコードを検索 </li></ul><ul><ul><li>親:最大 5 階層、子:最大1階層 </li></ul></ul>Owner Account Events 親1階層 親2階層 子1階層 SELECT Id, Name, Account.Id, Account.Name, Account.Owner.Id, Account.Owner.Name, (SELECT Id, Subject FROM Events) FROM Opportunity 商談 Opportunity 行動 Event 取引先 Account ユーザ User
  22. 22. 条件( WHERE 句)による絞込み <ul><li>サポートしている比較演算子 </li></ul><ul><ul><li>=, !=, <, <=, >, >=, LIKE, IN, NOT IN, INCLUDES, EXCLUDES </li></ul></ul><ul><li>親レコードの項目でも条件指定が可能 </li></ul><ul><ul><li>例:所有者名が「鈴木」である商談のみ表示 </li></ul></ul><ul><li>子リレーションのレコードセットの絞込みも可能 </li></ul>SELECT Name FROM Opportunity WHERE Owner.Name = ‘ 鈴木’ SELECT Name, (SELECT FirstName FROM Contacts WHERE CreatedDate = THIS_MONTH) FROM Account
  23. 23. Count() 関数、 ORDER BY 、 LIMIT 句 <ul><li>件数のみを取得したい場合、 count() 関数を利用 </li></ul><ul><li>ORDER BY でレコードを整列、 LIMIT でレコード数上限指定 </li></ul><ul><li>ORDER BY, LIMIT は子リレーションにも適用可能 </li></ul>SELECT count() FROM Opportunity WHERE CloseDate = THIS_MONTH AND Amount >= 1000000 SELECT Name, Amount, StageName FROM Opportunity ORDER BY CloseDate DESC LIMIT 5 SELECT Name, Amount, StageName, (SELECT CreatedDate FROM OpportunityHistories ORDER BY CreatedDate DESC LIMIT 5) FROM Opportunity
  24. 24. カスタムオブジェクトと Apex API <ul><li>標準オブジェクト、項目の場合 </li></ul><ul><ul><li>API 参照名 = オブジェクト(項目)名 </li></ul></ul><ul><li>カスタムオブジェクト、項目の場合 </li></ul><ul><ul><li>API 参照名 = オブジェクト(項目)名 +’__c’ ( アンダースコア 2 つ ) </li></ul></ul><ul><ul><li>リレーションの API 参照名 = リレーション名 +’__r’ </li></ul></ul>SELECT   Id, Name, Hiredate__c, Salary__c,        Department__r.Id, Department__r.Name FROM Employee__c
  25. 25. 標準項目 <ul><li>カスタムオブジェクト定義時に自動的に作成される標準項目 </li></ul>CreatedById (項目名)、 CreatedBy (リレーション名) 作成者  LastModifiedById (項目名)、 LastModifiedBy (リレーション名) 最終更新者 LastModifiedDate 最終更新日 OwnerId (項目名 ) 、 Owner (リレーション名) 所有者 CreatedDate 作成日  Name オブジェクト名 Id オブジェクト ID 項目名 表示ラベル
  26. 26. カスタムオブジェクトでの問い合わせの例 部署 Department__c Department__r Employees__r Manager__r Workers__r SELECT Name, Hiredate__c FROM Employee__c WHERE Department__r.Name = ‘ 営業部’ SELECT Name, Salary__c FROM Employee__c WHERE Manager__c = ‘ a0270000003lVks ’ SELECT Name, Location__c, (SELECT Name FROM Employees__r) FROM Department__c WHERE Name = ‘ 営業部’ 従業員 Employee__c
  27. 27. レコードの共有設定とアクセスコントロール <ul><li>通常カスタムオブジェクトを作成したときは、組織内の全ユーザがレコードを参照・更新可能になっている </li></ul><ul><ul><li>誰でもレコードの上書き更新ができてしまう状態 </li></ul></ul><ul><li>オブジェクトのデフォルトの共有設定を「非公開」に設定できる </li></ul><ul><ul><li>レコードを所有している本人(およびスーパバイザ)しか参照も更新もできないようになる </li></ul></ul><ul><li>アクセスさせたいレコード情報に対してのみ個別で共有を許可させる </li></ul><ul><ul><li><注意>個別にアクセス制御を「厳しく」することはできません!! </li></ul></ul>
  28. 28. デフォルトの共有設定の変更 (1) (2) (3)
  29. 29. Apex API を利用したレコード個別の共有設定 <ul><li>オブジェクトの共有設定を「非公開」あるいは「公開/参照のみ」とすると、データベース内に「 ( オブジェクト名 )__Share 」というオブジェクトが自動的に追加される </li></ul><ul><li>このオブジェクトにアクセスコントロール設定を追加していく </li></ul><ul><ul><li>例: ユーザ ID ‘ 005700000011raw ’ に対して レコード ID ’ a0370000004clVH ’ に対する参照権限を与える </li></ul></ul>var aci = new sforce.SObject(' Employee __Share'); aci.ParentId = 'a0370000004clVH'; // 対象となるレコードの ID aci.UserOrGroupId = '005700000011raw';   // 権限を与えるユーザの ID aci.AccessLevel   = 'Read'; // 読み取り権限のみ sforce.connection.create([aci]);
  30. 30. 項目の更新履歴 <ul><li>カスタムオブジェクトの作成時に「項目履歴管理」をチェックしておくと、レコードの更新が記録される </li></ul><ul><ul><li>データベース内に「 ( オブジェクト名 )__History 」というオブジェクトが自動的に追加される </li></ul></ul><ul><li>例) ある従業員の給与の変更履歴を調べる </li></ul>SELECT CreatedDate, Field, OldValue, NewValue FROM Employee__History WHERE ParentId = 'a0370000004clVH' // 従業員のレコード ID AND Field = 'Salary__c'
  31. 31. S コントロールと AJAX Toolkit
  32. 32. S コントロール <ul><li>ユーザインターフェースを記述する HTML コンポーネント </li></ul><ul><li>HTML+JavaScript で画面を記述 </li></ul>例: Google Maps 上に 取引先データの住所位置をマッピングして表示
  33. 33. AJAX Toolkit <ul><li>S コントロールから Apex API にアクセスするための JavaScript で書かれたツールキット </li></ul><ul><li>利用には S コントロール内に指定の JavaScript ライブラリを読み込む記述を追加するだけ </li></ul><html> <head> <script type=&quot;text/javascript&quot; src= &quot;/soap/ajax/9.0/connection.js&quot; ></script>    </head> …
  34. 34. S コントロール + AJAX Toolkit のアーキテクチャ 4. AJAX による API リクエストの送信 AJAX Toolkit S コントロール Apex API Salesforce データベース 1. S コントロール内の HTML+JavaScript を ダウンロード Web ブラウザ ユーザ 2.スクリプトの実行&描画処理 5.検索、更新 などの DB 処理 3.ユーザ操作などのイベント 6.画面の再描画 標準オブジェクト & カスタムオブジェクト
  35. 35. 例)  Hello World <html> <head> <script type=&quot;text/javascript&quot; src=&quot;/soap/ajax/9.0/connection.js&quot;></script> <script type=&quot;text/javascript&quot;> window.onload = function() { document.body.innerHTML = '<H1>Hello, ' + sforce.connection.getUserInfo() .userFullName + '</H1>'; } </script> </head> <body></body> </html>
  36. 36. 例) 取引先を検索、テーブルで一覧表示 <html> <head> <script type=&quot;text/javascript&quot; src=&quot;/soap/ajax/9.0/connection.js&quot;></script> <script type=&quot;text/javascript&quot;> function queryAccount() { var searchStr = document.getElementById('searchStr').value; var accounts = sforce.connection.query( &quot;SELECT Id, Name FROM Account WHERE Name LIKE '%&quot;+searchStr+&quot;%'&quot; ) .getArray('records'); var html = '<table border=&quot;1&quot;>'; for (var i=0; i<accounts.length; i++) { html += '<tr><td>'+accounts[i].Id+'</td>'+ ' <td>'+accounts[i].Name+'</td>'+ '</tr>'; } html += '</table>'; document.getElementById('output').innerHTML = html; } </script> </head> <body> <input type=&quot;text&quot; id=&quot;searchStr&quot;> <input type=&quot;button&quot; value=&quot; 検索 &quot; onclick=&quot;queryAccount()&quot;> <div id=&quot;output&quot;></div> </body> </html>
  37. 37. Google Maps とのマッシュアップ <ul><li>地図情報に取引先情報を重ね表示する S コントロール </li></ul><ul><li>チュートリアル </li></ul><ul><ul><li>Apex Developer Network ブログからアクセス </li></ul></ul><ul><ul><li>http://adnblog.salesforce.co.jp/2007/04/post_b5a4.html </li></ul></ul>
  38. 38. コーディングにおける TIPS
  39. 39. 同期リクエストと非同期リクエスト <ul><li>AJAX Toolkit の API 呼び出しでは、同期および非同期リクエストの選択が可能 </li></ul><ul><ul><li>同期  サーバから値が返却されるまで処理がストップする </li></ul></ul><ul><ul><li>非同期  サーバから返却された値を指定したコールバック関数が受け取る </li></ul></ul><ul><li>同期 </li></ul><ul><li>非同期 </li></ul>var result = sforce.connection.query(&quot;SELECT Id, Name FROM Account&quot;); sforce.connection.query( &quot;SELECT Id, Name FROM Account&quot;, { onSuccess : handleResult, onFailure : handleError } );
  40. 40. どちらが望ましい? <ul><li>同期レスポンス待ちの間、ユーザの操作をブロックさせないためには、実アプリケーションではできるだけ非同期リクエストがよい </li></ul><ul><li>同期リクエストの利用は API テスト時、あるいは時間のかからない単純な操作のみに限定する </li></ul>
  41. 41. オープンソース AJAX ライブラリの利用 <ul><li>AJAX の画面描画記述は煩雑になりがち </li></ul><ul><ul><li>  既存の JavaScript UI ライブラリを利用して、アプリケーションのコードが複雑になるのを回避する </li></ul></ul><ul><li>Salesforce は AJAX 用ライブラリとして Dojo Toolkit ( http://dojotoolkit.org ) を公式にホスティングしている </li></ul><ul><li>S コントロールに Dojo Toolkit を読み込む方法 </li></ul><html> <head> <script type=&quot;text/javascript&quot; src= &quot;/js/dojo/0.4.1/dojo.js&quot; ></script>    </head> …
  42. 42. Dojo Toolkit の利用例 <ul><li>SWOT 分析表 </li></ul><ul><ul><li>( AppExchange 公開済) </li></ul></ul><ul><li>シンプル掲示板 </li></ul>
  43. 43. S コントロールからの画像ファイルの利用 <ul><li>画像をドキュメントファイルとしてアップロード </li></ul><ul><li>ドキュメントの参照 URL をコピーして HTML に貼り付け </li></ul><ul><ul><li>例 </li></ul></ul><ul><li>JavaScript ファイル、 CSS ファイルなども同様 </li></ul><ul><li>AppExchange にアップロードする時には、忘れずにパッケージ内容に参照しているドキュメントを含める </li></ul><img src=&quot;/servlet/servlet.FileDownload?file=0157000000084Un&quot; >
  44. 44. S コントロールを含む画面遷移 <ul><li>標準画面  カスタム S コントロール </li></ul><ul><ul><li>カスタムボタン、カスタムリンクなどを利用 </li></ul></ul><ul><ul><li>「差し込み項目」を利用してパラメータの受け取りが可能 </li></ul></ul><ul><li>カスタム S コントロール  カスタム S コントロール </li></ul><ul><ul><li>LINKTO, URLFOR 関数の利用 </li></ul></ul><ul><li>カスタム S コントロール  標準画面 </li></ul><ul><ul><li>LINKTO, URLFOR 関数の利用 </li></ul></ul><ul><ul><li>describeSObject 関数で遷移先の URL テンプレートを取得 </li></ul></ul><ul><ul><ul><li>urlDetail / urlEdit / urlNew </li></ul></ul></ul><ul><ul><li>レコードの詳細画面なら、「” /”+{ オブジェクト ID} 」 へ URL リダイレクト </li></ul></ul><ul><ul><ul><li>環境によっては URL を変更している可能性があり、注意が必要 </li></ul></ul></ul>
  45. 45. 差し込み項目でパラメータ受け取り {!Account.Id} 株式会社四川商会 差し込み項目 標準のレコード詳細画面 カスタムボタン / カスタムリンク カスタム S コントロール 展開された値 {!Account.Name} 0017000000Kh6OS
  46. 46. URLFOR 関数による画面遷移 <ul><li>S コントロールの差し込み項目内で URLFOR 関数を用いて、遷移先の URL を取得 </li></ul><ul><ul><li>例) HelloWorld カスタム S コントロールの URL を取得して画面を遷移 </li></ul></ul><ul><ul><li>例) 取引先の標準のレコードの編集画面に遷移 </li></ul></ul><ul><li>難点: API で取得した値を埋め込めないため、使えるシーンが限られる </li></ul><ul><ul><li> どうしても URL を直に生成する実装になってしまう </li></ul></ul><ul><ul><li> あまり遷移を必要としないアプリケーション設計に… </li></ul></ul>location.href = '{!URLFOR($SControl.HelloWorld)}' parent.location.href =      '{!URLFOR($Action.Account.Edit, Account.Id)}'
  47. 47. Summary
  48. 48. Apex アプリケーション開発について <ul><li>Salesforce ネイティブ環境のみでも、複雑なアプリケーション構築が可能 </li></ul><ul><ul><li>S コントロールと Apex API の組み合わせ </li></ul></ul><ul><ul><li>運用開始後のスケーラビリティは一目を置くべき </li></ul></ul><ul><li>JavaScript による開発  リッチなユーザインターフェース </li></ul><ul><ul><li>既存の Web アプリケーション開発より若干難易度が高い </li></ul></ul><ul><ul><li>UI ライブラリを活用して開発負荷を軽減 </li></ul></ul><ul><ul><li>その他にも Flex などの選択肢 </li></ul></ul><ul><li>オンデマンド連携のアプリケーション </li></ul><ul><ul><li>外部サービスとして連携することの必然性とその付加価値 </li></ul></ul><ul><ul><li>サービスレベルを均一にする努力 </li></ul></ul>
  49. 49. Apex Platform Development Partner Program <ul><li>Apex プラットフォーム上でのアプリケーション開発能力のあるパートナーを認定する制度 </li></ul><ul><li>要件 </li></ul><ul><ul><li>AppExchange アプリケーションを 1 つ以上公開 </li></ul></ul><ul><ul><li>指定数以上の認定コンサルタント( Apex ) </li></ul></ul><ul><li>メリット </li></ul><ul><ul><li>アプリケーションのアイディアを共有します </li></ul></ul><ul><ul><li>個別案件などの獲得につながります </li></ul></ul><ul><li>詳細はお問い合わせください </li></ul>
  50. 50. Appendix
  51. 51. Appendix : AJAX Tools <ul><li>Apex API をオンライン上でテスト可能な開発者向けアプリケーション </li></ul><ul><ul><li>S コントロールの編集、 SOQL の実行、シェルによる対話的な API 実行 </li></ul></ul><ul><li>AppExchange サイトから組織ごとにインストールして使用する </li></ul><ul><ul><li>AppExchange サイトから、「 AJAX Tools 」で検索 </li></ul></ul><ul><ul><li> 注) 一部機能は IE で動かない場合あり、 Firefox を推奨 </li></ul></ul><ul><li>AJAX Tools は S コントロールと AJAX Toolkit を使って作られたネイティブアプリ </li></ul><ul><ul><li>名前が似ていて混乱しやすいので注意 </li></ul></ul>
  52. 52. Appendix : 開発用サンプルデータセット <ul><li>API や SOQL を試そうとしても… </li></ul><ul><ul><li>そもそもデータベースにレコードが入っていないとあまり意味がない </li></ul></ul><ul><li>デモや開発テストの際に必要になるダミーのデータを Salesforce にロードするためのアプリケーション </li></ul><ul><ul><li>AppExchange サイトからインストール可能 </li></ul></ul><ul><ul><li>パッケージに含まれるデータ:  取引先、取引先責任者、商談、リード、ケース、行動、 ToDo など約 700 件 </li></ul></ul><ul><li>インストール後、ボタンクリックひとつで自動的にレコードがデータベースに登録される </li></ul>
  53. 53. Appendix : 「ユーザ (User) 」 <ul><li>Salesforce 組織にアクセスするユーザの情報を管理 </li></ul><ul><ul><li>ユーザ名とパスワードが付与され、 Salesforce にログインが可能 </li></ul></ul><ul><ul><li>営業支援の用途の場合    「ユーザ」=自社の営業マン </li></ul></ul><ul><li>初期サインアップ時は管理ユーザの情報のみ登録されている </li></ul><ul><ul><li>管理者がユーザを必要に応じて追加する </li></ul></ul><ul><li>ほぼすべてのオブジェクトに対して、レコードの「作成者」「所有者」「最終更新者」という形で関連付けられる </li></ul>ユーザ User
  54. 54. Appendix : 「取引先 (Account) 」 <ul><li>顧客企業/事業者の情報を管理 </li></ul><ul><li>取引先名、電話番号、住所(請求先/発送先)、従業員数などの企業情報を格納 </li></ul><ul><li>SOQL の例 </li></ul>SELECT Id, Name, Phone, NumberOfEmployees, BillingState, BillingCity, BillingStreet FROM Account 取引先 Account
  55. 55. Appendix : 「取引先責任者 (Contact) 」 <ul><li>取引先に所属している個人の情報を管理 </li></ul><ul><li>氏名、役職、電話番号、 E メールなどの個人情報を格納 </li></ul><ul><li>所属している取引先の情報が親として関連付けられる </li></ul><ul><li>SOQL の例 </li></ul>SELECT LastName, FirstName, Email, Account.Name, Account.Phone FROM Contact 取引先責任者 Contact
  56. 56. Appendix : 「商談 (Opportunity) 」 <ul><li>現在進行中の(あるいは完了した)案件情報を管理 </li></ul><ul><li>現在のフェーズや商談全体の金額などの情報を格納 </li></ul><ul><li>商談に関連している取引先が参照関係で指定できる </li></ul><ul><li>SOQL の例 </li></ul>SELECT Id, Name, StageName, Amount, Account.Name, Account.Phone FROM Opportunity 商談 Opportunity
  57. 57. Appendix : 「 ToDo (Task) 」 および 「行動 (Event) 」 <ul><li>行動 (Event) </li></ul><ul><ul><li>カレンダー上のスケジュール情報 </li></ul></ul><ul><li>ToDo(Task) </li></ul><ul><ul><li>今後遂行すべき業務内容 (ToDo) の情報 </li></ul></ul><ul><ul><li>すでに終了した活動の履歴情報(訪問結果、メール送信など) </li></ul></ul><ul><li>2 つまとめて「活動 (Activity) 」情報として取り扱われる </li></ul><ul><li>「活動の記録」をサポートするすべてのオブジェクトに関連付けが可能 </li></ul>ToDo Task 行動 Event

×