Oracle Retail RMS- Oracle Financials系统集成基本原理-学习总结

财务集成解决方案是通过中间件以发布-订阅模型来实现数据的传递。财务相关数据从Oracle E-Business Suite财务模块中发布出来,然后Oracle Retail通过它自己的中间件架构-Oracle Retail Integration Solution(RIS)来订阅这些消息。在外向事务流中,RIS生成财务中间表,然后利用它们通过标准财务接口功能向Oracle GL和AP模块导入数据。

1. 概述

1.1. 总体说明

财务集成解决方案是通过中间件以发布-订阅模型来实现数据的传递。财务相关数据从Oracle E-Business Suite财务模块中发布出来,然后Oracle Retail通过它自己的中间件架构-Oracle Retail Integration Solution(RIS)来订阅这些消息。在外向事务流中,RIS生成财务中间表,然后利用它们通过标准财务接口功能向Oracle GL和AP模块导入数据。

clip_image002

对于不同的企业模块,目前的应用还无法使Oracle Retil从一个单一的SOB(set of books )中区分出财务数据,集成的第一步,是定义一个新的SOB标识CHART_OF_ACCOUNTS_ID,这使得Oracle Retail能够识别集成SOB以从Oracle中抽取和发布财务相关的数据。Oracle Retail GL Setup表(FIF_GL_SETUP)根据它来实现集成。

2. 系统架构

2.1. 整体结构

与所建议的一样,集成的解决方案是通过中间件来实现的。EBS系统用BPEL提供web服务,Oracle Retail系统使用RIB来提供web服务。

Oracle BPEL Process Manager是运行在Oracle应用服务器上的基于JAVA的解决方案。Oracle BPEL PM使用数据库适配器(DB Adapter)与EBS中的数据源连接。

RIB同样也是基于JAVA的解决方案,它运行在SeeBeyond eGate上。RIB是一个异步的消息通道,它可以订阅BPEL创建和发布的消息,然后把消息的payload数据元素插入到RMS数据库中。Oracle Retail的应用程序通过Java Message Service(JMS)适配器与RIB连接。

clip_image004

集成的模型执行图

模型的三个主要组成部分:

  • l 运行在10g上的Oracle E-Business Suite 11.5.10 CU2
  • l Oracle BPEL为Oracle E-Business Suite 10.1.2提供中间件集成。
  • l Oracle Retail 11.0.5

外向数据流:BPEL和RIB中间件用于在两个系统之间建立连接和传输数据。从EBS财务模块导出的数据通过网络交换平台(NET change basis)传给RIB。然后在Oracle Retail中进行处理并更新相关的数据库表。

内向数据流:经过总结处理后的财务信息又从Oracle Retail传到财务中间表中。然后这些数据经过BPEL处理、提取数据并通过财务公开接口导入到GL和AP中。

2.2. Oracle 外向处理流
从EBS到Retail

在BPEL中支持下面EBS财务模块的外向相关数据流

clip_image006

外向事务处理流

1. Oracle E-Business财务模块GL总帐code combinations(会计科目)、供应商、汇率、运费组和支付组的数据被传到网络交换平台上。所有的记录添加或修改都将在预先设置好的平台上进行。

2. BPEL提取这些记录并执行数据转换,生成与RIB兼容的XML记录格式。

3. XML消息被发布到RIB,然后RIB订阅适配器尝试根据消息的topic和action(更新,修改,删除)来更新相关的业务数据对象。如果成功了,则从JMS中删除这条消息。否则,消息将会被写到RIB Error Hospital中,以便手动查看或自动重发布到适配器。

2.3. Oracle 内向处理流
从Retail到EBS

下面Oracle E-Business财务模块的内向事务数据流在整个BPEL中得到全面支持。clip_image008

内向事务处理流

1. 当前Oracle Retail业务处理提取相关数据到标准的财务集成中间表中。这些表是:

  • l 匹配采购订单收据(新建发票)
  • l 借贷凭证
  • l 存货变动(库存帐)
  • l 销售审计(销售日记帐)

2. BPEL流直接读取财务中间表,抽取详细信息和执行数据转换处理并传送到标准GL或AP开放接口。

