zoukankan      html  css  js  c++  java
  • 智遥工作流中调用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还是挺简单的。

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

     
  • 相关阅读:
    一些你可能用到的代码
    iOS 键盘下去的方法
    iOS设计模式汇总
    随笔
    Spring cloud config 分布式配置中心 (三) 总结
    Spring cloud config 分布式配置中心(二) 客户端
    Spring cloud config 分布式配置中心(一) 服务端
    jdbcUrl is required with driverClassName spring boot 2.0版本
    JpaRepository接口找不到 spring boot 项目
    解决IntelliJ “Initialization failed for 'https://start.spring.io'
  • 原文地址:https://www.cnblogs.com/zhiyao/p/3156051.html
Copyright © 2011-2022 走看看