細かすぎるが伝わる人には伝わる小ネタ15連発!!

kobehanabi_001_s2_r1_c1

リファレンスに書いてあんのか?というあまり知られていないネタから、知ってるんだけど、実際どうするんだっけ?というネタの15連発です。あなたはいくつ知っているかな?

1.変更セット作成時のイライラ解消

質問

変更セット作成時にコンポーネント追加する際、デフォルトだと1ページあたり200件表示されますが、 大量にコンポーネントが存在する場合、[増やす]をクリックして、少しずつページ毎の表示件数を 増やしながら対象のコンポーネントを探すのって凄く手間でイライラしませんか?

答え

一度、ページ毎の表示件数を[増やす]をクリックした後、URL引数の「rowsperpage」の値を1000にして、 1ページあたりの表示件数を一気に最大にできます。さらに、1000件以上の場合は、「次へ」リンクを ブラウザの別タブで開きながらやれば、かなり効率があがります。

逆に、変更セットからコンポーネントを削除する場合は、25件ずつしか参照できず、この裏ワザも使えず、 削除すると1ページに戻ってしまうという罠があります。。。。。

2.数値項目の小数点、切り捨て、切り上げ方法

質問

カスタム項目の数式で数値型で小数点を2位に設定した際、3位以下は、四捨五入されるのですが、 切り捨てや切り上げはできないでしょうか?

回答

単純に数式項目(戻り値のデータ型:数値、小数点の位置:2)にすると

5.375⇒5.38ってなってしまうので、

FLOOR(100*Temp__c)/100 とすると 5.37 となる。

切り上げの場合は、 CEILING(100*Temp__c)/100

3.LastModifiedDate を条件にしたSOQL文のパフォーマンス

質問

「LastModifiedDate をWhere句の条件に使用してSOQL文を作っているのですが、 うまくパフォーマンスがでません。」

答え

LastModifiedDate をWhere句の条件に使用した場合、インデックスが効く場合と効かない場合があります。効く場合、内部的には SystemModstamp のインデックスが使用されます。

・LastModifiedDate < :XXX ⇒効かない

・LastModifiedDate > :XXX ⇒効く

・LastModifiedDate = :XXX ⇒効く

Systemmodstamp と LastModifiedDateの違いですが、LastModifiedDate はユーザによる変更、 SystemmodStamp はユーザも含め自動化されたプロセス(トリガなど)の変更が含まれる変更が反映されます。

Salesforceオブジェクトリファレンス

http://wiki.developerforce.com/page/JP:Documentation

#システム項目

4.カスタムインデックを付与できる数式項目?

質問

「Salesforceのサポートにお願いすれば、数式項目でもカスタムインデックを付与できると聞きました。 付与できる条件はどのようなものでしょうか?」

回答

・別オブジェクトを参照していない

・SYSDATE等の状態が常時変化する項目を参照していない

・インデックス不対応項目を参照していない

5.カスタムインデックス、標準インデックスで違う?

質問

「カスタムインデックス、標準インデックスでパフォーマンスに違いはありますか?」

回答

参照項目には標準的にインデックスが付与されていますが、カスタムインデックスによる検索処理の方が早いです。

例えば、受注と受注明細という主従関係のテーブルがあって受注明細を抽出する際のパフォーマンスチューニングとして、受注を検索してそのIdを持って受注明細を検索するというチューニングよりも、受注明細にインデックスを付与というチューニングの方が早いということらしいです。

また、外部IDを設定すると内部的にインデックスが付与されますが、 != xxx の条件の場合では、そのインデックスは利用されないってのはみなさんご存知だと思います。しかし、カスタムインデックスであれば != xxx の条件下でもインデックスを考慮したアクセスが行われるそうです。

* 操作対象行が 1/10 である条件は変わりません。

* 条件によりますので、サポートに確認しましょう。

6.商談商品選択画面ハック

質問

「商談から商談商品を作る時、商品選択画面で商品が全件表示されるので、条件を絞り込んだ状態で開きたいのですがどうすればよいでしょうか?」

回答

商談商品にカスタムボタンを作成して、以下のパラメータを使って条件セットできます。 レポートのパラメータで条件をセットするのと同じようなテクニックです。

addTo={!Opportunity.Id}&PricebookEntrycol0=XXXXXXXXXXXXXXXXXX &PricebookEntryoper0=e&PricebookEntryfval0=True&retURL=%2F{!Opportunity.Id}

・PricebookEntrycol0=検索対象項目ID 検索対象項目IDは、実際の商談商品選択画面にあるセレクトボックスのOPTIONのvalue値を見てください。

・PricebookEntryoper0=条件 次の値と一致する=e 次の値を含む=c

・PricebookEntryfval0=検索ワード フリーテキスト

7.実行済バッチ数の確認方法

質問

