Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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

WEBEVENTフォームからWAMフォームを呼び出すには、以下のようにします。 1.  提供されているHandleWAMEvent

  1. 提供されているHandleWAMEvent()というJavaScript関数を使用します。

...

  1. この関数を呼び出す方法は、HandleEvent()関数を呼び出す方法と同じです。

...


  1. パラメータは、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()関数のセマンティックスと一貫性を持たせるためでもあります。

...


  1. HandleWAMEventのパラメータは、以下のとおりです。

    WAM

    ターゲットWAMの名前

    Webroutine

    ターゲットWEBROUTINEの名前

    TechServ

    使用するテクノロジ・サービス

...

  1. デフォルト値のLANSA XHTMLテクノロジ・サービスの場合はnull

    Form

...

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

...

  1. デフォルト値のLANSAフォームの場合はnull

    Target

...

  1. ナビゲーションの結果が表示されるターゲットのiframe、frame、ウィンドウ

    新しいページを呼び出す場合はnull

    actionRequest

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

...

  1. 操作の要求

    Partition

...

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

    Language

...

  1. WAMを実行する言語

    optSessionKey

    SessionKeyMethodがURLの場合、任意でセッション・キーを渡すことがが可能

...

  1. それ以外はnull

    optDebugMode

...

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

  1. デバッグURLキーワードを渡して、WAMのデバッグが可能

    それ以外はnull



  2. このJavaScript関数は、指定のFormパラメータ

...

  1. (またはFormがnullの場合はデフォルト値の"LANSA"フォーム)

...

  1. からフィールドの値を取得し、一時的なフォームを作成して、URLに送信されるこのフォームにフィールドと値を挿入します。そして、URLに対するHTTP

...

  1. postを実行します。HandleWebEvent()にパラメータとして渡すフィールド名にはすべて、フィールドのタイプを示す1文字の接頭辞を付ける必要があることに注意してください。WAMフィールド参照は接頭辞を必要としませんが、WEBEVENTファンクションは必要とします。したがって、このJavaScriptコードは、WEBEVENTフォームから指定のフィールド値を取得するときには1文字の接頭辞付きで取得しますが、WAMファンクションにフィールド名を送信するときには接頭辞なしで送信します。

...



  1.  JavaScript関数のTargetパラメータは必須です。指定できる値は、中に組み込むiframeの名前、frameの名前、ウィンドウの名前のいずれかです。

  2. その結果、指定のフィールド値が渡されたWebroutineが実行され、Webroutineページがブラウザーに表示されます。Webroutineに値を設定するには、送信するフィールドがWEB_MAP

