ipex

Salesforceの情報や趣味(ゲーム等)についてフリーに

認定上級デベロッパー受験しました

業務の傍ら、上級デベロッパー1次受けてきました。

結果は合格でした。

新しい資格?が新設されるのか、既存のやつが移行するのか、内容がどうなのかとか...
あんまり知らないんですけど、そのうち知る機会も取る機会もやってくるだろうというスタイルでやってます。

近況としてはそんなところです。
未だにCKEditorとかChatterに苦しめられています。

ユーザの有効なレコードタイプを判別するisAvailable()

レコードタイプ選択画面を自前で作成する場合、
もしくはレコードタイプの選択リストを生成する場合。

Schema.RecordTypeInfoを使うのですが、
Schemaで取得すると全部のレコードタイプが取れてしまうので、isAvailable()を使って制御してあげます。

ユーザの見える or 見えないレコードタイプを判別して、リストに詰め直すことができます。

Schema.DescribeSObjectResult objectDescribe = Event.SObjectType.getDescribe();
List<Schema.RecordTypeInfo> objectRTInfoList = objectDescribe.getRecordTypeInfos();

// 見える
List<Schema.RecordTypeInfo> availableTrueList = new List<Schema.RecordTypeInfo>();
// 見えない
List<Schema.RecordTypeInfo> availableFalseList = new List<Schema.RecordTypeInfo>();

Integer objectRTInfoListSize = objectRTInfoList.size();

for(Integer i=0; i<objectRTInfoListSize; i++){
 if(objectRTInfoList[i].isAvailable()){
  availableTrueList.add(objectRTInfoList[i]);
 }else{
  availableFalseList.add(objectRTInfoList[i]);
 }
}

Javascripのwindow.open()でオプションを設定する

カスタムボタンやカスタムリンクをクリックした際に、
新しくウィンドウを開く場合。

「新規ウィンドウに表示」ではなく、
Javascriptを実行」で開くことで、プロパティを調整できます。

window.open(
    url, 
    '_blank',
    'toolbar=no , 
     location=no, 
     directories=no,
     status=no,
     menubar=no,
     scrollbars=yes,
     resizable=yes' 
    + ',width=' + 750
    + ', height=' + 600 
);

幅を指定したい時とか、
新しく開いたウィンドウでなんやかんやされたくない時とかに使えました。

月末を、1年前の月初に変換して表示する数式項目を作成する

数式項目で、表題の日付を表示する場合にひっかかった・・・。いつまで経っても日付の計算が苦手。

日付 - 365 だと、閏年でズレてしまいます。

色々対応策はあると思うのですが、
一番シンプルにできるのは、下みたいに判別してあげる方法かな?

IF( 
    DAY( DateField__c - 365 ) = 1, 
    /* 1日(月初)の場合、-365をする */ 
    DateField__c - 365, 
    /* その他の場合、閏年を考慮して-364をする */ 
    DateField__c - 364 
)


ちなみに、来年が閏年みたいです。他には2012年とか。
そのあたりの日付を扱う場合気をつけなきゃー。

DatePickerの西暦プルダウンを変更するJavascript

稼働が上がったため、更新が滞りました・・・今週から再開。


Salesforceの標準の編集画面や、
Visualforceで日付型をinputFieldで表示した際に出る、日付の入力補助。

あれの西暦プルダウンを弄る機会があったのでログ。


日付だけじゃなくて、時間の入力補助もデフォで用意しておいてくれないかなー。
Salesforce1ど同じやつで良いからさ。

DatePicker.pickDate = function(callOnChange,field,hasTime,element){
    if(!DatePicker.datePicker){
        DatePicker.datePicker = new DatePicker();
        // 西暦年編集メソッドの呼び出しの追記
        changeYears();
    }
    DatePicker.datePicker.show(callOnChange,field,hasTime,element);
}

function changeYears() {
    //デフォルトで実装されているDatePickerの「年」リストを取得
    var yearselect = document.getElementById('calYearPicker');
    var range = 2100 - 1900;

    //一度リストを削除
    for(var i=0; yearselect.length = 0; i++){
        yearselect.options[i] = null;
    }
    for(var i=0; i < range;i++) {
        var newOption = document.createElement('option');
        newOption.text = 1900 + i;
        newOption.value = 1900 + i;
    yearselect.add(newOption, null);
    }
}