より良いApexコードを書くためのTIPS集

はじめに

Apexコードを書く上で、より良いコードを書くためのTIPSをメモしておきます。
※Apexに限らず使えるTIPSもあるかと思います。

TIPS集

  • staticメソッドを効果的に使用する。
    • コンパイル時にインライン化される。→ インスタンスメソッドより速くなる。
      • パラメータとメソッド内の処理で完結できる処理の場合に使うと良い。(引数がないときとか)
  • Sizeを確認するときは、isEmptyを使用する。
    • 可読性向上。
  • 空文字・NULLを判別するときは、String.isEmpty / String.isNotEmptyを使用する。
    • 可読性向上。
  • 変数はその変数を使用する直前で宣言する。
    • スコープをできるだけ狭くするため。
  • クエリの結果はListで取得する。その際、リストはnewする必要はない。
  • ハードコーディングはしない。

【JavaScript】JavaScriptでGETパラメータを取得する方法

はじめに

JavaScriptでGETパラメータから任意のパラメータを取得する方法が意外と知らなく、
調べたので備忘として書いておきます。

取得方法

下記のようにJavaScriptを記述すると、パラメータ名がIdの値を取得することができます。
※{!Id}は任意のパラメータに変更することができます。

var Id = location.search.match(/{!Id}=(.*?)(&|$)/)[1];

下記URLを参考に、それぞれでどのように取得されるか確認していきます。

www.hogepiyo.com?id=xxx
  • locationオブジェクトから、URLを取得
    ex) www.hogepiyo.com?id=xxx

  • searchメソッドで「?」以降の値を取得
    ex) ?id=xxx

  • match(/{!Id}=(.*?)(&|$)/)[1]で正規表現を用いて、パラメータ名Idの値を取得
    ex)xxx

【Salesforce】URLで指定できるパラメータ一覧

はじめに

SalesforceでURLに設定できるパラメータがあるのですが、よく忘れてしまう(覚えきれない)のでまとめておく。

URLパラメータ

新規系

パラメータ名 —–内容—–
retURL 遷移元画面
saveURL 保存後遷移先画面
cancelURL キャンセル後遷移先画面

編集系

パラメータ名 —–内容—–
retURL 遷移元画面
saveURL 保存後遷移先画面
cancelURL キャンセル後遷移先画面

随時、追加していきますー。

【Salesforce】Trailhead「グローバルクイックアクションの作成 」単元でチャレンジが成功しない時は言語設定を見直そう。

Trailhead「グローバルクイックアクションの作成 」単元で、チャレンジを行い結果確認してもなんども失敗します。

You do not have the correct account fields in the ‘New Detailed Account’ publisher action layout

trailhead.salesforce.com

言語設定を英語にすると解決

調べてみると、なんと、このトレイルは言語が英語のみの対応となっていました。
Salesforceの言語設定を「英語」にすると解決しました!

参考

​Salesforce1 Mobile Basics - Creating Global Publisher Actions Problem - Salesforce Developer Community

【Salesforce】ログイン時、ID認証を行わないよう設定する方法

はじめに

SalesforceのDeveloper Editionを取得した後の状態だと、ログインする際にID認証が求められる設定が入っています。
これは開発環境としていちいち2段階認証を行わなければならず、めんどくさいので、
ログイン時、ID認証を行わないように設定する手順をまとめました。

手順

  1. 「設定 > 管理者設定 > セキュリティのコントロール > ネットワークアクセス」の信頼済みIP範囲を空白にする。 f:id:kmsyn1234:20170301162616p:plain

  2. 「設定 > 管理者設定 > ユーザの管理 > プロファイル > ユーザーのプロファイル」の任意のプロファイルを選択する。 f:id:kmsyn1234:20170301162646p:plain

  3. プロファイル毎の下の方にスクロールした先の「ログイン IP アドレスの制限」に設定する。 f:id:kmsyn1234:20170301162716p:plain

  4. 「開始:1.1.1.1」「終了:255.255.255.255」を設定する。 f:id:kmsyn1234:20170301162739p:plain

これで、ログイン時にID認証を求められなくなります。

おわりに

今回行った設定は、IPアドレスがどこからであってもID、PWのみでのログインを可能にする設定となっています。
そのため、開発用環境のみに設定するなど、セキュリティの考慮が必要な設定となりますー。

【Java】文字列をequalsで判別する際に注意すること

はじめに

Javaで文字列を比較するときには「=ではなく、equalsメソッドを使用しなきゃだめだよー。」とは言われていますが、
そのほかにも知っておくと良いことを知ったのでまとめます。

定数と変数をメソッドの前後どちらに記載するかで挙動が変わる

「{String1}.equals({String2})」で、

  1. String1に定数をいれ、String2に変数を入れる場合
  2. String1に変数をいれ、String2に定数を入れる場合

で挙動が変わってきます。
以下、それぞれのパターンで何が異なるのかをまとめます。

1. String1に定数をいれ、String2に変数を入れる場合

{String1}の定数に対し、{String2}の変数が同じ文字列であるか否かを判別します。
そのため、{String2}の変数がnullであってもなくても正常に動作します。

2. String1に変数をいれ、String2に定数を入れる場合

一方、{String1}の変数に対し、{Sting2}の定数の文字列が同じであるか否かを判別する場合、
{String1}の変数がnullの時、nullに対して判別処理を実行しようとする
NullPointerExceptionが発生します。

そのため、{String1}の変数のnullチェック処理を行わないと意図せぬ例外が発生していまします。

おわりに

どちらがいいということではなく、

  • 単に文字列を検証するのであれば、後者の方が例外になってくれるので使い易い
  • 上記以外の場合、比較する変数のnullチェックの処理が必要になるため、無駄に処理が増える

かなと、個人的には思っています。
ただ、知らないうちに意図せぬ例外が発生するようなコードを書いてしまうことは避けたいですねー。

サンプルソース

/**
 * 検証用クラス。
 */
public class StringEqualsTest {
    /**
     * メイン。
     * @param args 引数
     */
    public static void main(String[] args) {
        String value = "TEST";
        // String value = null;

        // 定数.equals(変数)の場合
        if ("TEST".equals(value)) {
            System.out.println("同じだよー。");
        }
        // 変数.equals(定数)の場合
        if (value != null) {
            if (value.equals("TEST")) {
                System.out.println("同じだよー。");
            }
        }
    }
}

【Salesforce】Apexの日付操作でハマりがちなこと。

はじめに

ApexやVisualforceで日付の表示や日付操作をする際に、個人的によくハマるポイントがあるので、
備忘を兼ね、下記ポイントを整理したいと思います。
特にSalesforce内部で日付はGMT時刻で値を持っているので、JST時刻にし忘れることはよくあります。。

  • 基本
  • 表示形式 ←今回はここまで
  • フォーマット

表示形式

  1. プロパティを使用する場合、GTM時刻で表示される。
  2. <apex:outputText>を使用する時、JST時刻で表示される。
  3. <apex:outputField>を使用する時、GTM時刻で表示される。

サンプルコード

それぞれのサンプルコードが以下のようになります。
f:id:kmsyn1234:20170228203457p:plain

また、表示結果は以下のようになります。
f:id:kmsyn1234:20170228203745p:plain

おわりに

日付処理はよく使うのですが、意外と忘れがちですねー。
また、日付フォーマットを合わせて使用すると、見た目の表示は大丈夫なのですが、時刻がずれているという、意外と単純な見落としが起こるので要注意です。