0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【IM_Workflow】案件が最終承認をしたのと同時に参照画面のPDFを出力する方法

Last updated at Posted at 2021-11-26

#はじめに
intramartでforma-designerの申請画面をIM-Workflowでの最終承認時にPDFとして出力する方法について、紹介します。

  • のついている箇所は参考欄を参照してください。

#前提
・バージョンは2018Summer
・案件終了処理、ジョブで使用するソースはintramart公式が公開しているもの(*1,*2)を編集する。

#やりたいこと
・案件終了時に画面のPDFをパブリックストレージに保存する
・案件終了処理のプログラムから、ファイルを出力するジョブを起動する

#手順1 ジョブを作成する
####1-1 ジョブで実行するプログラムのソースを組む
PDF出力を行うジョブのソースをサンプルプログラム(*3)を編集し以下のように作成する。
以下では、印刷するPDFの設定を行っている。

execute.js#execute
// グローバル変数
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出力を実行する

execute.js#execute
title = "PDF出力タイトル";  // 一意となるタイトルにする

try{
  var pdfConv = new FRApplicationPDFConverterAsync();
  var result = pdfConv.createPDF(applicationId,insertId,userCdoptions);

}catch(error){
  return {
    status : 'warning' ,
    message : error.errorMessage
  };
}

この時点でPDFを作成できているはずなので、そのファイルをパブリックストレージに保存する処理を作成します。

execute.js#execute
     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 案件終了処理のソースを組む

matter_end.js#execute
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・・・ジョブの設定手順

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?