Apexアプリケーション開発をはじめよう - 第5章:カスタムオブジェクトの作成

by Shinichi Tomita on 4月 11, 2007 at 05:47 午後

Force.comプラットフォーム上で可能なこと

これまで、JavaScript(AJAX) および Java言語を使って、ネイティブアプリケーションおよび連携アプリケーションを作成する方法について学んできました。その中で、Salesforceのデータベース内にクエリを投げたり、レコードを作成、更新、削除するアプリケーションプログラムが記述できるようになったかと思います。

今までの例では、すべてSalesforceに標準で定義済みのオブジェクト(AccountContact など)に対してアクセスするプログラムを記述してきました。しかし、Force.comプラットフォームで可能なことはこれだけにとどまりません。初めの章で述べたように、Force.comプラットフォームではForce.comデータベース内に格納することができるオブジェクトの定義を、アプリケーションごとに独自に設計/追加することが可能になっているのです。

このアプリケーション開発者が独自に追加するオブジェクト定義のことを、Salesforceがあらかじめ用意している標準オブジェクトに対し、カスタムオブジェクトと呼んでいます。カスタムオブジェクトが定義できることで、アプリケーションに必要なデータのすべてをForce.comデータベース内に構造的に保持することが可能になります。

カスタムオブジェクトの作成

それでは実際にカスタムオブジェクトをSalesforceに定義してみましょう。カスタムオブジェクトの定義は、すべてSalesforceのWebインターフェース上から行います。

Salesforceにログイン後、画面上部の「設定」リンクをクリックして、左メニューから「開発>カスタムオブジェクト」リンクをクリックしてください。画面中央の「新規カスタムオブジェクト」ボタンをクリックして作成を開始します。

「表示ラベル」にはカスタムオブジェクトを表示する際に適当なラベル名を、「オブジェクト名」にはオブジェクトの名称を英数字で入力します。ここでは表示ラベルに「部署」、オブジェクト名を「Department」としています。

Ws000001

「レコード名」にはレコードのラベルとなる名前を設定します。データ型としてテキストもしくは自動採番が選択できます。レコード名はレコード作成の際には入力が必須となります。一つ一つのレコードに名称を設定する必要がない場合は、データ型として自動採番を選択してください。ここではレコード名として「部署名」、データ型は「テキスト」とします。

52

画面下部のオブジェクト作成オプションセクションで「カスタムオブジェクトの保存後、新規カスタムタブウィザードを起動する」にチェックを入れておくと、カスタムオブジェクトを表示するためのタブを作成することができます。このタブを作成しておくと、オブジェクトに対して、検索、表示、作成、編集、削除といった基本的なデータ操作を行うための画面が自動的に作成されます。

ここでは「タブウィザードを起動する」にチェックを入れて、「保存」ボタンを押します。

53

その後、タブ作成のためのウィザードが起動されますが、設定が必要なのはタブスタイルなどの表示にかかわる項目だけです。それを自由に選択した後は、すべて「次へ」をクリックして「保存」ボタンを押します。ウィザードが終了した後に、画面上部のタブリストの右端に「部署」タブが作成されていることを確認してください。

以上の作業によってカスタムオブジェクトがSalesforce上に定義できましたが、まだ肝心のカスタムオブジェクトに格納するデータ構造を決定していません。これは今から設定していくことになります。

データ構造の定義は、作成されたカスタムオブジェクトに対して、適当なデータ型のカスタム項目(フィールド)を追加していくことで行われます。カスタムオブジェクトがRDBで言うテーブルに相当するならば、カスタム項目はカラム(列)に相当すると考えてください。

画面上部の「設定」リンクをクリックして、左メニューから「開発>カスタムオブジェクト」リンクをクリックしてください。 先ほど作成したオブジェクト(「部署」オブジェクト)がリスト内に表示されているかと思います。この表示ラベルのリンクをクリックすると、以下のような画面が現れます。

541

