57
株株株株株株株株株株株株 株株株株株 株株株株株株株株 Apex ププププププププ プププププププププププ

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

  • Upload
    stomita

  • View
    11.125

  • Download
    4

Embed Size (px)

DESCRIPTION

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

Citation preview

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

株式会社セールスフォース ドットコム・ ビジネス開発本部

Apex プラットフォームコア開発者向けセミナー

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

2

このセミナーの意図– Apex プラットフォームを、もっと深く知っていただく– AppExchange アプリケーション開発のブートキャンプ– 開発者コミュニティの活性化

質問について– ご質問は随時承ります

はじめに

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

3

Agenda

なぜ Salesforce が「プラットフォーム」になったのか Apex アプリケーションについて Salesforce のデータベース Apex API & SOQL

S コントロールと AJAX Toolkit

コーディングにおける TIPS

Summary

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

4

Salesforce が「プラットフォーム」になった理由

当初:営業支援( SFA )のアプリをオンデマンドで提供 ビジネスとしての成功には、「共有された環境」と「自

由なカスタマイズ」を両立できるかどうかが大きな鍵だった

柔軟かつ強固なアプリケーションプラットフォームの設計で、顧客ごとのカスタマイズ用件を吸収

SFA 分野での成功を活かし、さらなる飛躍のため、温めてきたプラットフォーム層を解放

オンデマンドでのデータベース+アプリケーション実行環境への発展 Apex プラットフォーム

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

5

Apex プラットフォームの特徴:マルチテナント型アーキテクチャ

企業 A 企業 B 企業 C

Salesforce 組織 A

Salesforce 組織 B

Salesforce 組織 C

ユーザ

管理者

ユーザ

管理者

ユーザ

管理者

企業 A

企業 B

企業 C

Salesforce 組織 A

Salesforce 組織 B

Salesforce 組織 C

申し込んだ企業にそれぞれ仮想的なデータベースインスタン申し込んだ企業にそれぞれ仮想的なデータベースインスタンス(ス( SalesforceSalesforce 組織)が割り与えられる組織)が割り与えられる

データベースのスキーマ(テーブル構成)やレコード情報はデータベースのスキーマ(テーブル構成)やレコード情報はそれぞれの企業ごとにプライベートに隔離それぞれの企業ごとにプライベートに隔離

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

6

Apex アプリケーションについて

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

7

Apex アプリケーションの分類

SalesforceSalesforce 上ですべて上ですべて動作するアプリケー動作するアプリケーションション

外部の外部の WebWeb サイトかサイトからら APIAPI を介して連携すを介して連携するアプリケーションるアプリケーション

Salesforceネイティブ

オンデマンド連携

クライアント連携

クライアント端末やイクライアント端末やイントラネットからントラネットから APIAPI

を介して連携するアプを介して連携するアプリケーションリケーション

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

8

Salesforce ネイティブアプリケーションの特徴

SalesforceSalesforce 外部のサーバやプログラムを必要としない外部のサーバやプログラムを必要としない– ユーザの導入が容易ユーザの導入が容易

運用やスケーラビリティに気を使う必要がない運用やスケーラビリティに気を使う必要がない– サービス提供に関する固定コストが発生しないサービス提供に関する固定コストが発生しない

– サービス拡大時の追加投資も必要なしサービス拡大時の追加投資も必要なし

– サービスレベルがサービスレベルが SalesforceSalesforce と同等に保証されると同等に保証される

多彩なアプリケーションの可能性多彩なアプリケーションの可能性– SS コントロールとコントロールと Apex APIApex API を使えば、作成できるアプリケーシを使えば、作成できるアプリケーシ

ョンの幅はかなり大きいョンの幅はかなり大きい

<今回の内容はこの分類のアプリケーションの構築方法が中心>

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

9

Salesforce のデータベース

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

10

Salesforce の標準データモデル

Salesforce は「企業アプリケーション」のためのプラットフォーム 一般的な企業活動に必要なデータモデルは、すでに標準で登録済み

– 自社の営業社員、従業員、スタッフ ユーザ (User)

– 顧客企業 取引先( Account )– 顧客企業の従業員  取引先責任者( Contact )– スケジュール、活動履歴 行動予定( Event )、 TODO ( Task )

営業支援、マーケティング用途のためのデータモデル– 見込み客 リード( Lead )– 案件情報 商談( Opportunity )

サポートサービスのためのデータモデル– 問い合わせ ケース( Case )– FAQ 情報 ソリューション( Solution )

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

11

標準データモデルの関連図(抜粋)

取引先責任者取引先責任者ContactContact

取引先取引先AccountAccount

