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
hironori.hosoehironori.hosoe 

PDFファイルの保存に関して

VFにて請求書をPDF化したのですが、これを添付Fileに保存したいですが、やり方がわかりません。どなたか教えてもらえないでしょうか?

Taiki YoshikawaTaiki Yoshikawa

VFのPDFを添付ファイルに保存する方法ですが次のようなやり方でできると思います。

 

public Attachment doCreateAttachment(Id prmParentId) {
    
    // PDFのVFを指定
    PageReference pageRef = Page.OutputPdfPage;
    pageRef.getParameters().put('id', prmParentId);
    
    // 添付ファイル
    Attachment objAttachment = new Attachment();
    // ファイル名
    objAttachment.Name = 'Test.pdf';
    // 本文
    objAttachment.Body = pageRef.getContent();
    // 関連先
    objAttachment.ParentId = prmParentId;
    // メモ&添付INSERT
    insert objAttachment;
    
    return objAttachment;
}

 

hironori.hosoehironori.hosoe
$B$"$j$,$H$&$4$6$$$^$9!#AaB.;n$7$F$_$^$9!#(B -- *$B%/%i%&%I!&%V%j%C%8(B* $BBeI=(B $B:Y9>(B $B905*(B $B=;=j!'(B $BEl5~ETH,2&;R;TBgOBEDD.(B 3-17-15 $BEEOC!'(B 042-649-8706$B!JBeI=!K(B Web: http://www.clbridge.com/
hiroji1020hiroji1020

ちょっと時間が経ってしまいましたが、やってみました。

VFのエラーがでてしまい、解決できません。 下記のようなエラーはどのような場合が考えられるのでしょうか?

 

(エラーメッセージ)

ネストした getContent 呼び出しが多すぎます

 

初歩的ですみません・・・

Taiki YoshikawaTaiki Yoshikawa

そのエラーメッセージは初めて見ました。

添付するPDFファイルの容量が大きすぎるとかではないかと思います。

 

試しに空白のPDFのVFページを用意して、それが正常に添付されるか

確認してみてはどうでしょうか。

 

もし、空白のPDFも添付に失敗したら別に原因があるかもしれません。

hiroji1020hiroji1020

返信ありがとうございます。空白のPageを作りSaveしてみたのですが、同じ結果でした。

また、目的のFile(114kb)をDesktopに保存してから添付に保存してみましたが問題なくSaveできました。

 

やろうとしていることは見積書です。カスタムボタンをクリックすると見積書が生成されこれを添付に保存したいだけです。

見積書のApex Classを作ってその中にこの添付保存のロジックを組み込んだのですが、これがいけなかったのでしょうか?

 

ご助言いただけると大変助かります。

 

よろしくお願いします。

hiroji1020hiroji1020

自分なりに色々とやってみました。

 

ページとコントローラーをCopyしてもう1セット作り、ここにAttachmentの保存のロジックを入れました。この際にReferenceするPageは元のPageでここには保存するLogicはないです。それでやったらうまくいきました。多分、自分で自分を呼びたすのでLoopしてしまったのかもしれません。ですが、まったく同じLogicが2つのClassで存在してしまうためにあまりよくないなと思っています。もっとスマートなやり方があるのでしょうか? ご助言いただけると大変助かります。

Taiki YoshikawaTaiki Yoshikawa

PDFのVFページと添付ファイルを保存する処理は別に分けるといいと思います。

 

次の処理ではPDFのVFを呼び出しコンストラクタの処理が実行されるところまで行われていると思います。

 

// PDFのVFを指定
PageReference pageRef = Page.OutputPdfPage;
pageRef.getParameters().put('id', prmParentId);

 

なのでカスタムボタンで保存するときのApexクラスにはPDFの出力に関する処理を記載必要はありません。