intra-martスクリプト開発でバックエンドにパラメータを渡す

2021年08月15日 00時08分

まとめ

  • init()の引数に詰める
    1. post
    2. クエリストリング
    3. urlパラメータ
  • Sessionに詰める

intra-martのファンクションコンテナ側にパラメータを設定する

intra-martはフロント(プレゼンテーションページ)もバックエンド(ファンクションコンテナ)もJavaScriptで開発できるスクリプト開発に対応しています。

※ライセンスにRhino3.xが含まれており、ES5相当の関数までなら使用できます。

それぞれの関数の呼び出しタイミングは下記の通り。

  1. ブラウザからのリクエスト受付
  2. session.js 内 init() 関数実行
  3. action 属性関数の実行
  4. page 属性 js内 init() 関数の実行
  5. page 属性 html の実行
  6. session.js 内 close() 関数実行
  7. ページ返却

ブラウザからリクエストがあった場合の処理が流れ

バックエンドにパラメータを渡す場合、4の開始までにパラメータを用意して渡す必要があります。

2のsession.js 内 init() 関数実行は、session.jsが普遍的な関数のため特定のページにのみパラメータを設定したい場合は対象外になるので、実質3と4の引数が対象になります。

ここでは、3つのパターン。変則的なやり方の系4つのやり方でパラメータ渡す方法をまとめます。

init()の引数に詰める

ファンクションコンテナのinit()処理時、引数を持つことができて、

通常、init(request)という形式で定義しています。

名前の通りフォームでのPOST、GET(クエリストリング)を設定することで、requestのオブジェクトにパラメータを追加することができます。

POST時の例

基本的に登録、編集処理はPOSTで実装することになると思っています。

参照等で個別のURLを定義して渡すやり方もあるのですが、定義が煩雑になるので…

sendmessage.jsのinit()時、request内にmessageのパラメータが追加される。

<form action="/sendmessage" method="post">
  <div>
    <label for="message"></label>
    <input name="message" id="message" value="Hello">
  </div>
  <div>
    <button>Send</button>
  </div>
</form>

クエリストリング

GETメソッドもしくはクエリストリングで定義して閲覧することでパラメータを参照できます。

クエリストリングの例 http://someservice/sendmessage?message=goodMooning

ルーティング定義での指定

クエリストリングに近いですが、ルーティング定義(URLマップ)内に変数を指定して、requestのパラメータに追加する方法もあります。

主に一意なIDを使用して参照画面用のデータを取ってくる運用で使用するイメージです。

<?xml version="1.0" encoding="UTF-8"?>
<routing-jssp-config
    xmlns="http://www.intra-mart.jp/router/routing-jssp-config" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.intra-mart.jp/router/routing-jssp-config routing-jssp-config.xsd">

    <authz-default mapper="welcome-all" />
    <file-mapping path="/sendmessage/{id}" page="sendmessage" />

</routing-jssp-config>

ルーティングより

上記で/sendmessage/1に遷移すると、init(request)内のrequest.id に '1'が設定される。

Sessionで詰める

直接的ではないですがファンクションコンテナ側ではセッション情報を取得する関数Clientがあり、予めセットしておいたパラメータをinit()の引数requestではない形で取得することができます。

function init(request){
  Client.get('message');//ページで設定されているmessageを取得
}