...

  1. 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(#frametgt) Type(*char) Length(20)
    Define Field(#currlang) Type(*char) Length(4) Default(*language)
    *
    Group_By Name(#webform) Fields((#stdrentry *hidden) (#frametgt *noid) #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(#frametgt) To(<your iframe name>)
    Change Field(#stdrentry) To(N)
    *
    Request Fields(#webform) Exit_Key(*no) Menu_Key(*no) Prompt_Key(*no)
    *
     
  2. <your wam name>、 <your wam name> 、 <your iframe name>をそれぞれ適切な名前に置き換えます。
    この場合、WAMは、デフォルトのLANSA:XHTMLテクノロジ・サービスと同じ区画に存在していなければならず、同じ言語で実行しなければなりません。そうでなければ、#techserv#currlang#partition の各フィールドの値を変更してください。

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

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

  5. 新しいページを作成して、以下のコードを貼り付けます。
         <iframe style="width:600px; height:400px" name='<RDML MERGE="FRAMETGT">'></iframe>

...

  1.  
  2. ページをFRAMETGTとして保存します。

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

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

  5. 新しいページを作成して、以下のコードを貼り付けます。
         <button onclick="return HandleWAMEvent('

...

  1. <RDML MERGE="WAMNAME">', '

...

  1. <RDML MERGE="WEBRNAME">',

...

  1.  '

...

  1. <RDML MERGE="TECHSERV">',

...

  1.  null,

...

  1.  '

...

  1. <RDML MERGE="TARGET">',

...

  1.  null,

...

  1.  '

...

  1. <RDML MERGE="PARTITION">',

...

  1.  '

...

  1. <RDML MERGE="CURRLANG">',

...

  1.  null,

...

  1.  null,

...

  1.  'ASURNAME',

...

  1.  'ASTDRENTRY'

...

  1.  )">Search</button>

...



  1. <script type="text/javascript">

...


  1. //<!

...

  1. [CDATA

...

  1. [
    function CreateTempForm(ownerDoc)

...


  1. {
      var oTempForm = ownerDoc.createElement("form");

...



  1.   if (oTempForm != null)

...


...

  1.   {

...


  1.      if (typeof oTempForm.setAttribute === "function")

...


...

  1.      {

...


  1.        

...

  1. oTempForm.setAttribute("method", "post");

...


  1.     

...

  1. }

...


  1.      else

...


...

  1.      {

...


...

  1.         

...

  1. oTempForm = ownerDoc.createElement("<form method=\"post\"></form>");

...


  1.     

...

  1. }

...


...

  1.   }
      return oTempForm;

...


  1. }

    function HandleWAMEvent(WAM, WebRoutine, techServ, Form, Target, actionRequest, Partition, Language, optSessionKey, optDebugMode /*, field1, field2, etc...*/)

...


  1. {
      if (Form == null)

...


  1.  

...

  1. {

...


  1.      Form = document.LANSA;

...


...

  1.   }
      if (techServ == null)

...


...

  1.   {

...


  1.      techServ = "LANSA:XHTML";

...


...

  1.   }

      var oTempForm = CreateTempForm(Form.ownerDocument);

...



  1.   if (oTempForm != null)

...


  1.  

...

  1. {

...


  1.      Form.ownerDocument.body.appendChild(oTempForm);

...


  1.      var argLen = arguments.length;

...



  1.      if (argLen > 10)

...


  1.     

...

  1. {

...


  1.        

...

  1. for (var index = 10; index < argLen; index++)

...


  1.        

...

  1. {

...


...

  1.            

...

  1. var fieldNameWithPrefix = arguments

...

  1. [index

...

  1. ];

...


...

  1.            

...

  1. var fieldName = fieldNameWithPrefix.substr(1, fieldNameWithPrefix.length - 1);

...


...

  1.            

...

  1. for (var ind = fieldNameWithPrefix.length; ind < 10; ind++)

...


...

  1.            {

...

  1.               fieldNameWithPrefix += " ";

...


  1.           

...

  1. }

...

  1.            

...

  1. var fieldValue = Form.elements

...

  1. [fieldNameWithPrefix

...

  1. ].value;

...


...

  1.            InsertHidden(oTempForm, fieldName, fieldValue);

...


  1.         }

...

  1.          

...

  1. }

         // Add STDANCHOR if available

...


  1.      var anchorField = Form.elements

...

  1. ["ASTDANCHOR"

...

  1. ];

...


  1.      if (anchorField != null)

...


...

  1.      {

...


...

  1.         InsertHidden(oTempForm, "STDANCHOR", anchorField.value);

...


  1.     

...

  1. }

...



  1.      var prevAction = oTempForm.action;

...


  1.      var prevTarget = oTempForm.target;

...



  1.       var action = "";

...


  1.      if (actionRequest == null || actionRequest.length <= 0)

...


...

  1.      {

...


...

  1.         actionRequest = "/cgi-bin/lansaweb";

...


...

  1.      }

...


  1.      action += actionRequest + "?wam=" + WAM + "&webrtn=" + WebRoutine + "&ml=" + techServ + "&part=" + Partition + "&lang=" + Language;

...


  1.      if (optDebugMode != null && optDebugMode.length > 0)

...


...

  1.      {

...


...

  1.         

...

  1. action += "&debug=" + optDebugMode;

...


...

  1.      }

...


  1.      if (optSessionKey != null)

...


  1.     

...

  1. {

...


...

  1.         action += "&sid=" + optSessionKey;

...


  1.     

...

  1. }

...


  1.      oTempForm.action = action;

...


...

  1.     
         if (Target != null)

...


...

  1.      {

...


  1.        

...

  1. oTempForm.target = Target;

...


...

  1.      }

...


  1.      oTempForm.submit();

...


  1.      setTimeout(function()

...

  1. {

...


...

  1.            

...

  1. oTempForm.action = prevAction;

...


  1.           

...

  1. oTempForm.target = prevTarget;

...


  1.           

...

  1. oTempForm.parentNode.removeChild(oTempForm);

...


...

  1.         

...

  1. }, 100);

...


...

  1.   }
      return false;

...


  1. }

    function InsertHidden(Form, FieldName, FieldValue)

...


  1. {
      if (Form == null)

...


  1.  

...

  1. {

...


  1.      return;

...


  1.  

...

  1. }

      var field = Form.elements

...

  1. [FieldName

...

  1. ];

...



  1.   if (field == null)

...


  1.  

...

  1. {

...


  1.      var elem = Form.document.createElement("input");

...



  1.      if (elem != null)

...


  1.     

...

  1. {

...


  1.        

...

  1. elem.setAttribute("type", "hidden");

...


  1.        

...

  1. elem.setAttribute("name", FieldName);

...


  1.        

...

  1. elem.setAttribute("value", FieldValue);

...


  1.        

...

  1. Form.appendChild(elem);

...


  1.     

...

  1. }

...


...

  1.   }
      else

...


...

  1.   {

...


  1.      field.value = FieldValue;

...


  1.  

...

  1. }
    }
    //]]>
    </script>

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

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

  4. 上のWEBEVENTサンプルをブラウザーで実行します。検索ボタンをクリックすると、WAMNAMEとWEBRNAMEの各フィールドで指定したWAMとWEBROUTINEが呼び出されます。WEBROUTINEの実行によって生成されるHTML応答が、WEBEVENTの検索ボタンと同じページにあるFRAMETGTコンポーネントに表示されます。