商談商談OpportunityOpportunity

ユーザユーザUserUser

OwnerCreatedByLastModifiedBy

ToDoToDo

TaskTask行動行動

EventEvent

Who/What

Tasks/Events/OpenActivities/ActivityHistories

Account

Opportunities

Contacts

Account

※ 詳細は Appendix を参照

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

12

データベース・スキーマの拡張

アプリケーション開発者が独自に必要なデータモデルを追加構築可能– 独自の「テーブル(表)」を追加できる

– 既存のテーブルに新しい「カラム(列)」を追加できる

– テーブル間に任意の「リレーション(関連)」を定義できる

従業員従業員部署部署部署

従業員 部下

上司

•所在地所在地•コストセンコストセン

ターター

•従業員番号従業員番号•入社日入社日•年俸年俸

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

13

用語の整理

RDB における「テーブル(表)」 Salesforce では 「オブジェクト」

RDB における「カラム(列)」 Salesforce では 「項目(フィールド)」

標準で定義されているテーブル( Account, Contact など)「標準オブジェクト」

アプリケーション開発者が追加で定義したテーブル「カスタムオブジェクト」

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

14

カスタムオブジェクトの定義

管理者が Salesforce にログインし、ブラウザ上で定義する– 設定 開発 カスタムオブジェクト 新規カスタムオブジェ

クト

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

15

オブジェクト ID

レコードには常に一意のオブジェクト ID が付与される– RDB における主キー( Primary Key )に相当

– 15桁( or 18桁)の英数字

– 詳細画面の URL に表示される

– 実は全 Salesforce 内で一意になる

関連(リレーション)は参照するレコードの ID をたどることによって実現

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

16

リレーションと親子関係

A が Bを参照しているとき– B は A の「親」であり、 A は B の「子」になっている

– A と B の関係は多:1

標準オブジェクトのリレーションの例– 「取引先」は「取引先責任者」の親

取引先責任者取引先責任者ContactContact

取引先取引先AccountAccount

Contacts

Account

親子

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

17

Apex API & SOQL

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

18

Apex API と SOQL

Apex API : Salesforce 内のデータベースへのアクセス手段– データベースの検索・更新・作成・削除

– Web サービス標準に準拠( SOAP 、 WSDL )

– 多彩な言語環境から利用可能• Java /.NET / JavaScript / PHP/ Ruby on Rails…

SOQL : レコード検索のための問い合わせ言語– SOQL : Sforce Object Query Language

– Apex API の検索処理におけるメッセージ文として利用される

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

19

Apex API のメソッド種類

メソッド種類

メソッド名

ログイン login

検索 query, queryMore, retrieve, search, queryAll

データ処理 create, update, delete, upsert, undelete

SFDC処理 convertLead, merge, process

同期 getUpdated, getDeleted

定義情報 describeGlobal, describeSObject, describeLayout, describeTabs, describeSoftphoneLayout

ユーティリティ

getServerTimestamp, getUserInfo, setPassword, resetPassword

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

20

SOQL

SQL に似たクエリ記述文

テーブルをまたいだ検索 (SOQL-Relationship)

SELECT Account.Id, Account.Name, (SELECT Contact.FirstName, Contact.LastName FROM Account.Contacts)FROM Account

SELECT Id, Name FROM AccountWHERE BillingState = '東京都 'LIMIT 10

SELECT Contact.Id, Contact.FirstName, Contact.LastName, Account.Id, Account.NameFROM Contact

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

21

リレーションシップ・クエリ

複数テーブルをまたがる問い合わせ( SQL の JOIN に相当)

親子のリレーションをたどってレコードを検索– 親:最大 5階層、子:最大1階層

商談商談OpportunityOpportunity

行動行動EventEvent

取引先取引先AccountAccount

ユーザユーザUserUser

Owner AccountEvents

親1階層親2階層 子1階層

SELECT Id, Name, Account.Id, Account.Name, Account.Owner.Id, Account.Owner.Name, (SELECT Id, Subject FROM Events)FROM Opportunity

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

22

条件( WHERE句)による絞込み

サポートしている比較演算子=, !=, <, <=, >, >=, LIKE, IN, NOT IN, INCLUDES, EXCLUDES

親レコードの項目でも条件指定が可能– 例:所有者名が「鈴木」である商談のみ表示

子リレーションのレコードセットの絞込みも可能

SELECT Name FROM Opportunity WHERE Owner.Name = ‘鈴木’

SELECT Name, (SELECT FirstName FROM Contacts WHERE CreatedDate = THIS_MONTH)FROM Account

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

23

Count() 関数、 ORDER BY 、 LIMIT句

