nwrfcsdk
-
Windows下使用go连接SAP RFC函数
使用SAP的nwrfcsdk和gorfc库。 基本步骤如下:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889Windows下使用go连接SAP RFC函数#安装nwrfcsdkC:\nwrfcsdk#配置path;C:\nwrfcsdk\lib#配置环境变量变量名:CGO_CFLAGS 变量值:C:\nwrfcsdk\include变量名:CGO_LDFLAGS 变量值:C:\nwrfcsdk\lib#安装gcchttps://sourceforge.net/projects/mingw/#安装go saprfc库go get github.com/stretchr/testifygo get github.com/sap/gorfccd $GOPATH/src/github.com/sap/gorfc/gorfcgo buildgo install#Hello Worldpackage mainimport ("fmt""github.com/sap/gorfc/gorfc""github.com/stretchr/testify/assert""reflect""testing""time")func abapSystem() gorfc.ConnectionParameter {return gorfc.ConnectionParameter{Dest: "I64",Client: "800",User: "demo",Passwd: "welcome",Lang: "EN",Ashost: "11.111.11.111",Sysnr: "00",Saprouter: "/H/222.22.222.22/S/2222/W/xxxxx/H/222.22.222.222/H/",}}func main() {c, _ := gorfc.Connection(abapSystem())var t *testing.Tparams := map[string]interface{}{"IMPORTSTRUCT": map[string]interface{}{"RFCFLOAT": 1.23456789,"RFCCHAR1": "A","RFCCHAR2": "BC","RFCCHAR4": "ÄBC","RFCINT1": 0xfe,"RFCINT2": 0x7ffe,"RFCINT4": 999999999,"RFCHEX3": []byte{255, 254, 253},"RFCTIME": time.Now(),"RFCDATE": time.Now(),"RFCDATA1": "HELLÖ SÄP","RFCDATA2": "DATA222",},}r, _ := c.Call("STFC_STRUCTURE", params)assert.NotNil(t, r["ECHOSTRUCT"])importStruct := params["IMPORTSTRUCT"].(map[string]interface{})echoStruct := r["ECHOSTRUCT"].(map[string]interface{})assert.Equal(t, importStruct["RFCFLOAT"], echoStruct["RFCFLOAT"])assert.Equal(t, importStruct["RFCCHAR1"], echoStruct["RFCCHAR1"])assert.Equal(t, importStruct["RFCCHAR2"], echoStruct["RFCCHAR2"])assert.Equal(t, importStruct["RFCCHAR4"], echoStruct["RFCCHAR4"])assert.Equal(t, importStruct["RFCINT1"], echoStruct["RFCINT1"])assert.Equal(t, importStruct["RFCINT2"], echoStruct["RFCINT2"])assert.Equal(t, importStruct["RFCINT4"], echoStruct["RFCINT4"])// assert.Equal(t, importStruct["RFCHEX3"], echoStruct["RFCHEX3"])assert.Equal(t, importStruct["RFCTIME"].(time.Time).Format("150405"), echoStruct["RFCTIME"].(time.Time).Format("15.assert.Equal(t, importStruct["RFCDATE"].(time.Time).Format("20060102"), e/Users/d037732/Downloads/gorfc/README.mdchoStruct["RFCDATE"].(time.Time).Format(".assert.Equal(t, importStruct["RFCDATA1"], echoStruct["RFCDATA1"])assert.Equal(t, importStruct["RFCDATA2"], echoStruct["RFCDATA2"])fmt.Println(reflect.TypeOf(importStruct["RFCDATE"]))fmt.Println(reflect.TypeOf(importStruct["RFCTIME"]))c.Close()