「データ移行の為にBULKAPIを使って、DataLoaderでデータをアップロードしていましたが、組織において、実行済バッチ数が24時間で処理可能なバッチ数(3000)のリミットを越えてしまったようです。現在どれだけ使っているかどうやって確認すればよいのでしょうか。」

回答

[設定>管理者設定>監視>一括データ読み込みジョブ] で、下記ステータスが確認できます。 "組織でこの 24 時間以内に ○○ バッチの処理が行われています。24 時間で処理可能なバッチ数は 3,000 バッチです。" ○○の部分が3000を超えているとエラーになります。

*Spring14で5000に緩和されるようです。

8.項目履歴のデータの扱い

質問

「項目履歴のデータは、組織のディスク使用量には含まれるでしょうか?」

回答

項目履歴は、18 か月間保存され、組織のディスク使用量には含まれません。 組織が 2011 年 6 月 2 日午前 12 時以降に作成された場合、18 か月分の項目履歴データを常に使用できますが、組織がそれ以前に作成された場合は、項目履歴の自動削除は適用されないという違いはあるので注意してください。

9.テストメソッドからのポータルユーザ情報の取得方法

質問

「API24以降でもテストメソッドでUserオブジェクトのデータは、取得できると思うのですが、ポータルユーザの情報がエラーになって取得できません。どうすればよいでしょうか?」

回答

API24以降だと既存の取引先・取引先責任者のデータにはアクセスできないので、ポータルユーザの情報を合わせて取りたい場合は、以下のSOQLでユーザデータを取ってくるとQueryException:NULLエラーになっちゃいます。テストメソッド内で必ずUserデータを作成しましょう。

Select Id,Name,Contact.AccountId,Contact.Account.Filed1__c,Contact.Account.Filed2__c From User Where IsPortalEnabled = true And IsActive = true

10.標準オブジェクトの色

質問

「Visualforceで複数の標準オブジェクトをまたいで検索できる画面をデザインしたいのですが、標準オブジェクトで使われているカラーコードを教えてください。」

回答

標準オブジェクトのカラーコード!

取引先:#236FBD

取引先責任者:#56458C

リード:#E39321

商談:#E5C130

ケース:#B7A752

11.監査項目のデータ登録

質問

「サポートにリクエストすることで、初期データ移行時などにに監査項目(作成日、作成者、最終更新日、最終更新者)に対してINSERTに限り値を設定できますが、それが許可されるオブジェクトにはどのようなものがあるのでしょうか?」

回答

以下は設定できるオブジェクト一覧になります。

- Account

- Opportunity

- Contact

- Lead

- Case

- Case Comments

- Task

- Event

- Idea

- Idea Comments

- Campaign Members

- Custom Objects

※Attachment、Documentとかには設定できないので注意しましょう。

12.最終更新日時が変わらない?

質問

「同レコードのある項目が更新されているはずなんですが、最終更新日時が変わらない場合があります。 どのような時でしょうか?」

回答

・参照先レコードが更新されて、クロスオブジェクト数式項目の値が変わっても、レコードの最終更新日時は変わりません。

・主従関係の従レコードが更新されたが、親の積上集計項目の値が変わらない場合、親レコードの最終更新日時は変わりません。

13.パートナーポータル準備中

質問

データのメンテナンス作業や機能アップデートの本番移行などの作業の為に、一時的にパートナーポータルを閉めたいのですが、可能でしょうか?」

回答

[設定] で、[カスタマイズ] | [パートナー] | [設定]の編集するポータルの名前をクリックすると「ログインを有効にする」という設定があります。のチェックを外すとポータルのログイン時に「お客様がアクセスしようとしているサービスは、現在ご利用いただけません。申し訳ございません。詳細は、組織のシステム管理者にお問い合わせください。 」と表示されます。

14.テストメソッドでの商談商品の作成順序

質問

「商談商品をつくるテストメソッドはどのような手順で書けばよいでしょうか。複雑すぎてわかりません」

回答

まず、最初にハマるポイントとして、#標準価格表 を作らないと、「No standard price is defined」ってエラーになります。 それから以下の順番でデータを作成してください。

1. @isTest (seeAllData=true)を使って標準価格表(IsStandardがTrue)のIdを取得する

2. 価格表(Pricebook2)を作成(標準価格表のIdを指定)

3. 商品(Product2)を作成

4. 価格表エントリー(PriceBookEntry)を作成(2で作った価格表ID(Pricebook2.id)を指定)

5. 取引先(Account)を作成

6. 商談(Opportunity)を作成。5で作った取引先を指定

7. 商談商品(OpportunityLineItem)を作成。(4で作った価格表エントリーID(PriceBookEntry.id)と6で作った商談ID(Opportunity.id)を指定)

15.Salesforceアイコン

質問

Visualforce内でSalesforceで使われているカワイイアイコンを使いたいのですが、どこに格納されているのでしょうか。

回答

それぞれのアイコンをマウスオーバーしてご確認ください。