第一章 概述
本文闡述了關於在J2EE平台上開發CRM應用系統的各方面內容,包括高輝本人對於CRM系統的理解,利用J2EE平台開發過程中要注意的一些技術深層的問題,開發分析中要注意的原則等等。這些都是作者在實際的工作中通過經驗與教訓所得來的。在工作中,我深刻的體會到系統分析員的重要性,尤其是對於以組件為主要開發對象的工程項目,系統分析員的技術與業務素質對於整個項目的成功與否起著非常關鍵性的作用。
需要說明的是,這並非作者工作文檔,而僅僅是一篇分享經驗與教訓的交流文檔,因此,其中關於一些涉及到具體的系統設計問題,我僅僅寫了標題,敬請諒解。
第二章 CRM
2.1 CRM概述
科學技術在不斷的進步,市場競爭日益激烈,對於企業來說,越來越強烈的感覺到客戶資源是他獲勝的最重要的資源之一:首先企業競爭的優勢不僅僅是產品本身,先進的服務手段已成為關鍵;現代競爭其實就是客戶的全面爭奪而客戶對企業的信任程度往往是從其消費過程中所得到的體驗,如何做到最大程度的滿足客戶是非常重要的內容,因此,客戶關系管理系統(CRM)應運而生,並成為近年來西方市場的熱點和大買點。
實際上,CRM就是企業與客戶的一種一對一的需求關系管理。這樣,對待客戶的視角就從過去的部門級別提升到了企業的層次,各個部門共享客戶資源,以一個統一的對外接口來與客戶交流,因此,這就要求能夠將與客戶通過各種方式如傳真、郵件、電話、網頁等交流所獲得的所有信息有機的整合。
在設計CRM應用系統的過程中,我們首先要注意數據結構的格式:CRM應用系統的實施關鍵是以客戶為數據結構的核心,這其中包括客戶的基本信息、客戶所購買的商品列表、客戶抱怨、客戶建議、客戶服務記錄、客戶潛在需求、客戶對企業的忠誠度等等。這樣設計的原因一是使CRM應用系統有一個對於企業易於理解,易於操作的用戶接口,二是對於CRM應用系統的設計開發可以比較輕易地拓展,具有良好的開發接口與開發彈性,對於項目負責人、系統分析員能夠更加易於控制整個的開發過程,減少項目開發的風險。
另外,我們仔細研究過國內的數家公司的CRM應用系統的產品,從中學到了很多的東西,但同時也看到了這些產品的不足,在本文的後面部分我們將提到,我們發現,造成這種不足的原因在很大程度上是因為技術的原因,因此,經過反復的論證,我們最終還是選擇了在我熟悉的J2EE平台上進行開發,這樣就很大程度上克服了那些不足。
2.2 CRM應用系統模塊劃分
CRM應用系統主要由市場管理(Marketing)、銷售管理(Sales)、服務管理(Service)、呼叫中心(Call Center)、電子商務(E_Business)五部分組成。
市場管理:提供易於使用的界面與工具,使操作人員能夠徹底的分析市場、客戶,策劃和跟蹤市場策略,分析競爭對手的市場策略等等,以便更加有效的拓展市場。在這個模塊中,通過客戶資料中的諸如地域、消費層次,消費習慣與方式、潛在需求、忠誠度、已購買產品列表等等有價值的信息來從不同的角度徹底的進行市場的策略分析,同時還可以評估和跟蹤目前已經進行或者正在進行的營銷策略,以及通過對自己和競爭對手的數據進行詳細的分析,策劃更加有效的銷售策略。
銷售管理:管理用戶信息、商業機會以及銷售渠道等等各方面的內容,從而能夠使銷售人員可以不受地域限制及時掌握資源以及企業的最新的價格信息,並可以向客戶提供最新的和最感興趣的商品列表以及價格信息。本模塊包括機會、賬戶、合同等的管理,銷售隊伍組成、銷售隊伍成員以及資源重新調配的管理,有效跟蹤銷售業績,同時提供個體的銷售方式與過程參考,靈活進行產品配置、報價、打折、生成銷售訂單等。另外,本模塊還應該和電子商務模塊整合,以便達到多方位、多層次的銷售,同時減少銷售成本。
服務管理:本模塊通過動態建立知識庫,使客戶服務代表能夠有效的提高服務質量,增加客戶的滿意程度,並且捕捉和跟蹤服務中出現的商業機會、產品質量信息、客戶需求等等,並能夠適時的向客戶建議其他的產品和服務。
呼叫中心:呼叫中心是實施CRM應用系統的重要的組成部分,他實際上是將銷售模塊和服務模塊進行了一個高度的集成,使一般的業務代表就可以進行實時的銷售和服務。它通過管理賬戶、合同等等信息,並通過知識庫的支持,就可以最大程度的滿足客戶的多方面的需求。呼叫中心提供當今最全面的計算機電話集成技術(CTI),通過對已撥號碼識別服務(DNIS),自動號嗎識別(ANI),交互式語音應答系統(IVR)得全面支持,通過采用系統預制的計算機電話集成技術,可以在用戶撥叫的過程中業務代表已經可以獲得客戶的資料,就靈活的進行業務處理。
電子商務:電子商務模塊是以上所有模塊的一個邏輯集成,它提供了一個個性化、人性化、高度集成以及易於使用的用戶界面,在這個用戶界面上客戶可以進行幾乎所有的需求,諸如購買、付款、尋求服務支持、查詢產品與服務目錄、查詢訂單狀態等等,甚至可以與呼叫中心聯系在一起,最大程度的滿足客戶需求。
由於我們采用J2EE架構平台的開發方式,所以可以很容易的將我們在市場管理、銷售管理、服務管理以及呼叫中心模塊的內容集成到電子商務模塊中,同時呼叫中心的大部分功能也可以並且也應該使用銷售管理、服務管理模塊中開發的組件。因此,這就要求我們在開發過程中,要充分利用J2EE平台的優點,組件的高度可重用性,減少開發的成本,加快開發的進度,並同時可以控制開發的質量。在實際的開發中,對於EJB 、Servlet的質量要求非常嚴格,項目負責人、系統分析員必須把握好質量。
2.3 CRM應用系統模塊內在關系
在前面已經提到,在開發CRM應用系統的數據結構時一定要以客戶信息為核心,一方面是為企業提供一個良好的易於操作的用戶界面,另一方面是提高開發的可控性,減少開發成本與風險。以客戶信息為核心,所有的模塊的內容都是圍繞客戶,這樣也使得應用系統的可拓展性大為提高,維護性加強。對於開發人員,尤其是系統分析員,所有的功能內容對於他來說都是一種“插件”,各個模塊功能之間的耦合性大為降低,很顯然會使整個的開發過程更加易於控制。
在各個模塊的具體開發實施中,銷售模塊是基礎,他負責管理賬戶、機會等信息,並且經過銷售人員的銷售活動的信息支持,對於客戶的信息(如需求、購買行為等)的補充,就可以實時的給與市場人員以信息支持,從而隨時把握銷售策略,便於及時調整。從某種意義上講,應該說銷售管理、服務管理、呼叫中心以及電子商務這四個模塊都是作為市場模塊的信息支持,同時反過來,市場管理策略也給與其余企業活動以策略支持。要實現這一點,就必須在數據結構地設計上以客戶信息為核心數據。
CRM應用系統各個模塊之間的關系在企業業務上關系非常緊密,但是作為一個非常龐大和復雜的系統,我們不能按照一般傳統的軟件工程觀念,在各個模塊之間通過接口通信,這樣會帶來應用系統在開發、擴充以及維護方面等很多的問題。正確合理的方案是將客戶視做一個對象,將客戶資源作為操作的核心。
2.4 CRM應用系統各模塊的技術要求
基於客戶對於CRM應用系統的實際需求以及考慮到系統的未來拓展性、可維護性,CRM應用系統各個模塊中除了呼叫中心可以做成客戶/服務器(C/S)體系模式之外,其他模塊都應該做成瘦客戶端(浏覽器)/服務器(B/S)模式。經過了反復的論證並且通過與別的技術方式的比較,我們最終確定采用在J2EE平台上開發CRM應用系統的技術方案。一方面是因為作為一種比較成熟的技術規范,相對於微軟的.NET來說,它的開發要更加安全、成本更低,另一方面,我從很久就一直跟蹤分布式開發的技術,對於J2EE的開發非常熟悉。(當時還沒有相關的中文版書籍)。因此,比較了幾種開發平台之後,我們決定采用J2EE。在這種開發平台上,我們將業務邏輯抽象出來,寫成組件,然後將其發布到服務器上,再通過前台程序的開發程序員開發前台界面,調用後台的商務邏輯。
市場管理、銷售管理、服務管理之所以采用分布式的開發,一方面是滿足業務人員的辦公需要,可以不受地域的限制,隨時隨地地辦公,另一方面也是為了降低開發的成本與維護成本。因為我們看到,在呼叫中心模塊中有銷售管理、服務管理等內容,同時電子商務模塊中又有其余模塊的商務邏輯,我們將其抽象出來,一是組件復用,二是減少開發工作量同時減少風險。
第三章:J2EE
3.1 J2EE概述
任何一個有經驗的Java平台開發人員,都會知道這個平台具有非常強大的功能和非常高的綜合程度,並且發展非常迅速。Java平台的許多應用程序接口(API)為各種應用程序設計和系統級別程序設計提供了豐富的功能。J2EE是一種技術規范,他給開發人員提供了一種工作平台,它定義了整個標准的應用開發體系結構和一個部署環境,在這個體系結構中,應用開發者的注意力集中在封裝商業邏輯和商業規則上,一切與基礎結構服務相關的問題以及底層分配問題都由應用程序容器或者服務器來處理。甚至,從屬於事務、持久化、安全等等方面的應用組件的運行時屬性都可以使用高度靈活的聲明方法在部署環境中定制(一般采用XML)。這個平台提供了一個簡化的開發模型,它具有工業強度的可拓展性,支持合理的集成和靈活的部署,與開發商和應用服務器無關。
3.2 J2EE組成部分
對於開發人員來說,J2EE平台提供給他們的就是三種,Jsp、Servlet、EJB這三種開發方式。
Jsp
Jsp其實是一種高層的Servlet。他與以往的其他網頁編寫腳本有很大的相似性,但是只是在執行時有一些不同。Jsp引擎將它和它所在的HTML文件一起合成Servlet的代碼,然後它的執行就和Servlet的一樣了:先編譯成.class文件,然後由支持java虛擬機的服務器來執行,然後輸出結果。
我們在使用Jsp中可以使用JavaBean來進行更加靈活的處理。
Servlet
Servlet可以被看作是服務器端的applet,它通過ServletResponse以及ServletRequest這兩個對象來輸出和接收用戶傳遞的參數,然後在內部的方法中執行操作,如訪問數據庫、訪問別的Servlet方法、調用EJB等等,然後將處理結果返回給客戶端。可以通過集成化的開發工具來進行開發。在一般的工具中都已經構建好一個框架,程序員只需要熟悉html標簽以及熟悉一般的java語言就可以進行開發了。
EJB
EJB如果除去它的語言特點外,我想對於大多數有比較豐富編程經驗的開發人員來說應該可以輕松理解,他非常類似於微軟的DCOM。他有一個自己要存活要活動的一個容器,為了可以讓客戶進行透明調用,而不必關心位置,他還必須有一個本地和遠程接口,同時還應該有一個相關的配置文件,以便告訴容器她要怎樣的活法。對於開發人員來說,如果采用一種集成化的開發工具,如JBuilder,就可以大大減少工作量。在JBuilder中通過配置相關的服務器路徑、容器信息,我們可以通過它的模板來完成一個EJB組件的開發以及分發,非常方便也非常簡單。
在開發過程中,建議的開發方式是在會話bean內部調用實體bean,因為實體bean沒有狀態但是對數據庫的親和,而會話bean中有我們為了控制程序而需要的上下文信息,因此,我們可以結合這兩種bean的所有優點,來比較輕松的進行開發。比如在會話bean中用實體bean進行數據庫的訪問同時會話bean用來保存客戶的上下文信息。
3.3 J2EE各組成部分在開發CRM應用系統中的腳色
我們已經提到過,開發一個健壯的、可拓展的CRM應用系統中的各個模塊,除了呼叫中心外我們都將采用浏覽器/服務器模式。因此,下面的模式是除了呼叫中心模塊之外的方式:
浏覽器--------〉Jsp腳本文件--------調用---------〉Servlet------調用--------〉EJB------訪問數據庫---------〉處理返回。
其中Jsp屬於前台開發人員進行的開發內容,也就是提供給客戶的用戶界面,要求是美觀,使用性強,便於操作;
Servlet、EJB為後台開發人員開發的具有可以重用性的包含商務邏輯的組件,也就是說,他們主要是進行企業的商務邏輯的處理。要求是開發的程序一定要健壯,充分注意到業務邏輯的獨立性與組合性。
在開發CRM系統時,前面已經說過,系統分析員自身對於J2EE技術的把握深度,對於CRM系統業務的理解程度將極大的決定了系統的成功與否。就是在做系統分析時一定要做到將功能完全細化到Servlet、EJB組件所封裝的商務邏輯中去,並且要反復論證其合理性與獨立性。
3.4 J2EE各技術實現CRM應用系統的特點
Jsp相對來說比較簡單,但是在開發過程中系統分析員一定要注意盡可能少地將商務邏輯放到Jsp文件中,有幾個原因,一是Jsp文件本身的可維護性比較差,尤其是如果不采用的方式的開發,將會極大的增加開發與維護成本。因此,在前台的Jsp開發中首先要劃分出版面,然後將版面分割成不同的部分,用不同的被包含文件來最終組成用戶界面。另外要注意的一點是某些與程序邏輯實現無關的動態內容最好放在數據庫中,而不要放在文件中。所以在開發前台的Jsp文件時系統分析員要注意下面的幾個問題:
1、劃分版面的界面邏輯,用包含文件的方式給程序員確定開發代碼;
2、盡量不將商務邏輯放在Jsp文件中,所有的業務處理都要調用後台的組件;
3、當涉及到的界面邏輯較多的時候,要給程序員設計JavaBean來進行處理,而不是在Jsp文件中直接嵌入java代碼,否則會造成Jsp文件的可讀性非常差,維護與調試異常困難。
Servlet作為在服務器後台進行處理的組件,除了業務上商務邏輯要獨立、完整、可組合的、准確等的要求外,還有一個很重要的要求:就是線程安全性。顯然,我們都知道Servlet相比通用網關接口CGI有著明顯的優點就是可以維護一個線程池,不用每一次都要創建一個新的線程,但是可能很多程序員都會意識不到一個經常會遇到的問題:實例變量在所有的線程之間是共享的,並且如果存在著Servlet鏈互調時,就會發生數據錯誤。因此系統分析員一定要鼓勵程序員多注意利用Java提供的方法(如聲明自己的類實現了Runnable接口或者采用同步synchronized技術等)解決線程的問題,另外還要注意的是數據庫的連接問題,因為如果頻繁的訪問數據庫會造成數據庫服務器的負擔同時使客戶端的回饋速度變慢,因此要注意利用預先分配連接並在釋放以後能夠回收的連接池。所以,在開發Servlet也要注意下面的3個問題:
1、鼓勵程序員關注線程安全問題(如采用聲明自己的類實現了Runnable接口或者采用同步synchronized技術等解決線程的問題);
2、數據庫的訪問要充分利用JDBC技術的預先分配連接並在釋放以後能夠回收的連接池;
3、鼓勵系統分析員將商務邏輯劃分成單個的獨立的可通用的可重用的商務邏輯組件,在實際的程序中通過Servlet鏈來完成某項商務邏輯。
EJB實際上單就程序的寫作方面要比Servlet簡單的多,它使程序員只需要關心要實現的是甚麽就可以了,而不必關心事務的處理,底層的操作等等問題。但是也還是有一些編程方面的要求:
1、最好能夠在程序中將所有的static字段都聲明為final型的,這樣可以保證多個實例出現時語義的不一致問題;
2、注意線程問題,同Servlet;
3、不使用文件系統。EJB組件可以通過環境命名上下文用一種標准的方法進行環境實體查詢,基本上是不用文件系統。
4、禁用socket來進行監聽和接收連接,或者用其進行多路發送。
5、不可能用awt函數來完成鍵盤的輸入和輸出,如果有的話,應該是向控制台輸出控制信息,因為組件是用來在服務器端完成某一項商務邏輯的。
第四章:J2EE平台架構開發CRM的內容
本章的內容是一個非常大的部分,他所涵蓋的就是具體的開發方案,其中包括使用案例圖,運行圖等等。因為某種原因,這兒就不寫了,請諒解。
第五章:技術層面控制J2EE平台架構開發CRM的過程
在J2EE平台上開發CRM應用系統,是一個非常優秀的方案,一方面J2EE是一項比較成熟的技術規范,各大IT服務器、中間件廠商也都大力推崇並支持,盡管微軟大力推出.NET,但是畢竟.NET是一項新的技術規范,如果在其上進行開發的話,風險顯然要大得多,而J2EE目前卻正是在走向成熟。
正像任何事情一樣,在先進的J2EE平台上開發CRM應用系統必須要有一個良好的實施過程,在這個過程當中,有一個非常重要的腳色:系統分析員。系統分析員自身對於J2EE技術的掌握深度、對CRM應用系統的業務理解程度很大得影響了開發的過程,甚至可以毫不誇張的說,系統分析員自身的素質決定了開發的成功與否,這是一個非常關鍵的因素。 首先是系統分析員對於客戶的需求的理解程度,只有深入的理解了客戶的需求,才能夠將商務邏輯很好的劃分;其次是系統分析員的思維是否嚴密,是否嚴謹,是否具有很強的邏輯思維能力,因為這涉及到將商務邏輯進一步細化成獨立的可重用的業務邏輯與使用邏輯。第三是其是否對於J2EE技術有著非常深的掌握,這是實施CRM的另外一個重要之處,因為在整個的開發過程中,其實重心就在服務器端組件的開發上,一個系統能否穩定,高效的運行,很大程度上取決於開發技術上是否規范與合理,而系統分析員在實施編碼階段的主要職責就是負責檢查程序員的程序代碼
在開發過程中另外一個注意的是開發人員的分工。在J2EE平台上的開發與一般的軟件開發概念不同,它有著嚴格的分工:
1、系統分析員;
2、後台組件開發程序員(主要是Servlet與EJB);
3、後台服務器實施技術人員(主要負責組件的管理);
4、後台組件測試人員;
5、前台用戶界面程序員(主要是jsp程序員+美工);
6、前台測試技術人員;
在實際的實施過程中,後台服務器實施技術人員可以充當後台組件測試人員的腳色,同樣,前台用戶界面程序員可以充當前台測試技術人員,因為他的頁面中所包含的邏輯比較少。
總結一下,關鍵的幾點:1、商務邏輯一定要劃分的非常合理,原則是一個組件中應該只含有一種商務邏輯,一般的商務邏輯應該是通過幾個組件的協同合作來實現的(如何劃分,如何組合就是看系統分析員的功底了!)2、分工一定要明確,除了上面所列出的腳色充當之外,盡量避免前台程序員與後台程序員的腳色互換,否則很可能造成商務邏輯組件之間的耦合,而這是絕對不允許的,否則隨著開發過程的進行,就會發現越來越難以控制應用的開發。所以在開發過程中一定要注意組件的商務邏輯的獨立性與唯一性,系統分析員和項目負責人一定要嚴格把關,這一點非常非常重要。
第六章:CRM應用系統各個模塊的具體技術實現
應用系統都是開發商基於對某項業務的深刻理解而產生的,不同的行業有不同的商務邏輯,即便是同一行業也有不同,因此,要根據客戶的實際需求來做。但是,作為一個CRM系統她都有一個共同的框架,就是上面所提到的,因為,一套完整和實用的CRM系統可以看作是: 框架+具體商務邏輯。而框架部分則就是上面要求系統分析員所做的工作:將通用的商務邏輯抽象出來做成組件,以備復用。
本章應該是一個詳細的模塊設計,其中包括組件組合使用圖,流程圖以及其他的文檔等等。出於和第四章同樣的原因,請諒解。
第七章:國內CRM系統目前存在的問題以及采用J2EE技術進行的解決方案
我們研究過國內幾家CRM系統,學習到很多的東西,但同時也發現一些問題,現在舉幾個例子:
1、大而全,但是各個功能做的太過於簡單,無法實用。
2、缺乏集成能力,無法將網頁、電郵、電話、傳真等集成。
3、沒有與客戶的互動渠道。
就這三個原因,是因為在整個的設計上偏離了以客戶為中心的原則,沒有將客戶的需求詳細、完整的劃分成個體的、獨立的功能組件,沒有將各個功能做成是以客戶為核心的插件,再加上如開發成本的壓力等。而如果是采用J2EE,並且嚴格的按照合理劃分的組件的方式來進行開發,就會解決或者避免或者減輕這些問題。比如,在開發完銷售模塊與服務模塊的組件之後,電子商務模塊基本上也就完成,只需要少許的其它組件就可以完成一個電子商務模塊。