外挂系统 -减少SAP用户许可数, 多点操作及时同步SAP

news2025/2/24 8:31:03

用过SAP 的人都知道SAP 是按照用户数来计算项目费用和年维护费的,所以很多公司设置了共同账号,外挂程序,WDA程序等,各种各样的规避方式。
当然SAP 标准的功能也相对简单化,要实现一些自定义的功能来满足各企业实际业务,那需要进行二次开发,有些顾问公司则通过在SAP 中开发ADDON来实现具体的功能需求,但是这个做法只是满足了业务功能,不能解决SAP 用户数量;
所以我想到了通过开发外挂系统独立于SAP 载体来实现,这样做的好处有:

1)减少SAP 用户数量,即减少SAP 上线费用和年维护费用

2)后期SAP 升级的话,不受SAP 版本的影响

3)外挂系统可以多点使用

4)支持手机端,电脑端,PAD (平板电脑)多终端使用

本方案已经成功用于多个生产企业使用,可以实现仓库部门的生产工单发料,生产工单的报工,生产汇报扣料(手动或先进先出反冲),仓库间库存移动,物料维护,财务凭证维护,仓库销售出货,生产工序转移,生产过程报废,仓库在库报废等等功能,

这里介绍一种:外挂程序

大概逻辑就是:通过外挂程序登录SAP, 用于工号去区分实际账号,登录的时候设置工号:SET PARAMETER ID 'ZLOGIN_USER' FIELD wa_login_user_c. 区分的地方获取工号:GET PARAMETER ID  'ZLOGIN_USER' FIELD wa_login_user_c.即可。

https://i-blog.csdnimg.cn/direct/a1d06f859e724e77a51c9207ea02bc59prd.png

上图可以看到登录操作了,我就不解释了,直接上代码:

*&---------------------------------------------------------------------*
*& Report  ZJPMF_LOGIN2
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT zjpmf_login2.

DATA: wa_login_user_s TYPE string,
      wa_login_user_c(20) TYPE c.
*  ADD BY ROY.L @ 28-JUN-2020
DATA: LV_UCODE(32).
*  ADDED
DATA matcher TYPE REF TO cl_abap_matcher.

PARAMETER p_user TYPE zjpmf_user-user_code.

GET PARAMETER ID  'ZLOGIN_USER' FIELD wa_login_user_c.

IF wa_login_user_c IS INITIAL.

  wa_login_user_s = p_user.
*  ADD BY ROY.L @ 28-JUN-2020
  LV_UCODE = p_user.
*  ADDED

  TRANSLATE wa_login_user_s TO UPPER CASE.

  SELECT SINGLE emplyee_id INTO (wa_login_user_c)
  FROM zjpmf_user
  WHERE user_code = wa_login_user_s.

  IF  wa_login_user_c IS  INITIAL.
    MESSAGE i000(oo) WITH '找不到人员工号,请补帐号资料后,重新登陆!'.
    CALL 'SYST_LOGOFF'.
  ENDIF.

  SET PARAMETER ID 'ZLOGIN_USER' FIELD wa_login_user_c.
*  ADD BY ROY.L @ 28-JUN-2020
  SET PARAMETER ID 'ZLOGIN_CODE' FIELD LV_UCODE.
* ADDED


*&---------------------------------------------------------------------*
*&  包含                ZXUSRU01
*&---------------------------------------------------------------------*
  TABLES:zlogoninfo, zlogoninfo_ER.
  DATA hostadr LIKE uinfo-hostadr.
  DATA hostaddr(8).
  DATA term LIKE uinfo-term.
  DATA xhcount TYPE i.
  DATA: iptxt(15),itimes TYPE i,itimes1 TYPE i,hx(2).
  DATA: result TYPE i,resulttxt(3).
  DATA: wa_zlogoninfo LIKE zlogoninfo.
  CALL FUNCTION 'TH_USER_INFO'
    IMPORTING
      hostaddr = hostadr   "like UINFO-HOSTADR (hex)
      terminal = term.  "like UINFO-TERM

  hostaddr = hostadr.
  DO 4 TIMES.
    hx = hostaddr+itimes1(2).
    itimes = 0.
    result = 0.
    DO 2 TIMES.
      CASE hx+itimes(1).
        WHEN 'A'.
          IF itimes = 0.
            result = result + 10 * 16.
          ELSE.
            result = result + 10.
          ENDIF.
        WHEN 'B'.
          IF itimes = 0.
            result = result + 11 * 16.
          ELSE.
            result = result + 11.
          ENDIF.
        WHEN 'C'.
          IF itimes = 0.
            result = result + 12 * 16.
          ELSE.
            result = result + 12.
          ENDIF.
        WHEN 'D'.
          IF itimes = 0.
            result = result + 13 * 16.
          ELSE.
            result = result + 13.
          ENDIF.
        WHEN 'E'.
          IF itimes = 0.
            result = result + 14 * 16.
          ELSE.
            result = result + 14.
          ENDIF.
        WHEN 'F'.
          IF itimes = 0.
            result = result + 15 * 16.
          ELSE.
            result = result + 15.
          ENDIF.
        WHEN OTHERS.
          IF itimes = 0.
            result = result + hx+itimes(1) * 16.
          ELSE.
            result = result + hx+itimes(1).
          ENDIF.
      ENDCASE.
      itimes = itimes + 1.
    ENDDO.
    resulttxt = result.
    CONDENSE resulttxt.
    IF iptxt <> ''.
      CONCATENATE iptxt '.' resulttxt INTO iptxt.
    ELSE.
      iptxt = resulttxt.
    ENDIF.
    itimes1 = itimes1 + 2.
  ENDDO.


  IF sy-uname+0(4) EQ 'DFLC' .  "1.检查是不是DFLC开头的账号
    TABLES:zjpmf_user_ip.
    SELECT SINGLE * FROM zjpmf_user_ip WHERE user_code = p_user. "2.检查外挂账号是不是在zjpmf_user_ip维护了(如维护了 则执行下面检查)
    IF sy-subrc EQ 0.
