Cache' の WebLink Developer を使用せず WebLink を利用する方法
これらの情報の多くは、土屋小児病院 土屋先生より寄せられものである。
文責:獨協医科大学病院 木村
WebLink には、開発ツールとして WebLink Developer が付属しているが、
WebLink Developer 側でルーチンの管理をしており、直接、そのルーチンを
編集する事は、大変難しい。M に慣れたユーザは、番号で管理されたルーチン
よりは、自分で意味のあるルーチン名を付加し管理した方がプログラムの見通
しが良い場合が多い。
ここでは、WebLink Developer を用いず、WebLink を用いる方法について
述べる。
使用 WebLink Version は、4.3 である。
IIS の場合
http://127.0.0.1/scripts/mgwms32.dll?MGWLPN=LOCAL&...
Apach の場合
http://127.0.0.1/mgwap.mgw?MGWLPN=LOCAL&...
IIS の例は、多く書かれているので、ここでは Apach を利用した場合の例を示す。
1-1) URL の後ろの記述された変数名の値を得るには?
ネームスペース USER にて値を得るルーチンを作成する。
ルーチン名を ^TTEST とすると、グローバル名 ^MGWAPP に
URL に記載する添字名とルーチン名をセットする。
USER>set ^MGWAPP("TTEST")="^TTEST"
1-2) ネームスペース USER にてのルーチンは、
TTEST ; TTEST Routine
ST set wa=%KEY("A")
set wb=%KEY("MGWLPN")
write "Input data = ",wa," ",wb
quit
1-3) URL の記述内容は、
http://127.0.0.1/mgwap.mgw?MGWLPN=LOCAL&MGWAPP=TTEST&A=3
1-4) 上記 URL を記述し、Enter キーを入力すると MGWAPP にて指定された
^TTEST のルーチンが起動され、ブラウザ上に
Input data = 3 LOCAL
が表示される。
2-1) 同一の変数名が複数ある場合の値を得るには
2-2) URL に次の様に変数名 A が複数回入力された場合
http://127.0.0.1/mgwap.mgw?MGWLPN=LOCAL&MGWAPP=TTEST2&A=3&A=7
2-3) URL に記述された添字名とルーチン名をセットする。
USER>set ^MGWAPP("TTEST2")="ST2^TTEST"
2-4) ルーチンの例
TTEST ; TTEST Routine
ST set wa=%KEY("A")
set wb=%KEY("MGWLPN")
write "Input data = ",wa," ",wb
quit
ST2 set wa=%KEY("A",1),wb=%KEY("A",2)
write "Input data = ",wa," ",wb
quit
2-5) 2-2) で指示した URL をブラウザ上に入力すると MGWAPP
にて指定された ^TTEST のルーチンの ST2 行から実行され、
ブラウザ上に
Input data = 3 7
が表示される。
3-1) グローバル ^MGWを介して URL の後ろの記述された変数名の値を得るには?
URL に &MGWGLO=n (n の値は、1, 2, 3) を記述する。
3-2) MGWGLO フラグの3つの設定
・MGWGLO=1 : 要求データは、^MGW("%KEY",$J, に保存される
・MGWGLO=2 : 要求データは、^%MGW("%KEY",$J, に保存される
・MGWGLO=3 : 要求データは、^MGW("%KEY",$J, および
^%MGW("%KEY",$J, に保存される
この方法では、$Job が指定されており実行しているMプロセスの識別番号を示す。
3-3) 例1: 変数名 B が1つの場合
^MGWAPP の値を set ^MGWAPP("TEST3")="^TEST3" とする。
TEST3 のルーチンを下記の様にする。
TEST3 ; TEST3 Routine
set wa=^MGW("%KEY",$J,"B")
write "Input data = ",wa
quit
その後、URL に
http://127.0.0.1/mgwap.mgw?MGWLPN=LOCAL&MGWAPP=TEST3&MGWGLO=1&B=APPLE
を入力すると、ブラウザ上に
Input data = APPLE
が表示される。
3-4) 例2:変数名 B が2つの場合
^MGWAPP の値を set ^MGWAPP("TEST4")="^TEST4" とする。
TEST4 のルーチンを下記の様にする。
TEST4 ; TEST4 Routine
set wa=^MGW("%KEY",$J,"B",1),wb=^MGW("%KEY",$J,"B",2)
write "Input data = ",wa," ",wb
quit
その後、URL に
URL に MGWGLO=n を指示し、 同一の変数名 B に2つの値を与える。
http://127.0.0.1/mgwap.mgw?MGWLPN=LOCAL&MGWAPP=TEST4&MGWGLO=1&B=Apple&B=Orenge
を入力すると、ブラウザ上に
Input data = Apple Orenge
が表示される。
4-1) グローバル ^MGWAPP を経由してのアプリケーションの起動方法
1), 2), 3) の例では、次に起動すべきルーチンを ^MGWAPP にセットする例を
示した。
例1: set ^MGWAPP("TEST")="^TEST"
URL http://127.0.0.1/mgwap.mgw?MGWLPN=LOCAL&MGWAPP=TEST
ルーチン ^TEST の先頭から起動する。
例2: set ^MGWAPP("TEST2")="ST2^TEST"
URL http://127.0.0.1/mgwap.mgw?MGWLPN=LOCAL&MGWAPP=TEST2
ルーチン ^TEST の行ラベル ST2 から起動する。
例3: set ^MGWAPP("TEST3")="^TEST3"
URL http://127.0.0.1/mgwap.mgw?MGWLPN=LOCAL&MGWAPP=TEST3
ルーチン ^TEST3 の先頭から起動する。
4-2) WebLink では、URL に MGWAPP だけでなく、MGEAPP1, MGWAPP2, MGWAPP3
を用いる事ができる。
例4: set ^MGWAPP("TEST4","Next")="Next^TEST4"
/mgwap.mgw?MGWLPN=LOCAL&MGWAPP=TEST4&MGWAPP1=Next
ルーチン ^TEST4 の行ラベル Next から起動する。
4-3) なお、MGWAPP や MGWAPP1, MGWAPP2, MGWAPP3 に指示したルーチン名や
行ラベルは、^MGWAPP の添字と同じでなければならないが、^MGWAPP のデータ
と同じ必要はない(但し、同じにした方が理解しやすい)。
例5: set ^MGWAPP("Home")="MainMenu^MyApp"
/mgwap.mgw?MGWLPN=LOCAL&MGWAPP=Home
ルーチン ^MyApp の行ラベル MainMenu から起動する。
例6: set ^MGWAPP("Home","Cust")="Register^MyApp"
/mgwap.mgw?MGWLPN=LOCAL&MGWAPP=Home&MGWAPP1=Cust
ルーチン ^MyApp の行ラベル Register から起動する。
例7: set ^MGWAPP("Home","Acct")="Accounts^MyApp"
/mgwap.mgw?MGWLPN=LOCAL&MGWAPP=Home&MGWAPP1=Acct
ルーチン ^MyApp の行ラベル Accounts から起動する。
5-1) 次のルーチンへのデータの渡し。
先の 1), 2), 3) の例では URL に渡すべき変数名とその値を記述し、その値を
次のルーチンで受け取った。しかし、実際の運用では、URL に記述せず、ブ
ラウザ画面上にデータ入力用の窓を用意したり、チェックボックス、ラジオ
ボタン、セレクトボックスにてデータを入力する事が多い。
ここでは、<input type="text"> を例に取って示す。
5-2) まず、HTML の POST メソッドを用いてデータを送り、%KEY にてデータを
受ける例を示す。
^MGWAPP の値を ^MGWAPP("TEST5")="^TEST5" と ^MGWAPP("TEST51")
="ST2^TEST51" とし、TEST5 と TEST51 のルーチンを下記の様にする。
ここで、CRLF は HTML のソースリストに改行 (CR) とラインフィード (LF) を与え、
<br> は実際の CR と LF を与える。
なお、Mの!は、HTML の CR と LF の役目を果たさない事に注意。
TEST5 ; TEST5 Routine
set CRLF=$C(13,10)
write "<HTML>",CRLF
write "<HEAD><Title>Test HTML</Title></HEAD>",CRLF
write "<BODY>",CRLF
write " <FORM method=""POST"" ACTION=""http://127.0.0.1/mgwap.mgw?MGWLPN=LOCAL&MGWAPP=TEST51"">",CRLF
write "This is TEST5 routine.<br>",CRLF
write "Key word01 <INPUT type=""TEXT"" name=""A"" size=""41"">",CRLF
write "<br>",CRLF
write "<INPUT TYPE=SUBMIT VALUE=""OK""></FORM>",CRLF
write "</BODY>",CRLF
write "</HTML>",CRLF
quit
TEST51 ; TEST51 Routine
ST2 set CRLF=$C(13,10)
write "Now, TEST51 routine is running.",CRLF
set wa=%KEY("A")
write "<br>",CRLF
write "Input data = ",wa,CRLF
quit
5-3) URL に http://127.0.0.1/mgwap.mgw?MGWLPN=LOCAL&MGWAPP=TEST5
を入力する。ブラウザ上に
This is TEST5 routine.
Key word01 [ ]
[OK]
が表示されるので、Key Word01 のデータに Dokkyo と入力し、[OK] ボタン
を押すと、ブラウザに
Now, TEST51 routine is running.
Input data = Dokkyo
と表示される。
6-1) Mは、マルチタスクのため1つのパーティションサイズに制限があり、このため
%KEY にて渡されるデータ量に限りがある。そこで、グローバルを用いた方法が
用意されている。3-2) を参照。
ここでは、データ入力に <TEXTAREA> を用いた例を示す。
6-2) 入力されたデータが 256 文字未満の場合、データは ^MGW("%KEY",$J,"変数名")
に保存される。また、入力データが 256 文字以上の場合には、自動的に256文字を
含む各添字を持つ配列に分割され保存される。すなわち、最初の 256 文字データが
^MGW(%KEY,$J,"変数名",0,1) に保存され、次の 256 文字データが ^MGW("%KEY",
$J,"変数名",0,2) に保存され、すべてのデータが読み取られるまで、配列の最後の
添字が1づつ大きくなり保存される。すなわち、
入力データが 256 文字未満の場合:^MGW("%KEY",$J,"変数名")=入力データ
入力データが 600 文字の場合:^MGW("%KEY",$J,"変数名",0,1)=最初の 256 データ
^MGW("%KEY",$J,"変数名",0,2)=次の 256 データ
^MGW("%KEY",$J,"変数名",0,3)=残りの 88 データ
補足:Mでは、半角文字でも全角文字でも、1文字は1文字(1データ)と数える。
6-3) ^MGWAPP の値を ^MGWAPP("TEST6")="^TEST6" と ^MGWAPP("TEST61")
="ST2^TEST61" とし、TEST6 と TEST61 のルーチンを下記の様にする。
TEST6 ; TEST6 Routine
set CRLF=$C(13,10)
write "<HTML>",CRLF
write "<HEAD><Title>Test HTML #6</Title></HEAD>",CRLF
write "<BODY>",CRLF
write " <FORM method=""POST"" ACTION=""http://127.0.0.1/mgwap.mgw?MGWLPN=LOCAL&MGWAPP=TEST61"">",CRLF
write "This is TEST6 routine.<br>",CRLF
write "<TEXTAREA name=""InData"" rows=""4"" cols=""60"">ここにコメントを入力して下さい</TEXTAREA>",CRLF
write "<br>",CRLF
write "<INPUT TYPE=HIDDEN NAME=""MGWGLO"" VALUE=""1"">",CRLF
write "<INPUT TYPE=SUBMIT VALUE=""OK""></FORM>",CRLF
write "</BODY>",CRLF
write "</HTML>",CRLF
quit
TEST61 ; TEST61 Routine
ST2 set CRLF=$C(13,10),TB=1
write "Now, TEST61 routine is running.<br>",CRLF
set TA="^MGW(""%KEY"",$J,""InData"")"
write TA," = ",$L(@TA)," ",@TA,CRLF
for do LP q:TB=0
quit
LP write "<br>",CRLF
set TA=$Q(@TA)
if '(TA["InData") set TB=0 q
write "<br>",TA," = ",$L(@TA)," ",@TA
quit
6-4) URL に http://127.0.0.1/mgwap.mgw?MGWLPN=LOCAL&MGWAPP=TEST6
を入力する。ブラウザ上に
This is TEST6 routine.
ここにコメントを入力して下さい
[OK]
が表示されるので、テキストボックスに
0000abcdefghijklmnopqrstuvwxyz1234567890 を8組 (全体で 320 文字) 入力し、
[OK] ボタンを押すと、ブラウザ上に
Now, TEST61 routine is running.
^MGW("%KEY",$J,"InData") = 0
^MGW("%KEY",1108,"InData",0,1) = 256 0000abcdefghijklmnopqrstuvwxyz12345678900001abcdefghijklmnopqrstuvwxyz12345678900002abcdefghijklmnopqrstuvwxyz12345678900003abcdefghijklmnopqrstuvwxyz12345678900004abcdefghijklmnopqrstuvwxyz12345678900005abcdefghijklmnopqrstuvwxyz12345678900006abcdefghijkl
^MGW("%KEY",1108,"InData",0,2) = 64 mnopqrstuvwxyz12345678900007abcdefghijklmnopqrstuvwxyz1234567890
と表示される。
Web アプリケーションツールとして
CSP や Web-Link、PDQ-Web があります。これらの使い方について紹介して行きます。
皆さんからのご意見や原稿をお待ちしています。