2011年1月18日 (火)

ガバナ制限がSpring '11で緩和されます!

Spring '11ガバナ制限が発表されました(Spring'11でのガバナ制限はこちら)。

まず、今までは「トリガ」「匿名ブロック、Visualforceコントローラ、WSDLメソッド」「Testコード」によって制限値が異なっていましたが、全コンテキスト共通の制限値になり、制限の一覧表がかなりすっきりします。

そして、

SOQLクエリで取得可能なレコード数50,000 に緩和
DMLステートメントの発行可能数150 に緩和

と、一番厳しい制限だったところが、大幅に緩和されます。
これでかなりプログラミングが楽になりそうです。

以下に一覧を記載します。

○Spring '11 ガバナ制限一覧

制限対象 制限値
SOQLクエリの発行可能数 100
SOQLクエリで取得可能なレコード数 50,000
SOSLクエリの発行可能数 20
1SOSLクエリで取得可能なレコード数 200
DMLステートメントの発行可能数 150
DMLステートメント、承認プロセス、「ゴミ箱を空にする」で処理可能なレコード数 10,000
実行されるコードステートメント数 200,000
合計ヒープサイズ ※1 3MB
トリガで再帰的に実行されるApexの深度 16
Forループで使用するリストのバッチサイズ 200
Webサービスメソッドの実行可能数 10
コールアウト(HTTPリクエスト またはWebサービスの呼び出し)可能数 10
コールアウト(HTTPリクエスト またはWebサービスの呼び出し)の合計リクエスト可能時間 120秒
1Apexスクリプトで呼び出し可能な@futureアノテーションのメソッド数 10
コールアウト(HTTPリクエスト またはWebサービスの呼び出し)のリクエスト/レスポンスの最大サイズ 1MB
sendEmailメソッドの実行可能数 10
describesの実行可能数 ※2 100

※1 バッチApexのヒープサイズは6MB、電子メールサービスのヒープサイズは18MB。
※2 describesは、ChildRelationshipオブジェクト、RecordTypeInfoオブジェクト、PicklistEntryオブジェクト、fieldsメソッドを含む。

2011年1月17日 (月)

Chatterの基本設定 ~有効化、メール設定、招待、フィード追跡、Chatterデスクトップ~

今回はChatterの基本的な設定を簡単にご紹介。

Chatterの有効化

Chatterを利用できるようにするには、まず有効化します。
[設定] → [カスタマイズ] → [Chatter] → [設定]で、「有効化」にチェックを入れればOKです。

ちなみに、旧ユーザインタフェースを利用している場合はChatterが利用できないので、
[設定] → [カスタマイズ] → [ユーザインタフェース]で、「新規ユーザインターフェースのテーマを有効化」にチェックを入れて、新ユーザインタフェースに変更して下さい。

20110117_1

Chatterの電子メール設定

[設定] → [カスタマイズ] → [Chatter] → [設定]で、「電子メールを許可」にチェックを入れると、ユーザがChatterに関する電子メールを受信できるようになります。

受信するメールは、[個人設定] → [私のChatter設定] → [Chatter電子メール設定]で設定できます。

最初は、下記の項目は全てONになっています。メールを受信したくない場合は、適宜OFFにして下さい。
・私をフォロー
・私のプロファイルに投稿
・私の状況や私が行った変更にコメント
・私のプロファイルの投稿にコメント
・私の後にコメント

また、Chatterダイジェストを受信することができます。
Chatterダイジェストは、最新の投稿及びコメントをまとめたメールです。
・日刊:最新の25投稿及びそのコメント(コメントは最大3ヶまで)
・週刊:最新の50投稿及びそのコメント(コメントは最大3ヶまで)
・受信しない
から受信設定を選ぶことができます。

20110117_2

Chatterへの招待

[設定] → [カスタマイズ] → [Chatter] → [設定]で、「招待」にチェックを入れると、指定したドメインのメールアドレスに、ユーザがChatterの招待メールを送信できるようになります。

20110117_3

招待されたユーザには「Chatter Free」ライセンスが付与され、Chatterのみですが、利用できるようになります。

フィード追跡

