+ Start a Discussion
NDS.ENDONDS.ENDO 

PDF出力と同時にレコード更新(PDF出力済フラグ)の可否について

リストビューよりPDF出力したいレコードを選択し、

VisualForceページのrenderas機能を使い、PDF出力(単票形式:複数ページ)し、

且つ、PDFに出力したレコードに対し、レコード更新(PDF出力済フラグをtrue)したい

と思っております。

 

update処理で、DML currently not allowedのエラーが発生し、異常終了してしまいます。

 

updateの処理をコメントアウトすると、正常にPDF出力(複数ページ)されます。

 

PDF出力とレコード更新は同時に出来ないのでしょうか。

あるいは、上記エラーが発生する原因としてどのような事が考えられるでしょうか。

Best Answer chosen by Admin (Salesforce Developers) 
ikouikou

PDFを表示するVisualforceコントローラーのコンストラクタでupdateしていませんか?

 

コンストラクタでDMLを実行することは出来ません。

 

代わりにpageタグのactionからinit処理みたいのを呼び出して、そこで更新すればいけると思います。

All Answers

ikouikou

PDFを表示するVisualforceコントローラーのコンストラクタでupdateしていませんか?

 

コンストラクタでDMLを実行することは出来ません。

 

代わりにpageタグのactionからinit処理みたいのを呼び出して、そこで更新すればいけると思います。

This was selected as the best answer
NDS.ENDONDS.ENDO

最初に、情報ありがとうございます。

 

ご指摘の通り、コンスラクタの中で更新しておりました。

(その後、Update処理の部分のみ、別[子]クラスで処理するように分離しましたが、結果は同じでした。)

 

拡張コントローラーにUpdate処理のメソッドを追加しましたが、

VisualforceのActionにUpdate処理のメソッド名を指定しても、不明なメソッドとして受け付けてくれませんでした。

 

メソッドの指定が悪いのでしょうか?

 

-- 拡張コントローラー --

 

public with sharing class ChangeCourse_ExCtl {

 

  /* コンストラクタ */

  public ChangeCourse_ExCtl(ApexPages.StandardSetController controller) {

            matterList = Database.query(soql); 

  }

 

 /* メソッド */

  public void RecordUpdate(List<カスタムオブジェクト> matterList) {

            for(カスタムオブジェクト m : matterList){

                m.フラグ = true;

            }

            update matterList;

            return;
  }

 

}

 

 

NDS.ENDONDS.ENDO

08-27-2010 06:20 PMに当ボード記載後(メソッドを認識出来ない件)、

色々と試してみたところ、メソッドの認識とメソッドでのデータ更新は対応は解決する事が出来ました。

 

ありがとうございました。

 

参考までに記載すると、

 

Visualforceページからメソッドを認識させるために、以下の対応をしました。

・ PageReferenceにてメソッドを定義する事。

・引数なしで定義する事。

 

-追伸-

Visualforceページにaction(メソッドの使用)を定義する事で、以下の問題(限界)が判明しました。

・PDF出力が正常に処理されない。(罫線が出力されない。改ページ処理がされない。)

 

よって、PDF出力を諦め、HTML出力に切り替える事になりそうです。

(HTML出力時の問題として、ブラウザ[Google Chrome]によっては、網掛けがプリンター出力時に印字されない弊害はあります)