本發(fā)明涉及SAPRFC接口集成
技術(shù)領(lǐng)域:
:,更具體地,涉及一種與SAP集成的數(shù)據(jù)回調(diào)的方法。
背景技術(shù):
::SAP(企業(yè)管理系列軟件)為“SystemApplicationsandProducts”的簡(jiǎn)稱,是SAP公司的產(chǎn)品——企業(yè)管理解決方案的軟件名稱。然而,目前,隨著企業(yè)信息化技術(shù)的發(fā)展,一個(gè)企業(yè)經(jīng)常會(huì)上幾個(gè)系統(tǒng)去支撐整個(gè)信息化框架,SAP系統(tǒng)在制造行業(yè)的受用度很高,企業(yè)如果同時(shí)使用相關(guān)無開放接口軟件與SAP系統(tǒng),則兩個(gè)系統(tǒng)之間的集成不可避免,與SAP集成有幾種方式,此處主要針對(duì)的是與SAPRFC接口集成。RFC是SAP系統(tǒng)和其他(SAP或非SAP)系統(tǒng)間的一個(gè)重要而常用的雙向接口技術(shù),也被視為SAP與外部通信的基本協(xié)議。簡(jiǎn)單地說,RFC過程就是系統(tǒng)調(diào)用當(dāng)前系統(tǒng)外的程序模塊,從而實(shí)現(xiàn)某個(gè)功能,而且調(diào)用系統(tǒng)和被調(diào)用系統(tǒng)中至少有一個(gè)必須是SAPABAP系統(tǒng)。這種遠(yuǎn)程功能調(diào)用也可在同一系統(tǒng)內(nèi)部進(jìn)行(如本地SAP系統(tǒng)內(nèi)的遠(yuǎn)程調(diào)用);但通常情況下,調(diào)用程序和被調(diào)用程序處于不同系統(tǒng)。技術(shù)實(shí)現(xiàn)要素:本發(fā)明為克服上述問題或者至少部分地解決上述問題,提供一種與SAP集成的數(shù)據(jù)回調(diào)的方法。根據(jù)本發(fā)明的一個(gè)方面,提供一種與SAP集成的數(shù)據(jù)回調(diào)的方法,包括以下步驟:步驟1,設(shè)置RFC接口名稱數(shù)組,用于存儲(chǔ)RFC接口名稱信息;設(shè)置SAP參數(shù)名稱數(shù)組,用于存儲(chǔ)SAP參數(shù)名稱信息;設(shè)置SAP參數(shù)類型數(shù)組,用于存儲(chǔ)SAP參數(shù)類型信息;設(shè)置數(shù)值來源數(shù)組,用于存儲(chǔ)數(shù)值來源信息;步驟2,讀取所述RFC接口名稱數(shù)組、SAP參數(shù)名稱數(shù)組和SAP參數(shù)類型數(shù)組內(nèi)數(shù)據(jù)信息,并分別生成對(duì)應(yīng)的中間文件;步驟3,讀取所述中間文件的數(shù)據(jù)信息;將所述中間文件數(shù)據(jù)信息上傳給SAP接口實(shí)現(xiàn)SAPRFC接口的回調(diào)。本申請(qǐng)?zhí)岢鲆环N與SAP集成的數(shù)據(jù)回調(diào)的方法,避免針對(duì)每個(gè)SAPRFC接口做定制開發(fā),方便外部程序調(diào)用。附圖說明圖1為根據(jù)本發(fā)明實(shí)施例的一種與SAP集成的數(shù)據(jù)回調(diào)的方法整體流程示意圖;圖2為根據(jù)本發(fā)明實(shí)施例的一種與SAP集成的數(shù)據(jù)回調(diào)的方法中XML文件結(jié)構(gòu)示意圖。具體實(shí)施方式下面結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明的具體實(shí)施方式作進(jìn)一步詳細(xì)描述。以下實(shí)施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。圖1中,示出本發(fā)明一個(gè)具體實(shí)施例中,一種與SAP集成的數(shù)據(jù)回調(diào)的方法整體流程示意圖??傮w上,包括:步驟1,設(shè)置RFC接口名稱數(shù)組,用于存儲(chǔ)RFC接口名稱信息;設(shè)置SAP參數(shù)名稱數(shù)組,用于存儲(chǔ)SAP參數(shù)名稱信息;設(shè)置SAP參數(shù)類型數(shù)組,用于存儲(chǔ)SAP參數(shù)類型信息;設(shè)置數(shù)值來源數(shù)組,用于存儲(chǔ)數(shù)值來源信息;步驟2,讀取所述RFC接口名稱數(shù)組、SAP參數(shù)名稱數(shù)組和SAP參數(shù)類型數(shù)組內(nèi)數(shù)據(jù)信息,并分別生成對(duì)應(yīng)的中間文件;步驟3,讀取所述中間文件的數(shù)據(jù)信息;將所述中間文件數(shù)據(jù)信息上傳給SAP接口實(shí)現(xiàn)SAPRFC接口的回調(diào)。一種與SAP集成的數(shù)據(jù)回調(diào)的方法,整體流程示意圖。所述步驟1中設(shè)置數(shù)值來源數(shù)組,用于存儲(chǔ)數(shù)值來源信息還包括:設(shè)置不同數(shù)值表示參數(shù)的類型:普通參數(shù)、結(jié)構(gòu)體參數(shù)和表參數(shù);設(shè)置不同數(shù)值表示參數(shù)為輸入?yún)?shù)或輸出參數(shù)。例如(1、2、3)表示輸入?yún)?shù),(4、5、6)表示輸出參數(shù),其中(1、4)表示普通參數(shù),(2、5)表示結(jié)構(gòu)體參數(shù),(3、6)表示表參數(shù)。一種與SAP集成的數(shù)據(jù)回調(diào)的方法,整體流程示意圖。所述步驟2還包括:設(shè)置數(shù)值來源數(shù)組,用于存儲(chǔ)數(shù)值來源信息;針對(duì)普通參數(shù),存儲(chǔ)變量值;針對(duì)結(jié)構(gòu)體參數(shù),存儲(chǔ)一維數(shù)組名稱;針對(duì)表參數(shù),存儲(chǔ)二維數(shù)組名稱。一種與SAP集成的數(shù)據(jù)回調(diào)的方法,整體流程示意圖。所述中間文件為xml格式。一種與SAP集成的數(shù)據(jù)回調(diào)的方法,整體流程示意圖。所述步驟3中將所述中間文件數(shù)據(jù)信息上傳給SAP接口實(shí)現(xiàn)SAPRFC接口的回調(diào)還包括:利用C#封裝DLL技術(shù),解析所述xml格式中間文件的數(shù)據(jù)數(shù)據(jù)信息;將所述解析得到的數(shù)據(jù)信息傳遞給SAP接口實(shí)現(xiàn)SAPRFC接口的調(diào)用。SAPRFC接口是由接口名稱、輸入?yún)?shù)、輸出參數(shù)組成的,其中參數(shù)類型由普通變量參數(shù)、結(jié)構(gòu)體參數(shù)和表參數(shù)組成;普通變量參數(shù):一個(gè)變量存儲(chǔ)一個(gè)值;結(jié)構(gòu)體參數(shù):可以理解成多個(gè)普通變量、結(jié)構(gòu)體和表參數(shù)的集合;但是RFC接口的結(jié)構(gòu)體參數(shù)不會(huì)設(shè)計(jì)的這么復(fù)雜,一般都是由多個(gè)普通變量組成的集合;表參數(shù):類似于數(shù)據(jù)庫(kù)表。針對(duì)SAPRFC接口的參數(shù)類型,回調(diào)的設(shè)計(jì)如下:一種實(shí)現(xiàn)與SAP集成的回調(diào)方法,其特征在于包括以下步驟:設(shè)置FunctionName、ParamName[]、ParamType[]、ParamFrom[]數(shù)組,其中FunctionName[]:RFC接口名稱;ParamName[]:存儲(chǔ)SAP參數(shù)的名稱;paramType[]:存儲(chǔ)SAP參數(shù)的類型。在SAP中,RFC接口參數(shù)類型分為三種:一般變量、結(jié)構(gòu)體(Struct)和表(Table),為了方便生成對(duì)應(yīng)的xml節(jié)點(diǎn),故用數(shù)值來區(qū)分類型(每一種參數(shù)類型的xml節(jié)點(diǎn)格式不一樣);由于輸入?yún)?shù)和輸出參數(shù)在XML中是兩個(gè)大節(jié)點(diǎn),故每一種參數(shù)類型有兩個(gè)數(shù)值,一個(gè)表示輸入,一個(gè)表示輸出。【0/1/2】表示輸入?yún)?shù),【3/4/5】表示輸出參數(shù);【0/3】表示普通參數(shù),【1/4】表示結(jié)構(gòu)體參數(shù),【2/5】表示表參數(shù);ParamFrom[]:存儲(chǔ)值的來源,針對(duì)普通參數(shù),直接存儲(chǔ)變量值;針對(duì)結(jié)構(gòu)體參數(shù),存儲(chǔ)一維數(shù)組名稱;針對(duì)表參數(shù),存儲(chǔ)二維數(shù)組名稱。如下表具體實(shí)施例所示:如圖2所示,讀取所述數(shù)組內(nèi)包含的數(shù)據(jù)信息并生成對(duì)應(yīng)的xml文件,其中,SAP:根節(jié)點(diǎn);FuncName:SAP接口名稱;Exports:輸入?yún)?shù)節(jié)點(diǎn),其下存儲(chǔ)輸入?yún)?shù)的名稱及值;該節(jié)點(diǎn)下可以有Normal、Struct、Table一個(gè)和多個(gè)節(jié)點(diǎn);Normal:普通參數(shù)節(jié)點(diǎn),name屬性存儲(chǔ)參數(shù)名稱,value參數(shù)存儲(chǔ)值;Struct:結(jié)構(gòu)體參數(shù)節(jié)點(diǎn),name存儲(chǔ)結(jié)構(gòu)體參數(shù)名稱,該節(jié)點(diǎn)下存在至少一個(gè)Normal節(jié)點(diǎn);Table:表參數(shù)節(jié)點(diǎn),name存儲(chǔ)表參數(shù)名稱,該節(jié)點(diǎn)下存在一個(gè)Columns節(jié)點(diǎn)和至少一個(gè)Data節(jié)點(diǎn);Data:表參數(shù)一行的記錄,name存儲(chǔ)字段名,value存儲(chǔ)字段值Columns:表參數(shù)的字段名存儲(chǔ)節(jié)點(diǎn);Meta:每一列的字段名和字段值。生成相應(yīng)的數(shù)據(jù)XML文件。與SAP進(jìn)行集成之后,所生產(chǎn)結(jié)果XML文件。將上述數(shù)據(jù)XML進(jìn)行解析,解析的xml數(shù)據(jù)最終存儲(chǔ)在SapFuncStruct類對(duì)象下。解析步驟:獲取SAP接口名:獲取FuncName節(jié)點(diǎn),讀取節(jié)點(diǎn)文本數(shù)據(jù),將數(shù)據(jù)存儲(chǔ)在SapFuncStruct對(duì)象的FuncName屬性中;獲取輸入?yún)?shù):遍歷Exports節(jié)點(diǎn)下的子節(jié)點(diǎn),子節(jié)點(diǎn)個(gè)數(shù)即為SapFuncStruct對(duì)象中數(shù)值exportParam的長(zhǎng)度。當(dāng)子節(jié)點(diǎn)名稱為Normal,則表示該參數(shù)為普通參數(shù),Type設(shè)置為isNormal,Name為屬性name對(duì)應(yīng)的值,value為屬性value對(duì)應(yīng)的值;當(dāng)子節(jié)點(diǎn)名稱為Struct時(shí),則表示該參數(shù)為結(jié)構(gòu)體參數(shù),Type設(shè)置為isStruct,Name為節(jié)點(diǎn)屬性name對(duì)應(yīng)的值,遍歷該節(jié)點(diǎn)下的子節(jié)點(diǎn)Normal,Normal節(jié)點(diǎn)的個(gè)數(shù)即為Item數(shù)組的長(zhǎng)度,item成員的設(shè)置按照步驟1)處理;當(dāng)子節(jié)點(diǎn)名稱為Table時(shí),則表示該參數(shù)為表參數(shù),Type設(shè)置為isTable,Name為節(jié)點(diǎn)屬性name對(duì)應(yīng)的值;獲取該節(jié)點(diǎn)下的子節(jié)點(diǎn)Columns節(jié)點(diǎn),遍歷Columns節(jié)點(diǎn)下的子節(jié)點(diǎn)meta,meta節(jié)點(diǎn)的屬性name即為table參數(shù)的一個(gè)字段名,根據(jù)獲取的字段名建立DataTable對(duì)象TableValue;遍歷Table節(jié)點(diǎn)下的子節(jié)點(diǎn)Data,每一個(gè)Data節(jié)點(diǎn)即為DataTable對(duì)象的一行值,遍歷Data節(jié)點(diǎn)下的子節(jié)點(diǎn)meta,獲取對(duì)應(yīng)的name屬性和value屬性,將Data節(jié)點(diǎn)對(duì)應(yīng)的行數(shù)據(jù)添加到TableValue中;獲取輸出參數(shù):遍歷Imports節(jié)點(diǎn)下的子節(jié)點(diǎn),子節(jié)點(diǎn)個(gè)數(shù)即為SapFuncStruct對(duì)象中數(shù)值importParam的長(zhǎng)度。當(dāng)子節(jié)點(diǎn)名稱為Normal,則表示該參數(shù)為普通參數(shù),Type設(shè)置為isNormal,Name為屬性name對(duì)應(yīng)的值;當(dāng)子節(jié)點(diǎn)名稱為Struct時(shí),則表示該參數(shù)為結(jié)構(gòu)體參數(shù),Type設(shè)置為isStruct,Name為節(jié)點(diǎn)屬性name對(duì)應(yīng)的值,遍歷該節(jié)點(diǎn)下的子節(jié)點(diǎn)Normal,Normal節(jié)點(diǎn)的個(gè)數(shù)即為Item數(shù)組的長(zhǎng)度,item成員的設(shè)置按照步驟1)處理;當(dāng)子節(jié)點(diǎn)名稱為Table時(shí),則表示該參數(shù)為表參數(shù),Type設(shè)置為isTable,Name為節(jié)點(diǎn)屬性name對(duì)應(yīng)的值;獲取該節(jié)點(diǎn)下的子節(jié)點(diǎn)Columns節(jié)點(diǎn),遍歷Columns節(jié)點(diǎn)下的子節(jié)點(diǎn)meta,meta節(jié)點(diǎn)的屬性name即為table參數(shù)的一個(gè)字段名,根據(jù)獲取的字段名建立DataTable對(duì)象TableValue;與SAP交互后,根據(jù)SAP的返回值寫XML:根據(jù)獲取到的輸出參數(shù),從SAP從提取對(duì)應(yīng)的值,寫入到xml文件中:如果輸出參數(shù)類型Type為isNormal,則根據(jù)Name屬性值定位到xml的Imports節(jié)點(diǎn)下的Normal節(jié)點(diǎn),給節(jié)點(diǎn)添加value屬性,并設(shè)置屬性值;如果輸出參數(shù)類型Type為isStruct,則根據(jù)Name屬性值定位到xml的Imports節(jié)點(diǎn)下的Struct節(jié)點(diǎn),遍歷Item數(shù)組,根據(jù)數(shù)值成員的Name屬性設(shè)置對(duì)應(yīng)name屬性匹配的Normal節(jié)點(diǎn)的value屬性值;如果輸出參數(shù)類型Type為isNormal,則根據(jù)Name屬性值定位到xml的Imports節(jié)點(diǎn)下的Table節(jié)點(diǎn),遍歷TableValue行記錄,根據(jù)行記錄添加Data節(jié)點(diǎn)并以meta節(jié)點(diǎn)的方式存儲(chǔ)該行對(duì)應(yīng)的字段名和值;得到的數(shù)據(jù)傳遞給SAP接口實(shí)現(xiàn)SAPRFC接口的調(diào)用。盡管已經(jīng)示出和描述了本發(fā)明的實(shí)施例,對(duì)于本領(lǐng)域的普通技術(shù)人員而言,可以理解在不脫離本發(fā)明的原理和精神的情況下可以對(duì)這些實(shí)施例進(jìn)行多種變化、修改、替換和變型,本發(fā)明的范圍由所附權(quán)利要求及其等同限定。最后,本申請(qǐng)的方法僅為較佳的實(shí)施方案,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。當(dāng)前第1頁1 2 3 當(dāng)前第1頁1 2 3