查看單個文章
舊 2004-06-21, 02:10 PM   #10 (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 金幣
預設

EDI概論


EDI為電腦之間利用標準格式進行一般商務資訊的往來。因為EDI允許企業即時地交換資訊,它捨棄了紙上作業並讓企業在其內部作業上更有效率,更能顧及到客戶的需求與期望。

什麼是EDI2


EDI,又稱電子資料交換,是一個廣受交易伙伴之間認可的資料傳遞的標準。




EDI為不同公司的電腦系統之間企業文件的電子往來定義了資料格式、資料型態,以及排程指令。這些交易傳統上是透過附加價值網路(VAN)來進行。EDI捨棄了紙張的採購訂單、發票、運輸表單及其他文件等負擔,並以電子化方式取代。這樣可以大幅減少處理成本的三分之一到二分之一。

EDI的名詞介紹


在EDI實作中所用到的詞彙包括有交易夥伴、電子信封與EDI轉換軟體。每個詞彙的介紹如下:

4 交易夥伴3

在EDI的專門用語中,交易夥伴指的是透過線路進行商務的個體。該個體可以是一家企業、代理商或顧客。所有的交易夥伴都會簽署一份交易夥伴協定,確保它們使用EDI交易的合法性。

4 電子信封

在網站間傳送的資訊是封裝在電子信封中。當收到電子信封時,電腦會尋找特定的鑰匙資料(key data)以便對資訊進行識別。這些鑰匙資料的介紹如下:

ISA(Instrument Society of America)宣告代表信封的開頭。而IEA宣告則代表結尾。

一個信封可以包含一個或多個功能群組。起始與結尾功能群組分別由GS(group start)與GE(group end)宣告來代表。

功能群組負責儲存EDI交易集。ST,或稱交易集標題宣告,代表交易集的起始部分,相當於書面文件的標題部分。SE,或稱交易集結尾宣告,代表交易集的結尾部分。4

下面是電子信封的範例。注意信封中的ISA、IEA、GS、GE、ST與SE等宣告。

ISA*00*00*01*0860603544*08*6113240000*940608*0902*U*00303*00E
0000451*0*P>~
GS*IN*086063544*6113240000*940608*0902*1156*X*003030~
ST*850*6541~
BEG*00*SA*09935600*990707~
NTE**GOODS SHIPPED PER EDI INSTRUCTIONS~
REF*1A*053445~
CSH*P2~
DTM*010*990707~
DTM*001*990707~
TD5*****1-200 COPIES~
TD5*****201+ MICROSOFT~
N1*BY*92*08995~
PID*F*99***2T - 4T~
SE*15*6541~
GE*1*1156~
IEA*1*000451~

--------------------------------------------------------------------------------
注意
前面範例中的星狀符號為placeholder。程式用縮排來改善其可讀性。這些縮排並不存在於一般的EDI交易集中。


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

4 EDI轉換軟體

EDI轉換軟體將資料在透過網路傳送之前由其原始格式轉換成EDI交易集。當接收到EDI交易集,EDI轉換軟體會將資料轉換回原始格式。

EDI的優點5


EDI藉著將所有紙上作業更換成相同的電子化作業,來將交易夥伴之間的基本交易流程予以流暢化。因為EDI文件可以以電子方式傳送,其郵寄成本以及整理時間將縮短。EDI保證了資料的可信度,因為資料可以輸入一次以上且可視需要重複使用。

下面的介紹說明了EDI商務交易裡的各項資訊的流程。




基本的交易流程


下面是一個典型的EDI商務交易流程範例:

顧客傳送訊息給供應商,要求報價單及產品的技術規格。
供應商傳回報價單。6
顧客評估過報價單,然後傳送一份採購訂單給供應商。
當產品已經完成運送準備,供應商會傳送一份發票或運送通知給顧客。
產品被送出。供應商傳送一份貨物運輸帳單給顧客。
當客戶收到產品,供應商會送出一份接收報告。
客戶付款。
在上面的每一步驟中,收據會由接收者傳送給傳送者,造成較高的成本、較長的往返時間,以及較高的錯誤風險。而EDI則大幅地消弭了這些困擾。

在基本的交易流程中使用EDI的結果7


藉著將交易流程予以流暢化,EDI帶來了以下的優點:

在電子商務的規則中,EDI加速了採購訂單-發票付款的週期,因此讓產品能更快速地進入市場。

EDI提供了表單的電子傳輸,因而減少了建立與郵寄紙式訂單的成本,也降低了文件歸檔所需的花費。

EDI要求資料只需輸入一次,然後該資料便可以重複使用。這消除了多次輸入同樣資料的麻煩,且降低資料錯誤的可能性。

EDI讓資訊能夠更快速地更新,進而達成更快速的決策。

