日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

SAP RFC 函数来创建 Java呼叫 学习总结 一步一步的插图

發布時間:2025/7/14 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SAP RFC 函数来创建 Java呼叫 学习总结 一步一步的插图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

前言


該公司很快就接到了一個項目,SAP有接口。讓我們做老大SAP。首先SAP聯系。但發展從來沒有打過。本周集中在這一個研究.


各種碰壁,SAP該系統讓我怎么說? 算了。說多了都是淚,以下附上本周學習成果。大家一起探討一下。ABAP 還得多學學.


Package (tcode:se80)

?

?

輸入須要創建的 Package ,例:ZTP (之前用T打頭測試。貌似不行,大家能夠試試)

?

點? Yes 創建.

?

輸入創建Package的信息.

?

?

Table (tcode:se11)


點擊Create.

?

?

點擊保存,彈出選擇Package界面


保存就可以.

切換到 Fields 選項卡:


一個字段可相應一個數據元素,一個數據元素可相應多個字段.

?

如上圖: ZAGE 數據元素不存在,雙擊可進入:

?



提示不存在,則創建.

輸入數據類型,長度:

?

保存。都會提示選擇Package,后面就不說了.

?

激活該數據元素.

?

回到創建表界面,就可以發現數據類型和長度都已顯示.

?

點擊 技術設置.

?

?

保存就可以.

?

點擊 索引.

?

點擊創建索引.

?

?

輸入索引名字.

?

選擇字段等

?

保存,激活索引,激活表.

?

上面忘記設置 Key,選一個字段設置Key就可以.

?

Function Group (tcode:se37)

?

?

輸入創建Function Group的信息.點擊保存后彈出選擇 Package 的界面:

?

?

選擇剛剛創建的 Package :

?

保存就可以.

?

?

Function Module (tcode:se37)

?

Z_TEST_1


點擊創建 , 選擇函數組.

?

創建后 , 在Attributes選項卡 選擇 Remote 遠程調用函數.

?

這里簡單說一下 Import,Export,Tables 三個選項卡

Import 就是須要導入的字段,在SAP的測試執行的時候能夠輸入該值進行測試,外部程序調用時傳值進入,能夠理解 Java方法參數.

Export 就是導出字段,程序運行完畢后返回字段,能夠理解 Java方法返回值,只是能夠返回多個.

Tables 能夠作為導入、導出, 他的字段為數據結果。事實上就是一個復雜參數,比方說外圍程序調用要傳入一批數據。就能夠使用他了,導出一樣,能夠返回一批數據.

?

這里我們就使用Table做一個批量上傳數據的一個功能,點擊 Tables選項卡,定義字段


Parameter Name,參數名,自定義

Type spec,參數類型 。普通值使用Type就可以。只是在Tables這里一般定義復雜類型。使用Like模擬一個結構對象

Associated Type,使用Like 時輸入我們的參考對象,能夠是表、視圖、元素等.

然后回車就可以,第一次回車好像報紅,再回車一次就能夠了,不知道其他大神有沒有遇到過.

?

點擊 Source code 選項卡,進入編碼.

?

小白也不知道復雜的編碼,所以僅僅能簡單寫一下了.

?

我們的目標是將傳入的數據插入到SAP的內表中,編碼例如以下

INSERT ZTAB01 FROM TABLEIMPT.

以上代碼就能夠啦,將傳入的 IMPT 導入到內表中.

先保存,點擊Check。無錯誤激活就可以.

?

然后點擊激活.

?

左下角會提示激活.

?

然后我們能夠測試一下程序是否成功.

?

進入到輸入參數界面,就可以看到我們定義的Tables字段.

?

點擊進入編輯數據.

?

?


完畢編輯后,返回.

?

點擊運行就可以.

?

此為運行結果.

?

通過 tcode:se11 進入到數據庫表查看數據

?

?

數據已插入到SAP內表.

?

Z_TEST_2

?

數據上傳已經完畢。這個時候我們做一個數據查詢的Function.

