新业务流程系统上线接入到集团云门户系统。按设计要求通过了单点登录和待办/待阅任务推送功能。

但是,在接口稽核时,云门户运维人员天天反馈稽核问题,虽然这些不影响单点登录和待办任务处理功能,但是涉及到用户维护考核,开发人员一直未找到原因,很是闹心!

我翻出云门户接口及稽核开发接口规范,经过多次实验及解读,终于理解了!

如上图中的文字“则必须填写调用云门户服务的字段,才能保证能够对数据进行稽核”。

稽核出现问题的关键是稽核日志视图中的每个字段要与推送到云门户上的每个字段内容保持一致

下图为新业务流程系统推送待办到云门户的日志截图:

下面列举出开发人员的代码与我的修改对照,分析其中的“坑”。

  • 原开发人员的设计:
-- 待办稽核原视图create or replace view bop_pdt.vw_pengding_task as
select t.task_instance_id as pendingcode,t.bo_title as pendingtitle,to_char(t.create_datetime, 'yyyyMMddHHmmss') as pendingDate,t.task_receiver_id as pendingUserID,t.task_receiver as pendingUser,'unicom/workflow/workflow_wrapper.htm?bizInfoInstanceID='||t.biz_instanceid||'&'||'taskID='||t.task_instance_id as pendingurl,t.status as pendingstatus,'0' as pendingLevel,'hl' as pendingCityCode,t.task_sender_id as pendingsourceuserid,t.task_sender as pendingsource,'a' as operatorType,sysdate as createTime,'hl006' as pendingNotefrom pnd_task t;
  • 修改完善的代码
-- 修改完善的视图
create or replace view bop_pdt.vw_pengding_task as
select t.task_instance_id as pendingcode,t.bo_title as pendingtitle,to_char(t.create_datetime + interval '8' hour ,'yyyymmddHH24MIss') as pendingDate,t.task_receiver_id as pendingUserID,t.task_receiver as pendingUser,'http://10.64.50.143/unicom/system/unicom/home/sso_ucloud.htm?userId='||t.task_receiver_id||'&'||'bizInstId='||t.biz_instanceid||'&'||'taskId='||t.task_instance_id||
'&'||'isTask=1'||'&'||'isComplete=0'||'&'||'isProcess=1'||'&'||'orgId='||
substr(t.tenant_dn,3,instr(t.tenant_dn,',')-3) as pendingurl,t.status as pendingstatus,'0' as pendingLevel,'hl' as pendingCityCode,t.task_sender_id as pendingsourceuserid,t.task_sender as pendingsource,'a' as operatorType,'hl006' as pendingNote,t.create_datetime +  interval '8' hour  as createTimefrom pnd_task t;

上述代码差异说明:

  • pendingurl:此字段的URL拼接出现问题了;
  • pendingDate:时间表述中的多个问题。

1. 对接口规范理解的想当然,唯技术本位思考

由于pendingurl字段是专业系统自用的参数,而且在本系统中是没有实际使用意义的数据,开发人员从本位思考,想当然认为传个参数就行了。

对于稽核的理解,开发人员也从本位的技术思考理解,认为稽核要稽核关键接口数据,例如ID、用户账号等内容,其他数据无所谓。

2. 对时区及时间处理的易忽视的情况

由于使用的系统平台Cordys产品是国外产品,时间是标准时间,与北京时间差8个时区,也就是少8个小时。

Oracle时间转换字符时,分钟与月份的混淆,如上述原代码想用mm表述分钟,但是SQL中不区分大小写,MM和mm被认为是相同的格式代码,被转换成月份。

所以,正确的表达是要不足8个小时,并正确的转换出分钟字符串,如下所示:

to_char(t.create_datetime + interval '8' hour ,'yyyymmddHH24MIss')

3. 类型转换成字符出现的小数位问题

下面对照待阅稽核视图的差异,上述1、2条已经说过,再请看本段的重点所说数据类型转换所易出现的问题。

  • 原开发人员的设计:
--原待阅稽核视图
create or replace view bop_pdt.vw_pengding_reading as
select t.pnd_reading_id as readingCode,t.bo_title as readingTitle,to_char(t.create_datetime, 'yyyyMMddHHmmss') as readingDate,t.task_receiver_id as readingUserID,t.task_receiver as readingUser,'unicom/workflow/workflow_wrapper_reading.htm?bizInfoInstanceID='||t.biz_instanceid||'&'||'pndReadingID='||t.pnd_reading_id as readingURL,t.status as readingStatus,t.task_sender_id as readingSourceUserID,t.task_sender as readingSource,'hl' as readingCityCode,'a' as operatorType,sysdate as createTime,'hl006' as readingNotefrom pnd_reading t;
  • 修改完善的代码
--更正后的视图
create or replace view bop_pdt.vw_pengding_reading as
select t.pnd_reading_id as readingCode,t.bo_title as readingTitle,to_char(t.create_datetime + interval '8' hour ,'yyyymmddHH24MIss') as readingDate,t.task_receiver_id as readingUserID,t.task_receiver as readingUser,'http://10.64.50.143/unicom/system/unicom/home/sso_ucloud.htm?userId='||t.task_receiver_id||'&'||
'bizInstId='||t.biz_instanceid||'&'||'taskId='||t.pnd_reading_id||
'&'||'isTask=0'||'&'||'isComplete=0'||'&'||'isProcess='||t.type||'.0'||
'&'||'orgId='||substr(t.tenant_dn,3,instr(t.tenant_dn,',')-3) as readingURL,t.status as readingStatus,t.task_sender_id as readingSourceUserID,t.task_sender as readingSource,'hl' as readingCityCode,'a' as operatorType,'hl006' as readingNote,t.create_datetime  +  interval '8' hour as createTimefrom pnd_reading t;

