使用
JCo
同步
SAP
系统数据
一、
项目需求
业务系统需要调用
SAP
系统的财务相关功能,调用时需要提供其所需的专有参数,如公司、科目,而这些参数都将作为可选项存在,有的可能存在上千项,如某公司下有上千个费用科目,如果每次调用时都实时链接
SAP
获取这些可选项数据,将给业务系统的性能造成影响,因此需要在业务系统上保存这些数据。
二、
项目分析
提供
SAP
系统财务相关功能所需的参数多为短时间内变化量不大的数据,如:公司、科目,在时效性上没有要求,新添加了一个科目,第二天在业务系统上才有更新可以被用户接受,因此,可以先将所需数据一次性全部保存到业务系统,然后定时同步有变化的数据。而业务系统读取这些数据时,只需要再编写
js
脚本对外提供以指定格式显示的函数即可。
三、
系统设计
数据由
SAP
系统所有,因此应该由
SAP
提供函数,定时执行,提供有变化的数据,提交到业务系统,业务系统根据
SAP
提供的数据,更新自己已经保存的数据。因此首先想到使用
WebService
方式,由业务系统提供服务,接受
XML
格式的数据,更新自己的数据。但是经测试,
SAP
系统支持的
WSDL
文件规范比较低,在
SAP
系统中添加
WebService
时,业务系统提供的
WSDL
文件并不能为
SAP
系统所识别。所以,采用业务系统定时使用
Jco
链接
SAP
,执行
RFC
函数,获得有变化的数据(
RFC
函数获取有变化的数据,拼成可保存为
XML
文件的字符串),更新自己的数据的方式。这里使用
Spring
的
Quartz
来作为任务调度器,定义同步数据为一个
Job
,定义每隔一定时间为一个
Trigger
(定时触发)。
四、
程序编写
1.
启动程序
com/sap/jco/SpringSchedule.java
在此文件中加载
Spring
配置文件,启动应用
2.
bean.xml
定义了
Quartz
任务调度器的实现类
schedule
,定义此调度器的触发器为
simpleTrigger
,在此
bean
中设置了触发器的启动时间和执行间隔,当然,也可以使用
org.springframework.scheduling.quartz.CronTriggerBean
,其可以设置具体在什么时间执行(视项目情况选取合适的
Trigger
),定义此调度器的
Job
为
methodInvokingJobDetail
,在这个
Job
中使用继承了
TimerTask
的
syncTask
中的
start
方法。
3.
真正的
Job
com/sap/jco/SyncTask.java
start()
中执行
writeService.write(readService.read());
4.
链接
SAP
com/sap/jco/util/JCOUtils.java
根据
sapBean
中配置的参数执行链接,并提供创建指定名称函数、执行指定函数对象的方法
注意:将库文件
libsapjco3.so
放在
$JAVA_HOME/jre/lib/i386
目录下
5.
获取数据
com/sap/jco/dao/impl/ReadManagerImpl.java
根据
sapbean.xml
中装配的
sapBean
链接
SAP
系统,创建函数,执行,从返回结果中获取指定名称的信息,并以名称值为
key
存储到
HashMap
中
6.
更新数据
com/sap/jco/dao/impl/WriteManagerImpl.java
从
HashMap
中根据
key
得到对应的信息,将此信息保存为
XML
文件,分别从保存原有信息和新信息的
XML
文件中得到
beanList
,然后与原有的数据做对比,如果新信息操作标示为“
D
”,则在原有信息中按照主键查找,如果存在,从原有数据中删除;如果新信息操作标示为“
U
”,则在原有信息中按照主键查找,如果存在,从原有数据中先删除记录,再添加新纪录;如果信息操作标示为“
I
”,则直接插入。操作完成后将已经有变化的信息重新写入文件。
7.
js
脚本获取数据
参见
js/funcForSAPData.js
五、
系统测试
经测试,可以达到预期效果。
六、
优缺点分析
优点:
同步数据
采用与业务系统松耦合的设计,独立于业务系统运行。
显示数据
使用
js
脚本从
xml
文件中获取数据格式化显示,在业务系统需要调用数据的位置添加
js
函数即可。
缺点:
同步数据
获取到更新的数据进行同步时,在原有数据中按照主键查找时如果不做优化,当数据量比较大时可能会影响性能。
显示数据
如果业务系统中调用数据的逻辑比较复杂,可能会导致
js
脚本量大量增加,为可读性和可维护性带来困难。
分享到:
相关推荐
在Quartz定时任务系统中,MyBatis可能被用来存储和检索任务信息,包括任务的调度配置、状态和日志等数据。 4. **Thymeleaf**: Thymeleaf是一个现代服务器端Java模板引擎,尤其适用于Web应用。它支持HTML5,并能在...
quartz定时任务使用例子大全,这里面介绍了三种使用quartz定时任务的方式,第一种方式是完全使用代码写死的调用方式,第二种使用的是从数据库读取任务配置信息的调用方式,第三种是使用从数据库读取任务配置,生成...
本项目中使用SAPJCO3调用SAP系统的RFC函数来获取或传送数据,然后以接口的方式对外提供服务,并提供定时器功能来实现对 数据定时同步任务。 使用技术 后台 描述 框架 核心框架 Spring、Spring Boot、Spring MVC 持久...
这个标题“Quartz 定时WebForm和WinForm使用的dll”暗示了我们将在WebForm和WinForm应用中使用Quartz来实现定时功能。在.NET环境中,Quartz通过引入特定的DLL文件来实现其功能。 首先,我们要理解什么是DLL...
Spring + quartz 定时任务修改定时时间不重启服务
在Spring Boot应用中整合Quartz定时任务是一种常见的需求,它可以帮助我们执行周期性的后台任务,如数据同步、报表生成等。Spring Boot与Quartz的结合提供了便捷的配置方式,特别是通过YAML(YAML Ain't Markup ...
通过上述内容,我们可以构建一个基于Quartz的Web应用定时任务系统,实现任务的自动执行。对于"Quartz_demo"这个压缩包文件,可能包含了示例代码、配置文件和说明文档,可以进一步帮助学习和实践Quartz在Web环境中的...
Quartz定时任务通过Cron表达式的灵活性,可以满足各种复杂的定时需求,如定期备份数据库、发送邮件通知、数据同步、系统监控等。特别是在大型分布式系统中,Quartz提供了集群模式,确保即使在高并发环境下也能准确...
- 定时任务是在特定时间点自动执行的程序或任务,常用于执行周期性维护、数据同步、定时报告等。在Java中,可以使用ScheduledExecutorService或者Quartz来实现定时任务。 3. **Cron表达式**: - Cron表达式是Unix...
综上所述,这个项目利用了Mybatis、Spring、SpringMVC和Quartz的强大功能,构建了一个能够灵活切换数据源并实现跨数据库同步的系统。通过合理的配置和调度,可以有效地处理复杂的分布式数据库环境中的数据一致性问题...
【Quartz定时任务】是Java领域的一个强大任务调度框架,但在C#中也有相应的实现,如标题所示,这里讨论的是C#控制台应用中使用Quartz.NET进行定时任务的实现。Quartz.NET允许开发者在应用程序中安排任务在特定时间...
Quartz是一款广泛使用的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Quartz中,任务和触发器的配置信息是通过数据库存储的,这使得任务调度具有高可用性和可扩展性。这里我们将详细探讨...
Spring Quartz定时任务jar包的使用涉及到Spring框架与Quartz库的集成,通过`commons-collections.jar`库辅助处理数据,配合`license.txt`提供的许可信息,开发者可以在Java应用中构建出强大且灵活的定时任务系统。
在Java应用中,Quartz常被用来实现后台任务的自动化,比如定时发送邮件、数据备份等。在分布式环境中,Quartz还支持集群,确保任务的高可用性。 Quartz的定时任务持久化是指将任务的相关信息(如触发器、作业详情)...
【C# Quartz定时任务】是基于C#编程语言实现的一...通过上述知识,你不仅可以理解C# Quartz定时任务的基本原理,还能构建自己的任务调度系统。在实际项目中,可以根据需求灵活配置和扩展,实现各种复杂的定时任务需求。
通过以上方式,你可以实现Quartz定时任务结合动态切换数据源的功能,使得你的应用程序能够更好地适应复杂的数据库环境,提高系统的稳定性和可扩展性。在提供的压缩包中,readme.txt可能包含了关于如何配置和使用这些...
在这个实例中,我们将探讨两种在.NET中使用Quartz实现定时任务的方法:通过配置文件和代码动态调用。 首先,我们来了解一下Quartz的核心概念: 1. **Job(作业)**:这是执行特定任务的实际工作单元。你可以定义一...
Quartz是一款开源的作业调度框架,它为Java应用程序提供了强大的定时任务管理能力。作为一个专业的IT行业大师,我将深入解析Quartz的核心概念、工作原理以及如何实现简单的定时任务。 Quartz的主要功能在于允许...
通过这种整合,我们能够构建一个健壮的系统,实现基于JMS的数据同步,并利用Quartz进行定时触发。这有助于优化系统性能,提高数据一致性,同时降低系统间的耦合度。在实际应用中,这种解决方案可以根据具体需求进行...
在“quartz 定时任务调度”这个主题中,我们将深入探讨Quartz的主要特性、如何使用cron表达式以及在MVC版本中的应用,同时也会提及插件部署。 1. **Quartz简介** Quartz是一个开源的作业调度库,它允许开发人员将...