#はじめに
intramartでforma-designerの申請画面をIM-Workflowでの最終承認時にPDFとして出力する方法について、紹介します。
- のついている箇所は参考欄を参照してください。
#前提
・バージョンは2018Summer
・案件終了処理、ジョブで使用するソースはintramart公式が公開しているもの(*1,*2)を編集する。
#やりたいこと
・案件終了時に画面のPDFをパブリックストレージに保存する
・案件終了処理のプログラムから、ファイルを出力するジョブを起動する
#手順1 ジョブを作成する
####1-1 ジョブで実行するプログラムのソースを組む
PDF出力を行うジョブのソースをサンプルプログラム(*3)を編集し以下のように作成する。
以下では、印刷するPDFの設定を行っている。
// グローバル変数
const storageFolderName = "test"; // パブリックストレージ→testのフォルダにファイルを出力する
const applicationId = "app"; // アプリケーションID
function execute() {
var insertId = "test123456"; // formadesignerで作成されるアプリケーションデータを格納するテーブルのimfr_sd_insert_id
var userCd = "aoyagi"; // 申請者を設定
var title = "";
var options = [];
// リンク無効
options.push("--disable-external-links");
// 印刷モード
options.push("--print-media-type");
// タイムアウト処理
options.push("--javascript-delay");
options.push("20000");
// 拡大縮小設定
options.push("--zoom");
options.push("1.0); // 倍率
title = "PDF出力タイトル"; // 一意となるタイトルにする
}
そして以下でPDF出力を実行する
title = "PDF出力タイトル"; // 一意となるタイトルにする
try{
var pdfConv = new FRApplicationPDFConverterAsync();
var result = pdfConv.createPDF(applicationId,insertId,userCdoptions);
}catch(error){
return {
status : 'warning' ,
message : error.errorMessage
};
}
この時点でPDFを作成できているはずなので、そのファイルをパブリックストレージに保存する処理を作成します。
message : error.errorMessage
};
}
// 作成されたPDFファイル
var pdfFile = result.data;
// 保存先を指定
var dirStorage = new PublicStorage(storageFolderName, title);
try{
dirStorage.createAsBinary(function(reader,error1){ // ストレージにファイルを作成する
if(error1 != null){
throw error1
}
pdfFile.openAsBinary(function(reader,error2){ // 作成されたPDFファイルを開き、中身を読み込む
if(error2 != null){
throw error2;
}
reader.transferTo(writer); // 読み込んだデータをパブリックストレージに作成したファイルにコピーする
});
});
}catch(error){
return {
status : 'warning' ,
message : error.errorMessage
};
}finally{
// 作成されたPDFファイルを削除する
pdfFile.remove();
}
####1-2 ジョブを作成する
公式にて紹介されているジョブ・ジョブネットの設定手順(*4)に従って、ジョブネットを作成してください。その際のジョブネットIDをjobExecute.js内の変数と同期させてください。
#手順2 案件終了処理を作成する
####2-1 案件終了処理のソースを組む
function execute(parameter){
var result = {
"resultFlag" : true,
"message" : "",
"data : true
};
var jobnetId = "testJob"; // 1-2で作成したジョブネットのIDを指定する
var jobManager = new JobSchedulerManager();
var result = jobManager.execute(jobnetId);
return result;
}
#手順3 案件終了処理をIM-Workflowと連携する
####3-1 コンテンツ定義に案件終了処理を登録する
作成したソースをjssp/src以下に配置する。今回はsrc/sampleに配置した。
コンテンツ定義⇒ユーザプログラムで新規作成し、以下のように入力する。
プログラム名:画面PDF出力処理
プラグイン種別:案件終了処理
プラグイン種類:【案件終了処理スクリプト開発モデル】
sample\matter_end
備考:
初期使用:チェック
実行順番:1
※必ず初期使用のチェックボックスを入れること
#おわりに
これにて完成です。
案件が終了すると同時にファイル出力のジョブが実行され、パブリックストレージにPDFファイルが作成されます(作成完了まで20秒ほどかかります)。
あとはjobExecute.js内でアプリケーションIDごとにタイトルやオプションを動的に変更させるなどにより、その後の開発でも再利用することができますね。
また、これを応用して、申請画面に添付されたファイルも同じくパブリックストレージに出力することもできます。
そちらについてはまた後の機会に紹介するかと思います・・・
#参考
*1・・・案件終了処理等のサンプルプログラム
*2・・・ジョブで実行するプログラムのサンプル
*3・・・ジョブスケジューラAPI
*4・・・ジョブの設定手順