查看單個文章
舊 2004-06-21, 02:09 PM   #9 (permalink)
mic64
註冊會員
 
mic64 的頭像
榮譽勳章
UID - 582
在線等級: 級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時
註冊日期: 2002-12-06
VIP期限: 2007-04
住址: MIB總部
文章: 412
精華: 0
現金: 499 金幣
資產: 499 金幣
預設

在XML中建立COM物件2


在這個部分,你將學習有關XML scriptlets的架構,以及XML scriptlets與DHTML scriptlet的不同之處。

DHTML與XML Scriptlets


Scriptlets是以動態元件方式運作並展露屬性與方法的HTML網頁。它們擁有泡泡式(譯者註:事件會如同泡泡般往上傳遞)系統事件及觸發所屬通告的能力。Scriptlets透過提供跨Web可重複使用元件的方式簡化了網站開發者的工作。

XML scriptlets與DHTML scriptlets


DHTML與XML Scriptlets都是軟體元件-可自我包含、可程式化、可重複使用、語言獨立-可以輕易地放入應用程式中。它們提供了屬性與方法、觸發事件,並透過名字及(或)ID進行唯一識別。DHTML與XML Scriptlets的不同之處為XML scriptlets完全倚靠COM,而DHTML scriptlets則採用了完全不同的實作方式以接近COM特性。

兩種型式scriptlets不同之處展示於下表之中:

特性3 DHTML_scriptlet XML_scriptlet
程式設計介面 透過Microsoft Jscript函式 型態函式庫
建構機制 一個稱為public_description的Microsoft Jscript函式4 DllGetClassObject()函式
方法與屬性 public_description方法 COM自動化介面
事件 DHTMLs視窗,外部物件 COM連結指標介面5
開發語言 含有script的HTLM XML文件中的VBScript或JScript
物件識別 檔案名稱與MIME型態 ProgID與CLSID
註冊6 不支援。檔案名稱唯一地定義script 系統註冊區
安裝於網站 MIME型態的<OBJECT>標籤 含有CLASSID屬性的 網頁<OBJECT>標籤
安裝於桌上型應用程式 透過Microsoft ActiveX控制項安裝7 直接安裝

XML Scriptlet架構


你可以藉著使用Microsoft Jscript開發軟體、Microsoft Visual Basic Scripting Edtion、Perl,或任何其他內含ActiveX script相容編譯器的語言來撰寫XML scriptlet。COM元件元素如類別代理(class factories)與IUnknown,都儲存在一個稱為scrobj.dll的系統執行時期dll中。Scriptlets使用中繼資料來描述元件,如同COM+使用中繼資料來描述元件的方式一樣。你所需提供的只有一個中繼資料,用來描述你所實作的介面及實作不同方法的程式碼。

下圖介紹了XML scriptlet的架構。




XML Scriptlet的元件


XML scriptlet是一個副檔名為.sct的ASCII檔案。它擁有三個主要標籤:<registration>、<implements>與<script>。所有XML scriptlet的原始程式碼都包含在標籤<scriptlet>中。8
<registration>標籤包含所有有關的元件識別,如ProgID與CLSID等的資訊。當你開發XML scriptlet時,你通常會在註冊元素中包含一份描述與版本號碼,如下面範例所示:


<scriptlet>
<registration
Description="This is a bare-bones Scriptlet."
ProgID="BareBones.Scriptlet"
Version="1.00"
ClassID="{00000000-1010-1010-83d1-f49604c10010}"
>
</registration>
</scriptlet>


--------------------------------------------------------------------------------
注意
ClassID必須是唯一的,而且可使用應用程式如Guidgen.exe來產生。


--------------------------------------------------------------------------------

在<implements>標籤中,你會定義元件將實作的介面。每一個你加入的<implements>標籤會對應到一個COM介面,讓使用者透過QueryInterface來接收與呼叫。介面並不是以CLSID或程式名稱來作識別。相反地,它們是利用一個名為Type的屬性來進行識別,其內容類似關鍵字,告訴執行時期模組哪個COM server會被呼叫來處理客戶端的要求。介面也擁有一個ID屬性讓你可以在程式中將之視為物件。下面就是一個典型的<implements>標籤。


<implements type="Automation" id="dispatcher">
<method name="Hello">
<parameter name="numHello" />
</method>
</implements>
<script>標籤包含所有用來實作,並由全部介面所展示的不同函式所需的原始程式碼。例如,在前面範例中的scriptlet可以在傳回特定次數「Hello」字串的方法中加入<script>標籤:


