第497話:自動工程におけるデータ加工、アレコレ(その4)

2016年8月22日
  • 多言語で説明されている取扱説明文
  • Webサイトの原稿(HTML)
  • ソースコード

そんな原稿制作フローであれば、(「文字数」だけでなく)、「ハッシュ値」も自動記録される仕組みにしておきたい。

ハッシュ値とは、データに対する「要約文字列」(メッセージダイジェスト)だ。「指紋」(フィンガープリント)と呼ばれることもある。要するに、どんなデータからでも瞬時に「32個の16進数文字」(MD5方式の場合)が出力でき、1文字のデータ改竄ですら簡単に検証できるようになる。(詳しくは Wikipedia あたりを参考にしていただきたい)

以下のワークフローでは「ハッシュ値取得(MD5)」および「ハッシュ値取得(SHA256)」という[自動工程](サービスタスク)が使われている。どちらも[アドオンXML]によって機能拡張しておけば利用可能だ。(Questetra BPM Suite v11.1, 2016年9月初旬リリース?)

[翻訳プロセス-ハッシュ値]

<モデリング画面:設定画面でデータ項目をセットしている状態>

たしかに「文字数をカウントするスクリプト」であれば、[スクリプト工程]を使って自ら JavaScript を書く人も居るだろう。実際、5~10行のスクリプトで済む。しかしそんな人も「ハッシュ値を出力するスクリプト」となれば流石にお手上げだ。

その様な場合には、自動工程を追加する[アドオンXML]をインポートすればよい。

ちなみに、このワークフローサンプルで収録されている[アドオンXML]では、オープンソースの JavaScript が活用されている。100行あるいは1000行のスクリプト作成が不要になるだけでなく、自作スクリプトに比べてバグの混在リスクを低減することも可能と言えるだろう。

なお[アドオンXML]の活用に際しては、必ず信頼できる相手から入手して頂きたい。(悪意のある自動処理が書かれている可能性もある)

▼同梱されているアドオンXML『hash-sha256-addon.xml』(抜粋)
<?xml version="1.0" encoding="UTF-8"?><service-task-definition> 

<label>SHA256 Hash</label> 

<configs> 
  <config name="conf_SourceText" required="true" form-type="SELECT" select-data-type="STRING"> 
    <label>Input Text</label> 
  </config> 
  <config name="conf_Hash" required="true" form-type="SELECT" select-data-type="STRING"> 
    <label>SHA256 Hash</label> 
  </config> 
</configs> 


<script><![CDATA[ 

//// 
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 
/* SHA-256 implementation in JavaScript (c) Chris Veness 2002-2014 / MIT Licence */ 
/* */ 
/* - see http://csrc.nist.gov/groups/ST/toolkit/secure_hashing.html */ 
/* http://csrc.nist.gov/groups/ST/toolkit/examples.html */ 
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 

/** 
* SHA-256 hash function reference implementation. 
* 
* @namespace 
*/ 
var Sha256 = {}; 

/** 
* Generates SHA-256 hash of string. 
* 
* @param {string} msg - String to be hashed 
* @returns {string} Hash of msg as hex character string 
*/ 
Sha256.hash = function(msg) { 
// convert string to UTF-8, as SHA only deals with byte-streams 
msg = msg.utf8Encode(); 

//(中略) 

}; 

//(中略) 

//// == 自動工程コンフィグの参照 / Config Retrieving == 
var dataDefNumA = configs.get("conf_SourceText"); // SELECT (returns Number) 
var dataDefNumB = configs.get("conf_Hash");  

//// == ワークフローデータの参照 / Data Retrieving == 
var myText = data.get( dataDefNumA ) + ""; 

//// == 演算 / Calculating == 
var myHash = Sha256.hash( myText ); 

//// == ワークフローデータへの代入 / Data Updating == 
retVal.put( dataDefNumB, myHash ); 

]]></script> 

<icon> 
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADXUlEQVRYR61X...(略)
</icon> 

</service-task-definition> 


[雛形ダウンロード (無料)]
<類似プロセス>
≪関連記事≫

[英文記事 (English Entry) ]

0 件のコメント :

コメントを投稿