function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
WillybeanesWillybeanes 

PDF添付のメールアラート送信時のファイル名文字化け

こんにちわ、

 

皆様のこのボードでの助言及び活躍に感謝申し上げます。

 

こちらSFの管理者がプロジェクト実行中に急に離職され、已む無く業務を引き継いだハリスと申します。

 

現在 VISUALFORCE --> JAVASCRIPT --> ワークフロートリガ --> メールアラート

 

といったシンプルな仕組みでレポートを自動で送信するシステムを近日実用化するのですが、どうしても直せない問題で途方にくれています。日本語ならではのユニークな解決方法を見つけないといけないのが邦人プログラマーですが、この一件に関しては完全にお手上げです。

 

VF内でPDFを添付する際

 

<messaging:attachment renderAs="pdf" filename="ファイル名">

 

と書くのはご存知ですか、このままToDoよりメールを送信するにあたって問題はありませんが、このテンプレートを上で書いたようにメールアラートを利用して送信しますと、"ファイル名" ではなく

 

(�,��,'

 

と文字化けしてしまいます。試行錯誤で3日間ほど対処を試みていますが、やはりfilname=" "のなかという事もあり、文字化けをURLエンコードに直してそれを{!}メソッドで日本語表示に直すのが一番いい方法かと思われましたが、VFテンプレートという事でコントローラエクステンションを付けることもできず、JAVASCRIPTをテンプに入れてfilename=に挿入というのもやはり私の初歩的な技術では度をこしているようです。

 

なにか直せる方法がありましたら手がかりだけでもよろしいので宜しくお願い致します。

Taiki YoshikawaTaiki Yoshikawa

messaging:attachmentを使ったことがなかったので検証できていないのですが、

ファイル名の所をカスタム表示ラベルで指定することで文字化けを防げ無いでしょうか。

 

動作検証はできていませんが、これで保存ができるところまでは確認できました。

<messaging:attachment renderas="pdf" filename="{!$Label.Sample}">

 

 

Taiki YoshikawaTaiki Yoshikawa

ちゃんと時間がとれたのでカスタム表示ラベルで回避できるか確認してみたのですが文字化けが発生してしまいました。

直接入力していなければ発生しないんじゃないかと思ったのですがこの方法ではダメだったみたいです。

Taiki YoshikawaTaiki Yoshikawa

いろいろ試してみたのですがうまくいきませんでした。

 

URLエンコードだけなら 「filename="{!URLENCODE('テスト.pdf')}" 」というような書き方ができるので、

試してみたのですがこれも文字化けしてしまいました。

 

プロパティの編集から文字コードを変更できたのでUTF-8や日本語に変更してみて確認してみたのですが、

こちらもうまくいきませんでした。

 

本文に日本語があっても正常に表示されているのでmessaging:attachmentのfilenameの部分だけが

文字化けする仕組みになっている気がします。

 

filenameの部分については日本語ではなく英単語で指定する方向にした方がいいかもしれません。。

 

 

もしかすると確認済みかもしれませんが、こちらのサイトでも検証しているみたいです。

 

How to set the encoding of a VF rendered filename attached to a mail alert

https://success.salesforce.com/answers?id=90630000000hFYSAA2

 

 

それと一応確認してみたのですが、標準添付ファイルから添付したファイルの場合は文字化けしないみたいです。

 

WillybeanesWillybeanes

Taiki 様、

 

誠に御礼申し上げます。

 

やはりSFのメインシステム自体の問題だと思われましたが、他に回り道がないとするとこのファイル名は英数字でないといけないようですね。

 

ひとつ解決方法として(異常なこだわりがあれば)考えていたのが;

Apexのクラス内であればEncodingUtilがあるので(urlDecode()を含む)、カスタムオブジェクトとそれに関連するコントローラを作り\

 

<messaging:emailTemplate subject="件名" receipientType="Contact" relatedToType="CustomObject">

 

...

 

 

<messaging:attachment renderAs="pdf" filename="{!DECODE <-- コントローラ内で定義 (URLENCODE('ファイル名'))}">

 

と書けば論理的には可能ですが、今Case用に開発しているのでわざわざ完全にオブジェを作るのもちょっとだと思われます。

 

でもSOQLQueryで項目をすべて引き出しカスタムオブジェクトにいれる事ができばいけるかもしれません:catfrustrated:。

 

皆様も分かると思いますが、上部の方は得にこういうディテールに関して妥協を聞かないので(苦笑)。。エンコーディング問題と共に、こういう事も我々の憂き目として受け入れ頑張ります。

 

ありがとうございます、とても参考になりました。