ddsat_result
- DDSATコマンドであるddsat_changeを実行した場合、その変更通知によって起動条件に合致したトリガープログラムが起動され実行されますが、そのトリガープログラム内でもデータを変更し、そのデータ変更が他のトリガープログラムへの起動条件となっている場合、このddsat_resultによって、起動トリガープログラム内からのデータ変更の通知ができます。
- そのddsatコマンドが、このddsat_resultです。
- ただ、起動されたトリガープログラムからの呼び方は、本トリガープログラムが、「wait」モードか、あるいは、「nowait」モードで呼ばれるかによってことなってきます。
- 従って、このddsat_resultコマンドは、トリガープログラム内でのデータ更新処理やデータ演算が終わった時点で、そのトリガープログラム中から呼び出すか(nowaitモードの場合)、あるいは、sysyoutの中に「ddsat_result={‥json記述‥)」に埋め込むか(waitモードの場合)によって、本コマンドが有効となります。
let pno="0"; let keyno=""; //---ddsat_beginの実行 let json0=""; //---ddsat_beginにはパラメータ不要。 try { const response = await fetch("http://ddsat_svr:8081/ddsat_begin", { method: "POST", headers: {"Content-Type": "application/json",}, body: JSON.stringify(json0)}); const result = await response.json(); pno=result.pno; //---会話番号が返る。 keyno=result.key; //---keynoに16文字暗号コードが返る。 alert(" ddsat_begin おわり。 pno="+pno+" key="+keyno); } catch (error) { alert("ddsat_begin error"); } //----ddsat_changeで、データベースの修正した内容をddsatに知らせる。 let json1={ pno: pno, key: keyno, mode: "wait", db_id: "my_db1", table:"T001person", field:{ T001_empno: 77, T001_name: "大谷選手", T001_birthday: "2000-07-07", } }; try { const response = await fetch("https://ddsat_svr:8081/ddsat_change", { method: "POST",
headers: {"Content-Type": "application/json",}, body: JSON.stringify(json1)}); const result = await response.json(); let pno=result.pno; //---会話番号---渡した値と同じ値が返る。 let mess1=result.message; //---ddsatからのメッセージ。エラーなしの場合は"OK"。 if(mess1!="OK"){ alert(" ddsat_trigger error message="+mess1); } } catch (error) { alert(" ddsat post error :"+ error); } //------ddsat_changeを実行することによって、ddsatモニターが、そのデータ変更によって起動されるプログラムを探し出して、自動的に起動する。
上記の例で、T001rersonテーブルが更新されたときに起動されるphpプログラムは以下のように、データベースの更新によってT109の変更履歴のinsertと、同時に変更履歴が2000件になったときに古い1000件を消すトリガープログラムのhttp://domain.jp/logup2.phpを起動させるとします。
ddsat_triggerコマンドであらかじめ以下を登録しておきます
{ "pno": 7,
"key": "--16文字key--",
"trigger": {
"tr_mode": "create",
"tr_prog": "http://domain.jp/logup2.php",
"tr_id": "my_trid_log1" },
"db_id: "my_db1",
"table": "T109log",
"field": { "T109_uptime","u" }
}
以下の例は、T100personの変更によって起動されるトリガープログラムhttp://domain.jp/myprg.phpの内容です。
<?php
//-----http://domain.jp/myprg.php の記述内容。
$jsonpara=$_POST['json'];
//---ddsat_changeで要求したjsonデータが、jsonという項目でpostで返されます。
$jsonvec=json_decode($jsonpara, true); //--連想配列に入れます。
var_dump($jsonvec); //---debug-----postされたjsonデータの連想配列をダンプ表示します。
$proc_no=$jsonvec['pno']; //-----会話process noを取得。
$key_no=$jsonvec['key']; //-----16文字暗号文字を取得。
$emp_no=$jsonvec['field']['T001_empno']; //---社員番号
$emp_name=$jsonvec['field']['T001_name']; //---社員名
$birthday=$jsonvec['field']['T001_birthday']; //---生年月日
$mysqli = new mysqli("localhost:3306", "jinji", "pass1", "jinji_db");
//-----MySQLデータベースに接続-----
if (mysqli_connect_errno()) {
die("データベースに接続できません:" . mysqli_connect_error() . "\n");
} else {
echo "データベースの接続に成功しました。\n";
}
//----変更履歴のデータログをinsertします----
$objtime = new DateTime();
$uptime = $objtime->format('Y-m-d H:i:s.u');
$query="insert into T109log(T109_uptime,T109_empno,T109_name,T109_birthday)
values(?,?,?,?)";
$stmt = $mysqli -> stmt_init();
$stmt = $mysqli->prepare($query);
$stmt ->bind_param("siss", $uptime, $emp_no, $emp_name,$birthday); //----parameter----
$stmt ->execute();//----insert 実行
echo(" T001person社員マスターの変更履歴log 書き込み終了");
//----log fileの縮小を行うトリガープログラムをwaitモードで起動させるとします。
//----「wait」モードの場合は、ddsat_resultをapiで呼ぶ必要はなく、sysout(echo文など)に
// "ddsat_result="文字を入れることによって、呼び出すことができます。
echo('ddsat_result={
"pno": "'.$proc_no.'",
"key": "'.$key_no.'",
"mode": "wait",
"tr_id": "my_trid_log1",
"db_id: "my_db1",
"table:"T109log",
"field":{
"T109_uptime": "'.$uptime.'"} }';
?>
なお、上記の例の中にある’ddsat_result=’で記述されたddsat_resultコマンドのパラメータの内容は以下のとおりとなります。
Jsonキー | 意味 | 例 | 備考 |
pno | 会話番号 | 5 | ddsat_beginで受け取った値を指定する。 |
key | 16桁暗号キー | abcdefghijklmnop | ddsat_beginで受け取った値を指定する。 |
mode | wait/no wait指定 | wait | 非同期の場合は、nowaitと指定する。省略するとwaitモードとなる。 |
tr_id | トリガープログラム別名 | my_trid_log1 | 今、実行されている自分のプログラム名を、triggerコマンドにて定義したtrigger別名であるtr_id名で指定する。 |
db_id | データベースid名 | my_db1 | トリガー登録で定義したid名。 |
field | |||
フィールド名 | トリガープログラムfield名で、kやuと指定したフィールド。 | “T109_uptime” | この例では、更新時間を指定。 |
さらに、以下に、「nowait」モードにて起動された場合におけるddsat_resultコマンドのtrigger phpプログラムからの呼び出しの記述例を示します。
$total=$tanka * $count;
$opts4 = array(
'http'=>array(
'method'=>"POST",
'header' => 'Content-type: application/json',
'content'=> '{"pno":'.$pno.',
"key":"'.$idxx.'",
"mode":"nowait",
"tr_id":"my_trg2",
"server":"my_server2.jp",
"area":"area_prog01",
"field":{"total_price":"'.$total.'"}}'
)
);
$url1="http://ddsat_svr:8081/ddsat_result";
$context = stream_context_create($opts4);
// 上で設定した HTTP ヘッダを使用してファイルをオープンします
$out4 = file_get_contents($url1, false, $context);
echo("----ddsat_result 終わり ");
なお、上記の例の中にある’context’で記述されたddsat_resultコマンドのパラメータの内容は以下のとおりとなります。
Jsonキー | 意味 | 例 | 備考 |
pno | 会話番号 | 5 | ddsat_beginで受け取った値を指定する。 |
key | 16桁暗号キー | abcdefghijklmnop | ddsat_beginで受け取った値を指定する。 |
mode | wait/no wait指定 | nowait | 非同期の場合は、nowaitと指定する。省略するとwaitモードとなる。 |
tr_id | トリガープログラム別名 | my_trg2 | 今、実行されている自分のプログラム名を、triggerコマンドにて定義したtrigger別名であるtr_id名で指定する。 |
server | 監視するareaのあるサーバ名 | localhost | 監視するプログラムが存在するサーバ名。 |
field | |||
フィールド名 | トリガープログラムfield名で、oと指定したフィールド。 | “total_price” | この例では、total_price=parts_tanka * parts_count;となる。 で演算結果を渡す。 |
結果値 | 演算結果の値 | 21000など値。 | 数値のみならず処理値を指定する。 |