Page History
WEBEVENTフォームを呼び出す主な手段は、HandleEvent()というJavaScript関数です。WEBEVENTフォームからWAMフォームを呼び出すためのJavaScriptベースの手段として、それとよく似たHandleWAMEvent()という関数も用意されています。
WEBEVENTフォームからWAMフォームを呼び出すには、以下のようにします。 1. 提供されているHandleWAMEvent
- 提供されているHandleWAMEvent()というJavaScript関数を使用します。
...
- この関数を呼び出す方法は、HandleEvent()関数を呼び出す方法と同じです。
...
- パラメータは、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。
デバッグURLキーワードを渡して、WAMのデバッグが可能
それ以外はnull
このJavaScript関数は、指定のFormパラメータ
...
(またはFormがnullの場合はデフォルト値の"LANSA"フォーム)
...
からフィールドの値を取得し、一時的なフォームを作成して、URLに送信されるこのフォームにフィールドと値を挿入します。そして、URLに対するHTTP
...
postを実行します。HandleWebEvent()にパラメータとして渡すフィールド名にはすべて、フィールドのタイプを示す1文字の接頭辞を付ける必要があることに注意してください。WAMフィールド参照は接頭辞を必要としませんが、WEBEVENTファンクションは必要とします。したがって、このJavaScriptコードは、WEBEVENTフォームから指定のフィールド値を取得するときには1文字の接頭辞付きで取得しますが、WAMファンクションにフィールド名を送信するときには接頭辞なしで送信します。
...
JavaScript関数のTargetパラメータは必須です。指定できる値は、中に組み込むiframeの名前、frameの名前、ウィンドウの名前のいずれかです。
その結果、指定のフィールド値が渡されたWebroutineが実行され、Webroutineページがブラウザーに表示されます。Webroutineに値を設定するには、送信するフィールドがWEB_MAP
...
FOR(*INPUTまたは*BOTH)で指定されていなければいけません。
...
例
WEBEVENTフォームからWAMフォームを開始し、情報を渡す方法
- ファンクションを作成して、以下のコードを貼り付けます。
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)
* - <your wam name>、 <your wam name> 、 <your iframe name>をそれぞれ適切な名前に置き換えます。
この場合、WAMは、デフォルトのLANSA:XHTMLテクノロジ・サービスと同じ区画に存在していなければならず、同じ言語で実行しなければなりません。そうでなければ、#techserv、#currlang、#partition の各フィールドの値を変更してください。 - LANSA Webエディターを使用して、InputタイプのVisualコンポーネントを作成し、FRAMETGTという名前を付けます。
- コンポーネントのページにもFRAMETGTという名前を付けます。
- 新しいページを作成して、以下のコードを貼り付けます。
<iframe style="width:600px; height:400px" name='<RDML MERGE="FRAMETGT">'></iframe>
...
- ページをFRAMETGTとして保存します。
- LANSA Webファンクション・エディターを使用して、InputタイプのVisualコンポーネントを作成し、SEARCHWAMという名前を付けます。
- コンポーネントのページにもSEARCHWAMという名前を付けます。
- 新しいページを作成して、以下のコードを貼り付けます。
<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>- ページをSEARCHWAMとして保存します。
- WEBEVENTファンクションをコンパイルして、HTMLを生成します。
- 上のWEBEVENTサンプルをブラウザーで実行します。検索ボタンをクリックすると、WAMNAMEとWEBRNAMEの各フィールドで指定したWAMとWEBROUTINEが呼び出されます。WEBROUTINEの実行によって生成されるHTML応答が、WEBEVENTの検索ボタンと同じページにあるFRAMETGTコンポーネントに表示されます。