はじめに
Force.comを利用する機会は、既存の基幹業務システムを再構築する場合だけではありません。
例えば、これまで共有フォルダ上のExcelやAccessのファイル、Googleスプレッドシートなどで管理していた情報を、より広い範囲で共有したいといった場合には、Force.comはもっとも有効な手段の一つです。これは、Force.comでは、ユーザに割り当てられた「プロファイル」(ユーザの権限のセット)に応じて、ある特定の「オブジェクト」(RDBではテーブルに相当するもの)や項目に対する参照/編集といったアクセス権を制御する仕組みが備わっているからです。
また、部署の階層などを表現する「ロール」や任意の共有範囲を表す「公開グループ」を利用することで、他部署には見えず上位部署には見えるといった、レコードの可視範囲を実現することができます。
前回触れたガバナ制限とあわせて、オブジェクトや項目、レコード単位のセキュリティに配慮しながらコーディングすることは、Force.comにおける大きな特徴と言えます。
Apexには、JavaやC#と異なり、クラス定義に「with sharing」または「without sharing」というキーワードを指定することができます。
public with sharing class Foo { // … } public without sharing class Bar { // … }
「with sharing」を指定した場合、実行中のユーザが参照できないレコードは、SOQLのクエリーによって検索されません。逆に「without sharing」では、ユーザが参照できないレコードも検索されます。なお、「with sharing」「without sharing」のどちらも指定しなかった場合は、呼び出し元クラスでの指定が引き継がれます(呼び出し元がトリガーやWebサービスの場合は「without sharing」)。
本稿で扱うサンプルアプリケーションも、まずはちょっとした情報を共有するところからはじめていきます。
用語 | 説明 |
---|---|
プロファイル |
ユーザに割り当てる権限のセット。あらかじめ存在するものとしては 「システム管理者」「標準Platformユーザ」「標準ユーザ」などがある。 オブジェクトや、オブジェクトを表示するための「ページレイアウト」と「タブ」、 Visualforceページ、Apexクラスなどの利用可否を設定できる。 |
オブジェクト |
RDBではテーブルに相当する情報の単位。あらかじめ存在するものとしては 「ユーザ(User)」「取引先(Account)」「取引先責任者(Contact)」などがある。 |
トリガー | オブジェクトのレコードの作成、編集、削除、復元を契機に呼び出されるApexコード。 |
Webサービス |
外部のシステムから呼び出すことができるメソッド。 Apexによって、カスタムのSOAPベースのWebサービスを作成できる。 |
※Force.com固有の用語の詳細は、Salesforce.com社が提供するドキュメントやヘルプを参照してください。
対象読者
Javaや.NETなどのオブジェクト指向言語でのコーディング経験がある開発者。
必要な環境
- Windows、Mac OS、Linuxなど、WebブラウザとJava VMが動作する環境(本稿ではWindows 8とFirefox、Java 6で動作を確認)
- Apache Ant version 1.6以降
サンプルの概要
サンプルとして、よくあるクイズゲームを作成してみます。選択式のクイズに答えることで、知識を確かめるものです。発展形としては、企業で扱う商品の商品知識を試験したり、プレーヤー同士がランキングなどによって競い合ったりできるようにするのも面白いかもしれません。
ストーリーと画面遷移
まずは次のようなストーリーを考えてみます。「ポイント」は作業ボリューム感を表しています。
№ | 項目 | ポイント | 優先度 |
---|---|---|---|
1 | プレーヤーは、プレーするクイズを選択し、開始する | 5 | 高 |
2 | プレーヤーは、質問内容を把握し、回答する | 3 | 高 |
3 | プレーヤーは、過去のプレーを一覧表示し、再開する | 1 | 低 |
4 | プレーヤーは、プレーの成績を確認する | 2 | 中 |
5 | 運用者は、クイズと問題、正解を用意する | 1 | 中 |
プレーヤーは、あらかじめ運用者によって用意されたクイズを解きます。ストーリーの№1~3に関する主な画面遷移は次のようなものです。
実のところ、この画面遷移図に記載していないストーリーの画面も含め、今回のサンプルのすべての画面は、Force.comの標準機能である「ページレイアウト」で実現できてしまいました。機能を追加する際には、Visualforceによって、よりユーザビリティの高い画面や、パートナー/顧客企業へのポータルサイトとして公開するための見栄えの良い画面をコーディングすることもできます。
データモデルの設計
続いて、ストーリーのシナリオを頭に思い浮かべながら、大まかなデータモデルをモデリングします。サンプルアプリケーションの最初のデータモデルのクラス図と各クラスの概要は次のようなものです。
英名 | 和名 | 概要 |
---|---|---|
Quiz | クイズ |
複数の質問のセット。例えば「動物クイズ」「昆虫クイズ」といったように、 クイズのジャンルなどのグループを表す。 |
Question | 質問 |
プレーヤーが回答する対象の質問。「哺乳類はどれですか?」といったように、 選択肢の選択をうながす質問文を有する。 |
Choice | 選択肢 |
質問の一部となる選択肢。「哺乳類はどれですか?」の選択肢としては 「ねこ」「はと」「招き猫」などの選択肢が考えられる。 |
Play | プレー | プレーヤーがクイズに挑戦する機会を表す。プレーごとに正解率を算出する。 |
Answer | 回答 | プレーヤーによるクイズの質問に対する回答。 |
「クイズ」「質問」「選択肢」は、あらかじめ運用者が登録しておきます。プレーヤーがクイズへの挑戦を開始する際に「プレー」を作成し、同時に「クイズ」内のすべての「質問」に対する「回答」を未回答の状態で作成する方法をとっています。これらのクラスはForce.com上では「オブジェクト」として表します。