SalesforceのVFからExcelダウンロード機能作成

VFのPageタグに、[contenttype=”application/vnd.ms-excel#{!filename}.xls”]追加して

STEP1:

<apex:page title=”xxx Download” Controller=”XXXXXXX”
contenttype=”application/vnd.ms-excel#{!filename}.xls” cache=”true”
showHeader=”false” sidebar=”false” readOnly=”true” >

STEP2:

Excel Downloadファイル作成する場合、VFに指定CSSのColorは必ずExcelの色設定がありの色が必要、内の場合、ダウンロードしたExcelの色設定が不正になり

STEP3:

<Apex:Form>が設定しないてください

STEP4:

ApexClassに、下記方式で、書いてください

public void goDownload() {
Pagereference pg = Page.xxxxxxx;   <- Download VF Page
return pg;
}

————————————————————————————————
Note: some browsers will not open the resulting file unless you specify the filename and set the cache attribute on the page to “true”.
————————————————————————————————

10桁以上の画面入力数値からSOQL連結の注意点

APEXのSOQLの中に、普通は [select xxx from Tabel where a = :xxx]方式で、SOQLを発行しますが、文字列で、条件にて、連結でSOQL文を作成することがあります、この場合、連結したい項目の中に、数値は10桁以上が存在する場合、一つ注意点があります

String strSql = ‘ XXXXXXXXX ‘ + 画面数値の場合(inputText)、暗黙は Integerに転換する、そのため、2*32以上の数値を入力すると、異常エラーが発生する、下記方法で対応が可能

Decimal stVal = Decimal.valueOf(cond.画面入力項目).divide(1,1);

strWhere += ‘ AND XXXX <= ‘  +  + String.valueOf(stVal);

 

【Apex】動的SOQLのWHERE句で日付を指定する方法

日付を条件とするときは、以下の2点に注意します。
1.yyyy-MM-dd形式の文字列に変換する
(誤)WHERE Close Date <= ' + myDate
(正)WHERE Close Date <= ' + String.valueOf(myDate)

日付を文字列に変換するときのフォーマットは、yyyy-MM-dd形式である必要があります。
Date型ならば、String.valueOf(myDate)を使うことで自動的にこのフォーマットに変換されます。
もし、Date型ではなく、yyyy/MM/dd形式のString型文字列を日付の条件として扱いたい場合は、
Date.parseメソッドを使用して、一度、日付型に変換した上で、yyyy-MM-dd形式の文字列に変換します。
例)
String strDate = ‘2011/12/31’;
Date myDate = Date.parse(strDate);
… WHERE Close Date <= ' + String.valueOf(myDate)

2.変換した日付文字列をシングルクォーテーションでくくらない
(誤)WHERE Close Date <= \'' + String.valueOf(myDate) + '\''
(正)WHERE Close Date <= ' + String.valueOf(myDate)

下記URLから転載致します
http://www.kokyakukanri.info/salesforce/blog/2011/02/apexsoqlwhere.html

ApexのAddmonths(x)面白い現象

1 ApexCodeで、下記ソースを書きました
2 // 月頭のLocal日付を定義する(Asia/Japan)
3 Date startDt = Date.parse(‘2012/03’ + ‘/31’);
4 // 書式化するため、DateTime定義します(Local TimeZone)
5 DateTime formatter = DateTime.newInstance(startDt , Time.newInstance(0,0,0,0));
6 formatter = formatter.addMonths(6);
7 System.debug(formatter.format(‘yyyy/MM/dd));
予想は2012/09/30を表するべき、実際は 2012/10/01を表示されました
原因調べると、 5行目のformatter定義する場合、LocalTimeZoneで2012/03/31:00:00:00で変数定義します
6行目Apex計算する場合、先に formatter はGMT (2012/03/30:15:00:00)に変更して、+6ヶ月で計算しました
そすると、計算結果は GTMの 2012/09/30:15:00:00になりました、format関数で、Local変更すると、2012/10/01を表示しました
———————————————————————————–
一回対応しました
5行目定義する場合、DateTime formatter = DateTime.newInstance(startDt , Time.newInstance(0,0,0,0));
->
DateTime formatter = DateTime.newInstanceGMT(startDt , Time.newInstance(0,0,0,0));で定義する