mrbear 发表于 2015-9-21 13:16:57

智遥工作流中调用SAP基础数据

话说公司选用智遥工作流,就是看中智遥的扩展灵活,与SAP系统交互方便。



   SAP系统是公司花了血本上的,公司的运作都是以SAP为基础的。要想开发出实用的工作流,难免要从SAP取数据。尤其是一些公司基本信息,很多流程都要用到,比如:工厂资料,客户资料,供应商资料,物料信息等等。



   通常我们要调用其他系统的数据时,直接连接他们的数据库,然后直接调用里面的数据就好了,但是SAP不允许这样直接连接他的数据库,只能通过写程序来调用SAP中的RFC程序。



   如果每调用一个基础数据就写一个对应的RFC,个人感觉太麻烦了,太费力了(没办法,我懒人就是这样想的);于是就想写一个通用的RFC,通过传递不同的参数,来获取到想要的基础数据。

如图:



RFC代码如下:




1 FUNCTION ZGET_KEY_TEXT_LIST.
2   DATA:BEGIN OF T_ZLIST OCCURS 0.
3         INCLUDE STRUCTURE ZLIST.
4   DATA:END OF T_ZLIST.
5
6   DATA:BEGIN OF T_TEMP OCCURS 0.
7         INCLUDE STRUCTURE ZLIST.
8   DATA:END OF T_TEMP.
9
10   T_TEMP[] = ZLIST[].
11   IF KEY1 <> SPACE OR KEY2 <> SPACE OR KEY3 <> SPACE.
12   CLEAR:T_TEMP.
13   T_TEMP-KEY1 = KEY1.
14   T_TEMP-KEY2 = KEY2.
15   T_TEMP-KEY3 = KEY3.
16   APPEND T_TEMP.
17   ENDIF.
18
19   IF KEY2 IS INITIAL .
20   SORT T_TEMP BY KEY1 .
21   DELETE ADJACENT DUPLICATES FROM T_TEMP COMPARING KEY1.
22   ELSEIF KEY3 IS INITIAL .
23   SORT T_TEMP BY KEY1 KEY2 .
24   DELETE ADJACENT DUPLICATES FROM T_TEMP COMPARING KEY1 KEY2 .
25   ELSE.
26   SORT T_TEMP BY KEY1 KEY2 KEY3.
27   DELETE ADJACENT DUPLICATES FROM T_TEMP COMPARING KEY1 KEY2 KEY3.
28   ENDIF.
29
30 * GET ALL OR SINGLE OR LIST IN TABLE
31   REFRESH:T_ZLIST.
32
33   IF TABLE_NAME = 'T024'."PUR.GROUP
34   SELECT EKNAM EKGRP INTO TABLE T_ZLIST
35       FROM T024.
36   ELSEIF TABLE_NAME = 'TCURT'."CURRENCY
37   SELECT LTEXT WAERS INTO TABLE T_ZLIST
38       FROM TCURT
39       WHERE SPRAS = 'E' .
40   ELSEIF TABLE_NAME = 'T005T'."COUNTRY
41   SELECT LANDX50 LAND1 INTO TABLE T_ZLIST
42       FROM T005T
43       WHERE SPRAS = 'E' .
44   ELSEIF TABLE_NAME = 'BNKA'."BANK KEY
45   SELECT BANKA BANKS BANKL INTO TABLE T_ZLIST
46       FROM BNKA .
47   ELSEIF TABLE_NAME = 'TINCT'."INCO TERM
48   SELECT BEZEI INCO1 INTO TABLE T_ZLIST
49       FROM TINCT
50       WHERE SPRAS = 'E' .
51   ELSEIF TABLE_NAME = 'T052U'."Payment term
52   SELECT T052U~TEXT1 T052U~ZTERM
53       INTO TABLE T_ZLIST
54       FROM T052 INNER JOIN T052U ON T052~ZTERM = T052U~ZTERM
55                                 AND T052~ZTAGG = T052U~ZTAGG
56       WHERE T052~KOART IN ('K' , SPACE)
57         AND T052U~SPRAS = 'E' .
58 *ZBC 20130319 added begin
59   ELSEIF TABLE_NAME = 'T015W'."Instruction keys
60   SELECT DTZUS DTAWS BANKS ZLSCH INTO TABLE T_ZLIST
61       FROM T015W .
62   ELSEIF TABLE_NAME = 'T042Z'."Payment Methods
63   SELECT TEXT1 ZLSCH LAND1 INTO TABLE T_ZLIST
64       FROM T042Z .
65   ELSEIF TABLE_NAME = 'ZVEN2'."Vendor Group
66   SELECT VCNAME VCCODE INTO TABLE T_ZLIST
67       FROM ZVEN2 .
68 *ZBC 20130319 added end.
69
70 *ZBC 20130408 added begin
71   ELSEIF TABLE_NAME = 'ZCOM'."Company for Vendor creation workflow
72   SELECT BUKRS INTO TABLE T_ZLIST
73       FROM ZCOM .
74   ELSEIF TABLE_NAME = 'ZPORG'."Pur.Org for Vendor creation workflow
75   SELECT EKORG INTO TABLE T_ZLIST
76       FROM ZPORG .
77 *ZBC 20130408 added end.
78
79 * 如果有新的Table,请加在这里即可。
80   ELSE.
81   RAISE TABLE_NAME_NOT_EXIST.
82   EXIT.
83   ENDIF.
84
85   IF SY-SUBRC <> 0 .
86   RAISE NO_DATA_FOUND.
87   ENDIF.
88
89   REFRESH:ZLIST.
90   CLEAR:TEXT.
91
92   IF T_TEMP[] IS INITIAL.
93   LOOP AT T_ZLIST.
94       APPEND T_ZLIST TO ZLIST.
95       IF KEY1 = T_ZLIST-KEY1 AND KEY2 = T_ZLIST-KEY2 AND
96          KEY3 = T_ZLIST-KEY3.
97         TEXT = T_ZLIST-TEXT.
98       ENDIF.
99   ENDLOOP.
100   ELSE.
101   LOOP AT T_ZLIST.
102       READ TABLE T_TEMP WITH KEY KEY1 = T_ZLIST-KEY1
103                                  KEY2 = T_ZLIST-KEY2
104                                  KEY3 = T_ZLIST-KEY3 BINARY SEARCH.
105       IF SY-SUBRC <> 0 .
106         CONTINUE.
107       ENDIF.
108
109       APPEND T_ZLIST TO ZLIST.
110       IF KEY1 = T_ZLIST-KEY1 AND KEY2 = T_ZLIST-KEY2 AND
111          KEY3 = T_ZLIST-KEY3.
112         TEXT = T_ZLIST-TEXT.
113       ENDIF.
114   ENDLOOP.
115   ENDIF.
116
117 ENDFUNCTION.
  智遥工作流中调用RFC代码:



//获取SAP中所有的采购组织信息
SapRFCHelper SAPH = new SapRFCHelper();
string k1 = "";
string k2 = "";
string k3 = "";
string table_name = "T024";
string[] param = {
"KEY1|"+k1,
"KEY2|"+k2,
"KEY3|"+k3,
"TABLE_NAME|"+table_name                           
};
DataTable dt_result = SAPH.GetRfcOutTable("Sapconn", param, "ZGET_KEY_TEXT_LIST", "ZLIST");
//Sapconn 是系统设置好的链接参数
//ZGET_KEY_TEXT_LIST 就是刚才的RFC名称
//ZLIST 就是返回的结果表名称
  注:之前在网上搜过用C#调用SAP RFC的代码,一大坨,看了头痛。智遥工作流调用RFC还是挺简单的。
  有些日子没写博客了,加油~~~~~
  
页: [1]
查看完整版本: 智遥工作流中调用SAP基础数据