System.runAs()を使う時の注意点

みなさんはApexテストコードを書く際にSystem.runAs()を使っていますか?System.runAs()を使うと、指定したユーザの権限でテストを実行でき、ユーザ権限別のテストを行うことができます。Developerforce Wikiの"Apexコードテストメソッドの概要" ページにも "runAs メソッドを使用して複数のユーザコンテキストでアプリケーションをテストする" とあり、System.runAs()を使って各種ユーザの権限をテストすることが推奨されています。 User u = new User(); u.Email = ...; u.FirstName = ...; u.LastName = ...; u.alias = ...; u.username = ...; u.profileid = ...; u.emailencodingkey = ...; u.lang ... 続きを読む

Force.com REST とStreaming API 〜 Winter '12リリース 〜

Spring '11で正式リリースされたREST APIと、現在パイロットリリース中のStreaming APIですが、Winter '12ではいくつかの機能追加及び変更がありました。以下詳細です。 REST APIでバイナリデータサポート改善 REST APIでのバイナリデータ(Blob)アップロードは従来50MBまででしたが(base64エンコード後のサイズ)、Winter '12リリースでは、multipartタイプを使用して500MBまでのblobファイルをアップロード出来るようになりました。 multipart/form-dataで送信されるデータの構造はEmailのraw dataと似た構成になっています。 --boundary_stringContent-Disposition: form-data; name="entity_document";Content-Type: ... 続きを読む

Force.com FlowをVisualforceと合わせて使う

Winter 12リリースでついにクラウドベースのFlow DesignerがBetaリリースされました。Flow Designerを使えば、今まではVisualforceを利用しなければ作成出来なかった、複数画面に渡るウィザードや入力内容によって条件分岐する画面などがコードを書かなくとも簡単に作成・編集できるようになります。 またApexクラスからやVisualforceタグを使ってFlowのコンポーネントへアクセスが可能ですので、Visualforce内にFlowページを埋め込むといったことも可能です。以下はFlowで入力されたCase番号からVFページ上にデータを読み込むサンプルです。 VisualforcePage : caseflow apex:page controller=FlowpageController sidebar=falsediv style=float: lef ... 続きを読む

セキュアコーディングガイドライン日本語版公開

DeveloperForceグローバルに公開されているコンテンツ「Secure Coding Guideline」の日本語版を公開しました。 セキュアコーディングガイドラインはForce.comでエンタープライズ用途に耐えうるセキュアなアプリケーションを作成する上で必須の知識がまとめられています。 XSS(クロスサイトスクリプティング)やCSRF(クロスサイトリクエストフォージェリ)等のスクリプトによる脆弱性から、SOQL/SOSLインジェクション、Cookies盗用、リダイレクト、SSOセキュリティ等の多岐に渡るトピックを、Apex/Visualforceでのケース以外にもJava、.Net、PHP、Rubyなどから扱う場合にも包括的に解説しています。 AppExchange/OEMアプリケーションのセキュリティレビューにおいても、本ガイドラインへの順守がレビューの対象となっています。 ... 続きを読む

Apexテストコード作成の落とし穴

本エントリでは、Apexテストコードを作成する際に注意しなければならない「落とし穴」をいくつかご紹介したいと思います。 この記事の対象者Apexのテストを「なんとなく」書いている人Apexのテストが動かなくなって失敗した経験のある人Apexのテストのコードレビューのポイントを知りたい人 Apexテストコードを実装するための基本的な知識は下記を参照してください。 Apexコードテストメソッドの概要 ガバナ制限 落とし穴: 本番の運用が進みデータが増大したため、作成したテストが半年前の運用開始時には実行できていたが、現在は失敗するようになってしまった 注意点: データが増大した場合でもガバナ制限に抵触せず、実行可能なコードを書くこと 解説: 開発時と本番環境、初回リリース時と運用開始から数ヶ月後など、データ量の違いによりテストが動作したりしなくなったりする場合があります。 特に多く見られるのが ... 続きを読む

3月30日の1カ月前は3月1日? - Datetime型利用時の注意

3月30日の1カ月前は3月1日? 下記のApexコードを実行すると、デバッグログにはどのように出力されるでしょうか? Datetime dt = Datetime.newInstance(2011, 03, 30); // (1) dt = dt.addMonths(-1); // (2) String result = dt.format('yyyy/MM/dd'); // (3) System.debug(result); このコードでは、2011年3月30日の1カ月前の日付を"yyyy/MM/dd"形式で求めようとしています。 しかし、実行結果は"2011/03/01" になります。 どうしてこのようなことが起こるのか? 上記のコードは、次のようにして動作しています。 (1) 実行ユーザーのローカル時刻で2011年3月30日0時0分0秒を指すDatetime型のインスタンスが作成され ... 続きを読む

Apex開発者ガイド日本語版(Beta)公開

現在Apex Developer Guide(Apex開発者ガイド)の日本語版作成を進めておりますが、いち早く参考にしたいとのご要望を多く頂きましたので、取り急ぎBeta版として公開致しました。現在最新のSpring 10'(Version 18)のドキュメントをベースにしております。 一部サンプルコード内の改行等に不具合がございますが、下記よりダウンロード頂けますので是非ご参考下さい!! アプリケーションロジック http://wiki.developerforce.com/index.php/JP:App_Logic ... 続きを読む