ddsat_trigger
- DDSATのtriggerコマンドは、サービスに先立ってトリガー・プログラムを登録するためのコマンドです。
- これらのトリガー・プログラムは、登録された起動条件が満たされると、自動的に起動され実行されることになります。
- 従って、各データベースやデータエリアの更新を行うユーザプログラムは、自分が更新したデータを、changeコマンドやresultコマンドでDDSATに通知するだけで、あとは自動的にDDSATがトリガープログラムが探し出して起動させます。
- 基本的には、ddsat_triggerコマンドの実行は、ddsat_startによるDDSAT立ち上げ後に、登録することによって、DDSATのサービス中は有効となります。
- ddsat triggerコマンドの利用は、http(s)でのApi POST手順によって行われます。その形式例は以下のとおりです。なお、このApiは、javascriptでもphpからでもpostで呼べる言語ならば種類を問いませんが、セキュリティ上定義情報が見えないほうが望ましいので、サーバサイドで実行されるPHPプログラムなどのほうが望ましいでしょう。
<?php
//----ddsat_beginを実行する。
$bgn_ary = array(
'http'=>array(
'method'=>'POST',
'header' => 'Content-type: application/json',
'content'=> ''));
$url1="http://ddsat_svr:8081/ddsat_begin";
$context1 = stream_context_create($bgn_ary);
// 上で設定した ファイルをオープンしddsat_begin実行します。
$out1 = file_get_contents($url1, false, $context1);
$bgn_para=json_decode($out1, true);
var_dump($jsonvec);//---debug---------
$pno=$bgn_para["pno"];
$key=$bgn_para["key"];
echo("----ddsat_begin 終わり pno=".$pno);
echo("---- key=".$key);
//----ddsat_triggerを実行する。
$trig_para = array(
'http'=>array(
'method'=>"POST",
'header' => 'Content-type: application/json',
'content'=>
'{"pno":'.$pno.',
"key":"'.$key.'",
"trigger": {
"tr_mode": "create",
"tr_prog":"http://domain.jp/myprg.php",
"tr_id":"my_trg1" } ,
"database":{
"db_type": "mysql",
"db_server": "localhost:3306",
"db_user": "root",
"db_pass": "mypass",
"db_name": "jinji_db",
"db_id": "my_db1" } ,
"table":"T001person",
"field":{ "T001_empno":"k",
"T001_name":"u",
"T001_birthday":"u",
"T001_phone":"u" }
}'
)
);
$url2="http://ddsat_svr:8081/ddsat_trigger";
$context2 = stream_context_create($trig_para);
// 上で設定した HTTP ヘッダを使用してファイルをオープンします
$out4 = file_get_contents($url2, false, $context2);
echo("----ddsat_trigger 終わり out4=".$out4);
$trg_json=json_decode($out4, true);
if($trg_json["message"]=="OK"){
echo(" ddsat_trigger OK");
}else{
echo(" ddsat_triggerでエラー 内容=".$out4);
}
?>
javascriptによる例
async function trigger(){
let pno=0;
let keyno="";
let json0="";
//----ddsat_begin実行
try {
const response = await fetch("https://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) {
console.error(" ddsat_begin :", error);
}
//----ddsat_trigger実行
let json1={
pno : pno ,
key : keyno ,
trigger: {
tr_mode: "create",
tr_prog:"http://domain.jp/myprg.php",
tr_id:"my_trg1" } ,
database:{
db_type: "mysql",
db_server: "localhost:3306",
db_user: "root",
db_pass: "mypass",
db_name: "jinji_db",
db_id: "my_db1" } ,
table:"T001person",
field:{ T001_empno:"k",
T001_name:"u",
T001_birthday:"u",
T001_phone:"u"
}
};
try {
const response = await fetch("https://ddsat_svr:8081/ddsat_trigger", {
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 OK");
}
else{
alert(" ddsat_triggerでエラー 内容="+mess1);
}
} catch (error) {
console.error(" ddsat post error :", error);
}
}
ddsat_triggerコマンドの引数としてjson形式にて、次のパラメータを渡します。その仕様の示します。
Jsonキー | 意味 | 例 | 備考 |
pno | 会話番号 | 5 | ddsat_beginで受け取った値を指定する。 |
key | 16桁暗号キー | abcdefghijklmnop | ddsat_beginで受け取ったkey値を指定する。 |
trigger | |||
tr_mode | 登録のモード | “create” |
新規登録は、”create”,置き換えは、”replace”,削除は、”delete”。 省略の場合は、”create”となる。 |
tr_prog | トリガープログラム名 | http://domain.jp/myprg.php |
phpプログラムなど。 (現在のところcurlに指定可能なhttp(s)に限られる) |
tr_id | トリガープログラム別名 | my_trg1 | 以後、tr_progは省略し、tr_idの指定だけでいい。 |
database | |||
db_type | DBMSの種類を指定 | mysql | その他、mssql/postgres など。任意のDBMS名であってもいい。 |
db_server | DBMSが存在するサーバ |
localhost:3306 192.168.0.252:1433 |
192.168.1.111のipアドレスでもいい。 |
db_user | DBMSの接続user名 | root | DBMSに接続するためのuser名。 |
db_pass | DBMSの接続password | xcshagtrf | DBMSに接続するためのpassword名。 |
db_name | database名 | jinji_db | create databaseで作成したDB名。 |
db_id | 本データベース別名 | my_db1 | 以後、databaseは省略し、db_idの指定だけでいい。 |
table | このDBのtable名 | T001person | jinji_db内に定義したtableを指定する。 |
field | |||
フィールド名 | 更新する際、キーとなるfieldに、”k”を、値を更新するfieldに、”u”を指定します。 | “T001_empno”:”k” “T001_name”:”u” |
これらのfieldは、ddsat_changeコマンドで使用されます。なので、使用するfieldは全てtriggerコマンドにて定義しておく必要があります。 |
k,u | k:key u:update | “T001_empno”:”k” “T001_name”:”u” |
どの項目をkeyにして、どの項目を更新するか。 |
また、データベースを利用せず、program内のあるデータが更新された場合において、それをきっかけに起動させたいprogramを定義する場合の例は、以下のとおりとなります。
async function trigger(){
let pno=0;
let keyno="";
let json0="";
//----ddsat_begin実行
try {
const response = await fetch("https://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) {
console.error(" ddsat_begin :", error);
}
//----ddsat_trigger実行
let json1={
pno : pno ,
key : keyno ,
trigger: {
tr_prog:"http://my_server.jp/prg_area.php",
tr_id:"my_trg2" } ,
server:"my_server2.jp",
area:"area_prog01",
field:{ ,
parts_no:"i",
parts_tanka:"i",
parts_count:"i",
total_price:"o",
}
};
try {
const response = await fetch("https://ddsat_svr:8081/ddsat_trigger", {
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 OK");
}
else{
alert(" ddsat_triggerでエラー 内容="+mess1);
}
} catch (error) {
console.error(" ddsat post error :", error);
}
}
ddsat_triggerコマンドの引数としてjson形式にて、次のパラメータを渡します。その仕様の示します。
Jsonキー | 意味 | 例 | 備考 |
pno | 会話番号 | 7 | ddsat_beginで受け取った値を指定する。 |
key | 16桁暗号キー | abcdefghijklmnop | ddsat_beginで受け取ったkey値を指定する。 |
trigger | tr_modeが省略されたのでcreateモードと解釈される。 | ||
tr_prog | トリガープログラム名 | http://my_server.jp/prg_area.php | phpプログラムなど。 |
tr_id | トリガープログラム別名 | my_trg3 | 以後、tr_progは省略し、tr_idの指定だけでいい。 |
server | 次のarea句で指定したデータエリア(program)が存在するserverを指定する。 | my_server2.jp | 以下のareaを持つprogramが存在するserver名を指定する。 |
area | 更新のきっかけとなるデータが定義されているarea名を指定する。 program名であってもいい。識別のために利用。 |
area_prog01 | もし、構造体内に存在するデータの更新をきっかけとする場合には、areaには、area名(program名)を指定し、新たに「struct:構造体名」を、area句に続けて追加します。なぜなら、field名だけでは、program内で唯一にならないことがあるからです。 |
field | |||
フィールド名 | area内のデータ項目名を指定します。 | parts_no:”i”, parts_tanka:”i”, parts_count:”i”, total_price:”o” |
どのfieldの更新によって本trigger programが起動されるのか、そのfield名を指定します。 |
i,o | 入力データには、i(input)を、結果データには、o(output)を指定します。 | parts_no:”i” parts_tanka:”i”, parts_count:”i”, total_price:”o” |
どの項目を入力にして、trigger programが処理を行うのか、入力とするデータには”i”を指定します。また、処理した結果を他のtrigger programに渡したいとき(ddsat_resultを利用)、”o”を指定します。 |
他のコマンドへのリンク
・ DDSATとは何か(クリックでジャンプ)
・ changeコマンド(クリックでジャンプ)
・ result コマンド(クリックでジャンプ)
・ wait_resultコマンド(クリックでジャンプ)