You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

WEBEVENTフォームを呼び出す主な手段は、HandleEvent()というJavaScript関数です。WEBEVENTフォームからWAMフォームを呼び出すためのJavaScriptベースの手段として、それとよく似たHandleWAMEvent()という関数も用意されています。
WEBEVENTフォームからWAMフォームを呼び出すには、以下のようにします。

  1. 提供されているHandleWAMEvent()というJavaScript関数を使用します。
    この関数を呼び出す方法は、HandleEvent()関数を呼び出す方法と同じです。

  2. パラメータは、HandleWAMEvent(WAM, Webroutine, TechServ, Form, Target, actionRequest, Partition, Language, optSessionKey, optDebugMode, "ASURNAME", "ASTDRENTRY", ...)のようになっていて、各フィールドに対応する可変数のパラメータの値をWebroutineに渡すことができます。ここでフィールド名の前に接頭辞を1文字付けることが重要です。この接頭辞は、Alphanumericフィールドの場合はA、Packedフィールドの場合はP、Signedフィールドの場合はS、RDMLXフィールドの場合はQです。この接頭辞は、WAMのWEBROUTINEにフィールド値を渡すときには必要ありませんが、フォームのフィールド値にアクセスする時は必須です。これはJavaScriptのHandleWebEvent()関数のセマンティックスと一貫性を持たせるためでもあります。
    HandleWAMEventのパラメータは、以下のとおりです。

    WAM

    ターゲットWAMの名前

    Webroutine

    ターゲットWEBROUTINEの名前

    TechServ

    使用するテクノロジ・サービス デフォルト値のLANSA XHTMLテクノロジ・サービスの場合はnull

    Form

    送信フォームのためのフィールド値を取得するフォームHTMLオブジェクト (例:「MYFORM」という名前のフォームであればdocument.MYFORM) デフォルト値のLANSAフォームの場合はnull

    Target

    ナビゲーションの結果が表示されるターゲットのiframe、frame、ウィンドウ。新しいページを呼び出す場合はnull

    actionRequest

    nullの場合は、デフォルトの"cgi-bin/lansaweb"操作の要求

    Partition

    WAMフォームを実行する区画

    Language

    WAMを実行する言語

    optSessionKey

    SessionKeyMethodがURLの場合、任意でセッション・キーを渡すことがが可能。それ以外はnull

    optDebugMode

    デバッグURLキーワードを渡して、WAMのデバッグが可能。それ以外はnull



  3. このJavaScript関数は、指定のFormパラメータ (またはFormがnullの場合はデフォルト値の"LANSA"フォーム) からフィールドの値を取得し、一時的なフォームを作成して、URLに送信されるこのフォームにフィールドと値を挿入します。そして、URLに対するHTTP postを実行します。HandleWebEvent()にパラメータとして渡すフィールド名にはすべて、フィールドのタイプを示す1文字の接頭辞を付ける必要があることに注意してください。WAMフィールド参照は接頭辞を必要としませんが、WEBEVENTファンクションは必要とします。したがって、このJavaScriptコードは、WEBEVENTフォームから指定のフィールド値を取得するときには1文字の接頭辞付きで取得しますが、WAMファンクションにフィールド名を送信するときには接頭辞なしで送信します。

  4. その結果、指定のフィールド値が渡されたWebroutineが実行され、Webroutineページがブラウザーに表示されます。Webroutineに値を設定するには、送信するフィールドがWEB_MAP FOR(*INPUTまたは*BOTH)で指定されていなければいけません。