件数のみを取得したい場合、 count() 関数を利用

ORDER BY でレコードを整列、 LIMIT でレコード数上限指定

ORDER BY, LIMIT は子リレーションにも適用可能

SELECT count() FROM Opportunity WHERE CloseDate = THIS_MONTH AND Amount >= 1000000

SELECT Name, Amount, StageName FROM Opportunity ORDER BY CloseDate DESCLIMIT 5

SELECT Name, Amount, StageName, (SELECT CreatedDate FROM OpportunityHistories ORDER BY CreatedDate DESC LIMIT 5)FROM Opportunity

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

24

カスタムオブジェクトと Apex API

標準オブジェクト、項目の場合– API参照名 = オブジェクト(項目)名

カスタムオブジェクト、項目の場合– API参照名 = オブジェクト(項目)名+’__c’ ( アンダースコア

2 つ )

– リレーションの API参照名 = リレーション名+’__r’SELECT Id, Name, Hiredate__c, Salary__c,       Department__r.Id, Department__r.NameFROM Employee__c

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

25

標準項目

カスタムオブジェクト定義時に自動的に作成される標準項目

表示ラベル 項目名オブジェクト ID Id

オブジェクト名 Name

作成日  CreatedDate

作成者  CreatedById (項目名)、 CreatedBy (リレーション名)

所有者 OwnerId (項目名 ) 、 Owner (リレーション名)

最終更新日 LastModifiedDate

最終更新者 LastModifiedById (項目名)、 LastModifiedBy (リレーション名)

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

26

カスタムオブジェクトでの問い合わせの例

従業員従業員Employee__cEmployee__c

部署部署Department__cDepartment__c

Department__r

Employees__r

Manager__r

Workers__r

SELECT Name, Hiredate__c FROM Employee__cWHERE Department__r.Name = ‘ 営業部’

SELECT Name, Salary__c FROM Employee__cWHERE Manager__c = ‘a0270000003lVks’

SELECT Name, Location__c, (SELECT Name FROM Employees__r)FROM Department__cWHERE Name = ‘ 営業部’

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

27

レコードの共有設定とアクセスコントロール

通常カスタムオブジェクトを作成したときは、組織内の全ユーザがレコードを参照・更新可能になっている– 誰でもレコードの上書き更新ができてしまう状態

オブジェクトのデフォルトの共有設定を「非公開」に設定できる– レコードを所有している本人(およびスーパバイザ)しか参照も更新もできないようになる

アクセスさせたいレコード情報に対してのみ個別で共有を許可させる– <注意>個別にアクセス制御を「厳しく」することはできません!!

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

28

デフォルトの共有設定の変更

(1) (2)

(3)

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

29

Apex API を利用したレコード個別の共有設定

オブジェクトの共有設定を「非公開」あるいは「公開/参照のみ」とすると、データベース内に「 ( オブジェクト名 )__Share 」というオブジェクトが自動的に追加される

このオブジェクトにアクセスコントロール設定を追加していく– 例:

ユーザ ID ‘005700000011raw’ に対してレコード ID ’ a0370000004clVH’ に対する参照権限を与える

var aci = new sforce.SObject('Employee__Share');aci.ParentId = 'a0370000004clVH'; // 対象となるレコードの IDaci.UserOrGroupId = '005700000011raw'; // 権限を与えるユーザのIDaci.AccessLevel = 'Read'; // 読み取り権限のみsforce.connection.create([aci]);

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

30

項目の更新履歴

カスタムオブジェクトの作成時に「項目履歴管理」をチェックしておくと、レコードの更新が記録される– データベース内に「 ( オブジェクト名 )__History 」というオブ

ジェクトが自動的に追加される

例) ある従業員の給与の変更履歴を調べるSELECT CreatedDate, Field, OldValue, NewValueFROM Employee__HistoryWHERE ParentId = 'a0370000004clVH' // 従業員のレコード IDAND Field = 'Salary__c'

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

31

S コントロールと AJAX Toolkit

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

32

S コントロール

ユーザインターフェースを記述する HTML コンポーネント

HTML+JavaScript で画面を記述

例:例:Google Maps Google Maps 上に上に取引先データの住所位置取引先データの住所位置をマッピングして表示をマッピングして表示

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

33

AJAX Toolkit

S コントロールから Apex API にアクセスするためのJavaScript で書かれたツールキット

利用には S コントロール内に指定の JavaScript ライブラリを読み込む記述を追加するだけ

<html> <head> <script type="text/javascript" src="/soap/ajax/9.0/connection.js"></script>   </head>…

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

34

S コントロール + AJAX Toolkit のアーキテクチャ

