logo

サイト内検索
ココログ最強検索 by 暴想

最近のトラックバック

無料ブログはココログ

« 2012年12月 | トップページ | 2013年9月 »

2013年1月

Reports Connect for Salesforce 複数の帳票を一つのPDFファイルとして出す

ReportsConnect 1.9 より、複数の帳票を一つのPDFファイルにして出力する事が可能になりましたので、その方法について解説します。

今回はReportsConnectのページからダウンロードしたサンプルプログラムの帳票、見積もりと、商品紹介をひとつのPDFファイルとして出力してみます。

まあ、こういう機能は、例えば見積もり書の後ろに申込書をつなげて、FAXで送り返してもらう、なんてケースで使えると思います。

帳票の連結は簡単です。ReportsConnect 1.9 より帳票オブジェクトに親の帳票オブジェクトへの参照が追加されています。これを使用して、見積もりと、商品紹介を、親オブジェクト「見積もり商品紹介」で括ります。

20130131_11h04_57

やり方は、まず親のオブジェクト「見積もり商品紹介」を新規帳票ボタンを押して作成します。とりあえず、名前だけ付けて保存します。

20130131_13h32_24

次に、子帳票オブジェクトとなる「見積もり」のオブジェクトの編集画面を開いて、親帳票の参照に今作った「見積もり商品紹介」を指定します。

また、連結順に1と入力して保存します。

なお、旧バージョンからバージョンアップした場合はこれらの項目が画面に表示されない場合があります。その場合は、帳票オブジェクトの設定画面から画面レイアウトを編集して新しく追加された項目を画面に追加してください。

20130131_11h09_40

同様に商品紹介のオブジェクトにも設定を行います。連結順は2とします。

20130131_11h11_19

これで、出来上がり、と言いたいところですが、この2つの帳票をいっぺんに処理するにあたって、使用するリクエストパラメーターの名前がかぶってしまうと問題が発生します。

今回、不幸にも使用する2つの子帳票オブジェクトで、同じ「condition」というパラメーターを使用しているため、ここを調整する必要があります。

商品紹介のオブジェクを編集して、SOQL上のパラメーターの名前を

:condition

  ↓

:conditions

と後ろにsをくっつけました。

その下のパラメーターの欄はこのオブジェクトの印刷テストボタンを押す時以外、使用しないのでどうでも良いのですが、一応直しておきます。

20130131_11h30_44

これで、再び親帳票オブジェクトの画面を開いて、子オブジェクトに指定していたそれぞれのパラメーターを両方2行にしてテキストボックスに入れます。行の順番は関係ありません。(パラメーターの置き換えは長さが長い順に行われる)

20130131_13h11_05

これで、試しに印刷ボタンを押してみると...

20130131_13h12_27

小帳票オブジェクトの連結順に指定した番号の順に帳票が連結されて、一つのPDFファイルになって出力されました。

実際のアプリケーションに組み込む方法は、従来と変わりません。指定する帳票名を親帳票の名前にするだけです。

アプリケーションへの組み込み方法に関しては、

Reports Connect for Salesforce 標準画面からの印刷呼び出し方法

Reports Connect for Salesforce アプリケーションへの組込み方法

を参照してください。

Reports Connect for Salesforce PDFファイルをオブジェクトに添付する

ReportsConnect 1.8 より、作成したPDFファイルをダウンロードする代わりに、特定のオブジェクトに添付する事が可能になりましたので、その方法について解説します。

ReportsConnect 1.8をインストールしたうえで、ReportsConnectの資料のページから、1.サンプルプログラムのインストールのリンクおよび、2.サンプルデータのダウンロードのリンクをクリックして、サンプルのプログラムとデータをダウンロードしてください。

サンプルプログラムには商談のカスタムボタンが3つ用意されています。
すべての商談を表示すると「帳票テスト商談」がありますのでこれを開きます。