3. 一旦传送到标准开放接口,正常导入和错误管理过程将在Oracle EBS财务中进行。

3. 集成的性能分析

3.1. 集成的性能分析
说明

性能是系统集成所要考虑的主要问题。Retail吞吐量大,符合解决方案需要支持高吞吐量的要求。在从Oracle E-Business Suite财务模块向外导出相关数据时,吞吐量不是值得担心的问题。

然而,在进行内向事务处理时,性能将面临严峻的考验。Oracle Retail 应用程序通过正常的业务流程填写标准财务中间表,这些流程是已经经过优化处理的。

在BPEL上进行的压力测试产生了下列性能基准:

导入销售审计事务的BPEL流程性能测试得到以下的结果:BPEL PM每小时可以导入350万条记录。测试是基于Linux4CUP,5GB内存的服务器上的10.1.2 Patch 2 version of BPEL PM。

4. 数据交互

4.1. 从Payment Terms/Freight Terms/Vendors/COA/Exchange 到 RMS
说明

这些数据通过BPEL Process Manager提取并以XML消息的形式发布到RIB上的JMS Topic中,然后RIB使用API从JMS Topic中提取数据并将数据插入到RMS系统中。BPEL PM有与系统错误场景相应的错误处理程序,同时RIB的API已经有内建的错误处理程序,它会将错误信息写入到RIB的Error Hosptial中。

BPEL PM有与系统错误场景相对应的错误处理逻辑,与此同时,RIB APIs也有自己内置的错误处理逻辑,这些错误将被写到RIB Hospital中。

4.2. Stock Ledger,Invoice and Sacles To GL
说明

Oracle Retail把与Oracle Retail销售审计系统(ReSA)和库存帐系统中与GL事务处理有关的数据传送到STG_FIF_GL_DATE中间表。Oracle把这些GL数据从Oracle Retail的中间表中取出,执行适当的转换然后导入Oracle E-Business Suite中的GL_INTERFACE表里。这个过程是由BPEL PM使用DB适配器(DB Adapters)来管理的。

对于Oracle Retail如何参与这个处理过程的信息,可以参考最新的Oracle Retail Invoice Matching (ReIM) Operations Guide和Operations Guide Addendum。

BPEL PM有与系统错误场景相对应的错误处理逻辑。如果有错误发生,系统将向指定的具有系统管理员角色的人发送一个通知。通知中包含了遇到错误的BPEL流程的相关信息,系统管理员在BPEL管理平台上检查错误并重新处理数据。

4.3. ReIM Approved Payments to AP
说明

完整的发票匹配过程是在ReIM中通过将支付建议(payable recommendations)导入Oracle AP中来完成的。ReIM匹配商品收据和商品发票,执行自动和手工的匹配和差异解决过程。匹配过的发票被发往中间表接口,总量,付款日期,供应商,Oracle站点ID,GL COA(帐户结果)信息和支付组。其它应付文件,包括借方记录,贷方记录和贷项清单也通过ReIM中间表(IM_AP_STAGE_HEAD和IM_AP_STAGE_DETAIL)连接到Oracle应付模块。关于Oracle Retail如何参与这个过程的信息,可以参考最新的Oracle Retail Invoice Matching (ReIM) Operations Guide 和Operations Guide Addendum

某些ReIM的事务没有被发送到Oracle应付帐户里,而是通过IM_FINANCIAL_STAGE表发送到Oracle EBS的总帐中。Oracle Retail财务中间表IM_FINANCIALS_STAGE保存着从ReIM传送过来的GL事务,它是BPEL导入到Oracle的主要中转点。为了支持数据转换和导入Oracle应付帐户标准接口,应付事务被写到一组新的Oracle Retail头信息/明细信息中间表(IM_AP_STAGE_HEAD和IM_AP_STAGE_DETAIL),以便Oracle BPEL进行处理。

clip_image010

业务流程

4.4. ReIM Journal Entries to GL
说明

从Oracle Retail 发票匹配流程传过来的GL事务被存放在财务中间表IM_FINCIALS_STAGE中。事务被处理后存放到GL+INTERFACE表中,这个表是用于实现通过日记帐将日记帐分录导入到Oracle EBS系统总帐的。