*     3.根据外挂账号+登陆的IP+登陆的终端名 检查是否在表 zjpmf_user_ip 中维护了(若维护了 则允许登陆)
      SELECT SINGLE * FROM zjpmf_user_ip WHERE user_code = p_user AND ip = iptxt AND terminal = term.
      IF sy-subrc NE 0.
*        4.根据外挂账号+登陆的IP 检查是否在表 zjpmf_user_ip 中维护了终端名是空的数据(若维护了 则允许登陆)
        SELECT SINGLE * FROM zjpmf_user_ip WHERE user_code = p_user AND ip = iptxt AND terminal = space.
        IF sy-subrc NE 0.
*          5.根据外挂账号+登陆的终端名 检查是否在表 zjpmf_user_ip 中维护了IP是空的数据(若维护了 则允许登陆)
          SELECT SINGLE * FROM zjpmf_user_ip WHERE user_code = p_user AND ip = space AND terminal = term.
          IF sy-subrc NE 0.
*------------------------------------------------------------------------------

            CONCATENATE sy-uname sy-datum sy-uzeit INTO zlogonINFO_ER-xh.
            zlogonINFO_ER-user_code = p_user.
            zlogonINFO_ER-bname      = sy-uname.
            zlogonINFO_ER-mandt      = sy-mandt.
            zlogonINFO_ER-ip         = iptxt.
            zlogonINFO_ER-terminal   = term.
            zlogonINFO_ER-logon_date = sy-datum.
            zlogonINFO_ER-logon_time = sy-uzeit.
            zlogonINFO_ER-remark   =  '此账号非法登录,未成功!'.

            INSERT INTO zlogonINFO_ER CLIENT SPECIFIED VALUES zlogonINFO_ER.
            COMMIT WORK AND WAIT.
*------------------------------------------------------------------------------
            MESSAGE i000(oo) WITH '此账号非法登录!'.
            CALL 'SYST_LOGOFF'.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.

  CONCATENATE sy-uname sy-datum sy-uzeit INTO zlogoninfo-xh.
  zlogoninfo-user_code = p_user.
  zlogoninfo-bname      = sy-uname.
  zlogoninfo-mandt      = sy-mandt.
  zlogoninfo-ip         = iptxt.
  zlogoninfo-terminal   = term.
  zlogoninfo-logon_date = sy-datum.
  zlogoninfo-logon_time = sy-uzeit.

  DO 100 TIMES.
    INSERT INTO zlogoninfo CLIENT SPECIFIED VALUES zlogoninfo.
    COMMIT WORK AND WAIT.
    CLEAR:wa_zlogoninfo.
    SELECT SINGLE * FROM zlogoninfo INTO wa_zlogoninfo WHERE xh = zlogoninfo-xh.
    IF wa_zlogoninfo-xh NE space.
      SET PARAMETER ID 'ZLOGONINFOXH' FIELD wa_zlogoninfo-xh.
      EXIT.
    ELSE.
      CONCATENATE sy-uname sy-datum sy-uzeit INTO zlogoninfo-xh.
    ENDIF.
  ENDDO.




*二.登陆时候与用户ip地址绑定登陆
*首先在系统里建立r/3用户和ip地址的对应的关系表userlogon,包括信息(r/3用户名/ip地址),然
*后通过批导入的方式将对应关系数据导入系统表里.
*其次在r/3用户登陆增强(susr0001)写代码验证用户登陆时候的r/3用户名和ip地址在系统对应关
*系表里是否有,通过则允许登陆,未通过则不允许登陆.
*增强代码如下:

*SELECT COUNT(*) INTO xhcount FROM userlogon WHERE bname = sy-uname AND ip = iptxt.
*IF xhcount < 0.
*  MESSAGE i003(ztxbhb).
*  CALL 'SYST_LOGOFF'."退出SAP系统
*ELSE.
*  MESSAGE i002(ztxbhb)."登陆
*ENDIF.



ENDIF.
LEAVE PROGRAM.

不用上面程序的话可以用增强点:ZXUSRU01

同步的用户信息表:

维护用户信息程序:ZJPMF_USER

*&---------------------------------------------------------------------*
*& Report  ZJPMF_USER
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZJPMF_USER.

INCLUDE ZJPMF_USER_TOP.
INCLUDE ZJPMF_USER_FORM.



START-OF-SELECTION.
*  DATA l_flag(1).

*  UPDATE adcp SET  department = '1100' WHERE addrnumber NE 0.
*  COMMIT WORK AND WAIT.
*  UPDATE zjpmf_user SET  company_code = '1100' WHERE user_code NE space.
*  COMMIT WORK AND WAIT.

*--------------------------------------------------------------------*
*获取当前公司代码
*  current_user = sy-uname.
*  SELECT SINGLE * INTO CORRESPONDING FIELDS OF wa_usr21 FROM  usr21 WHERE bname EQ current_user.
*  SELECT SINGLE department INTO current_companycode FROM adcp WHERE addrnumber = wa_usr21-addrnumber AND persnumber = wa_usr21-persnumber.

*  IF current_companycode IS INITIAL.
*    MESSAGE s000(oo) WITH '当前登陆账户的公司代码有误,请检查!' DISPLAY   LIKE 'E'.
*    STOP.
*  ENDIF.

*  BREAK-POINT.

*--------------------------------------------------------------------*
  "初始化工作
  IF CURRENT_COMPANYCODE EQ '1307'.
    PERFORM INITIAL_USER_DATA.
    PERFORM INITIAL_SYSTEM_DATA.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2065048.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云计算实训33——高并发负载均衡项目(eleme)

一、配置一主两从mysql服务器&#xff08;mysql5.7&#xff09; 1.主服务器master 下载mysql5.7的包 [rootMysql ~]# rz -E rz waiting to receive. [rootMysql ~]# ls anaconda-ks.cfg mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz #解压 [rootMysql ~]# tar -zxf mysql-5…

用TensorFlow实现线性回归

说明 本文采用TensorFlow框架进行讲解&#xff0c;虽然之前的文章都采用mxnet&#xff0c;但是我发现tensorflow提供了免费的gpu可供使用&#xff0c;所以果断开始改为tensorflow&#xff0c;若要实现文章代码&#xff0c;可以使用colaboratory进行运行&#xff0c;当然&#…

ZooKeeper入门及核心知识点整理

什么是Zookeeper Zookeeper简称zk&#xff0c;先从字面意思上去理解&#xff0c;那就是动物园管理员。其实zk是大数据领域中的一员&#xff0c;为整个分布式环境提供了协调服务&#xff0c;主要可以用于存储一些配置信息&#xff0c;同时也可以基于zk实现集群。它是一个apache…

RabbitMQ的基础概念介绍

MQ的三大特点&#xff1a;削峰、异步、解耦 1.RabblitMQ概念介绍 1.1概念 RabbitMQ是由erlang语言开发&#xff0c;基于AMQP&#xff08;Advanced Message Queue 高级消息队列协议&#xff09;协议实现的消息队列&#xff0c;它是一种应用程序之间的通信方法&#xff0c;消息…

【docker】使用docker-compose的时候如何更新镜像版本

使用docker-compose的时候如何更新镜像版本。之前总是会忘记怎么操作&#xff0c;每次都得百度搜&#xff0c;干脆记录一下。 说明 我有一个memos是用docker-compose部署的&#xff0c;memos更新的挺频繁的&#xff0c;新版本的功能也不错&#xff0c;更新一下没啥问题。 注…

吴恩达机器学习课后作业-03多分类、神经网络前向传播

这里写目录标题 逻辑回归解决多分类问题&#xff08;逻辑回归的“一对多”&#xff08;One-vs-All&#xff09;策略。&#xff09;绘制图像结果 神经网络前向传播数字识别 、 逻辑回归解决多分类问题&#xff08;逻辑回归的“一对多”&#xff08;One-vs-All&#xff09;策略。…

[Algorithm][综合训练][孩子们的游戏][大数加法][拼三角]详细讲解

目录 1.孩子们的游戏1.题目链接2.算法原理详解 && 代码实现 2.大数加法1.题目链接2.算法原理详解 && 代码实现 3.拼三角1.题目链接2.算法原理详解 && 代码实现 1.孩子们的游戏 1.题目链接 孩子们的游戏 2.算法原理详解 && 代码实现 问题抽象…