3つのカスタムボタンは、レイアウトを編集するのリンクを押して、レイアウト編集画面のボタンの箇所からドラッグアンドドロップして画面に追加してください。

20130125_16h45_43

このボタンのうち、請求書印刷、見積印刷の2つは、押すとサブウインドウが開いて、PDFファイルのダウンロードとなります。

20130125_16h34_21
このようにカスタムボタンから、PDFファイルをダウンロードする実装に関しては、Reports Connect for Salesforce 標準画面からの印刷呼び出し方法を参考にしてください。

3つ目の商品紹介のボタンが、新機能、PDFファイルをオブジェクトに添付する例となっています。このボタンを押すと、サブウィンドウは表示されず、PDFファイルを該当の商談オブジェクトに添付して再び元の商談の画面に遷移します。

20130125_16h56_10
このように、PDFファイルを特定のオブジェクトに添付する場合、最も簡単な方法は該当の帳票オブジェクの項目「idパラメーターのオブジェクトに添付」にチェックを付ける事です。
20130125_15h50_24
これにより、リクエストパラメーターにidというパラメーターがある場合、その値のidのオブジェクトの添付ファイルとしてPDFファイルが保存されるようになります。
カスタムボタンを押した際に遷移する画面ではidパラメーターに該当のオブジェクトのidが設定されますので、うまい具合にそのオブジェクトに添付することができます。

(ただし、帳票画面の「印刷テスト」ボタンを押した際は、このチェックは自動的にoffになります。これは、帳票オブジェクト自体にPDFが添付されてしまわない様にするため、そのような仕様になっています)

また、添付後、ディフォルトでそのオブジェクトのページのPagereferenceが返されるので、あえてサブウインドウを開く必要はありません。カスタムボタンの動作には、「現在のウィンドウにサイドバー付きで表示」を設定します。

Ws000000
このボタンを押した際に呼び出されるVisualforceページのソースとコントローラーのソースは以下の通りです。

(コントローラーのメソッド、doPrintSsが呼び出される)

----------------

  <apex:page standardController="Opportunity" 
       extensions="OpportunityPrint" action="{!doPrintSs}">   </apex:page>

  public with sharing class OpportunityPrint {
    private kpsr.ReportsConnectController rc;

    public OpportunityPrint (ApexPages.StandardController controller) {
        rc = new kpsr.ReportsConnectController();
         
    }
   
    public Pagereference doPrintSk(){
        rc.setReportId('請求書');
        return doPrint();
    }

    public Pagereference doPrintMt(){
        rc.setReportId('見積り');
        return doPrint();
    }
   
    public Pagereference doPrintSs(){
        rc.setReportId('商品紹介');
        rc.getParms().put('condition','where ImageUrl__c <> NULL');
        //rc.setReturnUrl('/servlet/servlet.FileDownload');
        rc.goPrint();
        if(rc.goUrl!=null){
            Pagereference pr = new Pagereference(rc.goUrl);
            return pr;
        } else {
            return null;
        }
    }
   
   
    private Pagereference doPrint(){
        rc.getParms().put('condition','where OpportunityId=\''
                + System.currentPageReference()
                   .getParameters().get('id') + '\'');
        rc.goPrint();
        if(rc.goUrl!=null){
            Pagereference pr = new Pagereference(rc.goUrl);
            return pr;
        } else {
            return null;
        }
    }
}
-------------------------

なお、ReportsConnectController#setParentIdメソッドを使用してオブジェクトのidを設定すれば、任意のオブジェクの添付ファイルにすることができます。

また、ReportsConnectController#setReturnUrlメソッドで、遷移先のページを指定することもできます。
その際、リクエストパラメーターfileに、PDFファイルの添付ファイルのオブジェクトのidが返されるので、上記ソースでコメントアウトされている

//rc.setReturnUrl('/servlet/servlet.FileDownload');

の行のコメントアウトを外すと、ダウンロードサーブレットが動いてPDFが表示されますので試してみてください。

« 2012年12月 | トップページ | 2013年9月 »