被取消的未匹配的商品收据和预付匹配发票被写到中间表,这些事务会影响总帐,但不需要为他们创建支付或连接其它支付。

Oracle Retail应用程序中的财务中间表不会被自动清除,可以认为Oracle财务模块对这些表有“管家”的责任。数据库适配器(datebase adapter)采用 ‘物理删除’优化选择的策略,智能地为那些记录选择数据库表并在处理完后删除。

5. Oracle Retail Integration Bus (RIB)

5.1. 订阅适配器
工作原理

订阅适配器的职责是对于给定的业务实体,保证其消息以正确的顺序被执行。比如,对一个给定的采购订单,“创建采购订单”消息应该在更新或删除消息之前执行。另外,所有的更新必须以正确的顺序进行,以保证两个系统数据的同步。但不同的业务实体之间的消息没有这样的约束。如果没有错误发生,消息会以先进先出(FIFO)的顺序执行。如果一个业务实体的消息在处理过程中出错了,其它业务实体的消息处理不会受到影响,而且出错的业务实体的所有其它消息将会被保存在Error Hospital中。

如果一个消息在处理过程中出错,则将执行以下两步:

1. 订阅适配器在内部记录出错事件并回滚所有与该消息有关的数据库操作。

2. JMS服务器重新向适配器发送消息,由于它还没有被成功执行过,适配器认出这个消息是有问题的(病的),并将它迁入到Error Hospital数据库中。

订阅适配器会经常检查RIB的hosptial数据库,看在hospital中是否有跟当前消息作用相同实体的消息。如果有,适配器就立即把当前消息也放到hosptial中。这是为了保证对于一个给定的业务实体,它的所有消息都以正确的顺序执行。由于没有人工干预,在没有后序的消息作用于该业务实体之前,RIB将一直为业务实体执行“病的”消息。

一个消息被迁入Error Hosptial后,一个hosprital重发适配器/e*Way/Daemon将重发消息到JMS以重新尝试执行。前提是错误是短时间的-记录被锁定或有外部信赖未得到满足。消息重试的次数是可以设定的。

clip_image012

基于PL/SQL接口的订阅流程

5.2. Error Hosptial
相关的表

下面的数据库表是用于存储Error Hosptial中的消息的:

  • l RIB_MESSAGE:包含message payload,所有single-field信封信息和用<id>标记创建的连接字符串,它同时包含一个唯一的hosptial ID在hosptial中标识这个记录
  • l RIB_MESSAGE_FAILURE:包含每次消息执行时产生的所有失败信息
  • l RIB_MESSAGE_ROUTING_INFO:包含所有消息信封中出现的routing元素信息。
  • l RIB_MESSAGE_HOSPTAL_REF:包含所有消息信封中出现的hospital 相关信息

另外,序列RIB_MESSAGE_SEQ用于保持与Error Hospital中的每条信息相关联的唯一的“Hospital ID”。

6. BPEL的错误处理

6.1. 错误处理
工作原理

BPEL提供了高度的错误处理能力。通过安装通知服务,你可以配置系统管理员邮件地址,BPEL流程出错时会向这个邮件地址发送通知。每个BPEL流程都有唯一的流程实例,它被传给系统管理员以便进行纠错工作。从BPEL管理平台的“流”标签,管理员可以选择为流程实例执行手动恢复。“实例”标签显示了整个流程的列表。

RIB中消息典型的生命周期:

  1. 首先,publishing adapter创建消息,触发创建消息的事件可能是数据库的一个选择操作,或者只是到了特定的时间间隔。每个消息在协作的情况下被创建,并且协作的部分配置说明了发布这个消息的目标。这个消息被送到一个“topic”(也叫JMS目标),然后被写入稳定存储器中。

2. 现在订阅者可以开始订阅消息了。订阅过程是基于publishing collaboration/event type的组合实现的。每个订阅者连接topic,然后获取下一个有效的信息。订阅者用分开的线程从各个事件类型地基地中获取消息。消息的获取是通过它在topic内的位置确定的。作为获取过程的一部分,Error Hosptial软件通过更新消息的状态来反映当前有一个订阅者正在处理这个消息。

