Salesforce の開発で帳票を出力する
Salesforce で帳票を出力する際のメモです。主に Visualforce を使ってどうやって出力するかを書いていきます。 https://gyazo.com/506fde52fdf99702db0e5c6bae8f764d
帳票と言えば Excel 。帳票にも色がついてたり、レイアウト工夫したりと、おしゃれなものを作りたいですよね。
(現実的なことを書くと既存の帳票を Salesforce 上で出力できるようにしてくれっていう業務要件が多いですが・・・)
↓の方式を応用すると、おしゃれな帳票が作成できます。
contentType を application/vnd.ms-excel にするってことですね。
サンプルコード
Visualforce でサンプルコードを書くと以下のような感じでしょうか。
code: sample.html
<apex:page contentType="application/vnd.ms-excel" readOnly="true">
<table> ... </table>
</apex:page>
<table> タグを使います。CSS 使えば色とかもつけられます。
要するに、Microsoft Excel で .xls ファイルを html 形式で保存すると、<table> タグもりもりのやつが出力されますよね?
あれを Visualforce で書いてやれば良いというわけです。
数値項目の先頭の 0 が消えてしまう問題
参考に記載したサイト中では、="00012" のように記載すれば、先頭の 0 が消えない旨が記載されていますが、実際にはプログラムで動的にレイアウトを作成してくと思うので、そんなめんどくさいことはできなさそうです。現実的な対処としては、先頭に 0 のつく可能性のある箇所には、td のタグに style="vnd.ms-excel.numberformat:@" を指定してやれば OK です。
他システムに連携する、集計する、などの需要がある場合、CSV で帳票を出力する場合もあります。
CSV 帳票は 2 通りのパターンがあります。
1. Visualforce を書く方法
Visualforce を書いて、contentType="text/csv とする
サンプルコード
サンプルコードは以下のような感じです。, 区切りのデータをそのまま書いてやれば OK!
code: html
<apex:page contentType="text/csv;charset=Windows-31J;#test.csv">
hoge,fuga,piyo
</apex:page>
これはヒドいサンプル、、、サンプルでは直書きしていますが、実際には <apex:repeat> とかを使って、apex で出力内容を制御するんでしょうね。
2. 標準レポートを作成して、URL にリダイレクトする方法
「詳細をエクスポート」と同じ動作 レポート作成後に下記 URL にアクセスすればダウンロード可能です。
https://{instance}.salesforce.com/{reportId}?xf=localecsv&enc=Shift_JIS&export=1
開発の手間が最小限になって良いですね。
以下は Salesforce の公式ヘルプに載ってないやつです。
以下の get パラメータを追加することで、検索条件の設定が可能です。
pv0 のキーにはレポート1つ目の検索条件
pv1 のキーにはレポート2つ目の (略
:
pvn のキーレポート n+1 番めの検索条件が設定できる
この方式のデメリットとしては、Copyright 的なものがフッタに入ってしまうことです。レポートの標準機能使ってるだけなので・・
他システムに CSV をそのまま連携するとかができなくて不便ですね。
対応策は、ないっぽい。
変更不可の帳票を出したい、印刷用の帳票を出したい、という時には PDF の帳票でしょう。
これも Visualforce で作成することができます。
サンプルコード
サンプルコードは以下のような感じです。 普通に Visualforce を書くのとほとんど同じですね。
code: sample.html
<apex:page renderAs="pdf" applyHtmlTag="false" showHeader="false" >
<head>
// pdf のスタイル
</head>
<body>
// hogehoge
</body>
</apex:page>
Visualforce PDF を作成する時の考慮事項
ただし、注意点がいくつかあります。
利用できるフォントが限定的です
MS ゴシックとかは指定できない (けっこう致命的)
日本語を表示させたいときは、Arial Unicode MS 一択 (これがちょっとダサいんですよ、、、)
日本語の等幅フォントが利用できないのが困る
特定の文字数とかで改行する処理を入れると、折り返し位置がバラバラになって見栄えが悪い
レイアウトと改ページ位置に苦戦する覚悟が必要
日本語の折り返し処理には <wbr/> タグを利用する
改ページは CSS で制御
page-break-before or page-break-after を利用
おまけ
他にも色々あります。
たぶん、これが主流なんでしょうね、、、
が、実際の業務では使ったことないので何も書けない
Excel 帳票を簡単に作りたい!とか、PDF 帳票をおしゃれにしたい!とかの時に検討してみると良いかも
差し込み印刷機能という機能が昔はあったらしいです(今でもClassicなら使える)
これも使ったことないので何も書けない
Lightningでは利用不可