EDI允許供應商只傳送必要的東西並藉著傳送給供應商交易資訊來降低批發商的庫存。同時,藉著減短整理時間,EDI讓批發商只需維持較小的庫存。


--------------------------------------------------------------------------------
注意
想獲得更多有關EDI的資訊,請參考DISA Web網站8 http://www.disa.org/ 。


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

XML與EDI


雖然EDI提供了許多的好處,但實作EDI的成本仍過高。因為這個原因,所以只有大企業會實施EDI。如果有企業並未實施EDI,而想與有實施EDI的企業進行通信,必須將資料轉換成EDI交易集。相反地,企業所接收到的資料必須從EDI格式轉換成接收端企業所使用的資料格式。這類轉換最簡單的方式是將資料儲存在XML文件中。XML允許資料以如此容易瞭解且具有足夠彈性以轉換成EDI相容結構的方式來進行建構。

將資料從XML轉換成EDI


傳統上呈現在紙張文件上的資料,例如貨物訂單,可以藉著使用ASP網頁來轉換成XML格式。然後資料會以方便人們閱讀且方便電腦管理的格式呈現。

將XML文件轉換成EDI9


一張典型的發票包括了有關採購、購買者與開出該發票的企業等的詳細資訊。在XML中,這些可以呈現如下:

<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="801.xsl" ?>
<invoice number="1045">
<organization status="send to">
<name>RAMONA PUBLISHING</name>
<street>P.O. BOX 679342</street>
<city>HOUSTON</city>
<state>TX</state>
<zip>77234</zip>
</organization>
<organization status=" charge ">
<name>HANSEL PUBLISHING</name>
<street>101 APPLE PIE ST.</street>
<city>NEW YORK</city>
<state>NY</state>
<zip>00103</zip>
</organization>
<organization status="sent from">
<name>FIVELAKES PUBLISHING</name>
<street>79 RIVER DRIVE</street>
<city>DALLAS</city>
<state>TX</state>
<zip>74564</zip>
</organization>
<shipper >
<name>CONSOLIDATED TRUCK</name>
<street>534 FLAT MEADOWS</street>
<city>HOUSTON</city>
<state>TX</state>
<zip>77544</zip>
</shipper>

<contact>
<name >J.DOE</name>
<phone>2104355445</phone>
</contact>

<order>
<item >
<code>6900</code>
<quantity>3</quantity>
<unit>CA</unit>
<price_per_unit>12.75</price_per_unit>
</item>
<item>
<code>P450</code>
<quantity>12</quantity>
<unit>EA</unit>
<price_per_unit>2.99</price_per_unit>
</item>
<item>
<code>1640</code>
<quantity>4</quantity>
<unit>EA</unit>
<price_per_unit>5.99</price_per_unit>
</item>
<item>
<code>1507</code>
<quantity>1</quantity>
<unit>DZ</unit>
<price_per_unit>2.45</price_per_unit>

</item>
<total_cost>100.54</total_cost>
<date>
<day>20</day>
<month>4</month>
</date>
</order>
</invoice>
使用XSL,則前述的XML程式碼可以輕易地轉換成EDI交易。範例的樣式表如下所示:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
ISA**00*0000000000*01*01*PASSWORDME*01*123456789 _
987654321 890714*2210*U*000000008*O*P*~
GS*IN*012345678*087654321*900509*2210*000001*X*002040~
ST*801*0001~74832
BEG*940606*1045*940606*~
<xsl:apply-templates select="invoice/organization" />
<xsl:apply-templates select="invoice/contact" />
ITD*01*3*2**10~
<xsl:apply-templates select="invoice/order/item" />TDS*
<xsl:value-of select="invoice/order/total_cost" />~
<xsl:apply-templates select="invoice/shipper" />
<xsl:apply-templates select="invoice/order/date" />
SE*21*000001~
GE*1*000001~
IEA*1*000000008~
</xsl:template>

<xsl:template name="org" match="organization">
N1*BT*
<xsl:value-of select="name" />~ N3*
<xsl:value-of select="street" />~ N4*
<xsl:value-of select="state" />*
<xsl:value-of select="zip" />~
</xsl:template>

<xsl:template match="contact">
PER*AD*
<xsl:value-of select="name" />*TE*
<xsl:value-of select="phone" />~
</xsl:template>

<xsl:template match="item">
IT1**
<xsl:value-of select="quantity" />**VC**
<xsl:value-of select="code" />~
</xsl:template>

<xsl:template match="shipper">
CAD*M****
<xsl:value-of select="name" />~
</xsl:template>

<xsl:template match="date">
CTT*
<xsl:value-of select="month" />*
<xsl:value-of select="day" />~
</xsl:template>

</xsl:stylesheet>
4 瞭解樣式表

