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による例
  <?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 会話番号 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”を指定します。