WEBEVENTフォームからWAMフォームを開始し、情報を渡す方法

  1.  ファンクションを作成して、以下のコードを貼り付けます。
         Function Options(*DIRECT *webevent)
    *
    Define Field(#searchwam) Type(*char) Length(1)
    Define Field(#wamname) Type(*char) Length(9)
    Define Field(#webrname) Type(*char) Length(20)
    Define Field(#techserv) Type(*char) Length(21)
    Define Field(#currlang) Type(*char) Length(4) Default(*language)
    *
    Group_By Name(#webform) Fields((#stdrentry *hidden) #surname #searchwam (#currlang *hidden) (#partition *hidden) (#wamname *hidden) (#webrname *hidden) (#techserv *hidden))
    *
    Change Field(#wamname) To(<your wam name>)
    Change Field(#webrname) To(<your wam webroutine name>)
    Change Field(#stdrentry) To(N)
    *
    Request Fields(#webform) Exit_Key(*no) Menu_Key(*no) Prompt_Key(*no)
    *
     
  2. <your wam name>と<your wam webroutine name>を適切な名前に置き換えます。
    この場合、WAMは、デフォルトのLANSA:XHTMLテクノロジ・サービスと同じ区画に存在していなければならず、同じ言語で実行しなければなりません。そうでなければ、#techserv#currlang#partition の各フィールドの値を変更してください。

  3. LANSA Webファンクション・エディターを使用して、InputタイプのVisualコンポーネントを作成し、SEARCHWAMという名前を付けます。 

  4. コンポーネントのページにもSEARCHWAMという名前を付けます。

  5. 新しいページを作成して、以下のコードを貼り付けます。
         <button onclick="return HandleWAMEvent('<RDML MERGE="WAMNAME">', '<RDML MERGE="WEBRNAME">', '<RDML MERGE="TECHSERV">', null, '<RDML MERGE="TARGET">', null, '<RDML MERGE="PARTITION">', '<RDML MERGE="CURRLANG">', null, null, 'ASURNAME', 'ASTDRENTRY' )">Search</button>

    <script type="text/javascript">
    //<![CDATA[
    function CreateTempForm(ownerDoc)
    {
      var oTempForm = ownerDoc.createElement("form");

      if (oTempForm != null)
      {
         if (typeof oTempForm.setAttribute === "function")
         {
            oTempForm.setAttribute("method", "post");
         }
         else
         {
            oTempForm = ownerDoc.createElement("<form method=\"post\"></form>");
         }
      }
      return oTempForm;
    }

    function HandleWAMEvent(WAM, WebRoutine, techServ, Form, Target, actionRequest, Partition, Language, optSessionKey, optDebugMode /*, field1, field2, etc...*/)
    {
      if (Form == null)
      {
         Form = document.LANSA;
      }
      if (techServ == null)
      {
         techServ = "LANSA:XHTML";
      }

      var oTempForm = CreateTempForm(Form.ownerDocument);

      if (oTempForm != null)
      {
         Form.ownerDocument.body.appendChild(oTempForm);
         var argLen = arguments.length;

         if (argLen > 10)
         {
            for (var index = 10; index < argLen; index++)
            {
               var fieldNameWithPrefix = arguments[index];
               var fieldName = fieldNameWithPrefix.substr(1, fieldNameWithPrefix.length - 1);
               for (var ind = fieldNameWithPrefix.length; ind < 10; ind++)
               {
                  fieldNameWithPrefix += " ";
               }
               var fieldValue = Form.elements[fieldNameWithPrefix].value;
               InsertHidden(oTempForm, fieldName, fieldValue);
            }
         }

         // Add STDANCHOR if available
         var anchorField = Form.elements["ASTDANCHOR"];
         if (anchorField != null)
         {
            InsertHidden(oTempForm, "STDANCHOR", anchorField.value);
         }

         var prevAction = oTempForm.action;
         var prevTarget = oTempForm.target;

         var action = "";
         if (actionRequest == null || actionRequest.length <= 0)
         {
            actionRequest = "/cgi-bin/lansaweb";
         }
         action += actionRequest + "?wam=" + WAM + "&webrtn=" + WebRoutine + "&ml=" + techServ + "&part=" + Partition + "&lang=" + Language;
         if (optDebugMode != null && optDebugMode.length > 0)
         {
            action += "&debug=" + optDebugMode;
         }
         if (optSessionKey != null)
         {
            action += "&sid=" + optSessionKey;
         }
         oTempForm.action = action;

          if (Target != null)
         {
            oTempForm.target = Target;
         }
         oTempForm.submit();
         setTimeout(function() {
               oTempForm.action = prevAction;
               oTempForm.target = prevTarget;
               oTempForm.parentNode.removeChild(oTempForm);
            }, 100);
      }
      return false;
    }

    function InsertHidden(Form, FieldName, FieldValue)
    {
      if (Form == null)
      {
         return;
      }

      var field = Form.elements[FieldName];

      if (field == null)
      {
         var elem = Form.document.createElement("input");

         if (elem != null)
         {
            elem.setAttribute("type", "hidden");
            elem.setAttribute("name", FieldName);
            elem.setAttribute("value", FieldValue);
            Form.appendChild(elem);
         }
      }
      else
      {
         field.value = FieldValue;
      }
    }
    //]]>
    </script>


  6.  ページをSEARCHWAMとして保存します。

  7. WEBEVENTファンクションをコンパイルして、HTMLを生成します。

  8. このWEBEVENTサンプルをブラウザーで実行します。検索ボタンをクリックすると、WAMNAMEとWEBRNAMEの各フィールドで指定したWAMとWEBROUTINEが呼び出されます。 
  • No labels