actionFunctionからの実行方法??について

ホーム フォーラム ReportsConnect for Salesforce actionFunctionからの実行方法??について

  • このトピックには1件の返信、2人の参加者があり、最後にinoにより9年、 6ヶ月前に更新されました。
2件の投稿を表示中 - 1 - 2件目 (全2件中)
  • 投稿者
    投稿
  • #231
    tazumi
    参加者

    開発者環境にて無償版で勉強させていただいています。

    visualforceでサインを書いて、ActionFunctionを使用しサイン画像を保存、その後、pdfをつくりたいと思っています。
    そこで、とりあえず簡易な文字のみのpdfが出力されるかどうかを確認したく、以下のように実装してみたところ、System.NullPointerException: Attempt to de-reference a null object(kpsr)が発生し、回避方法が分かりません。どのようにすればいいのでしょうか?

    ——————–
    帳票
    帳票名:手書きサインデモ
    ログインユーザーを固定化する:true
    固定化ユーザ名、固定化パスワード、設定済。
    この設定で、印刷テストボタンでpdfが作られることは確認済
    ——————-

    ——————-
    visualforce
    <apex:page showheader=”false” sidebar=”false” docType=”html-5.0″ controller=”SignDemoController”>
    <apex:includeScript value=”{!URLFOR($Resource.jquery, ‘jquery-1.11.1.min.js’)}” />
    <apex:includeScript value=”{!URLFOR($Resource.signature_pad, ‘thomasjbradley-signature-pad-97073d7/jquery.signaturepad.min.js’)}” />
    <apex:includeScript value=”{!URLFOR($Resource.signature_pad, ‘thomasjbradley-signature-pad-97073d7/assets/json2.min.js’)}” />
    <apex:includeScript value=”{!URLFOR($Resource.signature_pad, ‘thomasjbradley-signature-pad-97073d7/assets/flashcanvas.js’)}” />

    <apex:stylesheet value=”{!URLFOR($Resource.signature_pad, ‘thomasjbradley-signature-pad-97073d7/assets/jquery.signaturepad.css’)}”/>

    <script>
    var signaturePadApi;
    var sigData;
    var sigDataStr;

    $(document).ready(function () {
    signaturePadApi = $(‘.sigPad’).signaturePad({drawOnly:true});
    });

    function clickbutton(){
    sigData = signaturePadApi.getSignatureImage();
    sigDataStr = signaturePadApi.getSignatureString();
    if(sigDataStr == “[]”){
    //未入力
    // saveScribblePad(sigData, sigDataStr);
    }else{
    saveScribblePad(sigData, sigDataStr);
    }
    }

    function closeDialog(){
    trySaveScribblePad(sigData, sigDataStr);
    }

    </script>

    <apex:sectionheader title=”確認フォーム”>
    <apex:pageBlock mode=”detail” title=”入力内容確認”>
    <apex:pageBlockSection columns=”1″>
    <apex:outputField value=”{!orderInput.KaiinNo__c}” id=”kaiinNo” />
    <apex:outputField value=”{!orderInput.mail__c}” id=”mail” />
    </apex:pageBlockSection>
    </apex:pageBlock>

    <apex:pageBlock id=”signBlock” mode=”detail” title=”手書きサイン”>
    <apex:pageBlockSection columns=”1″>
    <apex:form styleclass=”sigPad”>
    <div class=”sig sigWrapper”>
    <canvas class=”pad” width=”400″ height=”55″></canvas>
    <input type=”hidden” name=”output” class=”output”></input>
    </div>

    <apex:commandButton onclick=”clickbutton()” value=”送信” />
    <apex:actionFunction action=”{!saveScribblePad}” name=”saveScribblePad” rerender=”_dummy” oncomplete=”closeDialog();”>
    <apex:param value=”” assignTo=”{!sigData}” name=”sigData”/>
    <apex:param value=”” assignTo=”{!sigDataStr}” name=”sigDataStr”/>
    </apex:actionFunction>

    <apex:actionFunction action=”{!trySaveScribblePad}” name=”trySaveScribblePad” rerender=”_dummy” >
    <apex:param value=”” assignTo=”{!sigData}” name=”sigData”/>
    <apex:param value=”” assignTo=”{!sigDataStr}” name=”sigDataStr”/>
    </apex:actionFunction>
    </apex:form>

    </apex:pageBlockSection>
    </apex:pageBlock>
    </apex:sectionheader>
    </apex:page>

    ——————-
    apex

    public with sharing class SignDemoController {

    Public Transient String sigData{set;get;}
    Public Transient String sigDataStr{set;get;}

    Public OrderDemo__c orderInput{get;set;}

    private kpsr.ReportsConnectController rc;

    public SignDemoController() {
    orderInput = new OrderDemo__c();

    }

    public PageReference nextPage(){
    return Page.SignDemo;
    }

    public PageReference saveScribblePad(){
    if(sigDataStr == ‘[]’){
    return null;
    }
    trySaveScribblePad();
    return null;
    }

    /** 手書きサインを作って、pdf化したい */
    public void trySaveScribblePad(){
    //注文オブジェクトの作成
    OrderDemo__c orderDemo = new OrderDemo__c();
    orderDemo.Name = String.valueOf(Datetime.now());
    orderDemo.mail__c = orderInput.mail__c;
    orderDemo.KaiinNo__c = orderInput.KaiinNo__c;
    insert orderDemo;

    //メモ&添付に入れる
    //TODO この実装だとChatterFeedに入る。Attachmentに入れるように書き換える必要あり。
    FeedItem post = new FeedItem();
    post.ParentId = orderDemo.id;
    post.Body = ”;
    post.ContentData = EncodingUtil.base64Decode(sigData.split(‘,’, 2)[1]); // data
    post.ContentFileName = ‘memo-‘ + UserInfo.getName() + ‘-‘ + String.valueof(datetime.now()) + ‘.png’;

    insert post;

    //pdfにする。
    kpsr.ReportsConnectController rc= new kpsr.ReportsConnectController();
    rc.setReportId(‘手書きサインデモ’);
    rc.goPrint();
    //TODO サインの画像をpdfに設定する方法?
    }
    }

    #232
    ino
    参加者

    setAttachmentsメソッドを追加してもだめでしょうか?
    Apexクラスから画像を添付する時に使うメソッドです。
    固定の画像を出すのではなく画像を動的に変えたい場合などに使用します。
    サンプルコードです。

    前提知識(パラメータを渡す)

    ●salesforce側
    rc = new kpsr.ReportsConnectController();
    rc.getParms().put(‘Biko’,’備考欄に表示されます’);
    ●iReport側
    “Biko”という名前でパラメータを新規作成することで
    “備考欄に表示されます”という文字を取得でき、帳票に表示できる。
    (値がなかった場合”null”と表示されるのでWhenBlanknullにチェック推奨)

    サンプルコード

    ●salesforce側
    rc = new kpsr.ReportsConnectController();
    //画像が添付してあるレコードのIDを指定
    Id gID = ‘a0iN0000000puzV’;
    List<Attachment> atts = [select name, body, BodyLength from attachment where parentId = :gID];
    //画像情報をReportsConnectのsetAttachmentに渡す 1Mbまで。複数の画像OK
    rc.setAttachments(atts);
    String gazouName = ‘承認印.png’;
    //第一引数に好きな文字を、第二引数にattsで添付した中で表示させたい画像名を指定
    rc.getParms().put(‘gazou’,gazouName);

    ●iReport側
    “gazou”という名前で新しくパラメータを作る
    パレットからImageを挿入し、ImageExpression:$P{gazou}
    on error type:Blank(エラーが出たとき何も表示しない)
    を設定する。

    →gazouNameで指定した画像名の画像が帳票で表示される。

    setAttachmentsを使うときの注意
    ・帳票を連結するとき(詳しくはhttp://kptech.cocolog-nifty.com/blog/2013/01/reports-conne-1.html)に使用するパラメータの画像の名前に
    画像名の前に『../』を足す必要がある。
    (setAttachmentsを使っている場合)

    rc.getParms().put(‘TantoSign’,’../担当サイン.png’);

2件の投稿を表示中 - 1 - 2件目 (全2件中)
  • このトピックに返信するにはログインが必要です。