[設定] → [カスタマイズ] → [Chatter] → [フィード追跡]で、「フィード追跡の有効化」をチェックしたオブジェクトは、レコードの詳細画面にChatterが追加され、レコードに投稿・コメントすることが可能となります

また、オブジェクトの各項目をチェックすると、その項目の変更履歴が自動的にChatterに記録されるようになりますので、気になるレコードをフォローしておけば、変更を監視することができます。

フィード追跡を有効化したオブジェクトでは、自分が所有するレコードは自動的にフォローされます。これを停止したい場合は、[個人設定] → [私のChatter設定] → [私のフィード]で、「レコードの自動登録を停止」をチェックします。

Chatterデスクトップ

[個人設定] → [デスクトップ統合] → [Chatterデスクトップ]から、「Chatterデスクトップ(AIRアプリ)」をダウンロードできます。

インストール後、アカウントとパスワードを設定すると、ログインでき、以下のタブが表示されます。

・Chatter :
 -フォローしている人・グループ・レコードの投稿・コメントを確認できます。
 -投稿・コメント・ファイル共有ができます。
 -各投稿・コメントの左下の「コメント」をクリックすると、右側にスクロールして、
  対象の投稿・コメントに紐付く投稿・コメントだけを見ることができます

・自分宛て : 自分宛ての投稿を確認できます。
・人 : ユーザ一覧でフォローしている・していないを確認できます。
・グループ :参加しているグループ一覧を確認できます。

20110117_4

右上の歯車のアイコンで設定を変更できます。設定項目は、下記の5つだけです。

・起動時にアプリケーションを起動
・閉じるときにアプリケーションを最小化
・フィードでコメントを表示(再起動が必要)
・通知を有効化
・接続先(運用組織 or Sandbox)

「フィードでコメントを表示」をチェックしておかないと、コメントが表示されませんのでご注意を。

Chatterは投稿の新しい順で表示され、コメントは投稿の下に追加されていくので、メール受信をOFFにしていると、昔の投稿にコメントが付いたことに気が付かなかったりしますがChatterデスクトップだと、投稿もコメントも混合で新しい順で表示されるので、見逃すことがなくなります。

2011年1月11日 (火)

HerokuとDatabase.com ~SalesforceのPaaSが4本立てに~

昨年の12月6日~9日に米国で行われた「Dreamforce '10」では、
Salesforceが提供するPaaSが4本立てになることが発表されました。

「Force.com(現在提供中)」、「VMforce(既に発表済み)」に、「Heroku(Heroku社を買収)」と「Database.com」がラインナップに加わります。

以下では、4本立てとなるPaaSの概要をまとめた表と
今回新しく発表された「Heroku」と「Database.com」について紹介します。

名称Force.comVMforceHerokuDatabase.com
概要 Webアプリケーションを構築できるPaaS Javaアプリケーションを構築できるPaaS Rubyアプリケーションを構築できるPaaS Webサービス経由で利用できるデータベースサービス
リリース時期 提供中 約100社にプライベートベータ提供中。2011年正式リリース。まもなくパブリックベータ? Heroku社により提供中(2011年1月までに買収完了予定) 2011年
ターゲット 業務アプリケーション ソーシャル/モバイルアプリケーション

Heroku

HerokuはHeroku社がAmazon EC2上で提供しているRuby on RailsのPaaSです。
現在、10万5000以上のソーシャル・アプリ、モバイル・アプリが動作しているようです。

・「Dyno」:アプリケーションサーバプロセス(1Dynoまで無料)
・「Worker」:バックグラウンドプロセス
・「Dedicated Database」:RDB「PostgreSQL」(5MBまで無料)
が標準機能として提供されます。

Herokuは追加機能が充実しているのが特徴です。
下記のような機能を、メニューから選ぶだけで利用することができます。

名称概要
Exceptional アプリケーションに発生した例外処理を監視するサービス。
Release Management アプリケーションのリリース管理サービス。ロールバックなどが可能。
Sendgrid 大量のメールを送信できるサービス。
Websolr アプリケーションの検索機能を組み込めるサービス。
memcache インメモリー型データベース
Redis to Go インメモリー型データベース
Cloudant ドキュメント指向データベース「CouchDB」
MongoHQ ドキュメント指向データベース「MongoDB」

