🚀欢迎来到本文🚀
🍉个人简介:matinal,目前职业是IT行业,一个正在慢慢前行的普通人。
🏀系列专栏:涵盖SAP各模块,Python,Excel,人工智能等
💡 其他专栏:一些平时学习的技术,感兴趣的小伙伴可以看看。🍔公众号:matinal
🎁希望各位→点赞👍 + 收藏⭐️ + 留言📝
⛱️万物从心起,心动则万物动🏄♂️
前言:SAP ABAP 关于SAP系统中如何集成HTTPS的若干功能总结篇,这是第三篇。本篇主要介绍SAP中集成http服务,所以,如果你了解并熟知,请略过本篇。
🦙(工作遇到傻逼,千万要远离。道路千万条,远离傻逼第一条)
1990年互联网诞生之初,就已经开始用超文本传输协议 HTTP 传输数据,这也是为什么现在网页地址都是以 http 开头的原因。但是HTTP协议传输数据是明文传输,任意的人抓包就能看到传输的数据,这显然不安全。1994年,Netscape 公司用加密协议增加了 HTTP,开始在 HTTP 的基础上加入 SSL 即安全套接层(Secure Socket Layer)。称为 "HTTP over SSL" 或者 "HTTP Secure",也就是我们现在熟知的 HTTPS。
HTTPS 其实是一个“非常简单”的协议,RFC 文档很小,只有短短的 7 页,里面规定了新的协议名“https”,默认端口号 443,至于其他的什么请求 - 应答模式、报文结构、请求方法、URI、头字段、连接管理等等都完全沿用 HTTP,没有任何新的东西。
也就是说,除了协议名“http”和端口号 80 这两点不同,HTTPS 协议在语法、语义上和 HTTP 完全一样,优缺点也“照单全收”(当然要除去“明文”和“不安全”)。
HTTP 协议一般指 HTTP(超文本传输协议)。
超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议,是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准。
HTTP 是为 Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的。
HTTP 是一个基于 TCP/IP 通信协议来传递数据的(HTML 文件、图片文件、查询结果等)。
下面进入正文
前言
1、 钉钉API文档说明: https://dingdoc.dingtalk.com/doc#/serverapi2/ul33mm.
2、请求地址: https://oapi.dingtalk.com/attendance/listRecordaccess_token=ACCESS_TOKEN.
一、准备工作
1.获取AppKey&AppSecret(每家供应商可能不一样)
2.获取token(拼接成url)
3.根据URL生成HTTP代理
4.设置 HTTP 版本
5.将HTTP代理设置GET方法
6.发送HTTP请求
7.获取返回的数据
8.关闭HTTP链接
9.将字符串转为abap结构类型变量中
二、检查安全证书
在调用钉钉API前 有次SSL检查,若SAP没有证书则会报错
检查客户GUI,发现
这个没有创建,图中是我创建的
然后重启ICM

三、获取安全证书
在重启ICM之前,需要获取钉钉的证书,导入到sap.
证书获取:
到钉钉的网站按F12
F12打开Chrome开发者工具,Security标签页,View certificate,点击view detais,选择Copy to file.


