演習4:AJAXEX4 インスタンス・リストの使用

Visual LANSA

演習4:AJAXEX4 インスタンス・リストの使用


AJAXページAJAXEX4.HTM

AJAXファンクション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で示しているように、大部分が単独で動作する全画面コマンド・ハンドラーで主に使用するためのものです。

 

 

 

 

AJAX ページ AJAXEX4.HTM

 

<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> 

 

 

AJAX ファンクション AJAXEX4

 

* 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