版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、国际货运单证确认系统【摘 要】采用EDI的方法能快速、节省又平安地发送订单、发票、提货单等商业信息。国际货运单证确认系统以通用WEB数据交换系统为根底,是整个EDI系统中非常重要的一个业务模块之一,它提供货主与货代之间对单证的管理,主要包括单证确实认操作,比对操作和修改操作,快速实现货主与货代在无纸条件下的的的各项业务需求。【关键字】EDI、XML、XSLT、DOM 【Abstract】 International Freight Document Check SystemEDI is an important means of participating in the Internation
2、al trade currently. We can send order form, invoice, bill of lading or other commercial information quickly and safely by using EDI . International Freight Document Check System which based on General WEB data change system, is an operation function module of EDI system. It provides Document managem
3、ent between merchant and agent ,which includes Document checking ,Document comparing and Document modifying, and realizing every operation demand immediately in no page condition.The International Freight Document Check System which is designed by Delphi,sets XML as its exploiture Object and combine
4、s Delphi with XML to achieve its design aim ,is one of the most important operation module in the whole EDI system. 请你自己按中文修改 【Key Words】XML、XMLT、Delphi、DOM目录 TOC o 1-3 h z u HYPERLINK l _Toc73188985 第一章综 述 PAGEREF _Toc73188985 h 5 HYPERLINK l _Toc73188986 第二章 设计原理和知识 PAGEREF _Toc73188986 h 7 HYPERL
5、INK l _Toc73188987 2.1 XML原理 PAGEREF _Toc73188987 h 7 HYPERLINK l _Toc73188988 2.1.1 XML介绍 PAGEREF _Toc73188988 h 7 HYPERLINK l _Toc73188989 2.1.2 XSL介绍 PAGEREF _Toc73188989 h 7 HYPERLINK l _Toc73188990 2.1.3 XML DOM 的介绍 PAGEREF _Toc73188990 h 10 HYPERLINK l _Toc73188991 2.2 ADO原理 PAGEREF _Toc731889
6、91 h 11 HYPERLINK l _Toc73188992 2.3 delphi 介绍 PAGEREF _Toc73188992 h 11 HYPERLINK l _Toc73188993 2.3.1 Delphi 对XML的支持 PAGEREF _Toc73188993 h 12 HYPERLINK l _Toc73188994 2.3.2 Delphi 对ADO的支持 PAGEREF _Toc73188994 h 12 HYPERLINK l _Toc73188995 2.4 COM技术应用 PAGEREF _Toc73188995 h 13 HYPERLINK l _Toc7318
7、8996 第三章 系统原理 PAGEREF _Toc73188996 h 15 HYPERLINK l _Toc73188997 3.1 单证确认系统设计框架图: PAGEREF _Toc73188997 h 15 HYPERLINK l _Toc73188998 3. 2 系统功能简介 PAGEREF _Toc73188998 h 16 HYPERLINK l _Toc73188999 功能模块设计原理与方法 PAGEREF _Toc73188999 h 16 HYPERLINK l _Toc73189000 界面管理功能 PAGEREF _Toc73189000 h 16 HYPERLIN
8、K l _Toc73189001 单证生成功能 PAGEREF _Toc73189001 h 17 HYPERLINK l _Toc73189002 自动比对功能模块 PAGEREF _Toc73189002 h 17 HYPERLINK l _Toc73189003 同步功能模块探讨 PAGEREF _Toc73189003 h 19 HYPERLINK l _Toc73189004 报文回复与接收端自动检测功能 PAGEREF _Toc73189004 h 19 HYPERLINK l _Toc73189005 单证修改模块 PAGEREF _Toc73189005 h 20 HYPERL
9、INK l _Toc73189006 第四章 核心代码分析及系统实现技术要点 PAGEREF _Toc73189006 h 23 HYPERLINK l _Toc73189007 4.1 XSL转换XML PAGEREF _Toc73189007 h 23 HYPERLINK l _Toc73189008 字符串搜寻 PAGEREF _Toc73189008 h 23 HYPERLINK l _Toc73189009 报文的合并与拆分 PAGEREF _Toc73189009 h 24 HYPERLINK l _Toc73189010 4.3.1 报文合并 PAGEREF _Toc731890
10、10 h 25 HYPERLINK l _Toc73189011 4.3.2 报文的拆分 PAGEREF _Toc73189011 h 25 HYPERLINK l _Toc73189012 对XML报文的中间局部截断 PAGEREF _Toc73189012 h 27 HYPERLINK l _Toc73189013 4.5 单证的修改回复 PAGEREF _Toc73189013 h 28 HYPERLINK l _Toc73189014 从ListBox与Memo之间索引的建立 PAGEREF _Toc73189014 h 28 HYPERLINK l _Toc73189015 字符串对
11、字符的分解 PAGEREF _Toc73189015 h 28 HYPERLINK l _Toc73189016 4.5.3 XML在Delphi里DOM中的装载与修改 PAGEREF _Toc73189016 h 28 HYPERLINK l _Toc73189017 节点内容比对 PAGEREF _Toc73189017 h 28 HYPERLINK l _Toc73189018 4.5.1 TxjsFile临时文件的生成 PAGEREF _Toc73189018 h 28 HYPERLINK l _Toc73189019 .2 对节点内容的比对 PAGEREF _Toc73189019
12、h 28 HYPERLINK l _Toc73189020 文件转为字符串的处理 PAGEREF _Toc73189020 h 29 HYPERLINK l _Toc73189021 第五章 系统评测 PAGEREF _Toc73189021 h 31 HYPERLINK l _Toc73189022 系统测试环境 PAGEREF _Toc73189022 h 31 HYPERLINK l _Toc73189023 测试对象与功能 PAGEREF _Toc73189023 h 31 HYPERLINK l _Toc73189024 存在的问题及改良 PAGEREF _Toc73189024 h
13、 31 HYPERLINK l _Toc73189025 5.4 综合评价和结论 PAGEREF _Toc73189025 h 31 HYPERLINK l _Toc73189026 参考文献 PAGEREF _Toc73189026 h 33 HYPERLINK l _Toc73189027 致谢 PAGEREF _Toc73189027 h 33 HYPERLINK l _Toc73189028 附录一 EN报文与报文BL与类似 PAGEREF _Toc73189028 h 34 HYPERLINK l _Toc73189029 附录二 节点读取函数 PAGEREF _Toc7318902
14、9 h 48综 述EDI(Electronic Data Interchange)是指具有一定结构特征的数据信息在计算机应用系统之间的自动交换和处理。这是当今参与国际贸易的重要手段,许多行业采用EDI的方法来快速、节省又平安地发送订单、发票、提货单、 海关申报单、进出口许可证等商业信息。宁波是一个港口城市,国际运输和现代物流已变成宁波国民经济的重要组成局部。宁波港也将成为具备运输、仓储、中转、工业开发、通信信息、现代物流、战略储藏、滚装运输、保税及综合效劳功能于一体的现代化、多功能的港口。 宁波港口EDI中心积极探索实现集装箱运输无纸化,提供电子数据交换,在港关、港检联动方面作了有益的尝试、提
15、高了港口工作效率和效劳水平。建立以国际物流EDI为中心的标准化接口体系,进行市场经营性的信息资源效劳进一步尝试,鼓励第三方EDI开发商进行共同开发,基于EDI体系的物流信息效劳正逐渐在经济领域发挥关键的作用。Web-EDI的目标是允许中小企业只需通过浏览器和Internet连接去执行EDI交换。Web是EDI消息的接口,表单就是EDI系统的接口。这种解决方案对中小企业来说只需一个浏览器和Internet连接就可完成。国际货运单证确认系统是在前期EDI分布式开发平台上的一个业务应用系统。它提供应货代的业务系统一个功能接口,可以发送相应阶段的单证 、MAIL、系统给客户,也允许用户以 、邮件、客户
16、端、网站方式接收这些相应阶段的单证,允许货主对这些加以确认包括拒绝和修改回执或提供重复发送和二次确认的同步修改等。通过该单证确认系统,可以快速实现货代和货主间的各项业务需求。封装好的MIDAS接口Web Service (WebServer) SQL后台数据库DBserver用户类别、公司、部门、人员四级及计费、费率、报文格式、加解密算法、业务、发送授权收发业务、发送队列、接收队列、日志、历史报文成功、垃圾 发送 队列 接收 队列 监控、管理、计费 加解密算法/转换算法/调度算法 用 户 1 用 户 2 发送、接收、查询、注册、注销、管理、监控提供应用户封装好的方法 并能对不同的用户提供不同的
17、效劳。第二章 设计原理2.1 XML原理2.1.1 XML介绍可扩展标记语言eXtensible Makup Language ,XML是由万维网联盟World Wide Web Consortium,W3C开发的,主要目的是为了克服HTML的缺点。它是SGMLStandard Generalized Markup Language的一个子集,其目标是能够以目前HTML可能实现的方式在Web上使用、接受、和处理通用SGML。XML实际上是一种标准,它的语言语法简洁,书写格式严谨。1XML语言区分大小写;2XML文档通常以一个XML声明开始,声明格式如下:3XML文档包含一个或多个元素。元素是文
18、档的主要逻辑组件,它由开始标记和结束标记界定。每个元素都有一个用于标识的名字,名字必须以一个字母或下划线开始,后跟字母、数字、连字符、下划线或圆点。但“XML以及包括各种大小写的任意组合形式,如“xML、“Xml、“xml等,都是系统保存字,不能命名为元素名称。元素中可以包含属性,为元素提供附加信息。一个具有属性的元素,其表示形式如下:元素内容 4XML的注释,使用“将他们包含起来。注释是给人工阅读使用的,XML解析器会忽略注释。2.1.2 XSL介绍1树型结构每个结构完整的XML文档都是树型结构,树型结构的节点是元素以及元素的内容。在XSL中,特性、名称空间、处理指令以及注释等也可当作节点。
19、XSL处理器认为XML树型结构包含根节点、元素、名称空间、处理指令以及注释等7类节点。2XSL样式单文档XSL样式单包含一组模板和其他规那么。模板规那么拥有模式Pattern以及模式Template,模式用来指定模板规那么所适用的树型结构,而模板用来在与模式匹配时进行输出。当XSL处理器使用XSL样式单来格式化XML文档时,它对XML文档的树型结构依次进行扫描,浏览每个树型结构,当读完XML文档中的每个树型结构时,处理器就把它与样式单中每个模板规那么的模式进行比拟。当处理器找到与模板规那么的模式相匹配的树型结构时,它就输出此规那么的模板。这个模板包括一些标记,新的数据和从原XML文档的树型结构
20、复制来的数据。3XSL样式单和XML文档的链接将XSL样式单和XML文档相链接后,就可用浏览器显示XML文件。这种链接通过在XML文档序码的XML声明后插入处理指令完成,其语法格式为: 4XSL模板由XSL:template 元素定义的模板规那么是XSL样式单的最重要局部,每个模板规那么都有一个XSL:template元素。每个XSL:template元素都有一个match属性Attribute,用来指定此模板应用于输入文档的哪个节点。下面分类介绍这些模板规那么:a.xsl:apply-template 元素:要求处理器去处理已经用xsl-template元素定义的命名元素。b.select属
21、性:语句是对当前节点下所有节点进行嵌套检索,而select属性用来指定要选定的子元素。如:表示只对子元素Title和Author执行操作5在XSL中对节点值的简单操作a. xsl:value-of元素:该元素可以把输入文档中的节点值复制到输出文档中,xsl:value-of元素的select属性值指定要获取的是哪个节点的值。如:表示选择所有的子元素。b. xsl:for-each元素:该元素能处理多个元素。c. order-by属性:在模板中的xsl:apply-templates元素中参加order-by属性对指定的节点按照给定的次序进行排序输出,其语法格式为:6节点的匹配模式匹配根模式:为
22、了使输出的文档结构完整,从XSL变换的第一个输出内容应为输入文档的根节点。例如下面的语句,只能应用与根节点:匹配元素名:将根匹配模式中的“/改为元素名,就可以表示为对元素的匹配了,另外select属性的描述完成对元素的筛选,下面是建立一个用来输出ParentElement元素的ChildElement子元素其标题为粗体的模板的例子: 使用“/字符匹配子节点:在XSL中允许用Xpath来寻址XML文档中的节点。一个根本的Xpath表达式如下:在这个表达式中通过使用“/得到descentdant这个节点从根节点开始的路径。使用“/符号匹配子元素:当使用不规那么的层次时,很难描述其层次关系,选择给定
23、类型的所有子元素,可使用“/引用任意级别的后代元素。使用“符号匹配属性如:也可使用“*来选择元素的所有属性。如 HYPERLINK mailto:/Item/* /Item/*可选Item元素的所有属性。 使用comment匹配注释使用text匹配文本节点“或操作符|:允许一条模板规那么匹配多种模式。如下面的模板规那么与ID和Name元素都匹配:7条件模板条件表达式比拟运算符可选方式描述And$and$逻辑与Or&or&逻辑或Not()$not$逻辑非在摸板输出中使用条件xsl: if 元素 如下面的摸板规那么将在输出不是最后一个节点的后面加上一个逗号,xsl:choose元素xsl:choo
24、se元素可以从几个可能的输出结果中选择一个,它的子元素xsl:when提供各种条件以其相关的输出模板。Xsl:when元素的test属性值是布尔值的表达式结果,如果多个条件为true,那么只选择第一个为true的条件;如果都不为true,那么选择xsl:otherwise子元素的内容。如下例子根据Item元素的子元素的名称设置颜色:.在模板属性中使用条件在样式单中,使用如下语句:这就是一个在属性中使用条件,Age属性小于28的所有Member (请压缩2.1.2,将其在写在2页中)2.1.3 XML DOM 的介绍1XMLDOMDocument对象XMLDOMDocument对象代表XML文档
25、的根,它是XML文档的第一个调用接口,也是唯一可以被创立的对象。 XMLDOMDocument对象的常用属性属性用法DocumentElement返回文档的根节点FirstChild返回文档的第一个子节点LastChild返回文档的最后一个子节点Text返回节点的文字内容和它的子树2XMLDOMNode对象这是DOM的根本对象之一,该对象在XML文件树中表示一个节点。XMLDOMNode对象的主要属性属性用法NodeName返回节点的名字NodeType返回节点类型ChildNode返回节点的子节点列表ParentNode返回节点的父节点列表PreviousSibling返回节点的前一个兄弟节
26、点NextSibling返回节点的下一个兄弟节点Text返回节点及其子节点文字内容Attribute返回节点是属性列表2.2 ADO原理ADO(Active Data Object,活动数据对象)是一种基于COM(组件对象模型)的自动化接口(IDispatch)技术,并以OLE DB(对象连接和嵌入的数据库)为根底,经过OLE DB精心包装后的数据库访问技术,利用它可以快速的创立数据库应用程序。 ADO提供了一组非常简单,将一般通用的数据访问细节进行封装的对象。由于ODBC数据源也提供了一般的OLE DB Privider,所以ADO不仅可以应用自身的OLE DB Privider,而且还可以
27、应用所有的ODBC驱动程序。ADO使得客户端应用程序能够通过任何OLE DB 提供者来访问和操作数据库效劳器中的数据,而不必进行ODBC配置。ADO有两个主要优点:其一是易于使用、速度快、内存支出少和磁盘遗迹小。ADO支持建立C/S客户端/效劳器和基于Web的应用程序的关键功能;其二是“远程数据访问Remote Data Service,RDS, 能够通过一个来回的传输将数据从效劳器移动到客户端应用程序或Web页中,然后在客户端对数据进行操作,最后将更新数据返回效劳器。2.3 Delphi 介绍Delphi 6是Borland公司的可视化开发工具。从Delphi 1开始,Delphi系列开发工
28、具就以其友好亲切的用户界面,丰富多样的开发工具,快捷而又准确的编译执行速度,强大的数据库开发能力以及灵活的发布应用方式深爱广阔Windows程序员的喜爱。Delphi 6除了保存前面几种Delphi版本的优点外,更是带来了代码级跨平台、dbExpress 数据库访问等多种新特性。2.3.1 Delphi 对XML的支持Delphi对XML文档的管理有两种典型技术,使用文档对象模型(DOM)接口或者使用XML的Simple API(SAX)。这两种方法完全不同:.DOM可装载整个文档到一个层次结构的节点树中,允许读取他们并操作他们以改变文档,由于该原因,当我们希望在内存中确定XML结构的位置并编
29、辑它、甚至重新创立文档时,使用DOM是很适合的。.SAX用于分析文档,为文档的每个元素激活事件,而不用在内存上建立任何结构。一旦经过SAX分析,文档就会丧失,但通常该操作比DOM树的结构要快,适合一次性读取文件,查找它的局部数据。另外还有一种处理XML文档的典型方法是:字符串操作。通过添加字符串来创立文档是最快的操作,但这个操作难于应付复杂的结构。此外Delphi6还提供了两种技术供我们考虑。一种用于定义一文档结构的接口,该接口只用于访问文档而不是通常的DOM接口。另一种技术用于开发转换过程,即允许读取一般的XML文档到ClientDataSet组件中,或保存到指定结构的XML文档中。在本系统
30、中,我们主要使用了文档对象模型(DOM)接口,所以下面着重介绍一下Delphi对DOM的应用Delphi将DOM的实现代码封装到一个名为XMLDocument的组件中。使用组件代替实际DOM接口。使用Delphi的XMLDocument,在较低层次上,我们能使用DOMDocument属性来访问标准的W3C文档对象模型接口。官方DOM被定义在xmldom单元中,并包含像IDOMNode、IDOMNodeList、IDOMMAttr、IDOMElement和 IDOMText这样的接口。在较高层次上,XMLDocument 组件也可实现XMLDocument接口.并组成了诸如IXMLNodeIXM
31、LNodeList、 IXMLNodeCollection等一些非常使用的接口。2.3.2 Delphi 对ADO的支持在Delphi 6.0 中,利用组件板【ADO】由七个组件组成。分为三组:连接型、ADO访问型和兼容性型。我们把TADOTable 、TADOQurey 和TADOStoredProc划分为兼容性组件组。因为,它们为开发人员提供了大家所熟悉的别离的数据库表、查询和存储过程组件。使用这些组件不但能使基于BDE的程序向ADO转换更容易一些,而且开发人员可以自由地选择使用它们或前面讲的ADO访问组件。如同TADODataSet和TADOCommand,兼容性组件组也可以通过TADO
32、Connection 或直接与一个数据存储连接。TADOTable被用于通过一个单个的数据库表来获取和操作数据集的元素。TADOQurey可以通过一个S Q L 语句或执行DDL(Data Definition Language) SQL 语句来获取和操作数据集的元素,比方CREATETABLE。TADOStoredProc用于执行存储过程,无论它是否返回结果值。本系统采用ADOquery,用SQL语句执行对数据库的操作。原因:运行稳定相对与ADOTable,ADOquery使用SQL,数据操纵灵活。可重复利用,系统资源占用少便于升级在实际编程中,运用原理如下列图图2.3.3 Access数据
33、库 ADO连接ADOquery3ADOquery2ADOquery1数据操作:select、delete、insert、updataSQL语句介绍:2.4 COM技术应用COM (组件对象模型 Component Object Model)是一个很庞大的体系。简单来说,COM定义了一组API与一个二进制的标准,让来自不同平台、不同开发语言的独立对象之间进行通信。COM对象只有方法和属性,并包含一个或多个接口。这些接口实现了COM对象的功能,通过调用注册的COM对象的接口,能够在不同平台间传递数据。COM的设计和开发不是本设计的重点,来自于平台。这里仅对如何调用COM做个说明。WebFax客户端
34、与WEB效劳器通信通过两个接口发送和接受转发归为发送,因为COM是对用户隐蔽的,因此从用户的角度来说只是知道如何调用COM,对于其工作的过程是不知道的,这样防止了 的伪造,提高了系统的平安性。使用COM时需要完成以下步骤:Web平台的COM客户端程序拷贝到本设计的目录中,运行DELPHI6.0 将FAX客户端和COM客户端添加到一个工程组中。然后运行Register ActiveX Server注册DLL。在FAX客户端的源码的USES中添加PEDIClientCOM_TLB,并使用如下代码:“var Send:IEDIClientCOM;,再用“Send.COEDIClientCom.Cre
35、ate;,就可以引用Send中的方法了。第三章 系统原理3.1 单证确认系统设计框架图: 单证确认系统货代 单证确认系统货主WEB Server 效劳器COM组件接收COM组件接受端自动检测有无修改 无有该单证放入接收箱设该编号单证为已确认发送查看回复单证并与原单证内容比对接收、拒绝某局部新数据,设为问题单证设置该编号单证为已确认 货代发送新单证,业务流程开始点新单证生成单证查看、修改单证设为问题单证单证查看、不作修改XML报文包等打包设置该编号单证为未确认 报文包拆分设置该编号单证为未确认发送接收 COM组件COM组件 WEB Server 效劳器3. 2 系统功能简介货代方与货主方都有各自
36、的单证管理界面,通过这一界面很容易得到哪些是未确认的单证,哪些是已确认的单证,哪些是需要重复确认的单证。单证的生成实质是XML报文与XSL的结合。在本系统中对单证的任何操作实质是对XML报文的操作。 货代方发送过去的单证实质是XML报文,货主修改后回复过来的单证实质也是XML报文。自动比对功能通过定位XML报文每个节点,并把该节点的内容取出来,通过比拟,把前后两个XML报文相同节点不同内容局部自动比拟出来。货代方发送过来的单证,货主可以对某些内容作修改。这一操作外表是对单证的修改,实质实现的是对XML报文的修改。对某些单证,货主存在直接确认,修改确认,再次修改确认等现象。对于这种情况,系统能够
37、对这些屡次确认进行识别,防止产生确认请求与回复确认的错位。货代向货主发出单证确认的请求。货主对这一单证进行确认回复给货代方,货代方在接收到这个单证时,通过自动检测功能自动判别出这一单证是货主直接回复未做修改的,还是货主做过修改的单证。通过这一检测功能能节省货主管理单证的时间。如果是直接确认未作修改的,系统自动把该编号的单证设为已确认,这样就不用进行下面的自动比对,接收或拒绝些数据的操作。货代与货主都有其独立的单证管理系统界面,但两者的核心是类似的。在这个界面中我们有一个类似电子信箱的界面。因为考虑到EDI是一个系统,我们是分组合作的,界面具有一致性,本系统对单证作了两方面的分类管理。从确认类型
38、上分: 单证已确认单证已经得到确认了的单证为确认单证还未得到确认过的单证问题单证经过修改正的还需发送新版本再次确认的单证从单证类型上分:BL提单 、(EN)托单在实际中单证的种类是多种多样的,包括报关单、退税单、核销单、进仓单、装箱单、运费清单、发票等,不过在我们这个系统中只设定了上述两种单证。3.3.2单证生成功能货代方对于任何一张新建的单证,其实质都是对一张XML报文的操作。我们的任务是让一张XML报文按照我们需要的标准格式显示出来。标准格式单证XSL处理器自定义XML报文自定义XSL样式单自动比对功能要实现的是两张同类报文编号,同种版本的货代方发送的单证与货主修改正的单证之间的差异比拟,
39、但其实质是两张XML报文节点内容的比拟。由于经过XSL的装换,我们看到的各项内容,如“航次等在XML报文里的节点名称是oceanvessel,因此对XML报文修改时首先要作一个映射,使得当我们在ListBox中点击“航次时,它自动映射到“ocenvessel这个节点。在这个设计中我们使用了一个内置的Memo,这个Memo上的每一行里的内容在获得该单证类型后自动生成该单证的每一项工程名称。详细过程如下:TxjsFile临时文件XML报文XSL报文该TxjsFile临时文件里的内容样式如下:20021029123509(工作编号)SENB100023-A (船名)MINGZHOU(航次)V36H(
40、提单号)NBLAX303099-P(回执版本)20021029123511(处理结果)Y(备注)CALL ME AND I WILL TELL YOU.QQQ.(end) 另外我们还制作了一个内置的Memo,这个Memo里的内容那么是在系统运行中自动从外部的一个Text中自动调用,其原理如图: Memo工作编号船名航次提单号回执版本处理结果备注获得XML报文类型调用对应类型的TEXT文档 TEXT文档内容加载到MemoMemo里自动生成如右上图类型的内容有了上面的内置Memo内容,我们就可以通过一个循环的节点内容读取语句,获得每个节点名称里的内容。如当我们读取Memo中“工作编号时,系统自动读
41、取TxjsFile这个临时文件里节点名为“工作编号的内容,为“SENB100023-A。这样我们的比对就可以开始了:工作编号船名航次发货时间回执版本处理结果备注 原报文 新报文20021029123509(工作编号)SENB100023-A (船名)HUAINOL(航次)V36H(发货时间)NBLAX303099-P(回执版本)20021029123511(处理结果)Y(备注)CALL ME AND I WILL TELL YOU.QQQ.(end)20021029123509(工作编号)SENB100023-A (船名)MINGZHOU(航次)V36H-A(发货时间)NBLAX303099-
42、P(回执版本)20021029123511(处理结果)Y(备注)CALL ME AND I WILL TELL YOU.QQQ.(end) 相同 不相同 不相同运用一个循环语句,我们很容易把Memo里的每一项与临时文件的每一项里内容作比拟,获得那些不相同的局部3.3.4同步功能模块探讨对于货代方新建的每一张报文,我们在存入数据库时设置了必须填写的几个字段。报文编号、报文版本号。如以一张BL的报文来说,假设它的billofladingno为NBLAX303099-P即为报文编号,version为20021029123509版本。对于进行屡次确认的这张BL报文,它的billofladingno是固
43、定不变的,但是它的version却是EDI的时间戳,和EDI文件中的时间戳一致。这样不管货代发送多少次,因为它的固定不变的billofladingno我们很容易知道它是哪张报文,而它的version那么帮助货代很容易就能区分出这次回复过来确实认是我们需要的哪一次确实认。通过报文编号与报文版本号的结合使用,我们就可以自动实现同步的问题。3.3.5报文回复与接收端自动检测功能对于货代方发送过来的单证,货主需要进行回复。在这个系统中我们设置了两种类型的回复。第一种回复为直接回复,另外一种为修改回复。直接回复即对发送过来的XML报文里的数据不做任何修改;修改回复表示对报文的某些内容要提出异议,对这个X
44、ML报文作某些修改。在直接回复中,为了减轻效劳器的工作量和便于货代方查看,我们只发送了XML报文的一小局部内容。这就相当于对一张XML报文作了某局部删除。如,以下面一张XML报文为例entrust0 1245555截断经过局部截断后的报文,大大减轻了效劳器的流量。而且经过如此处理后的XML报文在结构上仍然是完整的,这就为货代方的接收端自动检测功能创造了条件。因为对于这个被截断的XML报文来说,我们可以在接收端作一个检测处理,在这个系统中我们设置为“为我们的检测字符。当我们在报文中检测到这个“时,那么我们就能判定这个回复过来的XML报文是未经过任何修改的,这样,我们就可以直接把该编号的报文自动设
45、置为“已确认,减少了货代方再次查看处理该回复报文的时间。货主方单证的修改实质涉及的是XML报文内容的修改。而XML报文的修改是对其节点内容的修改。我们在设计这个模块时主要用到了Delphi的StringList与DOM这两局部的知识。通过这两局部知识的结合使用实现模块功能。我们首先作了一个ListBox和一个内置的Memo,这个ListBox里有我们需要修改的节点内容。当我们点击ListBox的某项时,Memo自动加载该项名称的XML节点树路径。当获得这个路径以后,我们就很容易通过DOM获得该节点,对该节点进行各项操作。流程如下:自动获取报文类型调用对应类型的节点名称文件调用对应类型的路径文件
46、- - - - - - - - - - - -提单货主收货人通知人 订舱说明装期- - - - - - - - - - - - - - - - - - - - - - -detail/baseinfo/shipper/textdetail/baseinfo/consignee/textdetail/baseinfo/notifyparty/textdetail/baseinfo/ordermemodetail/booking/shipmentdate - - - - - - - - - - - -istox选种该项索引 MemoListBox当获得detail/baseinfo/notifyp
47、arty/text这个字符串时,我们就为这个字符串创立一个StringList,通过StringList的分割程序把detail/baseinfo/notifyparty/text自动分解成detail、baseinfo、notifyparty、text做完这个工作,我们就可以用Delphi自带的XML这个控件了。用XMLDocument1.DocumentElement.ChildNodesdetail我们就可以遍历到这个XML节点树的detail节点,继续遍历直到遍历到“text节点。在这个系统中我们以aa为这个节点的名称,这样我们就可以把我们在修改框中修改的内容附给这个节点的内容了,这样
48、也就完成了对这个节点内容的修改:aa.Text:=edit1.Text;从上面的分析中我们知道,在这个系统中,我们只处理了BL与EN两种单证,而事实上在实际货操作中,单证的种类是多种多样的,有报关单、退税单、核销单、进仓单、装箱单、运费清单、发票等。对于这些单证,虽然我们在本系统中不予支持,但是系统对他们的扩展性是给予支持的。我们的单证是用XML报文来写的,那么只要我们对每一种单证都按照我们规定的XML报文格式来写,想要扩展单证类型是很容易实现的。而且,我们的系统对于XML报文的结构限制是宽松的,我们只要求以后的每一张XML报文,它的根节点与一级子节点强制使用我们规定的名称,而后面的子节点是可
49、以任意定义的。有了XML报文,再附上对应类型单证的XSL报文,新类型的标准单证就可以生成了。至于比对,修改等这些操作,我们在调用外部文档时也都是通过调用类型选择性文档而不是固定名称的文档来实现的。因此,只要你外围的附件全部完善了,想要扩展单证种类是很容易实现的。第四章 核心代码分析及系统实现技术要点4.1 XSL转换XML通过上面的一系列介绍,我们知道在本系统中屡次用到了XML与XSLT,也可以这么说,本系统的核心就是对XML报文在Delphi中的探讨性运用。在这里我们用了两类XML报文和四张XSL报文。具体代码见附录。在报文拆分以及接收端自动检测功能这一块,屡次用到了字符串搜寻功能。在一个文
50、档中,指定某个字符串,那么该程序能够返回该字符串在这个文档中的位置。程序代码如下:function ScanFile(const FileName: string; /文件名称const forString: /要搜寻的字符串string;caseSensitive: Boolean): Longint; const BufferSize = $8001; / 32K+1 bytes var pBuf, pEnd, pScan, pPos: PChar; filesize: LongInt; bytesRemaining: LongInt; bytesToRead: Integer; F: f
51、ile; SearchFor: PChar; oldMode: Word; begin Result := -1; /假定 failure if (Length(forString) = 0) or (Length(FileName) = 0) then Exit; SearchFor := nil; pBuf := nil; AssignFile(F, FileName); oldMode := FileMode; FileMode := 0; /只读模式 Reset(F, 1); FileMode := oldMode; Try SearchFor := StrAlloc(Length(f
52、orString) + 1); StrPCopy(SearchFor, forString); if not caseSensitive then AnsiUpper(SearchFor); GetMem(pBuf, BufferSize); filesize := System.Filesize(F); bytesRemaining := filesize; pPos := nil; while bytesRemaining 0 do begin if bytesRemaining = BufferSize then bytesToRead := Pred(BufferSize) else
53、bytesToRead := bytesRemaining; BlockRead(F, pBuf, bytesToRead, bytesToRead); pEnd := pBufbytesToRead; pEnd := #0; pScan := pBuf; while pScan pEnd do begin if not caseSensitive then AnsiUpper(pScan); pPos := StrPos(pScan, SearchFor); if pPos nil then begin Found it! Result := FileSize - bytesRemainin
54、g + Longint(pPos) - Longint(pBuf); Break; end; pScan := StrEnd(pScan); Inc(pScan); end; if pPos nil then Break; bytesRemaining := bytesRemaining - bytesToRead; if bytesRemaining 0 then begin Seek(F, FilePos(F) - Length(forString); bytesRemaining := bytesRemaining + Length(forString); end; end; While
55、 finally CloseFile(F); if SearchFor nil then StrDispose(SearchFor); if pBuf nil then FreeMem(pBuf, BufferSize); end; end; ScanFile end.添加到附录4.3.1 报文合并货代方新建的单证是经过XSL处理过的XML报文,当我们把这个新的单证发送出去接受货主方确认时,为防止XML报文再翻开时发生与XSL样式的不匹配等各种错误情况,我们需要把这个XML报文连同XSL报文已经这个单证的title进行打包合并成一个文件以数据流的形式发送出去。在这个打包程序中我们主要使用了文件
56、流的用法。打包的程序如下:procedure Tnewform bine; /这个为合并程序 var s0:string ; InStream,OutStream : TFileStream; temp:string; begin getdir(0,s0); /首先得到运行路径 temp:=edit1.Text; /得到这个单证的titile OutStream:=TFileStream.Create(s0+合成abc.xml,fmCreate); /放置合并后新文件的文件流 InStream:=TFileStream.Create(newfl.xml ,fmOpenRead); outstr
57、eam.Write(,7); outstream.Write(pchar(temp),length(temp); /把title放进新文件流里 outstream.Write(,8); OutStream.CopyFrom(InStream,InStream.Size); /把XML报文先放进去新文件流里 InStream.Free; InStream:=TFileStream.Create(newtype+.xsl ,fmOpenRead); OutStream.CopyFrom(InStream,InStream.Size); /把XSL报文放进新文件流里 InStream.Free; /
58、文件流释放 Outstream.Free; end;4.3.2 报文的拆分货代方发送过来的报文是经过打包后的一个文件。里面内容包括title ,XML报文和XSL报文。货主接收时首先要将这个打包文件进行拆分,分别得到TITLE,XML报文和XSL报文。文件的拆分的主要工作原理如下: 报文标题 报文包 检测头部 拆分 XML报文 XSL报文对于每一个打包发过来的报文包,都有它固定的格式,其主要格式如下: fb /报文标题 /从这里开始为XM报文 /XML报文结束 /XSL报文开始 . . /XSL报文结束从上面的格式中可以看出对于我们要拆分的报文其头部都有特点。所以我们只要能搜索到几个关键字符在
59、报文中的position就可以把这个报文拆分出来。我们在程序中是通过搜寻如下几个字符串的:sta1:=ScanFile(FileName,false); sta1:=sta1+7; /用ScanFile这个字符串搜寻程序搜寻到这符串的位置,并指向下一个字符的位置end1:=ScanFile(FileName,false); /搜寻字符串 sta2:=ScanFile(FileNam,false); /搜寻XML报文起始格式字符串注意:ScanFile默认条件下返回的是它搜寻的第一个搜寻到的字符串位置 end2:=ScanFile(FileNam,false); end2:=end2+12; /
60、搜寻XML结束标志,并指向下一个字符的位置通过上面对这些关键性字符串的搜索,以及他们返回的position,我们就可以进行下面的拆分工作了。sstream:=Tstringstream.Create();Ori := TFileStream.Create(FileName, fmOpenRead); /翻开这个合并的文件包放到流文件里 Tmp := TMemoryStream.Create; Ori.Seek(sta1,soFromBeginning); /搜寻要复制的开始点(ori,end1-sta1); /复制这个报文标题 Tmp.SaveToStream(sstream); /把复制好的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年托幼机构卫生保健人员考前冲刺模拟附答案详解(综合题)
- 2026年社区工作者检测卷【夺冠系列】附答案详解
- 2026年星岗位考核题库检测试卷附完整答案详解【夺冠】
- 2026年监理工程师之土木建筑目标控制每日一练附完整答案详解(典优)
- 2025-2030中国挡泥板和防溅板行业竞争策略与运行形势分析报告
- 安防系统集成公司质量奖惩管理制度
- 安防系统集成公司计算机及网络设备管理制度
- 森林消防防灭火安全制度
- 格栅板的安全检查制度
- 林场目标管理责任制度
- YDT 5102-2024 通信线路工程技术规范
- 全新版大学进阶英语第二册-Unit-4-Study-Abroad
- 建筑垃圾减量化专项方案
- 冀教版七年级历史下册期中测试
- 咽部肿瘤-课件
- 福建省危险性较大的分部分项工程安全管理标准
- ic m710说明书中文版
- Wagstaff低液位自动控制铸造
- GB/T 9787-1988热轧等边角钢尺寸、外形、重量及允许偏差
- 统编版小学语文小升初专项训练 汉语拼音选择题
- 沙漠掘金(经典版)-沙漠掘金攻略
评论
0/150
提交评论