*&---------------------------------------------------------------------*
*& Report ZMATINAL
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmatinal.
TABLES: pernr.",zthrpt006_log,zthrpt006_2_log. mark @20201013
INFOTYPES: 0000,0001,0105,0007.
PARAMETERS: p_job TYPE char1 DEFAULT 'X' NO-DISPLAY.
TYPES: BEGIN OF ty_department,"部门列表
id TYPE string,
name TYPE string,
END OF ty_department.
DATA: gt_department TYPE TABLE OF ty_department,
gs_department TYPE ty_department.
TYPES: BEGIN OF ty_userlist, "部门成员详细信息
userid TYPE string,
name TYPE string,
email TYPE string,
END OF ty_userlist.
DATA: gt_userlist TYPE TABLE OF ty_userlist,
gs_userlist TYPE ty_userlist.
*DATA:gt_zdepfromding_log TYPE TABLE OF zdepfromding_log, mark @20201013
* gs_zdepfromding_log TYPE zdepfromding_log.
TYPES: BEGIN OF ty_ptresult, "员工考勤数据
index TYPE i,
pernr TYPE pernr_d, "员工号
ename TYPE p0001-ename, "姓名
userid TYPE string, "钉钉用户ID
email TYPE p0105-usrid, "邮箱
plantime TYPE uzeit,
createtime TYPE uzeit,
modifytime TYPE uzeit,
islegal TYPE char1, "是否合法
locationresult TYPE string, "位置结果
begda TYPE begda,
endda TYPE endda,
workdatum TYPE datum, "工作日
zdklx TYPE retyp, "打卡类型
zbase TYPE uzeit, "基准时间
zdktime TYPE uzeit, "实际打卡时间
zresult(40) TYPE c, "时间结果
zmins(40) TYPE c, "迟到分钟数
************************钉钉原始数据*****************************
id TYPE string, "钉钉考勤结果唯一标识ID
workdate TYPE string, "工作日
checktype TYPE string, "考勤类型(OnDuty:上班,OffDuty:下班)
timeresult TYPE string, "时间结果(Normal:正常;Early:早退; Late:迟到;SeriousLate:严重迟到;NotSigned:未打卡)
basechecktime TYPE string, "计算迟到和早退,基准时间
planchecktime TYPE string, "排班打卡时间
userchecktime TYPE string, "实际打卡时间
gmtcreate TYPE string, "创建时间
gmtmodified TYPE string, "修改时间
END OF ty_ptresult.
DATA: gt_ptresult TYPE TABLE OF ty_ptresult,
gs_ptresult TYPE ty_ptresult.
DATA: gt_ptresult1 TYPE TABLE OF ty_ptresult,
gs_ptresult1 TYPE ty_ptresult.
DATA: gt_ptresult2 TYPE TABLE OF ty_ptresult,
gs_ptresult2 TYPE ty_ptresult.
TYPES: BEGIN OF ty_person, "员工基础公共信息
index TYPE i,
pernr TYPE pernr_d,
ename TYPE p0001-ename,
userid TYPE string, "钉钉用户ID
email TYPE p0105-usrid, "邮箱
END OF ty_person.
DATA: gt_person TYPE TABLE OF ty_person,
gs_person TYPE ty_person.
TYPES: BEGIN OF ty_post, "post结构体信息
post TYPE string,
END OF ty_post.
DATA: gt_post TYPE TABLE OF ty_post,
gs_post TYPE ty_post.
DATA: gv_begda TYPE sy-datum,
gv_endda TYPE sy-datum.
DATA: gv_post TYPE string.
DATA: gv_index TYPE i.
*DATA: gt_log TYPE TABLE OF zthrpt006_log, "MARK 20201013
* gs_log TYPE zthrpt006_log.
DATA: gv_token TYPE string.
CONSTANTS:
cns_corpid TYPE string VALUE 'dingXXXXXXXXXXXXXXXXX', "corpid
cns_corpsecret TYPE string VALUE 'bKXXXXXXXXXXXXXXXXX'.
INITIALIZATION.
pnpbegda = sy-datum - 1.
pnpendda = pnpbegda.
START-OF-SELECTION.
PERFORM f_init.
GET pernr.
PERFORM f_get_data.
END-OF-SELECTION.
PERFORM f_pro_data.
PERFORM f_ptrecord_from_ding TABLES gt_ptresult
USING gv_token.
PERFORM f_pro_detail_data.
IF p_job = 'X'.
* PERFORM f_ins_9401. mark 20201013
ENDIF.
*&---------------------------------------------------------------------*
*& Form F_INIT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM f_init .
DATA: lt_department TYPE TABLE OF ty_department,
ls_department TYPE ty_department,
lt_userlist TYPE TABLE OF ty_userlist,
ls_userlist TYPE ty_userlist.
gv_begda = pn-begda.
gv_endda = pn-endda.
DATA ddate TYPE datum.
ddate = pn-begda - 10.
"获取CIFI-token
CLEAR gv_token.
PERFORM f_token_from_ding USING cns_corpid cns_corpsecret
CHANGING gv_token.
IF gv_token IS INITIAL.
MESSAGE '获取token失败' TYPE 'E'.
ENDIF.
"获取部门列表
REFRESH lt_department[].
PERFORM f_department_from_ding TABLES gt_department
USING gv_token.
IF gt

最低0.47元/天 解锁文章
6857

被折叠的 条评论
为什么被折叠?