「標準項目」と書かれているセクションには、すでにカスタムオブジェクトに対して標準で定義されている項目(フィールド)がリスト表示されています。リストを見てわかるように、カスタムオブジェクトは常に標準で「作成者」「所有者」「最終更新者」といった項目を保持しています。これらはそれぞれ、そのレコードに関連しているSalesforce内のユーザを指し示しています。

「カスタム項目 & リレーション」と書かれたセクションで、このカスタムオブジェクトに対して項目(フィールド)を追加することができます。「新規」ボタンを押してカスタム項目を追加するウィザードを開始します。

55

まずこの項目のデータ型を決定します。ここでは「テキスト」を選択し、「次へ」をクリックします。

56

項目の詳細を入力します。「項目の表示ラベル」にはカスタム項目を表示する際に適当なラベル名を、「文字数」にはテキスト入力可能な最大文字数を、「項目名」にはカスタム項目の名前を英数字で入力します。ここでは項目の表示ラベルとして「拠点」、文字数を「20」、項目名を「Location」としています。

Ws000000_2  

ここでは、あとはすべて「次へ」をクリックして、最後に「保存」をクリックします。

これによって、カスタムオブジェクトにカスタムの項目を追加することができました。この作業を繰り返すことで、さまざまなデータ型をカスタムオブジェクトに項目として追加していくことが可能です。

カスタムオブジェクトおよびカスタム項目が定義できたら、実際にデータを入力してみましょう。すでに画面上部のタブリストに「部署」タブが作成されているはずです。このタブをクリックすることで部署オブジェクトの情報が表示されます。

58

まだデータベース内にはレコードは何も登録されていません。「新規」ボタンをクリックすることで、レコードを新規作成することができます。

「部署名」および「拠点」に情報を入力して「保存」ボタンを押すと、レコードがデータベース内に登録されます。

59

510

カスタムリレーションの定義

カスタムオブジェクトでは、オブジェクトの間にリレーションを定義することも可能です。これによって、リレーションでつながった2つのオブジェクトに対して同時にレコードを取得することが可能になります。

ここでは先ほど作成した「部署」オブジェクトに関連するオブジェクトとして、「従業員」オブジェクトを定義します。

画面上部の「設定」リンクをクリックして、左メニューから「開発>カスタムオブジェクト」リンクをクリックしてください。画面中央の「新規カスタムオブジェクト」ボタンをクリックして作成を開始します。

先ほどと同じように、カスタムオブジェクトの情報を入力します。表示ラベルは「従業員」、オブジェクト名を「Employee」、レコード名を「従業員名」、データ型を「テキスト」とします。「カスタムオブジェクトの保存後、新規カスタムタブウィザードを起動する」のチェックボックスもチェックしておいてください。

Ws000001_2

「保存」ボタンをクリックすると、タブ作成のためのウィザードが起動されます。先ほどと同様に、設定が必要なのはタブスタイルなどの表示にかかわる項目だけです。それを自由に選択した後は、すべて「次へ」をクリックして「保存」ボタンを押してください。ウィザードが終了した後に、画面上部のタブリストの右端に「従業員」タブが作成されていることを確認してください。

次に、作成された従業員オブジェクトに対して、部署オブジェクトへのカスタムリレーションを作成します。この場合、部署オブジェクトと従業員オブジェクトは1対多の関係となります。

画面上部の「設定」リンクをクリックして、左メニューから「開発>カスタムオブジェクト」リンクをクリックしてください。先ほど作成したカスタムオブジェクト(「従業員」オブジェクト)がリスト内に表示されていると思います。この表示ラベルのリンクをクリックすると、以下の画面が表示されます。

5121

カスタムリレーションを追加するには「カスタム項目 & リレーション」のセクションから、「新規ボタン」をクリックします。

最初にカスタム項目のデータ型を選択しますが、リストのうち「参照関係」および「主従関係」となっているものがリレーションの設定に相当します。参照関係と主従関係はどちらも他のオブジェクトへのリレーションを定義しますが、主従関係の場合は関連先のオブジェクトに完全に属したデータとなり、関連先のオブジェクト(主)が削除されると関連元のオブジェクト(従)は自動的に削除されることになります。

