智遥工作流中调用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]