0 引言
訂單驅動的中小型制造企業之間的競爭的主要目標就是獲取訂單,但是接到訂單對于本企業的整個供應鏈來說只是一個開始,所有的后續生產工作都是圍繞訂單為主線來展開,其大致過程如下:企業在接到訂單后就要根據訂單上所列出的客戶所需要的產品明細和數量,并參照產品的物料清單(bill of material,BOM)來決定需要生產和采購哪些零配件和部件,再結合產品和零部件庫存數量就可以確定每個零部件需要生產或是采購多少個。所以BOM是中小型制造企業生產過程的基礎,由于ERP軟件所實現的也正是這樣的一個生產管理過程,所以BOM也就成為制造企業實施ERP的基礎數據之一。BOM 表達的是每一個產品由哪些零部件組成,每一個部件是由哪些零部件組成。由此可以知道,BOM的表達是一個遞歸的過程,如果要明確地想知道每一個產品是由哪些零配件組成,就要將BOM逐層展開,直到最下層的全部是零配件,沒有部件為止,這樣整個產品的樹狀結構就完全顯現出來。
作者在為廣東省某衛浴企業以JSP為技術手段開發瀏覽器/Web服務器/數據庫服務器(B/W/D)3層結構ERP的過程中,實現了在JSP客戶端網頁上BOM的逐層顯示與隱藏,使BOM的編輯與查詢非常直觀方便。
1 BOM信息的結構
BOM表達的是產品與零部件之間的關系,具體內容包括一個產品是由哪幾個零件或是部件組成,每個零部件又在這個產品中需要幾個。而在實際應用中,還要根據工廠的具體情況加上這個零件或是部件的加工方式(生產/外購)信息和備注信息。由于產品和配件都有可能有重復的名字,所以對產品和配件都進行了編號,具體每個產品和配件的其它信息要到產品表和配件表中進行查詢得到。所以,整個BOM表的實體屬性圖及其與產品表與配件表的關系如圖1所示。
由于最終顯示到瀏覽器上的BOM信息是由BOM表、產品表和配件表中聯合查到的,所以在顯示BOM信息之前,要將BOM信息、產品信息和配件信息統一到一個數據結構中,這一數據結構包括的具體字段為:零部件編號、零件/部件、零部件數目、生產/外購、零部件類型、零部件名稱、規格型號。在每一條記錄中還要記載有沒下一級BOM信息,所以還要有一個“是否有下一級”的信息。由于BOM是一種樹狀結構的數據結構,所以還要明確知道每一條記錄屬于哪一級,所以還要有一個“屬于哪一級”的信息。整體結構如圖2所示。
2 JSP中實現客戶端動態顯示與隱藏功能的技術路線
使用JSP (Javas ervERP age)實現的B/W/D結構的優點是操作方便,運行效率高。JSP是使用Java實現的動態網頁,其動態性主要表現在同一個網頁在輸入不同的參數后,Java程序能根據輸入參數去查詢數據庫從而顯示出不同的內容,這是與傳統的靜態網頁的不同之處!但是顯示到瀏覽器的網頁其實也是一個靜態的網頁,要實現靜態網頁與用戶的互動,只能通過客戶端腳本語言JavaScript與HTML相結合來進行。
2.1 客戶端動態顯示與隱藏
HTML中的DIV標簽用來標記某一塊獨立的信息單元,將這個DIV標簽的style屬性設置為displaymone時,DIV所包含的內容可以實現隱藏;當將這個DIV標簽的style屬性設置為display:時,DIV所包含的內容就可以顯示出來。由于DIV是一個HTML標簽,所以可以使用客戶端腳本語言JavaScript來控制DIV標簽的style屬性值,達到客戶端信息的動態顯示與隱藏的目的。
對于需要逐層顯示與隱藏的BOM來說中,要求BOM信息按照顯示的順序在網頁上排列好,這樣才能通過DIV來控制上層信息對下層信息的顯示與隱藏,事實上BOM信息的顯示與隱藏并不改變BOM信息在網頁上的實際排列。如某行顯示的是一個部件,那么其下一行開始顯示的信息是在BOM中將這個部件當成一個產品來所查得的部件BOM信息,而上一層的BOM數據就要順序后移。
2.2 Java中的數據訪問與集合技術的結合
使用JSP技術通過Java代碼來實現數據庫的存取,并返回一個ResultSet類型的結果集對象。因為ResultSet數據集中的數據是一次查詢的結果。而查得的下層BOM信息有可能插入到上層BOM信息中間,所以BOM信息在Web服務器端的臨時存貯就不能以一個ResultSet數據集來完成,解決這個問題的辦法就是要將每次查詢得到的結果集數據按照要顯示的順序放到一個動態數組中。
在Java2中的Vector類可以支持動態數組,并且可以將不同類型的對象(當然相同類型的對象更沒有問題)引用到Vector類的對象中去。Vector引用的對象存儲的是一條條BOM 信息,而不是一個個的ResultSet數據集,所以在構建Vector對象時就必須對每一次查詢得到的ResultSet數據集中的BOM信息進行重新處理,使數據集中的BOM信息能夠按照要顯示的1頃序在Vector對象中排列好。這是一個先序遍歷過程,具體操作過程流程如圖3所示。
網頁上顯示的是Vector對象中的一條條BOM信息,由于這些信息已經在Vector對象中按照相互的從屬關系排列好,所以只要完全按照Vector中的順序顯示出來后,這些BOM信息之間的相互關系就可以正確顯示出來,通過BOM信息中的“屬于哪一級”信息,保證每一個層次的BOM信息都屬于同一個DIV。通過“是否有下一級”就可以確定層與層之間的相互關系。
所以如果某一層DIV可見,則該層BOM能顯示,如果該層DIV不可見,則該層BOM就隱藏。結合JSP中的集合技術、HTML中的DIV及Javascript代碼實現了BOM在客戶端的動態顯示與隱藏。
3 結束語
通過一次先序遍歷就可以將一個樹狀結構的產品BOM信息從數據庫中提取出來(實際的實現中是通過多次數據庫表的查詢來完成),并按照需要顯示的順序存儲到Vector對象的引用中。在網頁上通過使用JavaScript來控制DIV標簽的style屬性的設置,就可以控制DIV標簽的顯示與隱藏,從而做出動態逐層顯示與隱藏BOM信息的網頁效果,有利于有效利用網頁空間來顯示BOM的樹狀信息。
轉載請注明出處:拓步ERP資訊網http://www.guhuozai8.cn/
本文標題:JSP中BOM動態顯示與隱藏的關鍵技術