?

?

相同我們選擇 遠程調用函數

?

這個時候我們加一個 Import參數,有選擇性的依據條件來查詢.

?

在Tables參數我們加一個返回參數.

?

設置好后,進入編碼 source code.

?

*推斷傳入參數是否為空 IF DZNAME = '' . *為空查詢全部數據 SELECT * INTOTABLE OUTT FROM ZTAB01. ELSE. SELECT * INTOTABLE OUTT FROM ZTAB01 WHERE ZNAME = DZNAME. ENDIF.


點擊 Check,無問題后。激活測試.

?

測試時,輸入參數顯示出來了.

?



?

?

運行后。上圖已出結果。點擊進入查看明細.

?



不輸入條件時查詢.

?

?


到此RFC我們就已經創建好了.

?

?

Java

?

準備工具

Eclipse

SapJco.jar

librfc32.dll

sapjcorfc.dll

(以上兩個動態連接須要載入,最簡單的辦法就是放在和Java運行程序放在一起,事實上就是JDK環境 bin 文件夾下)

環境

Window 環境

JDK 1.6 32位

?

首先準備了一個工具類。連接SAP.

?

import com.sap.mw.jco.IFunctionTemplate; import com.sap.mw.jco.JCO; import com.sap.mw.jco.JCO.Client;/*** SAP 連接工具類* @author berr* 2014.11.7*/ public class SapConn {private JCO.Client client; //客戶端連接對象private JCO.Function function; //RFC Function 對象String host,clientId,userName, password,lang, sysnr; //地址,客戶端。username。密碼,語言。系統標識public SapConn(){}/*** 創建連接對象*/public void connect(){client = JCO.createClient(clientId, userName,password,lang,host,sysnr); client.connect();}/*** 斷開連接*/public void disconnect(){client.disconnect(); }public Client getClient() {return client;}public void setClient(Client client) {this.client = client;}/*** 注冊并獲取一個RFC函數* @param reName 注冊名稱。隨意* @param ftName RFC 名稱*/public void regFunction(String reName,String ftName){ JCO.Repository mRepository = new JCO.Repository(reName,this.client); IFunctionTemplate ft = mRepository.getFunctionTemplate(ftName.toUpperCase());this.function = ft.getFunction();}/*** 設置輸入參數* @param parameter 參數名* @param value 值*/public void setImport(String parameter,String value){JCO.ParameterList im = this.function.getImportParameterList();im.setValue(value,parameter);}/*** 獲取Tables結構對象* @param tableName 參數名稱* @return*/public JCO.Table getTable(String tableName){return this.function.getTableParameterList().getTable(tableName);}/*** 運行當前注冊的函數*/public void execute(){this.client.execute(this.function);}public JCO.Function getFunction() {return function;}public void setFunction(JCO.Function function) {this.function = function;}}

?

?

這里我們開始準備測試類

測試插入RFC函數。代碼例如以下

?

import com.sap.mw.jco.JCO;public class CallInsert {public static void main(String[] args) {SapConn sc = new SapConn();sc.host="192.168.0.140";sc.clientId = "001";sc.userName = "dev";sc.password = "d123456";sc.lang = "zh";sc.sysnr="000";/*以上都是連接SAP須要的信息,登錄SAP GUI也須要這些,就不多解釋了*/sc.connect();//創建連接String function1 = "Z_TEST_1";sc.regFunction(function1,function1); //注冊并獲取一個FunctionJCO.Table imt = sc.getTable("IMPT"); //獲取Function 中設置的Tables參數for (int i = 0; i < 10; i++) {imt.appendRow(); //添加一行imt.setValue(i, "ZAGE"); // 設置 ZAGE 值,必須為大寫imt.setValue("C" + i, "ZNAME");// 設置 ZNAME 值,必須為大寫}sc.execute();sc.disconnect();} }


運行成功后,返回SAP查看結果.

?




測試查詢RFC函數,代碼例如以下

?

import com.sap.mw.jco.JCO;public class CallQuery {public static void main(String[] args) {SapConn sc = new SapConn();sc.host="192.168.0.140";sc.clientId = "001";sc.userName = "dev";sc.password = "d123456";sc.lang = "zh";sc.sysnr="000";/*以上都是連接SAP須要的信息,登錄SAP GUI也須要這些。就不多解釋了*/String tpl = "name:%s,age:%s";sc.connect();//創建連接String function1 = "Z_TEST_1";sc.regFunction(function1,function1); //注冊并獲取一個FunctionString zname = "C1";sc.setImport("DZNAME",zname); //設置輸入參數sc.execute();JCO.Table imt = sc.getTable("OUTT"); //獲取Function Tables中的數據System.out.println("-------依據條件"+zname+"查詢-----------");do{Object name = imt.getValue("ZNAME");Object age = imt.getValue("ZAGE");System.out.println(String.format(tpl, name,age));}while(imt.nextRow());System.out.println("-------不依據條件查詢-----------");sc.regFunction(function1,function1); //注冊并獲取一個Functionsc.execute();imt = sc.getTable("OUTT"); //獲取Function Tables中的數據do{Object name = imt.getValue("ZNAME");Object age = imt.getValue("ZAGE");System.out.println(String.format(tpl, name,age));}while(imt.nextRow());sc.disconnect();} }


運行結果例如以下:


?

以上,簡單的RFC程序開發與外部程序調用就完畢了,歡迎大家一起交流.

?

?

以下再總結一些外部程序調用的異常情況.

?

動態鏈接庫未載入

Exceptionin thread "main" java.lang.ExceptionInInitializerError:JCO.classInitialize(): Could not load middleware layer'com.sap.mw.jco.rfc.MiddlewareRFC' JCO.nativeInit():Could not initialize dynamic link library sapjcorfc [no sapjcorfc injava.library.path]. java.library.path[D:\work\wms\jdk1.6.0_26\jre\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;E:/jdk15/BIN/../jre/bin/client;E:/jdk15/BIN/../jre/bin;E:/jdk15/BIN/../jre/lib/i386;d:\app\berr\product\11.2.0\client_1\bin;E:\jdk15\BIN;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;D:\eclipse-jee-indigo-SR2-win32\eclipse;;.]atcom.sap.mw.jco.JCO.<clinit>(JCO.java:776)at SapConn.connect(SapConn.java:26)at CallInsert.main(CallInsert.java:18)

解決方式:將sapjcorfc.dll,librfc32.dll 載入到JDK動態鏈接庫中。最簡單的辦法及拷貝到JAVA_HOME/bin文件夾下.

?

?

RFC 未開啟遠程調用

Exceptionin thread "main" com.sap.mw.jco.JCO$Exception: (104)RFC_ERROR_SYSTEM_FAILURE: The function module "Z_TEST_2" cannot beused for 'remote' calls.atcom.sap.mw.jco.rfc.MiddlewareRFC$Client.nativeExecute(NativeMethod)at com.sap.mw.jco.rfc.MiddlewareRFC$Client.execute(MiddlewareRFC.java:1242)atcom.sap.mw.jco.JCO$Client.execute(JCO.java:3816)atcom.sap.mw.jco.JCO$Client.execute(JCO.java:3261)at SapConn.execute(SapConn.java:82)at CallQuery.main(CallQuery.java:30)
解決方式:開啟遠程調用就可以.

?

?


以上。希望大家交流交流! 本人郵箱:berr@live.cn ?,博客不能上傳附件,須要Java源代碼的能夠Email我。

?

?Java 源代碼已上傳?http://download.csdn.net/detail/iberr/8133125.


?

?

版權聲明:本文博主原創文章,博客,未經同意不得轉載。

轉載于:https://www.cnblogs.com/zfyouxi/p/4805179.html

總結

以上是生活随笔為你收集整理的SAP RFC 函数来创建 Java呼叫 学习总结 一步一步的插图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。