Node.jsとIRISを連携する(その3)

これまでIISを使ったRest通信を主体にアプリ作成を行ってきました。

たまたまNode.jsを使ってIRISと連携する機会があったので、ドキュメントや動画をみつつ構築を進めていきましたが、記載内容や動画の内容が古く、進捗に伸び悩みました。

紆余曲折ありましたが、連携までは完了したので、全4ステップに渡って手順を備忘として記載します。

今回は第3回になります。

はじめに

「前回(その2)」、Node.jsを起動させっぱなしだったので、いったん終了します。
「Ctrl + C」で止まるので、サクッと止めちゃいましょう。

今回は、IRISとの連携をいろいろ行いたいので、server.jsに追記を行います。
メモ帳かvscode等を使い、server.jsを開いてください。

クラスメソッドの実行

iris.classMethodVoid([クラス名], [関数名], [引数1], [引数2], …);

関数の末尾に「Void」と付いているので、戻り値をとらない呼び出し方法になります。
そのため、戻り値を「const value = 」と記載してしまうと、エラーになるのでご注意ください。

const[let] [result] = iris.classMethodValue([クラス名], [関数名], [引数1], [引数2], …);

関数の末尾に「Value」と付いているので、戻り値を「取る」呼び出し方法になります。
こっちはこっちで、引数と取らない呼び出しを行うとエラーとなるのでご注意ください。

両関数ともに、引数の数は自由に設定出来ます。
その際は、カンマ区切りで追加していってください。
 →##class([クラス名]).[関数名]([引数1], [引数2], …)をイメージして下さい。

関数の呼び出し

iris.procedure([ルーチン名], [関数名], [引数1], [引数2], …);

クラスメソッドを呼び出す雰囲気と似ていますが、こちらはルーチンの関数を呼び出す方法になります。
戻り値は破棄されるので「Do」実行と同じイメージで使用します。

const[let] [result] = iris.function([ルーチン名], [関数名], [引数1], [引数2], …);

こちらは、戻り値を取得できる方になります。

動作の確認をしたいので、「server.js」に追記してみましょう!
 →クラスメソッドの後に、function()とprocedure()を追記します。

const express = require("express");
const app = express();

// IRIS連携処理
const irisnative = require('intersystems-iris-native');
const conn = irisnative.createConnection({
    host: 'localhost',
    port: '1972',
    ns  : 'sample',
    user: '_system',
    pwd : 'SYS'
});
const iris = conn.createIris();

app.get("/dataSet", function(req, res){
    iris.classMethodVoid("developer.Sample",'setToDo', 'データセット');
    res.json({'sample':'実行OK'});
});

app.get("/dataGet", function(req, res){
    const text = iris.classMethodValue("developer.Sample",'getToDo');
    res.json({'sample':text});
});

// ルーチン呼び出し
app.get("/setTest", function(req, res){
    iris.procedure("developer.Test",'setTest', 'ルーチンセット');
    res.json({'sample':'実行OK'});
});

app.get("/getTest", function(req, res){
    const text = iris.function("developer.Test",'getTest');
    res.json({'sample':text});
});

app.listen(3000);
console.log('ポート3000番で待機中!');

追記が終わりましたら、Node.jsを再起動してPOSTMANで疎通確認をしてみます。

サンプルでは、「localhost:3000/setTest」の後「localhost:3000/getTest」を行っています。
setTest時に格納したグローバルを、getTestで取得出来てるのが分かります。

疎通確認できましたね!

ObjectScript

set文

iris.set([データ値], [グローバル名], [第1ノード], [第2ノード], …);

パッと見、凄くわかりにくいですが、最初の引数が「格納したいデータ値」になります。
その後は、グローバル名(^省略)、第1ノードキー、第2ノードキーになります。

app.get("/osSet", function(req, res){
    iris.set('Set文', 'OSGBL', 'key1')
    res.json({'sample':'実行OK'});
});

上記サンプルの場合、グローバルは下記になります。
 →ターミナルにて確認

zw ^OSGBL
SAMPLE>zw ^OSGBL
^OSGBL("key1")="Set文"

get文

const[let] [result] = iris.get([グローバル名], [第1ノード], [第2ノード], …);

set文で慣れると、get文は凄く見やすいと思います。
最初がグローバル名(^省略)、第1ノード、第2ノードと続いていきます。

app.get("/osGet", function(req, res){
    const text = iris.get('OSGBL', 'key1')
    res.json({'sample':text});
});

上記サンプルの追記が終わったら、再度Node.jsを再起動してPOSTMANで確認してみます。

set文で格納したデータ値を取得出来ている事が分かります。

まだまだグローバル操作のコマンドはあるのですが、直接グローバルを操作する機会は少ないと思います。
大体は、クラスやルーチンの関数を通して、グローバル操作を行うのではないでしょうか。

そのため、他のコマンドに関しては割愛致します。
詳細は、オンラインドキュメントにあるので、そちらでご確認いただけると助かります。

さて「次回(その4)」は、少しマニアックにIISからNode.jsを動かす(ホストする)方法をご紹介致します。