こいけるの日記

データサイエンス / データエンジニアリングに興味がある若手SIer社員の日記

【Pega】Activityからログを出力する

f:id:zaohgyu:20191110170601p:plain

やりたいこと

Activityの実行時ログをPegaRULESログに出力する。

PegaRULESログへの出力

Activity内でLog-Messageメソッドを使用する。

パラメータ

メソッドのパラメータは以下の4つ。

No. パラメータ       説明       
1 Message ログに出力する内容を定義。
平文だけでなく、Propertyの指定も可能。
2 LoggingLevel 出力するログレベルを指定(※1)
3 GenerateStackTrace スタックトレースに出力するか選択
4 SendToTracer トレーサ(※2)に出力するか選択

※1 : ログレベルには以下を指定可能

  • Debug
  • Info
  • Warn
  • Error
  • InfoForced

深刻度はDebug < Info < Warn < Error の順に大きく、prlog4j2.xml設定されたレベル以上の深刻度のものだけがログとして出力される。

InfoForcedを指定した場合は、設定されたレベルに関わらず、ログをInfoレベルで強制的に出力する。

※2: トレーサ(Tracer)については以下を参照。

【Pega】開発効率化のために覚えておきたい機能5選 - こいけるの日記

実装例

f:id:zaohgyu:20191126002831j:plain

出力結果

Configure > System > Operations > Logsから、Log Files > PegaRULES.logを選択してログを開く。

f:id:zaohgyu:20191126003148j:plain

Log-Messageメソッドに記述した内容が出力されている。

環境

Pega Platform 8.3.0 Personal Editionで実行。

おわり~

【Pega】複数のReportを1つのReportに統合 (UNION)する

f:id:zaohgyu:20191110170601p:plain

やりたいこと

同じクラスに属する2つの異なるレポートのクエリ結果を統合し、1つのレポートとして出力したい。

f:id:zaohgyu:20191120200829j:plain

こんな感じ。

前提として、以下の2つのReportがあると考える。

  • Report A : 顧客の年齢が5歳より大きい注文を出力
  • Report B : 顧客の犬種が"柴犬"でない注文を出力

この2つのReportを、Report Cに統合して出力する方法を、以下で説明する。

実装方法

ポイント:Sub-Reportという、Reportから異なるReportを呼び出す機能を用いて実装する。

統合される側 [Report A, B] の設定

1.Queryタブで、Column Sourceを1つにする

f:id:zaohgyu:20191120203333p:plain

2.Data Accessタブで、Row key settingsの"Get Row Key"をオフにする

f:id:zaohgyu:20191120203357p:plain

統合する側 [Report C] の設定

1.Data Accessタブで2つのReportをSub-Reportとして設定

f:id:zaohgyu:20191120204056p:plain

2.Sub-ReportのConfigureで、

  • Where will you this sub-report? でRight hand side of filter conditionsをチェック
  • How will you join rows in this reports? でDo not match rowsを選択

f:id:zaohgyu:20191120204250p:plain

3.Queryタブで各Sub-Report用のフィルタを設定して、OR条件でつなげる

f:id:zaohgyu:20191120204837p:plain

以上で設定は完了。

実行結果

Report Cを実行すると以下のようにReport AとReport BをUNIONした結果が得られる。

f:id:zaohgyu:20191120205036p:plain

環境

Pega Platform 8.3.0 Personal Editionで実行。

おわり~

【Pega】JSONテキストをParseするJavaコード

f:id:zaohgyu:20191110170601p:plain

サンプルコード

// ①:Map Pega Property into Java Property
ClipboardPage cp=tools.findPage("RunRecordPrimaryPage");
String jsonString= cp.getString("JsonString");

// ②:Parse JSON String
try{
  ClipboardPage tempPage = tools.createPage("@baseclass","JSONPage");
  tempPage.adoptJSONObject(jsonString);
  
} catch(InvalidStreamError e){
  oLog.error("ReloadSection:Invalid JSON Stream for data page params : "+e.getMessage());

} catch(Exception e){
  oLog.error("ReloadSection:Expection : "+e.getMessage());

}

コードの説明

①で、PegaのClipboardに持っているJSON形式のテキストを、Java内のString型変数にコピーする。取得先のPageにRunRecordPrimaryPageを指定しているが、ここは適宜変更する。本メソッドを呼び出すCaseが取得先であれば、pyWorkPageになるはず。

②で、adoptJSONObjectメソッドを用いて、JSON形式のString変数をParseして、Pega内のPage(JSONPage)にマップする。

参考

下記を参考に作成。
JSON Object Parsing in Pega | Pega Community

環境

Pega Platform 8.3.0 Personal Edition

おわり~

【Pega】開発効率化のために覚えておきたい機能5選

f:id:zaohgyu:20191110170601p:plain

知っておくとPega Platformでの開発効率があがる機能を5つ紹介。

Clipboard

できること

サーバ上のメモリ領域に存在するデータを確認することができる。

開発やテスト実施時に「今動かしているCaseのこのPropertyにどんな値が入っているか」を確認したいときが多々あるが、これを実現するのがClipboard toolである。

使用方法

Dev Studioのメモリ上の情報を確認したいCase等の画面を開いた状態で、右下のマークをクリック(下の画像参照)。

f:id:zaohgyu:20191116213820p:plain