ちなみに、買収後にどのように変化するのかについては、まだ情報がありません。
動作環境がAmazon EC2のままなのか、Force.comとの連携はどうなるのかなどは、不明です。続報を待ちたいところです。

Database.com

Database.comはForce.comのRDB部分を単独のサービスとして提供するものです。VMforce(JPAでアクセス)やHerokuからも利用可能です。

下記に、特徴と料金をまとめてみました。

○特徴
REST、JPA、SOAPなどのAPIでアクセス可能
・Webブラウザからスキーマ定義が可能。
・サードパーティのツールを利用すれば、コマンドラインからSQLで直接操作も可能。
・認証プロトコルとしてOAuth2、SAMLが利用可能。
・Java、.NET、PHP、Ruby、iOS、Androidなどに対応したツールキットが提供される。
・自動的にスケールする。
・自動的にバックアップされる。
・自動的にレプリケーションされ、障害発生時は自動的にフェイルオーバーが行われる。

20110111_1

○料金

無料追加料金
レコード数 100,000レコードまで無料 追加100,000毎に、$10/月
トランザクション数 50,000/月 まで無料 追加150,000毎に、$10/月
ユーザ数 3ユーザ まで無料 追加1ユーザ毎に、$10/月

2011年1月 6日 (木)

Google Chrome 拡張機能 「Force.com Logins」

Appirio社からGoogle Chrome ツール「Force.com Logins」がリリースされました。

予め登録しておいたSalesforceアカウントに1クリックでログインできるツールです。

早速使ってみましたが、ログインしなおす手間が省けて、とてもいい感じです。
今までは、毎回Salesforceのログインページからログインし直してましたからね~。
たくさんのSalesforceアカウントを持っている人には、かなりお薦めのツールです。

インストールはこちら

○特徴
・アカウント、パスワード、セキュリティトークン、組織種別、説明を登録しておけます。
・「新規タブで開く」「新規ウィンドウで開く」を選択できます。
・アカウントをグループ毎に分別できます。
・アカウント情報をXML形式でエクスポート/インポートできます。
・インタフェースは英語と日本語が、ロケールで自動で切り替ります。

○ログイン画面

20110106_1

○登録画面

20110106_2


2010年12月21日 (火)

データローダーでNULLを上書きする方法

データローダーでUpdateすると、上書くデータが空の項目は、上書き前のデータがそのまま残ってしまいます。

例) "hoge"を""でUpdateすると、"hoge"のままとなる。

これを防ぐには、データローダーの[Settings]メニューを開いて、「Insert null values」にチェックを入れます。

20101221_1

20101221_2

これで、上書くデータが空の項目も、Update時に空になります。

例) "hoge"を""でUpdateすると、""となる。

2010年12月 6日 (月)

レポートに表示できるオブジェクトの種類は4ヶまで?

レポートタイプの作成時には、レポートに表示するオブジェクトを決定するために、オブジェクトリレーションを設定します。

Salesforceの制限で、オブジェクトリレーションは主オブジェクトから3段階までしか設定できないようになっており、

オブジェクトリレーションを3段階まで設定すると、

オブジェクトの上限値
カスタムレポートタイプには、オブジェクトを最大4つまで関連付けることができます。

と表示されるので、

レポートに表示できるオブジェクトの種類は4ヶまでなのだと思ってしまうかもしれません。

20101206_1

ところが、5ヶ以上のオブジェクトの項目をレポートに表示する方法があります。

レイアウトの編集画面の右側に、下記のような各オブジェクトの項目を表示しているエリアがありますが、このエリアの「参照先の項目を追加」をクリックすると、選択されていたオブジェクトが参照関係を結んでいるオブジェクトの項目をレポートに追加することができます。

20101206_2

20101206_3

20101206_4

参照関係は最大4段階まで辿ることが可能なので、この技を知っていると、作成できるレポートの幅が大分広がります。

また、レポートに表示したいだけの項目を、わざわざクロスオブジェクト数式項目で追加ということもしなくて済みます。