<script language="JavaScript">
function Hello (numHello) {
var strText = "";
for( i=0; i<numHello; i++ )
strText += strText + "Hello";
return strText;
}
</script>9
介面處理程序


介面處理程序為一個程序內的COM伺服器端元件,為給定的介面提供了標準的實作。它是XML scriptlet中最重要的特性。介面處理程序的集合會列出scripelet將實作的所有COM介面。

事件處理程序讓scriptlet可以觸發事件。這些處理程序藉著完成IconnectionPoint與IConnectionPointContainer的標準實作來提供所需的COM底層構造。

Automation處理程序負責Automation介面。它們實作了IDispatchEx。事件處理程序提供了觸發事件所需的連接指標介面。在處理程序與介面之間是一對多的關係。

下面為在程式碼中如何觸發事件的範例:

<script language="JScript">
function DoWork() {
MyScriptlet.fireEvent("BeginWork")
// place code here
MyScriptlet.fireEvent("WorkCompleted")
}
</script>
程式導覽:在XML中建立COM物件10


電子商務的交易資料會被輸入到線上表單中,線上表單只是暫時的儲存單元。要永久地儲存資料,你必須將資料寫入資料庫或文字檔中。在這個單元,你將學習如何建立並註冊將資料從線上表單寫入文字檔的XML scriptlet。你也將學習如何在ASP網頁上使用scripelet。

XML scriptlet


在電子商務的交易中,你必須能夠確認跟你進行交易的使用者。你也可能需要檢視該使用者過去的交易紀錄。要完成這些工作,首先你必須紀錄使用者的信用狀況。

現在你將學習如何撰寫scriptlet來從表單上讀入使用者的名字、住址以及信用卡號碼,並將資料存入電腦磁碟機C槽的文字檔中。

<scriptlet>
<registration
Description="This scriptlet is used to write data from _
a form to a text file"
ProgID="Storage.Scriptlet"
Version="1.0"
classid="{8D9CC880-D79F-11d2-B7C8-00C0DFE39737}"
>
</registration>

<implements type="ASP" />
<public>
<method name="whoAreYou" />
</public>

<script language="VBSCript">
public function whoAreYou(who, where, number)
dim usr_name, usr_address, usr_credit
usr_name=who
usr_address = where
usr_credit = number

