読者です 読者をやめる 読者になる 読者になる

より良い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「グローバルクイックアクションの作成 」単元で、チャレンジを行い結果確認してもなんども失敗します。
trailhead.salesforce.com

何回見直しても、設定した内容は合っている気しかしないので、Google先生に聞いてみました。

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

なんと、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

おわりに

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