ただし、あくまで辿れるのは親リレーションであって、子リレーションは辿れませんので、あしからず。

2010年11月16日 (火)

Force.com IDE for Winter '11がリリースされました

Winter '11リリースに伴い、Force.com IDEがバージョンアップされていたので、
早速インストールしてみました(インストール方法はこちら)。

○変更点
Eclipse 3.6 Helios対応
Winter '11のメタデータAPIに対応
・ヘルプドキュメント・リファレンスドキュメントがWinter'11に対応

Winter '11のメタデータAPIに対応ということで、下記のオブジェクトにスキーマブラウザからアクセス可能になりました。

Report
・ReportFeed
・ReportTag
・CaseArticle
・ContentDocumentFeed
Dashboard
・DashboardFeed
・DashboardTag
・EventFeed
・KnowledgeArticleViewStat
・KnowledgeArticleVoteStat
・TaskFeed

ReportとDashboardで取得できる主な項目は以下の通りとなります。

○Report
・レポート名
・レポートの一意な名前
・説明
・最終実行日時

20101116_1

○Dashboard
・ダッシュボード名
・ダッシュボードの一意な名前
・説明
・ダッシュボード実行ユーザ
・フォルダID
・左/中央/右のサイズ
・背景色
・タイトル

20101116_2

各レポート/ダッシュボードの定義や抽出値は取得できないので、利用場面はあまりないかもしれませんが、基本情報が取得できるようになったということで、紹介しておきます。

2010年11月 9日 (火)

with sharingキーワードとwithout sharingキーワード

Apexはデフォルトでシステムモードで動作するので、全オブジェクトに対して全レコードの編集が可能です。

そのため、例えば、ユーザがVisualforceページでレコードを検索する場合、ユーザが参照権限を持たないレコードについても、検索できてしまいます。

ユーザが参照可能なレコードのみを検索できるようにするには、Apexクラスにwith sharingキーワードを付与します。
これによって、ユーザに適用されているレコードレベルの共有ルールを強制実行することができますユーザモードでの動作)。

public with sharing class SharingClass {

}

ここで注意しなくてはならないのは、with sharingキーワードを付与しても、オブジェクトのCRUD権限、項目のアクセス権限は、システムモードのままということです。ユーザがアクセスできないはずのオブジェクトや項目にアクセスできてしまいます。

オブジェクトのCRUD権限、項目のアクセス権限は、Apexでは制御できないので、開発者が、ユーザから隠されているデータを公開しないように注意してApexコードを書く必要があります。

逆に、ユーザに適用されている共有ルールを強制実行されないようにするには、without sharingキーワードを付与します。

public without sharing class NoSharingClass {

}

with sharingキーワードもwithout sharingキーワードも付与しない場合は、呼び出し元のApexクラスの設定が有効となります。
例えば、with sharingキーワードが付与されたApexクラスから、キーワードなしのApexクラスを呼び出した場合、ユーザに適用されている共有ルールが強制実行されます。呼び出し位置が最上位レベルの場合(最初に呼ばれるApexクラスの場合)は、システムモードでの動作となります。

動作モードを表にまとめるとこうなります。

呼び出し位置 キーワード
なし without sharing with sharing
最上位レベル システムモード システムモード ユーザモード
最上位レベル以外 呼び出し元のモードと同じ システムモード ユーザモード

ちなみに、トリガはシステムモードの動作となりますが(トリガにはキーワードを付けることができない)、トリガ内部でwith sharingキーワード付きのApexクラスを呼び出すことで、ユーザモードでの動作となります。

また、匿名ブロックは、ユーザモードでの動作となります。

2010年11月 1日 (月)

Apexのトランザクション制御

前回、ApexのDMLステートメントと失敗時の挙動の説明で、ロールバックの話が出たので、今回はApexのトランザクション制御の特性を紹介します。

トランザクションの開始

Apexスクリプトの開始と同時にトランザクションが開始されます明示的にトランザクションを開始することはできないので、注意が必要です。

コミット

Apexスクリプトが正常終了すると、コミットされます。これも明示的にコミットすることはできないので、注意が必要です。

