日本Mテクノロジー学会事務局
〒260-8677
千葉市中央区亥鼻1-8-1
千葉大学医学部附属病院
企画情報部 鈴木隆弘
事務担当:土井俊祐
Tel: 043-226-2346
Fax: 043-226-2373
HOME > 新たなMの利用法 > Web アプリケーションツールとして

新たなMの利用法

M Usages & New Usages

4.Web アプリケーションツールとして

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 があります。これらの使い方について紹介して行きます。
皆さんからのご意見や原稿をお待ちしています。

目次に戻る

ページトップへ