3. 一个订阅者一旦获取到消息,他就可以根据自己的规则自由地处理它。如转换适配器,它可以打开消息、修改消息内容、把修改后的消息发布到新的topic上。如果新的消息与原消息类型不同,新消息可以发布到原topic上。修改后的消息可以有多个订阅者,对每个订阅者,都不断重复以上过程。

4. 当一个订阅者完成消息处理后,topic相应更新消息的状态。当所有的订阅者都完成对消息的处理后,这个消息可能会被立即删除或者在删除前存档一定的时间。存档根据topic的类型和Quene Manager的不同设置来相互区别。

5. 消息传递给适当的订阅者后或者在topic上的停留时间达到了MaxTimeToLive参数设置的时间时,JMS Quene Manager将删除这个消息。

 image

BPEL和WSDL

 

   首先谈一下BPEL和WSDL(Web Service Design Language)的区别,WSDL只是定义接口参数,不会定义如何实现接口,而BPEL不仅有自己的接口定义(也是一个WSDL文件,包括输入参数、方法操作名、返回参数),BPEL会定义如何调用其他服务的接口来实现自己的接口。简单地说,BPEL通过流程编程将各种接口组合在一起,其目的在于提供一个“集成了各种接口”的接口。

  BPEL扩展了WSDL以便以抽象方式提供和使用Web服务。这样可以发挥WSDL的重要长处之一,即能够将合成时所需的抽象消息和端口信息与调用时所需的物理绑定和地址详细信息分离。

WSDL中的XML语义:

1.  Types指定在后面的Message中需要的类型。

2.  Message可以理解为函数中的参数,只不过如果一个函数如果有多个参数的时候应该把这些参数定义到一个Message中而不能定义为多个Message。

3.   ProtTypes就是一个服务接口,定制在你的服务中应该包含哪些操作。

4.  Operations指的是操作,也就是对应每个接口中的函数名称,每一个Operations都可以有input,output,fault等,这些参数能够来自于Message。

5. Bindings定义通讯方式,每一个PortType对应一个Binding,然后在Binding中进一步细化设置每一个操作,进而每一个input,output,fault的传出方式,编码方式等。

6.   Service就是将binding与对应的地址相关联,这样就知道什么地址上的服务能够做哪些事了。

 

使用JDeveloper开发BPEL流程

一、JDeveloper开发环境配置:

JDEVELOPER的菜单上点击View->Connection Navigator

配置应用服务连接:

1.       右键点击Application Server选择New Application Server Connection(或直接双击Application Server),在welcome窗口直接点击下一步

2.       在下面窗口的Connection Name窗口输入有意义的连接名称,Connection Type选择Oracle Application Server 10g 10.1.3(具体依JDeveloper的版本而定,这里使用的是JDev10.1.3.1)

 

