IBM ノーツで Web エージェントを作り、Web API のように外部から実行してみます。

まず HTTP タスクが有効になった IBM Domino サーバーを用意し、そこにデータベースを1つ作成します。そして Domino Designer を使って Java のエージェントを作成します。作成後、基本プロパティから「トリガー」を「スケジュール」とし、その実行タイミングを「なし」に設定しておきます:
2016120101


JavaAgent.java を開き、以下の内容を記載します:
  :
  :

public class JavaAgent extends AgentBase { public void NotesMain() { try{ Session session = getSession(); AgentContext agentContext = session.getAgentContext(); // (Your code goes here) //. クエリー文字列を取得 Document dc = agentContext.getDocumentContext(); String querystring = dc.getItemValueString( "Query_String" ); //. name パラメータが指定されていたら、その値を取得 String name = "World"; //. 指定されていない場合の既定値 String[] argv = querystring.split( "&" ); for( int i = 0; i < argv.length; i ++ ){ String[] param = argv[i].split( "=" ); String fieldname = param[0].toLowerCase(); if( fieldname.equals( "name" ) ){ name = URLDecoder.decode( param[1] ); } } //. 画面に出力 PrintWriter pw = getAgentOutput(); pw.println( "Content-Type: text/plain" ); pw.println( "" ); pw.println( "Hello " + name + "!" ); pw.close(); }catch( Exception e ){ e.printStackTrace(); } } }

URL のパラメータを解析して、name=XXXX と書かれた部分があったら XXXX 部分を取り出し、"Hello XXXX!" と text/plain で表示する、という内容です(パラメータがなければ "Hello World!" と表示します)。

※余談ですが、同様の Web エージェントを Java ではなく LotusScript で記述する場合、最後の出力部分は Print 文を使ってください。


そしてこのエージェントを URL で指定して実行します。仮に DB 名が forms.nsf 、エージェント名が Hello だったとすると、
  http://(domino サーバー名)/forms.nsf/Hello?OpenAgent
と指定します:
2016120102


パラメータを指定する場合は、"&name=XXXX" を付けて実行します:
2016120103


GET でしか使えませんが、Web API っぽいのが作れました。