セーブポイント

Database.setSavePoint()をコールして、セーブポイントを設定できます。

ロールバック

Apexスクリプトが異常終了すると、ロールバックされます
明示的にロールバックするには、Database.rollback(savepoint)をコールします(セーブポイントへのロールバックしかできません)。

以上のように、明示的に制御できるのは、セーブポイントの設定とロールバックだけで、他はApexが正常終了したか異常終了したかによって、自動的に行われます。きめ細かく制御できないので、この特性を理解した上でプログラムを組む必要があります。

最後に、トランザクション中での行ロックの取得方法と、Force.comプラットフォームでのトランザクションの分離レベルについて、紹介しておきます。

行ロックの取得

Apexコード中で実行するSOQLクエリに「For Update」キーワードを付けて、行ロックを取得することができます。行ロックはトランザクションがコミットまたはロールバックされるまで持続されます

例) Select Id From Account For Update

トランザクションの分離レベル

Force.comプラットフォームのトランザクションの分離レベルは、コミット済み読み取り(READ COMMITTED)で、変更することはできません。

更新したがまだコミットされていないデータは、他のトランザクションからは読み取られません。あるトランザクションが更新中のレコードを他のトランザクションが読み取ろうとしたときは、更新中トランザクションが終了するまで一定時間待ちます。一定時間を過ぎた場合は待っている方のトランザクションが失敗します。

※トランザクションの分離レベルについては、ここを参照のこと

2010年10月25日 (月)

ApexのDMLステートメントと失敗時の挙動

ApexのDMLステートメントには、スタンドアローン形式とメソッド形式があり、いずれかのレコードが失敗した時の動作に違いがあります

○スタンドアローン形式

・記述例:
insert obj;

・いずれかのレコードが失敗した場合の動作:
全てのレコードがロールバックされる。

○メソッド形式

・記述例:
Database.insert(obj, option);

・いずれかのレコードが失敗した場合の動作:
オプションが未指定またはtrueの場合、全てのレコードがロールバックされる。
オプションがfalseの場合、レコードは個別に成功 or 失敗となる。
失敗したレコードは無視され、処理が最後まで実行される

通常はスタンドアローン形式を使用し、バッチ処理など、個別レコードで失敗しても処理を続行したいときに、メソッド形式を使用すると良いでしょう。

一つ注意しなければいけないのは、いずれの形式であっても、 処理の成功/失敗によらず、コミットはされないということです。Apexが異常終了した際には、どちらの形式を使用していても、全てのレコードがロールバックされます。

採用情報

株式会社フレクトでは、事業拡大のため、
・Salesforce/Force.comのアプリケーション開発
・HerokuやAWSなどのクラウドプラットフォーム上
でのWebアプリケーション開発
エンジニア、マネージャーを募集中です。

未経験でも、これからクラウドをやってみたい方、
是非ご応募下さい。

フレクト採用ページへ

会社紹介

  • 株式会社フレクトは、
      ・認定コンサルタント
      ・認定上級デベロッパー
      ・認定デベロッパー
    が在籍している、セールスフォースパートナーです。
    また、heroku partnersにも登録されています。
    herokuパートナー
    株式会社フレクト
    Salesforce/Force.com
    導入支援サービス
    弊社の認定プロフェッショナルが支援致します。
    ・Visualforce/Apexによるアプリ開発
    ・Salesforceと連携するWebアプリ開発
    も承っております。
    セールスフォースご検討の際は、
    お気軽にお問合せください。

Twitter

リファレンス

■Developer's Guide(リファレンス)
・Apex  HTML | PDF | 日本語PDF | ガバナ制限
・Visualforce  HTML | PDF
・Web Services API  HTML | PDF | 日本語PDF
・Bulk API  HTML | PDF
・REST API  HTML | PDF | 日本語PDF
・Metadata API  HTML | PDF
・Migration Tool  HTML | PDF
・AJAX Toolkit  HTML | PDF
・Data Loader PDF | 日本語PDF

■早見表 (日本語)
数式
Apex
Visualforce
Web Services API
Chatter