智遥工作流中调用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还是挺简单的。

有些日子没写博客了,加油~~~~~

 
原文地址:https://www.cnblogs.com/zhiyao/p/3156051.html