EDI子系统开发流程
1. EDI架构介绍
1.1. 在FOCUS系统中的位置划分
EDI子系统是FOCUS系统和外部系统进行数据交换的接口,负责生成/接收符合一定格式要求的数据文件(报文)。在生成报文的时候,出于FOCUS系统业务流程的末尾;在接收报文的时候,处于FOCUS系统业务流程的开始。
1.2. EDI子系统模块划分
EDI子系统可以分为: Command、YakInterface(接口)、WPG、YakFront(前置机)及部分。其中Command是按照FOCUS系统的Command接口要求完成的,用来与客户端进行交互的部分;YakInterface为EDI子系统的核心部分,完成接收业务数据、业务规则校验、代码翻译、日志管理;WPG为第三方中间件,主要用来完成报文格式的转换工作;YakFront为EDI子系统的前置机,完成报文中字符的特殊处理和报文的发送、接收。
1.2.1. EDI子系统的物理架构
船公司AppServerEDI ServerGUIClientBrowserDB前置机船代系统其他外部系统其中EDI Server既是EDI子系统。
1
1.2.2. EDI子系统发送EDI报文业务流程
EDI文件传递方向代码翻译程序EDI打包程序客户①客户EDIXML客户端应用程序服务器XMLEDI客户EDI④④④业务人员②。。。EDI③EDI④前置机EDI服务器客户文件生成&分发程序其中各步骤的过程为:
① 业务员将要生成EDI文件的XML格式的数据上传到应用程序服务器;
②(业务处理YakInterface) 应用程序服务器通过“EDI打包程序”和“代码翻译程序”,将收到的XML格式的数据转换为XML格式的EDI报文,发送到EDI服务器;
③(映射、WPG格式转换) EDI服务器将收到的XML格式的报文转换为EDI文件,并附上说明信息,通过数据流发送到前置机上或应用程序服务器上,应用程序服务器再将EDI数据流发送到客户端;
④ (前置机业务处理YakFront)前置机上的“文件生成&分发程序”将接收到的EDI数据流转换为EDI文件,并根据附加信息分发给不同的客户,或客户端的“文件生成程序”将接收到的EDI数据流转换为EDI文件,并通过E-Mail或其它方式发送。
2
1.2.3. EDI子系统接收EDI报文业务流程
报文传递方向代码翻译程序EDI解包程序客户Email或其他方式⑤EDI查询④DataEDI查询结果客户EDI客户端①业务人员⑥应用程序服务器XML数据库服务器EDI客户EDI①①①①③。。。EDI②EDI前置机EDI服务器客户监视&发送程序EDI校验程序其中各步骤的过程如下:
① 客户将EDI文件上传到前置机或通过E-Mail等方式发送给业务人员,再由业务人员上传到前置机;
② 前置机上的“监视&发送程序”将接收到的EDI文件直接传送到EDI服务器进行解包;(前置机处理)
③ EDI服务器上的“格式自动识别程序”和“EDI校验程序”对EDI文件进行预处理,经过预处理的EDI文件通过格式转换,生成XML格式的报文,发送到应用程序服务器;(WPG映射处理)
④ 应用程序服务器通过“EDI解包程序”和“代码翻译程序”,将收到的XML格式的报文转换为XML格式的数据包,发送到客户端或存入数据库;(YakInterface)
1.3. Command
主要与客户端进行交互,完成与业务操作相关的发送EDI的准备,并生成符合
YakInterface要求的数据,在该Command中调用Agent来完成相应的生成、发送报文的操作。包括EDICommand和商务相关的Command。
EDICommand主要完成发送订舱单、提单确认、装箱单三种类型报文的发送工作。根据不同的报文类型,EDICommand对业务数据(主要是委托以及相关的数据)进行重新整理,生成符合EDI子系统(YakInterface)要求的报文(MessageObject)。商务相关的Command
3
在商务子系统中完成,用来生成SAP和用友的财务接口文件。
在FOCUS系统中,启动时会自动加载EDI子系统的入口程序Controller,需要使用EDI子系统的Command根据各自的业务需要,通过该Controller来获得EDI子系统提供的不同类型的EDI功能模块实例来完成其要求。具体的调用方式如下:
EDIAgent ediAgent = null; try { }
ediAgent = (EDIAgent) Controller.getInstance().getService(\} catch (Exception e){
其中EDIAgent.Instance表示提供发送与订舱业务相关EDI报文的功能模块,系统目前支持下列不同的功能模块: 功能模块名称 EDIAgent.Instance SAPAgent.Instance UFAgent.Instance 功能描述 发送与订舱业务相关EDI报文的 根据SAP财务系统的格式要求,把FOCUS系统的相关商务数据生成SA报文 根据SAP财务系统的格式要求,把FOCUS系统的相关商务数据生成SA报文 获得所需要的功能模块的实例以后,按照下面方式来调用:
MessageObject responseMO = null;
MessageObject requestMO = new MessageObject(); responseMO = ediAgent.getResult(requestMO);
其中requestMO是业务Command根据发送EDI的要求,经过对特定业务数据处理后生成的,这里用new操作来代替。
1.4. YakInterface
YakInterface是EDI子系统的核心部分,完成了EDI收、发的主要业务功能。
发送报文时,从Command接收业务数据,根据报文格式和接收方调用不同的Policy,完成业务规则校验、代码翻译、日志处理,并将其转换成统一的YakInterface内部EDI格式,再发送到WPG进行格式转换。
接收报文时,从WPG接收转换后的统一的YakInterface内部格式,根据“壳”信息中的数据,来调用不同的Policy完成业务规则校验、数据保存、日志处理。
其设计结构上的核心为以下两点: ? 数据耦合
在YakInterface内部各组件之间,使用共享的数据缓冲区来完成数据的交换,以适应未来可能会发生变化的业务处理方式。
4
? Policy模式
在发送和接收报文的过程中,对于具体的业务处理,采取多级Policy的设计模式,能够灵活应对不同报文格式和接收方的要求。
1.4.1. YakInterface逻辑架构
Interface Sub-System(接口子系统)子系统控制器Application ServerEDI ServergetService()Agent InstanceController控制器)()r(et)r)s)(e(i(rtrresegetitetsgsrsieiCacheigrggeeerr缓存r器)(retsFormattertransfer()TransferigP2&UP4. erBizgetResult(MO)格式转换代码翻Command器译器业务功能组件准备数据get()|put()put()|get()Return MOAgent任务代理DataBuffer数据交换区get()|put()MessageTargetQueueQueueDelegateMQClientEDI Server目标代理QueueMessageQueue﹒如果调用方式为同步调用,返回MO中包含实际转换后数据(目前不使用同步模式)﹒如果调用方式为异步调用,C1. 接收返回MO中仅包含操作状态数据P3&UP3. 转发数据P4&UP2. 生成数据C1:表示统一入口。 P2-P4:表示打包的流程。 UP2-UP4:表示解包的流程。
5