4. AJAX によるAPI リクエストの送信

AJAX Toolkit

S コントロールApex API

Salesforce データベース

1. S コントロール内の HTML+JavaScript をダウンロード

Web ブラウザ

ユーザ

2.スクリプトの実行&描画処理

5.検索、更新などの DB処理

3.ユーザ操作などのイベント

6.画面の再描画

標準オブジェクト &カスタムオブジェクト

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

35

例)  Hello World

<html> <head> <script type="text/javascript" src="/soap/ajax/9.0/connection.js"></script> <script type="text/javascript">window.onload = function() { document.body.innerHTML = '<H1>Hello, ' + sforce.connection.getUserInfo().userFullName + '</H1>';} </script> </head> <body></body></html>

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

36

例) 取引先を検索、テーブルで一覧表示

<html> <head> <script type="text/javascript" src="/soap/ajax/9.0/connection.js"></script> <script type="text/javascript">function queryAccount() { var searchStr = document.getElementById('searchStr').value; var accounts = sforce.connection.query( "SELECT Id, Name FROM Account WHERE Name LIKE '%"+searchStr+"%'" ).getArray('records');

var html = '<table border="1">'; 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="text" id="searchStr"> <input type="button" value="検索 " onclick="queryAccount()"> <div id="output"></div> </body></html>

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

37

Google Maps とのマッシュアップ

地図情報に取引先情報を重ね表示する S コントロール チュートリアル

– Apex Developer Network ブログからアクセス

– http://adnblog.salesforce.co.jp/2007/04/post_b5a4.html

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

38

コーディングにおける TIPS

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

39

同期リクエストと非同期リクエスト

AJAX Toolkit の API呼び出しでは、同期および非同期リクエストの選択が可能– 同期 サーバから値が返却されるまで処理がストップする

– 非同期 サーバから返却された値を指定したコールバック関数が受け取る

同期

非同期

var result = sforce.connection.query("SELECT Id, Name FROM Account");

sforce.connection.query( "SELECT Id, Name FROM Account", { onSuccess : handleResult, onFailure : handleError });

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

40

どちらが望ましい?

同期レスポンス待ちの間、ユーザの操作をブロックさせないためには、実アプリケーションではできるだけ非同期リクエストがよい

同期リクエストの利用は API テスト時、あるいは時間のかからない単純な操作のみに限定する

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

41

オープンソース AJAX ライブラリの利用

AJAX の画面描画記述は煩雑になりがち  既存の JavaScript UI ライブラリを利用して、アプリケーショ

ンのコードが複雑になるのを回避する

Salesforce は AJAX 用ライブラリとして Dojo Toolkit (http://dojotoolkit.org ) を公式にホスティングしている

S コントロールに Dojo Toolkit を読み込む方法<html> <head> <script type="text/javascript" src="/js/dojo/0.4.1/dojo.js"></script>   </head>…

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

42

Dojo Toolkit の利用例

SWOT 分析表( AppExchange公開済)

シンプル掲示板

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

43

S コントロールからの画像ファイルの利用

画像をドキュメントファイルとしてアップロード ドキュメントの参照 URL をコピーして HTML に貼り付

け– 例

JavaScript ファイル、 CSS ファイルなども同様 AppExchange にアップロードする時には、忘れずにパ

ッケージ内容に参照しているドキュメントを含める

<img src="/servlet/servlet.FileDownload?file=0157000000084Un" >

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

44

S コントロールを含む画面遷移

標準画面 カスタム S コントロール– カスタムボタン、カスタムリンクなどを利用– 「差し込み項目」を利用してパラメータの受け取りが可能

カスタム S コントロール カスタム S コントロール– LINKTO, URLFOR 関数の利用

カスタム S コントロール 標準画面– LINKTO, URLFOR 関数の利用– describeSObject 関数で遷移先の URL テンプレートを取得

• urlDetail / urlEdit / urlNew

– レコードの詳細画面なら、「” /”+{ オブジェクト ID} 」 へ URLリダイレクト

• 環境によっては URL を変更している可能性があり、注意が必要

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

45

差し込み項目でパラメータ受け取り

{!Account.Id}

株式会社四川商会

差し込み項目

標準のレコード詳細画面

カスタムボタン / カスタムリンク

カスタム S コントロール

展開された値

{!Account.Name}

0017000000Kh6OS

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

46

URLFOR 関数による画面遷移

S コントロールの差し込み項目内で URLFOR 関数を用いて、遷移先のURL を取得– 例) HelloWorld カスタム S コントロールの URL を取得して画面を遷移

– 例) 取引先の標準のレコードの編集画面に遷移

