Apexで明細部分を作る方法について

ホーム 掲示板 ReportsConnect for Salesforce Apexで明細部分を作る方法について

このトピックは 2 発言者 で 4 件の返信 、  sweetie 6 年と 10 ヶ月 前 に最終更新されました。

5投稿中1~5 5件表示
  • 作成者
    投稿
  • #465

    tazumi
    参加者

    お世話になります。

    明細部分について、要件の都合上単純なSOQLではうまくいきそうにないので、
    出力したい内容をApexで加工して、その内容で明細を作りたいと考えていますが、このようなことはできるのでしょうか?

    試してみたこと。

    http://kptech.cocolog-nifty.com/blog/2012/11/reports-conne-2.html

    の記事を参考にしつつ。
    ①ApexでJSONを作成してパラメータ渡しにすればできるかとも考えたので、
    {
    “contactList” : [ {
    "report2Name" : "Nedaerk Siddartha",
    "report2Id" : "00328000003zZt3AAE"
    }, {
    "report2Name" : "Llorrac Jake",
    "report2Id" : "00328000003zZt4AAE"
    } ]
    }
    というjsonの文字列をrc.getParms().put(‘contactList’, jsonString);のようにしてパラメータで渡す。
    ②ireportでパラメータとして名前「contactList」をObjectとして定義
    ③Detail部にsubreportを配置し
    ・Connection type:Use a datasource expression
    ・Data Source Expression : new JRBeanCollectionDataSource((Collection)$P{contactList})
    のようにしてみた。
    ④結果: Error evaluating expression : Source text : new JRBeanCollectionDataSource((Collection)$P{contactList})
    となる。

    #466

    sweetie
    参加者

    tazumiさんこんにちは。

    見たところ、jsonで渡しているとはいえ、$P{contactList}はあくまでStringなのでCollectionでキャストしたらエラーになる、ということでは無いかと思われますが、
    お尋ねの件は、iReportの技術的な内容と思われるので、iReport系のサイトでご確認頂きたい思います。

    なお、SOQLで不可能なデータ構造をソースにしたい場合の実現例としては、Salesforce上に印刷用のオブジェクトを用意してApexのロジックでそこに書き込んでReportsconnectにはそのオブジェクトを読ませるという方法で実現してるケースを聞いたことがあります。

    P.S.
    いただいた質問をヒントに考えて見たのですが、Javaのjsonn系のライブラリでJSONICというのがありますが、サーバー側にこのライブラリーを追加しておけばパラメータをjsonで渡して色々応用が効くかもしれないと思います。
    現段階では未追加ですがライブラリー追加を検討してみます。

    #467

    tazumi
    参加者

    回答ありがとうございます。
    とりあえず、印刷用オブジェクトに書き込む方針で見当します。

    #509

    tazumi
    参加者

    この件について、解決しました。ありがとうございました。
    解決について記述しておきます。

    ご提案いただいたとおり、帳票出力用のワークオブジェクトを作成してみたのですが、
    ・Apexでワークオブジェクトにinsert処理をし、その流れのままReportsConnect呼びだし
    とすると、「commitしてないからダメ」というエラーで落ちてしまいます。

    そこで、対処として以下のようにしました。
    ・Visualforceを2つ用意。ボタン押下時のApex呼び出し用(※1)とコミット後に再度Apex呼び出し用(※2) 。Aoexコントローラは同一のものを指定。
    ・ボタン押下で※1よりApex起動。Apexコントローラには変数としてユーザIDとボタン押下の時間を結合したもの(※key)を保持。ワークオブジェクトに書き込み。その際※keyもワークオブジェクトに書き込んでおく。returnとして※2を返す。commitされる。
    ・※2のinitでApexコントローラがつづけて起動される。このとき※key変数はクリアされていないので、ReportsConnectのワークオブジェクトを取得するSOQLのWhereパラメータに※keyを指定する。

    分かりづらいかもしれませんが、以上となります。
    とっても助かりました。ありがとうございました。

    #515

    sweetie
    参加者

    tazumiさん

    遅くなりましたが、Reportsconnectでjsonでのパラメータ渡しが可能になりました。

    以下の記事を参考にしてください。

    http://kptech.cocolog-nifty.com/blog/2017/07/reports-connect.html

5投稿中1~5 5件表示

このトピックに返信するためにはログインしなければなりません。