C 與SAP 的互動

2021-06-20 18:16:55 字數 3009 閱讀 4482

最近 做乙個專案 是 把 系統內部資料 上傳到 sap 中,由於 沒接觸 過 sap 對於 sap  還是 很陌生,在 問了 很多人 以及 查詢質料 終於 在 上周五 完成了 這個 模組,下面 說一下 具體的 步驟。

最開始 以為 c# 與  sap  是 websevice 之間 通訊 的 但是 在 聯絡 到  開發 sap 的 人  他們說 是  通過 rfc 函式 。

首先 是 需要 引用 兩個 dll    

資源位址

將這兩個 dll  引用到 專案下 

之後 引用 命名空間

using sap.middleware.connector;

連線 sap  需要 使用者 密碼 埠 等

rfcconfigparameters rfcpar = new rfcconfigparameters();

rfcpar.add(rfcconfigparameters.name, logininfo.clientinfo.sapsystem);

rfcpar.add(rfcconfigparameters.client, logininfo.clientinfo.sapclint);埠號

rfcpar.add(rfcconfigparameters.user, logininfo.clientinfo.sapuser);//使用者名稱

rfcpar.add(rfcconfigparameters.systemnumber, logininfo.clientinfo.sapsystemnumber);//系統號

rfcpar.add(rfcconfigparameters.language, logininfo.clientinfo.saplanguage);//語言

rfcdestination dest = rfcdestinationmanager.getdestination(rfcpar);

rfcrepository rfcrep = dest.repository;//開始連線
以上 是 連線 到 sap,連線上 之後 我們 要獲取 函式

irfcfunction myfunc = rfcrep.createfunction("sap上的函式名稱");
獲取函式 之後 這個 函式 會返回 類似於 方法 的 東西 

我們 可以 知道 有 什麼 引數 (輸出,輸入) 當然 這個 在 於 sap 對接的時候 sap的開發人員 會 給 的

function  sap函式名稱

export parameter e_flag=, import parameteris_header=structure ztb_jfi000_hpkg ,import parameter it_items_manu=null, import parameter i_testrun=, tablesparameter it_err_msg=table , tables parameter it_items

以上 是 獲取 的sap 函式 我們 可以 直觀 的 看到 引數  以及 引數 的型別  export  表示 輸出  import  表示 輸入   structure 表示 結構 型別  tables 表示 是 表型別 (自己的理解)

可以根據 引數 和 引數型別 進行 傳值 

比如 結構 我們 需要 獲取  這個 函式 中的 結構 包含 什麼 

irfcstructure ztb_jfi000_hpkg = myfunc.getstructure("結構名稱");
以上 是 獲取 乙個 結構 結構內部我們 也可 知道 有什麼 

知道 結構的 字段 我們 就可以給結構 進行賦值

ztb_jfi000_hpkg.setvalue("結構中 欄位名稱", logininfo.clientinfo.sapclint);
myfunc.setvalue("結構名稱", ztb_jfi000_hpkg);
給表 賦值 同理 在 加 乙個 迴圈 即可 還是 寫上吧 怕 自己 以後會 用到 到時候 忘記了

irfctable it_items_manu = myfunc.gettable("it_items_manu");

it_items.currentrow.setvalue("mandt", logininfo.clientinfo.sapclint);

既然可以賦值 一樣可以取值 

//返回標記 s上載成功;e上載失敗;

string issurce = myfunc.getstring("e_flag");//去字元型 引數的值

//取表型別引數的值
irfctable it_err_msg = myfunc.gettable("it_err_msg");

datatable table_it_err_msg = new datatable();

table_it_err_msg.columns.add("packg_uuid");

table_it_err_msg.columns.add("row_id");

table_it_err_msg.columns.add("msg_str");

table_it_err_msg.columns.add("msg_type");

table_it_err_msg.columns.add("msg_ref1");

table_it_err_msg.columns.add("bus_uuid");

for (int i = 0; i < it_err_msg.count; i++)

以上就是 c# 於sap 中 資料 傳輸 的 總結 希望 對大家 有幫助

注:本人 還不知道 如何 關閉 與 sap 的連線 希望 有 知道 的高手  告訴 我一下  一起 交流 討論

JAVA與Sap互動技術RFC

public class sapfunction if list null object obj commonutils.getbean map,beanclazz list.add obj catch exception e return list description 返回值為list,有入參...

c 與c 之間的互動

c 的 是非託管的.而.net是託管的.那麼c 和.net之間互相呼叫或者傳送資料的時候.就需要 封送資料到非託管 或者 到託管 而且他們之間的型別也是不相容的.如c 裡面的string型別,c 是沒有的.所以 如果像傳 int double一般不會有問題.但是string 傳值 最好用intptr...

mysql CAPI與C 的互動

首先要保證mysql的服務是開啟的才能進行對資料庫的操作。mysql與c 互動有兩個非常好的三方庫乙個是mysql 乙個是connector c 這兩個庫我嘗試了mysql 不過我發現在中國mysql 的很多資料缺乏,很多都是講了一半剩下的就沒了,除非去看英文文件,可惜我英文不算好,所以我果斷先放棄...