5131

ここでは「参照関係」を選択して「次へ」と進みます。

次に関連するオブジェクトを選択します。選択リストには、標準オブジェクトを含め、リレーションを定義することが可能なオブジェクトがリストされています。ここでは先ほど作成した「部署」オブジェクトを選択します。

5141

リレーションの名前を入力します。ここでは項目の表示ラベルとして「所属部署」、項目名として「Department」と入力します。

Ws000002

あとはすべて「次へ」をクリックしてウィザードを進めてください。最後に「保存」をクリックします。

これで「部署」オブジェクトに関連する「従業員」オブジェクトを定義することができました。あとは実際にデータを入力し、リレーションが機能していることを確かめましょう。

画面上部のタブリストには「従業員」タブが作成されているはずです。このタブをクリックすると従業員オブジェクトの情報が表示されます。「新規」ボタンをクリックして新しく従業員レコードを作成します。

5161

新規入力画面には「従業員名」という項目のほかに「所属部署」とラベルのついた項目が存在しているのがわかります。この項目の左端のアイコンをクリックすることで、部署オブジェクトから関連付けるレコードをルックアップすることができます。

5171

従業員名に適当な名前を入力し、所属部署にはルックアップ選択ダイアログから先ほど作成した部署レコード「開発本部」を選択して、「保存」ボタンをクリックします。

カスタムオブジェクトへのアクセス

以上で、カスタムオブジェクトおよびリレーションをWebインターフェースから定義することができました。最後にこのカスタムオブジェクトに対してアプリケーションプログラムからアクセスする方法について簡単に紹介します。

カスタムオブジェクトは、作成時に定義したオブジェクト名によってアクセスすることが可能です。ただし、この場合常にオブジェクト名に'__c'という文字列が後ろに付加された形になります。先ほどの例では、部署オブジェクトは "Department__c"、従業員オブジェクトは "Employee__c" という名前によってアクセスすることになります。カスタム項目名についても同様に'__c'が項目名の後ろに追加されます。これはAPI参照名とよばれており、カスタムオブジェクトの詳細表示画面から参照できます。

例:

SELECT Id, Name, Location__c FROM Department__c

リレーション項目にアクセスするためには、項目名に対して'__r'を追加した名前でアクセスします。

例:

SELECT Id, Name, Location__c, (SELECT Id, Name FROM Employee__r) FROM Department__c
SELECT Id, Name, Department__r.Name FROM Employee__c

プログラムからレコード間のリレーションを設定する場合は、参照する側のオブジェクトのリレーション項目の値に参照される側のレコードの Id 値をセットすることになります。Id 値の設定はリレーション項目名に対して'__c'を追加したプロパティに対して行います。

例(AJAX Toolkit):

var res = sforce.connection.query('SELECT Id, Name FROM Department__c LIMIT 1');
var dept = res.getArray('records')[0];
var emp = new sforce.SObject('Employee__c');
emp.Name = '鈴木 一郎'
emp.Department__c = dept.Id;
sforce.connection.create([ emp ]);

JavaでエンタープライズWSDLを用いてプログラムを記述している場合は、カスタムオブジェクトを定義した際には再びWSDLをダウンロードしてスタブクラスを作成する必要があります。このときカスタムオブジェクトも標準オブジェクトの場合と同様にJavaクラスとして取り扱うことができます。

例:

Department__c dept = new Department__c();
dept.setName("営業本部");
dept.setLocation__c("東京");
binding.create(new Department__c[]{ dept });

トラックバック

このページのトラックバックURL: http://www.typepad.jp/t/trackback/7240/6909474

このページへのトラックバック一覧 Apexアプリケーション開発をはじめよう - 第5章:カスタムオブジェクトの作成:

コメントを投稿

コメントは記事の投稿者が承認するまで表示されません。