クリックすると新規Windowが立ち上がる。特定のThreadのメモリすべてにアクセス可能なので、左側の項目はずらずらと様々な項目が並ぶ。Caseの情報を見たい場合は、この中からpyWorkPage(クラス名)の項目を選択することで、現在のCaseの情報を確認できる。

f:id:zaohgyu:20191116214049p:plain

Tracer

できること

Activity, Data transform, Flow,,,といったRuleの実行時情報を確認することができる。

主にRuleが何かしらのエラーやバグで思ったように動いていないときに、このTracerを立ち上げてデバッグを行う。

使用方法

Dev Studio右下の、みたらし団子を折り曲げたようなアイコンをクリック。

f:id:zaohgyu:20191116221621p:plain

新規ウィンドウでTracerの画面が立ち上がる。この画面を開いた状態で、動作チェックをしたいRuleを実行する。すると、Tracerの画面で実行時の情報が出力される。この時エラーの情報はStatus列が赤色で出力される。

f:id:zaohgyu:20191116222024p:plain

さらにエラーが起きている行をクリックすると、詳細な情報を確認できる。

f:id:zaohgyu:20191116222240p:plain

エラーメッセージを見るに、「ぽち」という文字列をInteger型に変換しようとしてエラーが起きている、ということが確認できる。

こんな感じでエラーが発生したときはTracerを活用することで、原因を特定できる。

使用時の注意点

Tracerは走らせるとマシンに結構な負荷がかかるので、使わないときはTracerのウィンドウを閉じるか、ウィンドウ上部にある"Pause"ボタンで情報取得を停止させておくこと。

Live UI

できること

UIの各要素を、実際に見ている画面から特定したり、その場で変更を加えたりできる機能。

「今見ている画像の部品を変更したいけど、どのクラスのどのセクションを変更したらよいか分からない」というときに便利。

使用方法

各ポータル右下の、四角に矢印が書いてあるアイコンをクリック。

f:id:zaohgyu:20191116223753p:plain

すると画面の状態が切り替わり、画面の各要素にカーソルを合わせると、各要素の情報が現れるようになる。

f:id:zaohgyu:20191116224504p:plain

要素名の右側にあるアイコンをクリックすると、

  • Dev Studioで該当の要素を開く
  • その場で要素を変更
  • 要素の詳細情報を確認

などを実行できる。

View Reference

できること

そのRuleが参照しているRuleや参照されているRuleを確認できる。

例えばあるRuleを変更したり削除したりするときに、デグレを防ぐためにそのRuleを使っているRuleを確認するシーンがある。こういうときにView Reference機能を使う。

使用方法

確認したいRuleを開き、右上のActions > View referencesをクリック。

f:id:zaohgyu:20191116231046p:plain

すると新規に画面が開く(実行するには最新のFlashが必要)。

f:id:zaohgyu:20191116232043p:plain

左側 → そのRuleを参照しているRule
右側 → そのRuleが参照しているRule

を確認することができる。

Search/Replace a String

できること

RuleSet全体で、特定の文字列を一括置換できる。

使用方法

Dev Studio上部にある⚙マークをクリックし、System > Refactor > Rulesを選択。

f:id:zaohgyu:20191116233224p:plain

Search/Replace a Stringをクリック。

f:id:zaohgyu:20191116234108p:plain

Original String Valueに置換前のワード
New String Valueに置換後のワード
を入力。

f:id:zaohgyu:20191116234640p:plain

その後はNext→Next→Finishと選択。

使用時の注意点

万が一に備え、実行前にバックアップをとっておきましょう。

環境

Pega Platform 8.3.0 Personal Editionを使用。

おわり~

【Pega】Report でPage List Propertyを参照する方法

f:id:zaohgyu:20191110170601p:plain

やりたいこと

Page ListのPropertyを持つCaseについて、その項目を含めたReportを作成して表示したいことがある。

例:1つのドッグフード注文につき、複数の明細が紐づくCaseの情報をReportで扱うとき

f:id:zaohgyu:20191116144835p:plain

実装方法

手順①:Report Definitionの設定

Page Listを参照したいReport Definitionを開き、Data Access タブを開く。

Data Accessタブの中部にあるDeclative index joinsのフィールドで設定を行う。

f:id:zaohgyu:20191116153039p:plain

  • Prefix
    Reportの中でJoinしたPropertyを呼び出すための接頭辞。名前は適当でよし。

  • Index name
    使用するDeclare Indexを指定する。

  • Type
    Joinの方法を指定する。

    • Only include matching rows = INNER JOIN
    • Include only rows in this class = LEFT OUTER JOIN
    • Include only rows in indexed class = RIGHT OUTER JOIN

手順②:Declative index joinsの作成 / 設定

Page List型のPropertyに紐づくPropertyをOptimizeしておくと、Declare Indexは自動で作成されるため、今回のケースでは基本的にDeclare Indexをゼロから手動で作成する必要はない。

下の画像はDeclare Indexの中身。Joinの条件などを設定することが可能。 f:id:zaohgyu:20191116154026p:plain

手順③:出力項目の設定

Report Definitionに戻り、Queryタブを開く。ここのColumn Sourceで、手順①で設定したPrefixを用いて表示させたい項目を設定する。(Prefix).(Property)の形で記述する。

f:id:zaohgyu:20191116154310p:plain

以上で必要な設定はおわり。

表示結果

作成したReport Definitionを実行すると、以下のようにCaseに複数紐づく明細が出力される。

f:id:zaohgyu:20191116154454p:plain

環境

Pega Platform 8.3.0 Personal Editionを使用

おわり~