3.       点击下一步,输入登陆BPEL服务器的用户名和密码(默认用户名是oc4jadmin,密码是welcome1

 

4.       点击下一步,如果在第3步的Connection Type选择正确,则OC4J Instance Name字段为home(如果为空则有可能第3步配置错了)。

Connect To: Single Instance

Host Name: 填上BPEL服务器的主机名或IP地址

OPMN Port: 填上安装BPEL服务器时设定的应用服务端口号(默认为6003

 

 

配置集成服务连接:

1.       右键点击Intergration Server选择New Integration Server Connection,在welcome窗口直接点击下一步

2.       Connection Name中输入连接名称

 

3.       点击下一步,在Connection窗口,Application Server选择刚才创建的应用连接,此时Host Name也自动指定,输入Port Number(默认是8888

 

4.       点击下一步,测试,如果测试结果中只有第一项测试成功,则说明端口配置错误。

 

 

二、创建一个项目

1.       JDeveloper窗口菜单中选择File>New

2.       在弹出的新建窗口中选择General->Application

 

3.       在弹出的新建应用窗口中输入应用名称,其它采用默认

 

 

4.       点击“确定”,提示创建“Project”,点“取消”。

 

 

5.       右击刚才新建的应用“Application”选择New,在弹出的新建project窗口中选择如下:

 

6.       点击“确定”,在弹出的“Project Setting”窗口中输入项目名称,在Template中选择“Synchronous BPEL Process”。

 

7.       点击“finished”,创建项目成功。(可以开始进行开发了!)

 

三、BPEL项目的发布与测试

右击你所要发布的“Project”,选择Deploy->(你创建的连接)->Deploy to defalult domain.

 

 

PRO*C学习指南

PROC 技术简介

 

 

什么是PROCPRO*C

ORACLE支持六种高级语言中内嵌入SQL语句,或ORACLE库函数调用来访问数据库。它们是CFORTRANCOBOLAdaPASCALPL/I等,这些语言称之为宿主语言,用它们开发的程序就称为PRO*程序,如PRO*CPRO*COBOL等。

我们可以定义PRO*C程序为:通过在过程化编程语言C/C++中嵌入SQL语句而开发出的应用程序。

 

PROCOracle数据库

ORACLE数据库管理系统中,有三种访问数据库的方法:

1.       SQL*Plus,它有SQL命令以交互的应用程序访问数据库;

2.       用第四代语言应用开发工具开发的应用程序访问数据库,这些工具有SQL*FromsQL*Reportwriter,SQL*MenuORACLE*FORMS等;

3.       利用在第三代语言内嵌入的SQL语言或ORACLE库函数调用来访问。

Pro*C就属于第三种开发工具之一,它把过程化语言C和非过程化语言SQL最完善地结合起来,具有完备的过程处理能力,又能完成任何数据库的处理品任务,使用户可以通过编程完成各种类型的报表。

 

PROC工作原理

PRO*C应用程序的开发和运行的基本步骤类似于C程序,唯一不同之处是在进行C编译之前需要进行预编译。

程序员用相应的高级语言编写嵌入SQL语句的PRO源程序(若用C语言则称为 PROC源程序),然后运行相应的预编译程序,把嵌入的SQL语句转换为标准的Oracle调用并生成目标源程序,即纯高级语言格式的源程序,最后将这些源程序加入用户的程序中调用。

 

 

Oracle预编译程序提供如下功能:

l         能用六种通用的高级程序设计语言中的任何一种编写应用程序。

l         遵循ANSI标准,在高级语言中嵌入SQL语句。

l         可采用动态SQL方法,让程序在运行时接受或构造一个有效的SQL语句。

l         实现Oracle内部数据类型和高级语言数据类型之间的自动转换。

l         可通过在应用程序中嵌入PLSQL事物处理块来改进性能。

l         能在程序行和命令行上指定所需要的预编译可选项,并可在预编译的过程中改变它们的值。

l         能全面检查嵌入的SQL数据操纵语句和PLSQL块的文法和语义。

l         可用SQLNet并行存取多个地点的Oracle数据库。

l         可把数组作为输入和输出程序变量使用。

l         能对应用程序中的代码段进行条件预编译。

l         提供了较强的异常处理功能。

 

PROC的优点

1.       它把过程化语言和非过程化语言结合,形成一种更强有力的开发工具。利用它可以 开发出满足种复杂的应用程序,还可以引用 窗口技术和鼠标技术等。

2.       可以使开发的应用程序具有管理系统资源使用(如内存分配)、SQL语句执行和指示器等能力。

3.       提高了应用程序的执行速度,因为它把SQL语句翻译成相应的ORACLE库函数调用。特别是在网络环境下,可以减少网络传输和处理的总开销。

 

 

学习PROC所需的相关知识

1、  C/C++语言基础知识

2、  Oracle技术,如SQLPL/SQL

有用的资料:

from 《Oracle背份策略的补充》
http://www.huihoo.org/joyfire.net/5.html

Oracle数据库开发(一).Windows下配置使用ProC

http://blog.csdn.net/liwei_cmg/archive/2007/06/06/1641330.aspx

Oralce数据库开发(二).Linux下配置使用ProC

http://blog.csdn.net/liwei_cmg/archive/2007/06/07/1643023.aspx

Rooms Information Pro*C Sample: Invoking Java Stored Procedure Using Pro*C

http://www.oracle.com/technology/sample_code/tech/java/jsp/samples/proccalljsp/readme.html

学习PROC+C教程.rar

服务器的test_PROC目录下。服务器IP:192.168.11.41