演習2:AJAXEX2 簡単なAJAXの実行

Visual LANSA

演習2:AJAXEX2 簡単なAJAXの実行


AJAXページAJAXEX2.HTM

AJAXファンクションAJAXEX2

ステップ

·         「メモ帳」を使用して「AJAXページAJAXEX2.HTM」のDHTML-JavaScriptコードをコピーして貼り付け、フレームワークのプライベート作業フォルダーにAJAXEX2.HTMという名前のAJAXページ・ファイルとして保存します。

·         「AJAXファンクションAJAXEX2」のAJAXファンクション・コードをコピーして、VL-IDEでAJAXEX2という名前のRDMLファンクションに貼り付けます。Webサーバーで実行できるようにRDMLファンクションAJAXEX2をコンパイルします。

·         ビジネス・オブジェクトAJAXで、AJAXページ・ファイルAJAXEX2.HTMとAJAXファンクションAJAXEX2を、次のようにコマンドAJAXEX2と関連付けるコマンド・ハンドラーとしてフレームワークにスナップインします。

 

·         フレームワークを保存、再起動し、Webブラウザーで実行します。アプリケーション'AJAX Examples'を選択し、ビジネス・オブジェクトAJAXを選択します。これにより、デフォルト・コマンドAJAXEX1が実行されます。AJAXEX2タブをクリックしてAJAXEX2コマンドを実行します。

 

数字を入力してIncrementボタンまたはDecrementボタンをクリックします。入力した値はWebサーバー上のAJAXファンクションに送信され、要求したとおりにインクリメントまたはデクリメントされます。結果がAJAXページに表示されます。

インクリメントまたはデクリメントするために数字をWebサーバーに送信する動作は、すべてのAJAXアプリケーションの基礎となる部分を説明しています。その部分には次のようなものがあります。

·         サーバーへの要求の送信

·         サーバーからの応答の受信

·         非同期処理

·         Webページの動的更新

AJAXEX2.HTMのJavaScript/DHTMLコードとAJAXファンクションAJAXEX2のRDMLコードを見直して、コードの動作と実行方法の基本部分を理解する必要があります。

  

AJAX ページ AJAXEX2.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() 

  SETBUSY(false);  

  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 GetN(np2,np3,inst)    {return(AVRESTORENVALUE(0,"AJAX",np2,np3,inst));} 

/* ---------------------------------------- */ 

/* Handle a click of button BUTTON_onclick  */ 

/* ---------------------------------------- */ 

function BUTTON_onclick(strRequest) 

  /* Ignore if already busy doing something else */ 

  if (BUSY()) return;  

 

  /* Validate the number and put it onto the clipboard */ 

  { 

     var floatNumber = parseFloat(NUMBER_Tag.value);  

     if (isNaN(floatNumber)) { alert("Invalid number entered"); return; } 

     Put(floatNumber,"NUMBER");   

  } 

   

  /* Make busy now */ 

  SETBUSY(true); 

 

  /* Update the message area */ 

 

  MESSAGE_Tag.innerText = "Processing your request now. Please wait."; 

  MESSAGE_Tag.style.backgroundColor = "orange";  

   

  /* Now send INCREMENT/DECREMENT request the server RDML function named AJAXEV2 */ 

     

  if (strRequest =="I" ) SENDREQUEST(window,"","INCREMENT","",INCREMENT_response);  

  else                   SENDREQUEST(window,"","DECREMENT","",DECREMENT_response);  

     

  /* Finished */ 

  return; 

}  

/* ------------------------------------- */ 

/* Handle server responding to INCREMENT */ 

/* ------------------------------------- */ 

function INCREMENT_response(strFunction,strRequest,strPayload,objObject,flagFatalError,strFatalMessage) 

  /* Handle a fatal error in the server function */  

  if (flagFatalError) { alert(strFatalMessage); SETBUSY(false); return; }   

   

  /* Otherwise display the result to the user */ 

  NUMBER_Tag.value = GetN("NUMBER").toString(); 

  MESSAGE_Tag.innerText = "Increment operation completed normally."; 

  MESSAGE_Tag.style.backgroundColor = "yellow";  

  SETBUSY(false);  

   

  /* Finished */ 

  return; 

/* ------------------------------------- */ 

/* Handle server responding to DECREMENT */ 

/* ------------------------------------- */ 

function DECREMENT_response(strFunction,strRequest,strPayload,objObject,flagFatalError,strFatalMessage) 

  /* Handle a fatal error in the server function */  

  if (flagFatalError) { alert(strFatalMessage); SETBUSY(false); return; }   

   

  /* Otherwise display the result to the user */ 

  NUMBER_Tag.value = GetN("NUMBER").toString(); 

  MESSAGE_Tag.innerText = "Decrement operation completed normally."; 

  MESSAGE_Tag.style.backgroundColor = "aqua";  

  SETBUSY(false);  

   

  /* Finished */ 

  return; 

</script> 

 

</HEAD> 

<BODY id='HEAD_Tag'> 

<br/><br/><br/> 

<P align='center'>Hello World 2</p> 

<span> Input Number ==&gt; </span><input id='NUMBER_Tag' type='text'><span> then click a button ==&gt; </span> 

<input id='BUTTON1_Tag' type='button' value='Increment' onclick='BUTTON_onclick("I");'> 

<input id='BUTTON2_Tag' type='button' value='Decrement' onclick='BUTTON_onclick("D");'> 

<br/><br/><div id='MESSAGE_Tag' align='center'></div>  

</BODY> 

</HTML> 

 

 

AJAX ファンクション AJAXEX2

 

* This is just a simple RDML function. 

* It is NOT a WAM function. 

* It is driven by the virtual clipboard 

 

Function Options(*DIRECT *HEAVYUSAGE) 

 

* Define local fields 

 

Define Field(#REQUEST) Reffld(#STD_OBJ) 

Define Field(#NUMBER) Type(*DEC) Length(30) Decimals(9) 

Define Field(#MSGDTA) Type(*CHAR) Length(132) 

 

* Get the action the Javascript requested in paramter 3 

* ..... when it executed this ... 

* SENDREQUEST(window,"","INCREMENT",INCREMENT_response); 

* ..... or this ..... 

* SENDREQUEST(window,"","DECREMENT",DECREMENT_response); 

 

Execute Subroutine(GETA) With_Parms(SYSTEM REQUEST 1 #REQUEST) 

 

* Now switch on the requested action 

 

Case Of_Field(#REQUEST) 

 

* Get NUMBER from the clipboard, increment and put back 

 

When Value_Is('= INCREMENT') 

Execute Subroutine(GETN) With_Parms(NUMBER ' ' 1 #NUMBER) 

Change Field(#NUMBER) To('#NUMBER + 1') 

Execute Subroutine(PUTN) With_Parms(NUMBER ' ' 1 #NUMBER) 

 

* Get NUMBER from the clipboard, decrement and put back 

 

When Value_Is('= DECREMENT') 

Execute Subroutine(GETN) With_Parms(NUMBER ' ' 1 #NUMBER) 

Change Field(#NUMBER) To('#NUMBER - 1') 

Execute Subroutine(PUTN) With_Parms(NUMBER ' ' 1 #NUMBER) 

 

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 

 

* ===================================================== 

* 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