Set fso = CreateObject("Scripting.
FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\credibility.txt", True)
MyFile.WriteLine(usr_name)
MyFile.WriteLine(usr_address)
MyFile.WriteLine(usr_credit)
MyFile.Close
end function
</script>

</scriptlet>
註冊元素


前面範例中所展示的註冊元素擁有以下的屬性:11
Description

用來描述scriptlet,如此任何人只需觀看.sct檔即可決定該scriptlet提供了哪些功能。
ProgID

當scriptlet實作完成時用來呼叫scriptlet用。
Version

用來識別scriptlet的版本號碼。
ClassID12

在將執行scriptlet的電腦上用來註冊scriptlet。
實作元素


實作元素宣告了下列事項:

scriptlet將在ASP檔案中被呼叫。

scriptlet支援一個名為whoAreYou的方法。

script元素


script元素宣告了下列事項:13
whoAreYou方法接受三個參數,分別是:who、where以及number。

該scriptlet會在電腦C槽的根目錄下建立一個名為credibility.txt的檔案,並將資料寫入檔案中。

在你建立scriptlet之後,必須將scriptlet註冊在欲執行scriptlet的電腦上。要完成這項工作,你必須透過Windows檔案總管瀏覽至scriptlet上,利用滑鼠右鍵點選scriptlet,然後選擇 註冊 。這會在電腦中將scriptlet註冊成COM物件。


--------------------------------------------------------------------------------
注意
有關註冊COM元件更詳細的資訊,請參閱MSDN。


--------------------------------------------------------------------------------

在scriptlet完成註冊之後,可以使用ASP檔案以物件的形式呼叫它。用來呼叫scriptlet的ASP範例如下:14
<%
Set oData = CreateObject("Storage.Scriptlet")
rs=oData.tell(request.form("name"),request.form("address" _
), request.form("phone"))
%>

--------------------------------------------------------------------------------
注意
想取得更多有關XML Scriptlets的資料,請參考<<Writing COM Objects with Scripting Languages>>一書中的附錄C。


--------------------------------------------------------------------------------

實作8:在XML中建立及使用COM物件


目標


在完成本實作之後,你將能夠:

在XML中建立並註冊COM物件

使用ASP檔案來呼叫COM物件。15

在您開始之前


先決條件


在開始實作之前,你必須具有:

HTML與Microsoft Active Server Pages (ASP)技術的經驗。

Microsoft Visual Basic Scripting Edition的知識。

元件物件模型(COM)的基本知識。

熟悉Microsoft Internet Explorer 5.0。16

環境設定


要完成這個實作你必須將Lab\Lab08\StartCode目錄下的檔案複製到C:\InetPub\wwwroot。

情境


在使用者發出訂單後,必須建立採購訂單。這個步驟包括了接收使用者的輸入並將所需欄位送至檔案中。

在這個實作中,你將使用item code、item name與quantity ordered作為傳入採購訂單中的必要欄位。

4 預估完成所需時間:15分鐘17

練習1:在XML中建立並註冊COM物件


在這個練習中,你將在XML中建立並註冊一個COM物件。

4 加入註冊資訊到scriptlet中

在目錄C:\InetPub中,於筆記本中開啟purchase_order.sct檔案。
找出註冊標籤。在標籤中,於字彙「registration」後面,加入下面的程式碼:

Description="This scriptlet is used to write a purchase order from
form input"
ProgID="Purchase_order.Scriptlet"
Version="1.0"18
儲存檔案。
4 加入ClassID到scriptlet中

在 開始 選單中,點選 執行19 。
瀏覽至C:\InetPub\wwwroot目錄下,然後雙擊 Guidgen.exe 。
點選 確定 來執行程式。20
在Create GUID視窗中,點選 Registry Format 。
點選 New GUID ,然後按下 Copy21 來產生新的ClassID並將之複製到筆記本中。
按下 Exit 關閉Create GUID視窗。
在檔案purchase_order.sct中,找出區段「 class=」,然後將游標移至兩個引號之間。
在 編輯22 功能表中,點選 貼上 將ClassID複製到scriptlet。
4 撰寫建立物件的script

找出<script language="VBScript">與</script>標籤。在標籤之間加入下面的程式碼:

public function hello(code, name, howmany)
dim pur_code, pur_nam, pur_quant
pur_code = code
pur_nam = name
pur_quant = howmany

Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = _
fso.CreateTextFile("c:\purchase_order.txt", True)
MyFile.WriteLine(pur_code)
MyFile.WriteLine(pur_nam)
MyFile.WriteLine(pur_quant)
MyFile.Close
end function23
儲存並關閉檔案。
4 註冊COM物件

在 開始 選單中,指向 程式集24 ,選擇 附屬應用程式 然後按下 Windows檔案管理員 。
瀏覽至路徑C:\InetPub\wwwroot,然後利用滑鼠右鍵點選purchase_order.sct。
在快顯功能表中,點選25 註冊 。
會出現一個訊息方塊,說明元件已經成功地註冊。
練習2:利用ASP網頁來呼叫COM物件


在這個練習中,你將建立ASP網頁來從輸入表單上讀取資料,並使用COM物件來產生採購訂單。

4 開啟指定變數值所在的表單26

啟動Microsoft Internet Explorer,然後於地址方塊中輸入URL位址『http://localhost/Purchase_order.htm』。
在 View 功能表中,點選 Source 。
注意那些用來接收表單輸入的變數:Item_code、Item_name與Quantity。27
關閉檔案。
4 建立需要的ASP網頁

在筆記本中,建立一個新檔案。
在檔案中加入下面的程式碼:

<%
Set oData = CreateObject("Purchase_order.Scriptlet")
rs=oData.hello(request.form("item_code"),request.form _
("item_name"),request.form("quantity"))
response.write("Your purchase has been noted. " & _
"We will be shipping it to you soon.")
%>
於C:\InetPub\wwwroot目錄下將檔案存成purchase_order.asp,並關閉檔案。284 檢視輸出

在Microsoft Internet Explorer,於地址方塊中輸入URL位址『http://localhost/purchase_order.htm』。
在purchase_order.htm網頁中,輸入資料如下:
在 Item Code 方塊中,輸入『ST01』。29
在 Item Name 方塊中,輸入『Pencils』。

在 Quantity 方塊中,輸入『1.5』。

點選30 Submit Form 。
會出現含有訊息「Your purchase has been noted. We will be shipping it to you soon.」的網頁。
在Windows檔案管理員中,瀏覽至C:\purchase_order.txt,然後雙擊該檔案以檢視其內容。
在purchase_order.htm網頁中會出現指定的數值。
mic64 目前離線  
送花文章: 0, 收花文章: 21 篇, 收花: 61 次