演習4:AJAXEX4 インスタンス・リストの使用
ステップ
· 「メモ帳」を使用して「AJAXページAJAXEX4.HTM」のDHTML-JavaScriptコードをコピーして貼り付け、フレームワークのプライベート作業フォルダーにAJAXEX4.HTMという名前のAJAXページ・ファイルとして保存します。
· 「AJAXファンクションAJAXEX4」のAJAXファンクション・コードをコピーして、VL-IDEでAJAXEX4という名前のRDMLファンクションに貼り付けます。Webサーバーで実行できるようにRDMLファンクションAJAXEX4をコンパイルします。
· 組み込みのデモ・ビジネス・オブジェクト"Resources"で、新しいインスタンス・レベルのコマンドとしてコマンドAJAXEX4を追加します(詳細、異動などのように)。
· AJAXEX4.HTMとAJAXEX4を、次のようにコマンドAJAXEX4に関連付けるハンドラーとしてスナップインします。
· フレームワークを保存、再起動し、Webブラウザーで実行します。“Resources”ビジネス・オブジェクトを選択し、従業員のリストを作成します。1人の従業員を選択します。これにより、デフォルトの"詳細"コマンドが表示されます。AJAXEX4タブに切り替えると、次のように従業員の詳細が表示されます(VLF.WEBの場合)。
または、次のように表示されます(VLF.NETの場合)。
このAJAX例の目的は、ビジネス・オブジェクトのインスタンス・リストの詳細をAJAXページに渡す方法を示すことです。
インスタンス・リストの詳細は、以下のプロパティと配列を含んだJavaScriptインスタンス・リスト・オブジェクトとしてVF_AJAX_Executeファンクションに渡されます。
名前 |
タイプ |
strVisualID1 |
文字列。Visual ID1 |
strVisualID2 |
文字列。Visual ID2 |
strBusinessObjectType |
文字列。ビジネス・オブジェクト・タイプ |
arraystrAKeyN |
Array[5] 文字列。AKeyの値 |
arraynumNKeyN |
Array[5] 数値。NKeyの値 |
intAColumnCount |
追加の英字列の数 |
arraystrAColumn |
追加の英字列の配列 |
intNColumnCount |
追加の数値列の数 |
arraynumNColumn |
追加の数値列の配列 |
<その他すべて> |
このオブジェクトには他の値とプロパティが存在する可能性があります。将来のバージョンと互換性がなくなったり、将来のバージョンでエラーが発生するのを防ぐため、その値とプロパティをコードで参照しないでください。 |
注1:一部の値にはブランクが埋め込まれる可能性があるので、除去して表示する必要があります。
注2:フレームワーク-AJAX機能は、前の演習1から3で示しているように、大部分が単独で動作する全画面コマンド・ハンドラーで主に使用するためのものです。
<HTML>
<HEAD id='HEAD_Tag'>
<link rel='stylesheet' type='text/css' href='vf_vs001.css' >
<script>
/* ======================================================================== */
/* ======================== Handle Page Initialization ==================== */
/* ======================================================================== */
function VF_AJAX_Initialize()
{
/* Insert the variable style sheet (ie: XP, WIN, WEB style) into this page */
{
var objLink = document.createElement("LINK");
objLink.rel = "stylesheet"; objLink.type = "text/css";
objLink.href = STYLESHEET();
document.getElementById("HEAD_Tag").insertAdjacentElement("afterBegin",objLink);
}
/* Finished */
return;
}
/* ======================================================================== */
/* ======================== Handle Page Execution ========================= */
/* ======================================================================== */
function VF_AJAX_Execute(objInstance)
{
/* Put the current instance list entry EMPNO onto the clipboard */
/* The employee number is in AKey number 3, which is Javascritp array entry 2 */
Put(objInstance.arraystrAKeyN[2],"EX4","EMPNO");
/* Request that the server do a FETCH operation using the employee number */
SENDREQUEST(window,"","FETCH","",FETCH_response);
/* Finished */
return;
}
/* ======================================================================== */
/* ======================= Handle Page Termination ======================== */
/* ======================================================================== */
function VF_AJAX_Terminate()
{
return;
}
/* -------------------------------------------------------- */
/* Rationalized virtual clipboard access to name space AJAX */
/* -------------------------------------------------------- */
function Put(val,np2,np3,inst) {AVSAVEVALUE(val,"AJAX",np2,np3,inst);}
function GetA(np2,np3,inst) {return(AVRESTOREAVALUE("","AJAX",np2,np3,inst));}
function GetN(np2,np3,inst) {return(AVRESTORENVALUE(0,"AJAX",np2,np3,inst));}
/* ---------------------------------- */
/* Handle server responding to LOAD10 */
/* ---------------------------------- */
function FETCH_response(strFunction,strRequest,strPayload,objObject,flagFatalError,strFatalMessage)
{
/* Handle a fatal error */
if (flagFatalError) { alert(strFatalMessage); SETBUSY(false); return; }
/* Put the employee number out onto the screen */
Vis_EMPNO.innerText = GetA("EX4","EMPNO");
/* Get the IO Status and handle found and not found */
if (GetA("EX4","IO_STS") == "OK") /* Employee was found */
{
Vis_SURNAME.innerText = GetA("EX4","SURNAME");
Vis_GIVENAME.innerText = GetA("EX4","GIVENAME");
Vis_SALARY.innerText = GetN("EX4","SALARY").toString();
Vis_POSTCODE.innerText = GetN("EX4","POSTCODE").toString();
DIV_Table.style.visibility = "visible"; DIV_Table.style.display = "inline";
DIV_Message.style.visibility = "hidden"; DIV_Message.style.display = "none";
}
else /* Employee was not found */
{
DIV_Message.children(0).innerText = "Employee number " + Vis_EMPNO.innerText + " could not be found";
DIV_Message.style.visibility = "visible"; DIV_Message.style.display = "inline";
DIV_Table.style.visibility = "hidden"; DIV_Table.style.display = "none";
}
/* Drop busy status */
SETBUSY(false);
/* Finished */
return;
}
</script>
</HEAD>
<BODY id='BODY_Tag'>
<br/><br/><br/>
<P align='center'>Instance List Example</p>
<div id='DIV_Message'>
<P align='center'>Loading ... please wait</p>
</div>
<div id='DIV_Table' style='visibility:hidden;display:none;'>
<table>
<tr><td>Employee Number</td><td id='Vis_EMPNO'></td></tr>
<tr><td>Last Name</td><td id='Vis_SURNAME'></td></tr>
<tr><td>First Name</td><td id='Vis_GIVENAME'></td></tr>
<tr><td>Current Salary</td><td id='Vis_SALARY'></td></tr>
<tr><td>Zip Code</td><td id='Vis_POSTCODE'></td></tr>
</table>
</div>
</BODY>
</HTML>
* This is just a simple RDML function.
* It is NOT a WAM.
* It is driven by the virtual clipboard
Function Options(*DIRECT *HEAVYUSAGE)
* Define local fields
Define Field(#REQUEST) Reffld(#STD_OBJ)
Define Field(#MSGDTA) Type(*CHAR) Length(132)
* Get the action the Javascript requested .......
Execute Subroutine(GETA) With_Parms(SYSTEM REQUEST 1 #REQUEST)
* Now switch on the requested action
Case Of_Field(#REQUEST)
* Get details of an employee
When Value_Is('= FETCH')
Execute Subroutine(FETCH)
Otherwise
Use Builtin(BCONCAT) With_Args('Unknown request' #REQUEST 'received by' *FUNCTION) To_Get(#MSGDTA)
Abort Msgid(DCM9899) Msgf(DC@M01) Msgdta(#MSGDTA)
Endcase
* Finished
Return
* Get details of an employee
Subroutine Name(FETCH)
* Get the requested employee number
Execute Subroutine(GETA) With_Parms(EX4 EMPNO 1 #EMPNO)
* Fetch the details
Fetch Fields(#Surname #GiveName #PostCode #Salary) From_File(Pslmst) With_Key(#Empno)
* Send back the IO status + the details
Execute Subroutine(PUTA) With_Parms(EX4 IO_STS 1 #IO$STS)
Execute Subroutine(PUTA) With_Parms(EX4 SURNAME 1 #SURName)
Execute Subroutine(PUTA) With_Parms(EX4 GIVENAME 1 #GIVENAME)
Execute Subroutine(PUTN) With_Parms(EX4 POSTCODE 1 #POSTCODE)
Execute Subroutine(PUTN) With_Parms(EX4 SALARY 1 #SALARY)
Endroutine
* =====================================================
* Rationalized subroutines for virtual clipboard access
* =====================================================
Subroutine Name(PUTA) Parms((#NP2 *RECEIVED) (#NP3 *RECEIVED) (#INST *RECEIVED) (#AVAL *RECEIVED))
Define Field(#NP2) Type(*CHAR) Length(28)
Define Field(#NP3) Type(*CHAR) Length(24)
Define Field(#INST) Type(*DEC) Length(7) Decimals(0)
Define Field(#AVAL) Type(*CHAR) Length(256)
Use Builtin(VF_SAVEAVALUE) With_Args(#AVAL AJAX #NP2 #NP3 #INST)
Endroutine
Subroutine Name(PUTN) Parms((#NP2 *RECEIVED) (#NP3 *RECEIVED) (#INST *RECEIVED) (#NVAL *RECEIVED))
Define Field(#NVAL) Type(*DEC) Length(30) Decimals(9)
Use Builtin(VF_SAVENVALUE) With_Args(#NVAL AJAX #NP2 #NP3 #INST)
Endroutine
Subroutine Name(GETA) Parms((#NP2 *RECEIVED) (#NP3 *RECEIVED) (#INST *RECEIVED) (#AVAL *RETURNED))
Use Builtin(VF_RESTOREAVALUE) With_Args(' ' AJAX #NP2 #NP3 #INST) To_Get(#AVAL)
Endroutine
Subroutine Name(GETN) Parms((#NP2 *RECEIVED) (#NP3 *RECEIVED) (#INST *RECEIVED) (#NVAL *RETURNED))
Use Builtin(VF_RESTORENVALUE) With_Args(0 AJAX #NP2 #NP3 #INST) To_Get(#NVAL)
Endroutine