難点: API で取得した値を埋め込めないため、使えるシーンが限られる どうしても URL を直に生成する実装になってしまう

あまり遷移を必要としないアプリケーション設計に…

location.href = '{!URLFOR($SControl.HelloWorld)}'

parent.location.href =      '{!URLFOR($Action.Account.Edit, Account.Id)}'

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

47

Summary

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

48

Apex アプリケーション開発について

Salesforce ネイティブ環境のみでも、複雑なアプリケーション構築が可能– S コントロールと Apex API の組み合わせ– 運用開始後のスケーラビリティは一目を置くべき

JavaScript による開発 リッチなユーザインターフェース– 既存の Web アプリケーション開発より若干難易度が高い– UI ライブラリを活用して開発負荷を軽減– その他にも Flex などの選択肢

オンデマンド連携のアプリケーション– 外部サービスとして連携することの必然性とその付加価値– サービスレベルを均一にする努力

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

49

Apex Platform Development Partner Program

Apex プラットフォーム上でのアプリケーション開発能力のあるパートナーを認定する制度

要件– AppExchange アプリケーションを 1 つ以上公開

– 指定数以上の認定コンサルタント( Apex )

メリット– アプリケーションのアイディアを共有します

– 個別案件などの獲得につながります

詳細はお問い合わせください

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

50

Appendix

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

51

Appendix : AJAX Tools

Apex API をオンライン上でテスト可能な開発者向けアプリケーション– S コントロールの編集、 SOQL の実行、

シェルによる対話的な API 実行 AppExchange サイトから組織ごとに

インストールして使用する– AppExchange サイトから、「 AJAX

Tools 」で検索 注) 一部機能は IE で動かない場合あ

り、 Firefox を推奨 AJAX Tools は S コントロールと AJAX

Toolkit を使って作られたネイティブアプリ– 名前が似ていて混乱しやすいので注意

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

52

Appendix : 開発用サンプルデータセット

API や SOQL を試そうとしても…

– そもそもデータベースにレコードが入っていないとあまり意味がない

デモや開発テストの際に必要になるダミーのデータを Salesforce にロードするためのアプリケーション – AppExchange サイトからインストール可

– パッケージに含まれるデータ: 取引先、取引先責任者、商談、リード、ケース、行動、 ToDo など約 700 件

インストール後、ボタンクリックひとつで自動的にレコードがデータベースに登録される

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

53

Appendix : 「ユーザ (User) 」

Salesforce 組織にアクセスするユーザの情報を管理– ユーザ名とパスワードが付与され、 Salesforce にログインが可

– 営業支援の用途の場合  「ユーザ」=自社の営業マン

初期サインアップ時は管理ユーザの情報のみ登録されている– 管理者がユーザを必要に応じて追加する

ほぼすべてのオブジェクトに対して、レコードの「作成者」「所有者」「最終更新者」という形で関連付けられる

ユーザユーザUserUser

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

54

Appendix : 「取引先 (Account) 」

顧客企業/事業者の情報を管理 取引先名、電話番号、住所(請求先/発送先)、従業員数などの企業情報を格納

SOQL の例

取引先取引先AccountAccount

SELECT Id, Name, Phone, NumberOfEmployees, BillingState, BillingCity, BillingStreetFROM Account

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

55

Appendix : 「取引先責任者 (Contact) 」

取引先に所属している個人の情報を管理 氏名、役職、電話番号、 E メールなどの個人情報を格納 所属している取引先の情報が親として関連付けられる SOQL の例

SELECT LastName, FirstName, Email, Account.Name, Account.PhoneFROM Contact

取引先責任者取引先責任者ContactContact

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

56

Appendix : 「商談 (Opportunity) 」

現在進行中の(あるいは完了した)案件情報を管理 現在のフェーズや商談全体の金額などの情報を格納 商談に関連している取引先が参照関係で指定できる SOQL の例

SELECT Id, Name, StageName, Amount, Account.Name, Account.Phone FROM Opportunity

商談商談OpportunityOpportunity

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

Confidential documents©Copyright 2000-2007 salesforce.com,inc. All rights reserved.

57

Appendix : 「 ToDo (Task) 」 および 「行動 (Event) 」

行動 (Event) – カレンダー上のスケジュール情報

ToDo(Task) – 今後遂行すべき業務内容 (ToDo) の情報

– すでに終了した活動の履歴情報(訪問結果、メール送信など)

2 つまとめて「活動 (Activity) 」情報として取り扱われる

「活動の記録」をサポートするすべてのオブジェクトに関連付けが可能

ToDoToDo

TaskTask行動行動

EventEvent