上述代码差异说明:

  • type,原数据库中此类型为int,在类型转换为字符串时,Cordys系统将其“1”转换为“1.0”,而SQL语句直接为“1”,所以,需要补足差异而增加代码“’.0’”

但愿本次完善是找到结症,后续再请开发人员把推送内容原封不动的记录到数据库中,避免这种拼接SQL语句的、非正规的方法。

另外,也整理了几条其他需要注意事项:

  • 集群环境中,注意每台主机配置的准确并且对外连接一致,而且要逐台设备测试,例如解析域名的配置;
  • 系统参数配置要每台设备要一致,例如服务器地址、云门户接口设置;
  • 客户端兼容性检测与验证,例如IE浏览器的兼容性。

外部系统接口稽核经验谈相关推荐

  1. 设计模式之适配器模式 :外部系统接口的使用

    有过多年开发经验的开发人员都有这样的经验.不管之前的用户调研.需求分析等工作做的多么的完美.系统的需求变更总是不断变化的.所谓"智者千虑必有一失,愚者千虑必有一得".不管多么聪明的 ...

  2. sap与外部系统的接口怎么实现

    根据系统数据交换的方式以及读写数据的相对关系不同,可以将外部系统与SAP系统的接口形式分为:主动式,被动式和中间式1.主动式接口即外部系统将SAP系统所需的信息直接写入SAP系统的数据库中.这种方式要 ...

  3. 商品库存推送至外部系统API接口文档

    没有与外部系统对接,商品库存数据不通?往下看看 电商API文档---点击查看!http://ds.xnxxxk.cn/apijk?comefrom=CSDN&plan=kucuntongbu1 ...

  4. Java怎么保证数据一致性_连续调用多个外部系统写接口保证数据一致性的思路...

    概述 某些场景下,我们将业务数据落地之前,是需要先调用外部系统的多个写接口,当这些写接口都操作成功了,我们才将业务数据落地到自己本地的数据库里面.比如说: public void updateProd ...

  5. SAP 调用外部系统webservice接口(SOAP-XML)-SOAMANAGER

    SAP 调用外部系统webservice接口(SOAP-XML)-SOAMANAGER 文章目录 SAP 调用外部系统webservice接口(SOAP-XML)-SOAMANAGER 一.GUI客户 ...

  6. SAP系统与外部系统的三种接口形式

    SAP系统之所以能成为ERP产品的代名词,不仅仅是因为SAP系统己经集成了当今世界最强大的管理功能和最优秀的业务流程,也是因为SAP系统提供了一个功能较为完善的开放的开发平台,它提供的开发接口使得SA ...

  7. 时序分析基本概念介绍<系统接口sdc>

    今天要介绍的基本sdc是系统接口sdc.主要包括 set_drive set_driving_cell set_input_transition set_load 这四条命令,都是和端口上的驱动负载有 ...

  8. C语言子程序调用的入口参数和出口参数,C语言与DOS系统接口技术

    C语言与DOS系统接口技术 C语言是中级语言,用C语言实现DCB系统功能调用接口较简单.本文介绍C语言与DOS系统接口实用技术的几个关键问 (本文共2页) 阅读全文>> 介绍了一种用CPL ...

  9. itpt_TCPL 第五章:指针和数组 - 第八章:UNIX系统接口

    2016.10.11 - 01.09 个人英文阅读练习笔记(极低水准). 10.11 第五章:指针和数组 指针是保存一个变量的地址的变量.指针在C中被大量使用,部分是因为有时候它是唯一表达计算的方法, ...

最新文章

  1. 设计模式中的开闭原则
  2. maven实战笔记-13
  3. 内核调试和系统调用劫持
  4. linux启动脚本添加命令,Linux添加shell(.sh)脚本并添加定时任务
  5. Design-patterns-JS:用JavaScript实现23种设计模式
  6. java压缩与解压缩
  7. 【转】MYSQL入门学习之七:MYSQL常用函数
  8. opencv+Java+android 灰度图像
  9. 基于流程的多维度企业管理框架(第三稿)
  10. 第七次会议(4.22)
  11. 使用SQL查询所有数据库名和表名
  12. java支付系统,三方支付系统,四方支付系统
  13. 建筑CAD基础设计【1】
  14. IntelliJ IDEA设置护眼浅绿色背景及文字大小
  15. 【操作系统】存储模型(二):虚拟存储技术和置换算法
  16. java broken pipe_java Broken pipe 几种原因
  17. Python3 网络爬虫. 4
  18. 大白菜U盘重装Win10系统教程
  19. 根据视频URL解析视频信息(本地|网络)
  20. Tello无人机版之使用Scratch2和ROS进行机器人图形化编程学习

热门文章

  1. java中的僵死进程,僵死(Zombie)进程
  2. 微信小程序订阅消息推送(附带后台java代码)
  3. U盘被写保护,被分区了,报0x8000FFFF灾难性错误
  4. UpieaIE插件管理专家2005SP2版发布(转)
  5. socket主要函数介绍
  6. 想了很久,我还是决定把我从阿里Java岗P6—P7的秘籍拿出来分享给大家,毕竟独乐乐不如众乐乐
  7. 环信即时通讯SDK集成——环信 uni-app-demo 升级改造计划——整体代码重构优化(二)
  8. Github远程多人协作
  9. docker for windows下载和安装-Windows10版本
  10. 什么是std::string...?怎么用