本發(fā)明涉及DMD系統(tǒng)領(lǐng)域,具體地說是智能客戶端模式下DMD系統(tǒng)與業(yè)務(wù)系統(tǒng)的接口配置方法。
背景技術(shù):
:主數(shù)據(jù)(英文全稱為MDMasterData,英文簡稱為DMD)指系統(tǒng)間共享數(shù)據(jù)(例如,客戶、供應(yīng)商、賬戶和組織部門相關(guān)數(shù)據(jù))。與記錄業(yè)務(wù)活動,波動較大的交易數(shù)據(jù)相比,主數(shù)據(jù)(也稱基準(zhǔn)數(shù)據(jù))變化緩慢。在正規(guī)的關(guān)系數(shù)據(jù)模型中,交易記錄(例如,訂單行項(xiàng))可通過關(guān)鍵字(例如,訂單頭或發(fā)票編號和產(chǎn)品代碼)調(diào)出主數(shù)據(jù)。主數(shù)據(jù)必須存在并加以正確維護(hù),才能保證交易系統(tǒng)的參照完整性。企業(yè)存在各種業(yè)務(wù)系統(tǒng),并且每個業(yè)務(wù)系統(tǒng)的基礎(chǔ)數(shù)據(jù)規(guī)則不一定相同。因此,MDM系統(tǒng)將主數(shù)據(jù)向各個業(yè)務(wù)系統(tǒng)發(fā)送的過程中需要開發(fā)不同的數(shù)據(jù)接口。如果這些接口都放到MDM系統(tǒng)中實(shí)現(xiàn),將影響MDM系統(tǒng)的穩(wěn)定性,并且不利于擴(kuò)展。如何實(shí)現(xiàn)DMD系統(tǒng)中接口的動態(tài)調(diào)用、提高接口的擴(kuò)展性,是需要解決的技術(shù)問題。技術(shù)實(shí)現(xiàn)要素:本發(fā)明的技術(shù)任務(wù)是針對以上不足之處,提供一種智能客戶端模式下DMD系統(tǒng)與業(yè)務(wù)系統(tǒng)的接口配置方法,來解決的問題為如何實(shí)現(xiàn)DMD系統(tǒng)中接口的動態(tài)調(diào)用、提高接口的擴(kuò)展性。本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:智能客戶端模式下DMD系統(tǒng)與業(yè)務(wù)系統(tǒng)的接口配置方法,步驟為:(1)、DMD系統(tǒng)中的接口為DMD接口,配置DMD接口的接口信息表,接口信息表中包括接口基本信息、接口類型、接口執(zhí)行位置、接口參數(shù)以及接口狀態(tài),接口狀態(tài)為啟用狀態(tài)或停用狀態(tài),接口執(zhí)行位置為客戶端或服務(wù)器端;(2)、在智能客戶端獲取DMD接口的接口信息表,如果DMD接口的接口狀態(tài)為啟用狀態(tài),則執(zhí)行步驟(3);(3)、判斷DMD接口的接口執(zhí)行位置,如果接口執(zhí)行位置為客戶端,則在客戶端通過步驟(4)進(jìn)行DMD接口調(diào)用,如果接口執(zhí)行位置為服務(wù)器端,則在服務(wù)器端通過步驟(4)進(jìn)行DMD接口調(diào)用;(4)、判斷DMD接口的接口類型,根據(jù)接口類型調(diào)用與相應(yīng)類型的DMD接口;(5)、接口執(zhí)行完畢后,將接口執(zhí)行情況返回。進(jìn)一步的,接口類型包括DLL構(gòu)件和Web服務(wù)。進(jìn)一步的,步驟(3)中如果接口執(zhí)行位置為服務(wù)器端,在智能客戶端調(diào)用web服務(wù)接口,通過web服務(wù)接口進(jìn)入服務(wù)器端,在服務(wù)器端通過步驟(4)進(jìn)行DMD接口調(diào)用。進(jìn)一步的,步驟(1)中接口執(zhí)行位置的設(shè)置方法為:根據(jù)業(yè)務(wù)需要設(shè)置接口的執(zhí)行位置;如果DMD接口中有操作界面、需要用戶對數(shù)據(jù)進(jìn)行干預(yù)操作時,將接口執(zhí)行位置設(shè)置為客戶端;如果接口程序中沒有需要用戶干預(yù)的操作,將接口設(shè)置為服務(wù)器端。進(jìn)一步的,接口基本信息包括接口編號、接口名稱、業(yè)務(wù)系統(tǒng)編號、字典編號、IP地址、命名空間、Web服務(wù)名稱、DLL服務(wù)名稱、接口方法以及接口返回值。進(jìn)一步的,接口參數(shù)包括參數(shù)序號、參數(shù)名稱、參數(shù)類型以及參數(shù)值。本發(fā)明的智能客戶端模式下DMD系統(tǒng)與業(yè)務(wù)系統(tǒng)的接口配置方法和現(xiàn)有技術(shù)相比,具有以下有益效果:1、本發(fā)明配置簡單,比較方便的滿足項(xiàng)目與異構(gòu)系統(tǒng)的集成需求,無需修改標(biāo)準(zhǔn)產(chǎn)品代碼,。可以充分利用智能客戶端的優(yōu)勢,可以在接口中實(shí)現(xiàn)豐富的操作界面,具有很好的推廣應(yīng)用價值;2、本發(fā)明擴(kuò)展性較好,可以動態(tài)調(diào)用項(xiàng)目開發(fā)人員開發(fā)的接口,并且DMD接口方法和參數(shù)可自定義;3、本發(fā)明DMD接口類型包括DLL構(gòu)件和Web服務(wù),支持兩種接口方式,應(yīng)用范圍廣;4、本發(fā)明既支持客戶端調(diào)用,也支持服務(wù)器端調(diào)用,具有調(diào)用方式靈活的優(yōu)點(diǎn):5、客戶無需購買價格較高的ESB數(shù)據(jù)總線系統(tǒng),降低了項(xiàng)目成本。附圖說明下面結(jié)合附圖對本發(fā)明進(jìn)一步說明。附圖1為智能客戶端模式下DMD系統(tǒng)與業(yè)務(wù)系統(tǒng)的接口配置方法的流程框圖。具體實(shí)施方式下面結(jié)合附圖和具體實(shí)施例對本發(fā)明作進(jìn)一步說明。本發(fā)明的智能客戶端模式下DMD系統(tǒng)與業(yè)務(wù)系統(tǒng)的接口配置方法方法,步驟為:(1)、DMD系統(tǒng)中的接口為DMD接口,配置DMD接口的接口信息表,接口信息表中包括接口基本信息、接口類型、接口執(zhí)行位置、接口參數(shù)以及接口狀態(tài),接口狀態(tài)為啟用狀態(tài)或停用狀態(tài),接口執(zhí)行位置為客戶端或服務(wù)器端;(2)、在智能客戶端獲取DMD接口的接口信息表,如果DMD接口的接口狀態(tài)為啟用狀態(tài),則執(zhí)行步驟(3);(3)、判斷DMD接口的接口執(zhí)行位置,如果接口執(zhí)行位置為客戶端,則在客戶端通過步驟(4)進(jìn)行DMD接口調(diào)用,如果接口執(zhí)行位置為服務(wù)器端,則在服務(wù)器端通過步驟(4)進(jìn)行DMD接口調(diào)用;(4)、判斷DMD接口的接口類型,根據(jù)接口類型調(diào)用與相應(yīng)類型的DMD接口;(5)、接口執(zhí)行完畢后,將接口執(zhí)行情況返回。其中,步驟(1)中接口基本信息包括接口編號、接口名稱、業(yè)務(wù)系統(tǒng)編號、字典編號、IP地址、命名空間、Web服務(wù)名稱、DLL服務(wù)名稱、接口方法以及接口返回值。接口類型包括DLL構(gòu)件和Web服務(wù)。接口參數(shù)包括參數(shù)序號、參數(shù)名稱、參數(shù)類型以及參數(shù)值。本實(shí)施例中,接口信息信息表包括MDMJK表和MDMJKMX表,MDMJK表和MDMJKMX表如下所示:MDMJK表:字段編號字段名稱字段類型說明MDMJK_BH接口編號Varchar(36)接口編號MDMJK_MC接口名稱Varchar(200)接口名稱MDMJK_YWXTBH業(yè)務(wù)系統(tǒng)編號Varchar(20)業(yè)務(wù)系統(tǒng)編號MDMJK_ZDBH字典編號Varchar(100)接口對象(字典)編號MDMJK_TYBZ啟用狀態(tài)Char(1)1:啟用狀態(tài);0:停用狀態(tài)MDMJK_LXBZ接口類型Char(1)接口類型:構(gòu)件;WEB服務(wù)MDMJK_ZXWZ執(zhí)行位置Char(1)執(zhí)行位置:C客戶端;S服務(wù)器端MDMJK_IPIP地址Varchar(200)MDMJK_NAMESPAC命名空間Varchar(200)MDMJK_WEBSERVICEWeb服務(wù)名稱Varchar(200)MDMJK_DLLDll文件名稱Varchar(200)MDMJK_METHOD接口方法Varchar(200)MDMJK_RETURN接口返回值Varchar(200)MDMJKMX表:字段編號字段名稱字段類型說明MDMJKMX_CSXH參數(shù)序號Varchar(36)MDMJKMX_CS參數(shù)名稱Varchar(200)MDMJKMX_CSLX參數(shù)類型Varchar(20)MDMJKMX_CSVALUE參數(shù)值Varchar(100)步驟(1)中接口執(zhí)行位置的設(shè)置方法為:根據(jù)業(yè)務(wù)需要設(shè)置接口的執(zhí)行位置;如果DMD接口中有操作界面、需要用戶對數(shù)據(jù)進(jìn)行干預(yù)操作時,將接口執(zhí)行位置設(shè)置為客戶端;如果接口程序中沒有需要用戶干預(yù)的操作,將接口設(shè)置為服務(wù)器端。步驟(3)中如果接口執(zhí)行位置為服務(wù)器端,在智能客戶端調(diào)用web服務(wù)接口,通過web服務(wù)接口進(jìn)入服務(wù)器端,在服務(wù)器端通過步驟(4)進(jìn)行DMD接口調(diào)用??蛻舳苏{(diào)用DMD接口的方法中,核心代碼如下://獲取接口配置信息DataSetdsMDMJK=MDMJKClient.Current(gsp_state).GetMDMJKList("MDMP","MDMJK_YWXTBH='"+pslinkbh+"'andMDMJK_ZDBH='"+psZdbh+"'ANDMDMJK_TYBZ='0'ANDMDMJK_SFXXJK='0'ANDMDMJK_FX='0'");if(dsMDMJK!=null&&dsMDMJK.Tables["MDMJK"].Rows.Count>0){DataRowvJKRow=dsMDMJK.Tables["MDMJK"].Rows[0];stringvsZxwz=vJKRow["MDMJK_ZXWZ"].ToString();//執(zhí)行位置:C客戶端;S服務(wù)器端if(vsZxwz=="C"){//客戶端端運(yùn)行的接口vsMsg=MDMJKInvok.MDMJKInvoke(dsMDMJK,dtData,"");}elseif(vsZxwz=="S"){//服務(wù)器端運(yùn)行的接口vsMsg=_service.DataSjtb_ZdyJkJM(pslinkbh,psZdbh,psNmCol,psColStr,vsDtData,psLastUpdateTime);}else{vsMsg="業(yè)務(wù)系統(tǒng)【"+pslinkbh+"】的字典【"+psZdbh+"】所定義的接口【執(zhí)行位置】設(shè)置不正確,無法下發(fā)數(shù)據(jù)。";}}服務(wù)器端調(diào)用DMD接口的方法中,部分代碼如下:publicstringDataSjtb_ZdyJkJM(stringpslinkbh,stringpsZdbh,stringpsNMCol,stringpsColStr,stringpsDtData,stringpsLastUpdateTime){stringvsMsg="";DataSetdsMDMJK=null;//檢查適配器模塊是否有接口表if(DataCheck.CheckTableExistsByAppCode("","MDMJK")==true){//獲取在服務(wù)器端執(zhí)行的啟用狀態(tài)的接口配置信息dsMDMJK=MDMJK.GetMDMJKListByAppCode("","MDMP","MDMJK_YWXTBH='"+pslinkbh+"'andMDMJK_ZDBH='"+psZdbh+"'ANDMDMJK_TYBZ='0'ANDMDMJK_ZXWZ='S'ANDMDMJK_SFXXJK='0'ANDMDMJK_FX='0'");if(dsMDMJK!=null&&dsMDMJK.Tables["MDMJK"].Rows.Count>0){//執(zhí)行接口vsMsg=MDMJKInvok.MDMJKInvoke(dsMDMJK,dtData,"");}}else{vsMsg="沒有找到接口信息表";}returnvsMsg;}接口執(zhí)行的方法中,部分代碼如下:stringvsMsg="";stringvsErrMsg=string.Empty;DataRowvJKRow=dsMDMJK.Tables["MDMJK"].Rows[0];stringvsLXBZ=vJKRow["MDMJK_LXBZ"].ToString();stringvsZxwz=vJKRow["MDMJK_ZXWZ"].ToString();//執(zhí)行位置:C客戶端;S服務(wù)器端if(vsLXBZ=="0")//構(gòu)件接口{#region構(gòu)件接口try{stringvsDll=vJKRow["MDMJK_DLL"].ToString().Trim();stringvsNameSpace=vJKRow["MDMJK_NAMESPACE"].ToString().Trim();stringvsClassName=vJKRow["MDMJK_WEBSERVICE"].ToString().Trim();stringvsMethod=vJKRow["MDMJK_METHOD"].ToString().Trim();stringvsReturnLx=vJKRow["MDMJK_RETURN"].ToString().Trim();intviCount=dsMDMJK.Tables["MDMJKMX"].DefaultView.Count;object[]objparams=null;if(viCount>0){dsMDMJK.Tables["MDMJKMX"].DefaultView.Sort="MDMJKMX_CSXHASC";stringvsCs="";//參數(shù)stringvsCslx="";stringvsCsValue="";objparams=newobject[viCount];for(inti=0;i<viCount;i++){//為接口參數(shù)賦值vsCs=dsMDMJK.Tables["MDMJKMX"].Rows[i]["MDMJKMX_CS"].ToString();vsCslx=dsMDMJK.Tables["MDMJKMX"].Rows[i]["MDMJKMX_CSLX"].ToString();if(vsCslx=="string"){vsCsValue=dsMDMJK.Tables["MDMJKMX"].Rows[i]["MDMJKMX_CSVALUE"].ToString().Trim();if(vsCsValue.ToUpper()=="@WHERE@"){objparams[i]=psWhere;}else{objparams[i]=vsCsValue;}}elseif(vsCslx=="int"){objparams[i]=(int)dsMDMJK.Tables["MDMJKMX"].Rows[i]["MDMJKMX_CSVALUE"];}elseif(vsCslx=="bool"){objparams[i]=(bool)dsMDMJK.Tables["MDMJKMX"].Rows[i]["MDMJKMX_CSVALUE"];}elseif(vsCslx=="MDMDataSet"){DataSetdsData=newDataSet();dsData.Tables.Add(dtData.Copy());objparams[i]=(DataSet)dsData;}elseif(vsCslx=="MDMDataTable"){objparams[i]=dtData;}elseif(vsCslx=="MDMXML"){stringvsXml=PubFunction.ConvertDataTableToXML(dtData);objparams[i]=vsXml;}}}//利用反射的方式執(zhí)行接口if(vsReturnLx!="void"){objectresultObj=MDMJKInvok.InvokeDll(vsZxwz,vsDll,vsNameSpace,vsClassName,vsMethod,objparams,refvsErrMsg);vsMsg=resultObj.ToString();if(vsErrMsg!=""){vsMsg+="調(diào)用接口異常信息:"+vsErrMsg;}}else{MDMJKInvok.InvokeDll(vsZxwz,vsDll,vsNameSpace,vsClassName,vsMethod,objparams,refvsErrMsg);}}catch(Exceptionex){thrownewException("調(diào)用自定義構(gòu)件dll是出現(xiàn)異常:"+ex.Message);}#endregion構(gòu)件接口}elseif(vsLXBZ=="1")//webservice接口{#regionWeb服務(wù)try{stringurl=vJKRow["MDMJK_IP"].ToString().Trim();stringclassNameSpace=vJKRow["MDMJK_NAMESPACE"].ToString().Trim();stringwebservice=vJKRow["MDMJK_WEBSERVICE"].ToString().Trim();stringmethodName=vJKRow["MDMJK_METHOD"].ToString().Trim();stringvsReturnLx=vJKRow["MDMJK_RETURN"].ToString().Trim();intviCount=dsMDMJK.Tables["MDMJKMX"].DefaultView.Count;object[]objparams=null;if(viCount>0){dsMDMJK.Tables["MDMJKMX"].DefaultView.Sort="MDMJKMX_CSXHASC";stringvsCs="";//參數(shù)stringvsCslx="";stringvsCsValue="";objparams=newobject[viCount];for(inti=0;i<viCount;i++){//為接口參數(shù)賦值vsCs=dsMDMJK.Tables["MDMJKMX"].Rows[i]["MDMJKMX_CS"].ToString();vsCslx=dsMDMJK.Tables["MDMJKMX"].Rows[i]["MDMJKMX_CSLX"].ToString();if(vsCslx=="string"){vsCsValue=dsMDMJK.Tables["MDMJKMX"].Rows[i]["MDMJKMX_CSVALUE"].ToString().Trim();if(vsCsValue.ToUpper()=="@WHERE@"){objparams[i]=psWhere;}else{objparams[i]=vsCsValue;}}elseif(vsCslx=="int"){objparams[i]=(int)dsMDMJK.Tables["MDMJKMX"].Rows[i]["MDMJKMX_CSVALUE"];}elseif(vsCslx=="bool"){objparams[i]=(bool)dsMDMJK.Tables["MDMJKMX"].Rows[i]["MDMJKMX_CSVALUE"];}elseif(vsCslx=="MDMDataSet"){DataSetdsData=newDataSet();dsData.Tables.Add(dtData.Copy());objparams[i]=dsData;}elseif(vsCslx=="MDMDataTable"){objparams[i]=dtData;}elseif(vsCslx=="MDMXML"){stringvsXml=PubFunction.ConvertDataTableToXML(dtData);objparams[i]=vsXml;}}}//調(diào)用配置的webservice服務(wù)if(vsReturnLx!="void"){objectresultObj=MDMJKInvok.InvokeWebservice(url,classNameSpace,webservice,methodName,objparams,refvsErrMsg);vsMsg=resultObj.ToString();if(vsErrMsg!=""){vsMsg+="調(diào)用接口異常信息:"+vsErrMsg;}}else{MDMJKInvok.InvokeWebservice(url,classNameSpace,webservice,methodName,objparams,refvsMsg);}}catch(Exceptionex){vsMsg="調(diào)用自定義WebService時出現(xiàn)異常,異常信息:"+ex.Message;}#endregionWeb服務(wù)}else{vsMsg="接口類型不正確,無法下發(fā)數(shù)據(jù)。";}通過上面具體實(shí)施方式,所述
技術(shù)領(lǐng)域:
的技術(shù)人員可容易的實(shí)現(xiàn)本發(fā)明。但是應(yīng)當(dāng)理解,本發(fā)明并不限于上述的具體實(shí)施方式。在公開的實(shí)施方式的基礎(chǔ)上,所述
技術(shù)領(lǐng)域:
的技術(shù)人員可任意組合不同的技術(shù)特征,從而實(shí)現(xiàn)不同的技術(shù)方案。除說明書所述的技術(shù)特征外,均為本專業(yè)技術(shù)人員的已知技術(shù)。當(dāng)前第1頁1 2 3