這個樣式表會在XML文件中被呼叫且是用來將XML資料轉換成發票所需要的格式。該格式是由ANSI ASC X12規格定義。子樣式被定義在樣式表的根區段中。每一個子樣式選擇了所需的資料並傳送EDI所需宣告讓資料變為可讀。10
將EDI交易集轉換成XML


雖然藉著樣式表將文件從XML轉換成EDI非常容易,但是從EDI轉換成XML可能就會產生問題。要將EDI轉換成XML最普通的方法就是使用EDI解析器來轉換。該解析器可以用在高階的程式語言如Microsoft Visual Basic ,或在scripting語言中使用XML等方式來撰寫。下面的程式碼展示了用來將發票從EDI 801交易集轉換成XML文件的XML scriptlet:

public sub makeXML()

Const ForReading = 1
Const TristateUseDefault = -2, TristateTrue = -1, _
TristateFalse = 0

Dim fs, f, ts, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("C:\edi.txt")
Set ts = f.OpenAsTextStream(ForReading,TristateUseDefault)
Storage = ts.ReadAll
ts.Close

Dim num, I
num = InStr(1, Storage, "N1*BT*")
num=num-1
t = Left(Storage, num)
Storage = Replace(Storage, t, " ")
leng1 = Len(Storage)
num = InStr(1, Storage, "SE*")
num = leng1 - num + 1
t = Right(Storage, num)
Storage = Replace(Storage, t, " ")
newl = "</organization>" & Chr(13) & "<name t>"
Storage = Replace(Storage, "N1*BT*", newl)
newl = "</name>" & Chr(13) & "<street>"
Storage = Replace(Storage, "~ N3*", newl)
...
Storage = Replace(Storage, "0<item>*", newl)
newl = "</quantity>" & Chr(13) & "<code>"
Storage = Replace(Storage, "*VC* ", newl)
Storage = Replace(Storage, "*", ",")
Storage = Replace(Storage, "~", "")
Set fs = CreateObject("Scripting.FileSystemObject")
Set MyFile = fs.CreateTextFile("c:\edi-new.xml", True)
MyFile.WriteLine ("<?xml version='1.0' ?>")
MyFile.WriteLine ("<invoice>")
MyFile.Write (Storage)
MyFile.Close
End Sub
4 瞭解script

EDI交易集會以文字檔的方式儲存在電腦C槽,名為edi.txt。scriptlet會開啟檔案讀取內容將之放入名為Storage的變數,如下面程式碼所示:

Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("C:\edi.txt")
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
Storage = ts.ReadAll11
所有後續的處理都是根據儲存在變數裡的值。藉著使用下面的程式碼來進行,交易集的相關部份會被識別並更換成XML標籤:

newl = "<organization>" & Chr(13) & "<name>"
Storage = Replace(Storage, "N1*BT*", newl)
在變數中的數值經過修改以建立正確的XML資料後,藉著下面的程式碼,資料會被寫回位於C槽,名為edi-new.xml的檔案中:

Set fs = CreateObject("Scripting.FileSystemObject")
Set MyFile = fs.CreateTextFile("c:\edi-new.xml", True)
MyFile.WriteLine ("<?xml version='1.0' ?>")
MyFile.WriteLine ("<invoice>")
MyFile.Write (Storage)
全部的程式碼是放在XML scriptlet的script元素中,該scriptlet可以在伺服器端註冊並使用ASP網頁來呼叫。

實作9:將XML文件轉換成EDI


目標12


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

撰寫XSL樣式表來將XML文件轉換成EDI交易集。

撰寫XML scriptlet來將EDI交易集轉換成XML文件。

在您開始之前


先決條件


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

熟悉XSL。13

熟悉XML。

熟悉Microsoft Visual Basic Scripting Edition。

熟悉Microsoft Internet Explorer 5.0或更新版。

環境設定


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

情境


這個實作假設了當未採用EDI的企業欲與採用EDI企業進行通信時所遭遇的狀況。首先你將先完成一個XSL樣式表,用來將XML發票文件轉換成EDI 801交易集。然後你將撰寫一個XML scriptlet用來將EDI交易集轉換回XML。14
4 預估完成所需時間:30分鐘

練習1:建立樣式表


在這個練習中,你將完成一個XSL樣式表,用來將XML文件轉換成EDI交易集。

4 開啟XSL樣式表

在目錄C:\InetPub\wwwroot中,開啟edi.xsl檔案於筆記本中。15

4 在XML樣式表中定義符合組織的樣板

在edi.xsl中,找出下面的標籤:

<xsl:template name="who" match="organization">
在步驟1程式碼下面加入底下的程式碼:

N1*BT*
<xsl:value-of select="name" />~ N3*
<xsl:value-of select="street" />~ N4*
<xsl:value-of select="state" />*
<xsl:value-of select="zip" />~
儲存檔案。164 將樣板結合至樣式表中

在edi.xsl中,找出下面的標籤:

BEG*940606*1045*940606*~
在步驟1程式碼下面加入底下的標籤:

<xsl:apply-templates select="invoice/organization" />
儲存並關閉檔案。17練習2:為樣式表與XML文件建立關聯


在這個練習中,你將把你在練習1中建立的XSL樣式表與XML文件建立關聯。

開啟XML文件


在目錄C:\InetPub\wwwroot中,於記事本中開啟檔案edi.xml。

4 為樣式表與XML文件建立關聯

在文件中,找出下列標籤:18

<?xml version="1.0" ?>
在步驟1的標籤下面加入下面的標籤:

<?xml-stylesheet type="text/xsl" href="edi.xsl" ?>
關閉並儲存檔案。
4 檢視結果

在Windows檔案總管中,瀏覽至目錄C:\InetPub\wwwroot並雙擊19 edi.xml 。

瀏覽器中會出現一份EDI 801交易集。

練習3:建立XML scriptlet


在這個練習中,你將完成一個XML scriptlet,用來將EDI交易集轉換成XML文件。

4 開啟XML scriptle20 t

在目錄C:\InetPub\wwwroot中,於記事本中開啟檔案edi.sct。

4 加入註冊資訊至scriptle t

找出註冊標籤然後在字彙「registration」後加入下面的程式碼:

Description="This scriptlet is used to convert a 801 _
Transaction Set into XML"
ProgID="xmliser.Scriptlet"
Version="1.0"21
在 開始 選單中,點選 執行 。
瀏覽至目錄C:\InetPub\wwwroot中,雙擊 Guidgen.exe22 ,然後點選 確定 來執行程式。
在 Create GUID 視窗中,按下 Registry Format23 ,然後點選 New GuID 來產生一個唯一的ClassID。
點選 Copy 將ClassID複製至剪貼簿,然後按下 Exit24 。
在註冊標籤中,於edi.sct檔案中找出區段「classid=""」, 然後貼上剪貼簿中的ClassID於雙引號中。
儲存檔案。
4 撰寫script來完成scriptlet

在edi.sct檔案中,找出下面的程式碼:

Const ForReading = 1
Const TristateUseDefault = -2, TristateTrue = -1, _
TristateFalse = 0
Dim fs, f, ts, s25
在步驟1的程式碼下面加入下面的程式碼,來從電腦C槽讀取EDI交易集到變數中:

Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("C:\Inetpub\wwwroot\edi.txt")
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
Storage = ts.ReadAll
ts.Close
在edi.sct檔案中,找出下面的程式碼:

leng1 = Len(Storage)
在步驟3的程式碼下面加入下面的程式碼,來刪除發票中不需要的EDI結尾資訊:

num = InStr(1, Storage, "SE*")
num = leng1 - num + 1
t = Right(Storage, num)

Storage = Replace(Storage, t, " ")
在edi.sct檔案中,找出下面的程式碼:26

Storage = Replace(Storage, "*VC* ", newl)
Storage = Replace(Storage, "*", ",")
Storage = Replace(Storage, "~", "")
在步驟5的程式碼下面加入下面的程式碼來撰寫XML文件:

Set fs = CreateObject("Scripting.FileSystemObject")
Set MyFile = fs.CreateTextFile("c:\edi-new.xml", True)
MyFile.WriteLine ("<?xml version='1.0' ?>")
MyFile.WriteLine ("<invoice>")
MyFile.Write (Storage)
MyFile.Close
儲存並關閉檔案。
4 註冊元件

在27 開始 選單中,指向 程式集 ,然後選擇 附屬應用程式 的 Windows檔案總管28 。
瀏覽至目錄C:\InetPub\wwwroot,然後利用滑鼠右鍵點選 edi.sct 。
在快捷功能表中,點選 註冊 。29
會出現訊息方塊說明scriptlet已經成功地註冊成一個COM物件。
練習4:使用ASP網頁來呼叫Scriptlet


在這個練習中,你將建立一個ASP網頁,使用你在練習3中建立的scriptlet將EDI交易集轉換成XML文件。

4 建立需要的ASP網頁

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

<SCRIPT Language ="VBScript" RUNAT="Server">
set Change = CreateObject("xmliser.Scriptlet")
Change.makeXML()
Response.Write("Conversion to XML complete.")
</SCRIPT>
將檔案儲存在目錄C:\InetPub\wwwroot下,檔名為edi.asp,然後關閉檔案。
4 檢視結果

在Microsoft Internet Explorer中,於地址方塊中輸入URL位址『http://localhost/edi.asp』。
一個含有「Conversion to XML complete」的訊息方塊會出現。

在Windows檔案總管中,瀏覽至路徑C:\edi-new.xml,然後雙擊該檔案以檢視其內容。31
XML文件會出現在瀏覽器中。
mic64 目前離線  
送花文章: 0, 收花文章: 21 篇, 收花: 61 次