LongWriter——从长文本语言模型中释放出10,000+字的生成能力

概述 当前的长上下文大型语言模型 (LLM) 可以处理多达 100,000 个词的输入&#xff0c;但它们很难生成超过 2,000 个词的输出。受控实验表明&#xff0c;该模型的有效生成长度本质上受到监督微调(SFT) 期间看到的示例的限制。换句话说&#xff0c;这种输出限制源于现有 SFT 数…

三维模型单体化软件:地理信息与遥感领域的精细化革命

在地理信息与遥感科学日新月异的发展浪潮中&#xff0c;单体化软件作为一股强大的驱动力&#xff0c;正引领着我们迈向空间信息处理与应用的新纪元。本文旨在深度解析单体化软件的核心价值、技术前沿、实践应用及面临的挑战&#xff0c;共同探讨这一技术如何塑造行业的未来。 …

【手撕OJ题】——BM8 链表中倒数最后k个结点

目录 &#x1f552; 题目⌛ 方法① - 直接遍历⌛ 方法② - 快慢指针 &#x1f552; 题目 &#x1f50e; BM8 链表中倒数最后k个结点【难度&#xff1a;简单&#x1f7e2;】 输入一个长度为 n 的链表&#xff0c;设链表中的元素的值为 a i a_i ai​ &#xff0c;返回该链表中倒…

一款MySQL数据库实时增量同步工具,能够监听MySQL二进制日志(Binlog)的变动(附源码)

背景 作为一名CURD的程序员&#xff0c;少不了跟MySQL打交道&#xff0c;在同步数据的时候&#xff0c;MySQL的Binlog显得重中之重&#xff0c;所以处理Binlog的工具尤为重要。 其中阿里巴巴开源的canal 更是耳闻目睹&#xff0c;但是今天小编给大家介绍另外一款MySQL数据库实…

【C++11】常用新语法②(类的新功能 || 可变参数模板 || lambda表达式 || 包装器)

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; C 目录 &#x1f308;前言&#x1f525;类的新功能新增默认成员函数强制生成默认函数的关键字default禁止生成默认函数的关键字delete &#x1f525;可变参数模板递归函数方式展开参数包…

论文翻译:Benchmarking Large Language Models in Retrieval-Augmented Generation

https://ojs.aaai.org/index.php/AAAI/article/view/29728 检索增强型生成中的大型语言模型基准测试 文章目录 检索增强型生成中的大型语言模型基准测试摘要1 引言2 相关工作3 检索增强型生成基准RAG所需能力数据构建评估指标 4实验设置噪声鲁棒性结果负面拒绝测试平台结果信息…

算法5:位运算

文章目录 小试牛刀进入正题 没写代码的题&#xff0c;其链接点开都是有代码的。开始前请思考下图&#xff1a; 小试牛刀 位1的个数 class Solution { public:int hammingWeight(int n) {int res 0;while (n) {n & n - 1;res;}return res;} };比特位计数 class Solution…

计算机毕业设计选题推荐-猫眼电影数据可视化分析-Python爬虫-k-means算法

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

进程和文件痕迹排查——LINUX

目录 介绍步骤 介绍 进程&#xff08;Process&#xff09;是计算机中的程序关于某数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的基本单位&#xff0c;是操作系统结构的基础。 在早期面向进程设计的计算机结构中&#xff0c;进程是程序的基本执行实体&…

fastadmin 安装

环境要求&#xff0c;大家可以参考官方文档的&#xff0c;我这里使用的是phpstudy&#xff0c;很多已经集成了。 注意一点&#xff0c;PHP 版本&#xff1a;PHP 7.4 。 第二步&#xff1a;下载 下载地址&#xff1a;https://www.fastadmin.net/download.html 进入下载地址后…

IDEA:Terminal找不到npm

Terminal的命令失效通过修改cmd.exe的方式还是不生效的话&#xff0c;考虑是windwos11 默认idea不是通过管理员启动的&#xff0c;如下图修改就可以了。

前端vue 3中使用 顶象 vue3 版本

顶象 验证 的插件 不知道大家使用过没有 顶象-业务安全引领者&#xff0c;让数字世界无风险 可以防止 机器人刷接口 等 可以在任何 加密操作中使用 下面我直接 贴代码 解释 <script src"https://cdn.dingxiang-inc.com/ctu-group/captcha-ui/v5/index.js" cro…

第12章 网络 (2)

目录 12.5 网络命名空间 12.6 套接字缓冲区 12.6.1 使用 sk_buff 管理数据 12.6.2 管理套接字缓冲区数据 本专栏文章将有70篇左右&#xff0c;欢迎关注&#xff0c;查看后续文章。 12.5 网络命名空间 一个网卡可能只在某个特定命名空间可见。 struct net&#xff1a; 表…