ddsat_result

  • DDSATコマンドであるddsat_changeを実行した場合、その変更通知によって起動条件に合致したトリガープログラムが起動され実行されますが、そのトリガープログラム内でもデータを変更し、そのデータ変更が他のトリガープログラムへの起動条件となっている場合、このddsat_resultによって、起動トリガープログラム内からのデータ変更の通知ができます。
  • そのddsatコマンドが、このddsat_resultです。
  • ただ、起動されたトリガープログラムからの呼び方は、本トリガープログラムが、「wait」モードか、あるいは、「nowait」モードで呼ばれるかによってことなってきます。
  • 従って、このddsat_resultコマンドは、トリガープログラム内でのデータ更新処理やデータ演算が終わった時点で、そのトリガープログラム中から呼び出すか(nowaitモードの場合)、あるいは、sysyoutの中に「ddsat_result={‥json記述‥)」に埋め込むか(waitモードの場合)によって、本コマンドが有効となります。
 まず、「wait」モードによって起動されたphpで記述された中からデータの更新を行った通知する場合の例を以下に示します。データの修正は、まずjavascriptプログラムからT100personデータが修正されddsat_changeで通知され、それによってトリガープログラムで修正履歴がinsertされるとします。
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 会話番号 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 会話番号 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など値。 数値のみならず処理値を指定する。