旧有应用的移植的制作方法

文档序号:6477789阅读:330来源:国知局

专利名称::旧有应用的移植的制作方法
技术领域
:本发明总体上涉及将业务规则和数据从旧有应用移植到指定的应用。
背景技术
:商业和政府机构经常投资于应用,并且其多年的成功运营依赖于应用。应用(通常称为旧有(legacy)应用)必须进行维护;然而,在某些时间点,维护旧有应用变得困难。由此,商业或者政府机构可能希望将旧有应用移植到可以包含新硬件和软件的目标应用。通常,重点在于促进该移植,以降低对运营的破坏。作为上述情况的示例,多个政府机构使用Accenture税务管理系统(TaxAdministrativeSystem,TAS),以从税务管辖权内的个体和商家征收税收。尽管税务管理系统(对应于旧有应用)按照原始设计需求执行,但是政府机构可能发现该系统的维护正变得日益困难,因为旧有应用是通过称为COBOL的较为初级软件语言编写的。而且,#斤的(目才示)应用(例^口,SAPPublicSectorCollectionandDisbursement(PSCD)软件和/或MicrosoftBizTalk业务规则引擎)可以提供相对于旧有应用的增强。毫无疑问,对税收的任何破坏对于政府职能的运行而言代价都可能是非常高的。上述现有技术的示例说明管理广大市场(strongmarket)需要促进从旧有应用到目标应用的移植。
发明内容本发明的各方面提供用于从旧有应用获得第一组件并随后根据该第一组件的旧有元素生成中间状态元素的装置、计算机介质和方法。该中间状态元素被转换为目标应用所使用的目标元素。根据本发明的一个方面,从旧有应用获得规则组件,其包含以第一软件语言指定的旧有源代码。根据包含在规则组件中的旧有规则来生成中间状态表达。将中间状态表达转换为目标规则,其被配置为由执行目标规则的目标应用所执行。目标应用可以包含以第二软件语言指定的目标源代码。而且,从旧有应用获得数据组件,并且根据旧有数据元素生成中间数据元素。将中间数据元素转换为目标应用在冲丸行目标少见则时可以访问的目标数据元素。根据本发明的另一方面,从规则组件中提取词汇表表项。利用中间状态表达对词汇表表项进行聚集,以形成目标规则。随后将目标规则部署到目标应用。根据另一方面,从旧有应用获得其他组件,例如,对应关系、接口或者报表组件,并且生成相应的中间元素。将中间元素转换为目标应用。根据本发明的一个方面,旧有系统涉及使用COBOL源软件的税务管理系统。在附图中以示例而非限制的方式示出了本发明,其中相似的标号指示类似的元素,其中图1示出了按照本发明一个实施方式的在其中将旧有应用移植到指定应用的架构。图2示出了按照本发明一个实施方式的税务管理系统(TAS)转换器的架构。图3示出了按照本发明一个实施方式的从TAS到AERS(AccentureEnterpriseRevenueSolution,即Accenture企业4文益解;夹方案)规则引擎转换的高层流程。图4示出了按照本发明一个实施方式的用于转换规则组件的架构。图5示出了按照本发明一个实施方式的用于执行形成规则转换的高层流程。图6示出了按照本发明一个实施方式的用于执行后端规则转换的高层流程。图7示出了按照本发明一个实施方式的数据移植过程。图8示出了按照本发明一个实施方式的税务管理系统(TAS)转换器过程。图9示出了按照本发明一个实施方式的用于从税务管理系统(TAS)转换收入账目表的高层流程。图10示出了按照本发明一个实施方式的用于从税务管理系统(TAS)转换数据组件的高层流程。图11示出了按照本发明一个实施方式的用于从税务管理系统(TAS)转换对应关系组件的高层流程。图12示出了按照本发明一个实施方式的用于从税务管理系统(TAS)转换接口组件的高层流程。图13示出了按照本发明一个实施方式的用于从税务管理系统(TAS)转换报表组件的高层流程。图14示出了按照本发明实施方式的TAS人口统计表结构。具体实施方式束橫森迷图1示出了按照本发明一个实施方式的在其中将旧有应用(对应于COBOL程序101和数据源103)移才直到指定应用(对应于SQL服务器113和SAP⑧服务器115)的架构100。(SAPAG是最大的欧洲软件公司,其总部位于德国的沃尔多夫市。SQL(结构化查询语言)是一种计算机语言,用来创建、检索、更新和删除来自关系数据库管理系统的数据。SQL已由ANSI和ISO二者标准化。)AccentureTAStoAERSMigrationTool(AccentureTAS到AERS移植工具)旨在为AccentureTAS(税务管理系统)系统实现已经就位的那些客户端降低部署AERS(AccentureEnterpriseRevenueSolution)的负担,由此提供竟争优势。AccentureTAStoAERSMigrationToo!开发的第一阶段主要关注于业务规则提取和转换,以及旧有数据移植。期望客户端提供包含与待处理的所有表单定义有关的COBOL程序101的所有文件。(COSO丄是一种第三代编程语言,并且是目前仍在使用的最老的编程语言之一。其名称是COmmonBusiness-OrientedLanguage的缩写,将其主要领域定义为乂〉司和政府的业务、财政以及管理系统。COBOL最初由ShortRangeCommittee在1959年创建,其中ShortRangeCommittee是在1959年5月28曰和29日在五角大楼举行的会议上提出的三个委员会之一。)需要3个文件■编辑模块程序■行项目信息模块■提交日期模块期望客户端提供包含将要移植到AERS目标数据库115的数据的所有数据源103。基于业务需求,可以将业务规则移植过程分解为以下任务1.从源代码提取词汇表项2.创建和部署模态(schema)3.对提取的词汇表进行分类4.将词汇表部署到业务规则引擎数据库5.从源代码提取业务逻辑6.对^见则与词汇表进行相关107.导出业务规则引擎数据库中的已提取策略8.测试策略9.发布和部署策略10.记录处理状态下文讨论提供了对上述任务的附加描述,从而示出设计考虑和权衡。双源/七竭炎承坊,4资目前,表单定义仅仅包含在COBOL源代码101中。COBOL程序101通常组织在三个文件的集合中,这三个文件结合起来定义旧有FDF实现中的单个税务表/财年定义。文件名称是XnnnYYrr,其中X=程序时间(E是行编辑;L是行项目定义;F是提交日期)nnn=表单类型代码(特定于客户端安装,当讨论POC和DC代码时,将给出完整的列表)YY=财年,其中05=2005rr=修订号,其中OO指示初始定义,01、02…等以此类推例如,用于定义2005年的销售和使用税月退税(表单类型=350)的3个所需文件是E3000500.txt參L3000500.txtF3000500.txt按照本发明的实施方式,期望词汇表提取过程与用户之间的可选同步交互。这表示,客户端将进行等待,直到词汇表提取器105返回有关提取过程的状态,并且可选地为用户呈现所有已提取词汇表的详尽列表。这包括从所提供的源代码中提取行项目定义、提交日期定义以及行编辑。奇建和絲縱在从源代码提取词汇表并且建立其结构之后,必须根据所创建的XML推导出才莫态,对其强命名(stronglynamed),继而将其部署到GAC(全局组装緩存)。#濕?;^建河,r4义伴一旦从源代码中提取了词汇表,必须按照类型对词汇表进行分类。其可以是常量、XML元素、.NET组件或者数据库字段。继而必须使用词汇表来填入规则引擎所能理解的词汇表模态。4,摔河f或举署i^A#说身f/将步骤3中创建的词汇表XML导入到规则引擎数据库,并且发布词汇表,使其可被需要使用它们的业务规则所访问。#黎5,^C源/t'竭炎承遂身逻禪规则包含在行编辑COBOL代码中。规则提取器107提取规则,并且将其重新组织在结构中,该结构使逻辑更易操纵和映像到规则引擎所期待的结构。在提取基础规则之后,从代码提取规则编辑,并将其应用于所提取的规则。摔说i^和'^r》遽/^^^在此过程中,提取的业务规则所使用词汇表必须与已经提取的词汇表进行相关。该过程由聚集器组件109来处理。某些需要的字段可能是缺失的,并且可以从客户端要求更多信息。由此,规则提取器107可能需要通知客户端缺少词汇表。#嚴'7,摔6爽承的,^#^^止#说身//,凝^岸一旦从源代码中提取了规则,必须通过策略对其进行分组。意在使每个表单和每年具有一个策略。策略的命名规范是"TAS匪YYrr"。#潔&^试衷婆每个策略版本必须在开发期间或者是在其被发布、部署和运行之后进4于测试。在保存策略之后、但是尚未部署之前执行测试。在部署策略之后,可能难以修改规则集。发'有和举,衷略在测试策略之后,通常部署策略。仅在部署之后,策略及其规则集才能够被外部应用访问。记z秀^理炎,悉将TAS转换器(例如,转换器200)执行的所有步骤捕获和包括到日志中,该日志被发送回给用户。如果存在多个确认,则必须将其连4妄(concatenate)在一起。可以使用聚集器组件109来收集和存储与用于规则转换和数据转换的转换过程中的每个步骤有关的相关信息以及各个响应。聚集器109随后创建根据所捕获的各个消息和信息片段得出的单个日志。炎蕃移潜按照本发明的实施方式,DB2到SAP数据移植(对应于数据源103到SAP服务器113)是通过SQL服务器整合服务(SSIS)来执行的。变换和ETL(提取、变换和加载)由SSIS来处理。对SAP服务器的批量插入将使用iDocs以及在将数据批量插入到"公共部分收入和支出"(PSCD)中之前执行确认而通过SAP程序执行的。(SAP"公共部门收入和支出"提供退税申报、支付处理、征收、客户辅助以及财务管理。SAPPSCD可以在不同的环境中使用,包括学生账户)。^/^#^按照本发明的实施方式,包括错误处理。附加的架构组件充当响应信息的收集者。由此,错误处理的一种形式是重试该动作。如果无法执行转换或者转变,则需要适当地通知用户。TAS转换器应当提供对导出参数进行改变的能力,并且用户应当简单地能够重试该请求。可以在所有组件之间使用同步交互,以便使交互模型尽可能简单。简单是由于以下事实可以较为容易地进行测试和调试,因为用户在单个执行线程中执行。,g潜*见则移植工具支持以下方面,将会进一步对其进行详细讨论。提供用于退出TAS客户端的升级路径*降低ITS升级的成本降低ITS升级的风险降低内核升级的时间*快速转换已有的表单规则和后端业务规则中央规则存储库*通过表单类型对规则进行分组一易于检索*易于管理表单规则转换提取已有的表单规则,并且不需要经常伴随ITS升级的绿色字段表单定义努力计划在于还要提取与惩罚和利息及退款有关的TAS后端业务规则目标在于提取这些规则并且将其合并成公共规则集、转译和标准化这些规则以便导入一旦对规则进行了标准化,可以将这些规则导入到BizTalkTM中以便满足规则执行*TAS内的后端规则嵌入在应用层和数据库层。该努力将合并14这些层、将规则转变为公共业务规则语言并导入到BizTalk根据从COBOL代码提取的有意义的元素来创建数据结构提取和转换通过FDF创建并继而作为COBOL转义生成的规则以下领域将被TAS转换器覆盖>数据转换>表单规则转换>接口转换>对应关系转换>后端规则转换>账户的收入账目表的移植>已有TAS报表的转换按照本发明的实施方式,可以在Accenture税务管理系统的上下文之外使用TAS转换器的组件。例如,规则转换器包含允许从任何适当格式化的COBOL应用中提取规则的通用能力。只要规则存储在旧有应用的已定义区域中,则用于规则转换的TAS转换器将能够为非TAS应用提取和转换规则。类似的情况对于TAS数据转换器同样适用。随着TAS数据转换器将数据库组件从TAS中提取到去正则化的数据中并继而将该信息加载到目标应用中,可以对任何旧有数据集简单地应用去正则化的数据提取。一旦数据处于预定的格式,TAS转换器便可以使用预定的例程和过程将信息加载到目标应用中。图2示出了按照本发明一个实施方式的税务管理系统(TAS)转换器200的架构。旧有应用201(例如,税务管理系统)包括多个组件,包括表单规则组件、后端规则组件、人口统计组件、财务组件、账目表组件、对应关系组件、接口组件,以及报表组件。移植应用215通过中间(staging)数据库203来将旧有组件转换和移植到目标应用217。规则组件可以包括表单规则组件和后端规则组件二者。表单规则与用于表单的对应行的规则相关联,而后端规则与用于进一步处理表单行中的信息的规则相关联。例如,后端规则可以涉及按照机构内的税务表单和策略应用所提供信息的惩罚、利息和退款计算。数据组件可以包括人口统计组件、财务组件和账目表组件。人口统计组件与个人、商家或者有关实体(例如,纳税者)的人口统计信息相关联。财务组件与之前提交的之前年份的表单或者纳税义务的开放时间相关联,而账目表组件指示用来将财务事务与所征收的收入对不同政府机构的分发合并的账户。规则提取器205从旧有应用201提取规则组件,并且生成中间表达(例如,XML文件207)。规则部署器209将中间表达转换为目标规则,并且将目标规则部署在包含在目标应用217中的业务规则引擎(BRE)219上。业务规则引擎219随后可以在目标应用217运行时纟丸行目标规则。按照本发明的实施方式,业务规则引擎219使用BizTalk顶服务器,其是用于企业应用整合(EAI)和业务过程管理(BPM)的微软中央平台,并且实现了XML和Web服务技术的整合与自动化能力。BizTalk服务器充当过程执行引擎,并且充当消息收发和文档转换的多传输集线器。BizTalk服务器是帮助客户有效和高效地整合系统、雇员和商业伙伴的Windows服务器系统产品。数据组件从旧有应用201被提取到SQL数据库211中,并且被转换为中间数据元素。中间数据元素继而从平面(flat)文件213被转换和移植到执行ABAP的SAP服务器221(其包含在目标应用217中)。ABAP(高级业务应用编程)是由SAP创建的高级编程语言。与最近引入的Java—道,其目前定位为用于对SAP的Web应用服务器进行编程的语言。尽管未在图2中明确示出,但是转换器200还可以将对应关系、接口和报表组件转换和移植到目标应用217。本发明覆盖两种类型的对应关系转换。第一种是对应关系模板的转换,所述模板通常存在于旧有系统中。这些模板将经历与数据和规则类似的提取和加载过程。基本上,对应关系模板被提取,并被放置在目标应用的模板生成区域中。同样,简单的映射动作将预先存在的定义数据元素从旧有应用转换为目标系统中的XML参考。第二,对应关系包括旧有系统内的历史文档的转换。从旧有系统周期性地向纳税者发送通知或者对应关系。不同于保存整个文档,TAS保存对应关系模板和进入该对应关系的数据元素。历史对应关系可以转换和保存在目标应用中,以备将来参考和访问。报表和接口转换按照类似的概念执行。假设基础旧有应用(TAS)中的数据结构在整个实现中是一致的,则可以将来自旧有系统的数据元素匹配至目标系统,并且在目标系统的上下文中重新生成4妄口和报表。这可以作为手动匹配过程来完成,或者通过标准服务和过程而自动完成。报表组件与旧有应用201所生成的报表相关联。目标应用217可以通过数据入口223获得其他数据(例如,当前年份的税务表单)。可与移植自旧有应用201的规则组件和数据组件合作来处理这些其他数据。尽管图2中所示的架构示出了从旧有Accenture^兌务管理系统到SAP服务器的移植,但是本发明的实施方式也支持到其他目标系统的移植。辟炎戎/y#漆^^在一岸一《滋才4'图3示出了按照本发明一个实施方式的从TAS到AERS规则引擎转换的高层流程300。流程图300示出了旧有规则引擎架构的总体高层流程,以1更将COBOL驱动器程序转换为BizTalk(组件319-325)。这是一次性过程,在此期间,构成旧有规则存储(组件325)中业务规则的所有数据部分由TAS转换器(组件321)标识和提取,并且被转换为业务规则语言XML以便使其成为BizTalk规则引擎可理解的,继而其被规则部署工具(组件317)移植到规则存储(组件315)。提供业务规则以执行确认(组件309-313)。这是在上述一次性过程中已经提取的业务规则。这些规则以有序的方式组织,按照其相关的特定税务表单进行分组。在提取/转换过程期间,已经自动构建了AERS词汇表。其目的是按照友好的类似英文的语法给出构成规则的数据元素,而不论其源自数据库查询、XML元素或类。过程税务表单确认。使用规则引擎API(称为规则辅助,其对应于组件303)将税务表单输入301提交至应用。规则辅助303是驱动器组件,其具有根据税务表单输入和BizTalk规则引擎API(组件307)提供的模式匹配逻辑应调用哪个策略(组件305)的有关知识。策略是规则的汇集。下面是该转换所需的不同类型的策略。>简单编辑>交叉确i^>行编辑>退出例程>事务应用存在两种方式来构建策略>单个策略用于上述类型中的每一个。>基于tableref或者tableid的多个策略。下面的組件式转换该应用所需的。词汇表是以类似英文的语法来封装业务需求的谓词的列表,虽然BRE支持三种不同的绑定(.NET、SQL和Xml),但是.Net绑定最适合TAS情景。(通常,使用基于.Net类的词汇表,其中词汇表作为抽象类。)实现通常允许不同的LOB复用规则和策略。该组件通常称为TAS词汇表。这允许将各种独立的数据元素合并成一个或多个XML文档。将使用XSD.exe将.XSD模态转换为.Net类。该.Net类用作用于规则引擎的事实(并不直接是xml)。该模态称为TASTaxFormDocument。/{/A摩#衷略和衷膝疯/;f标识当前数据流以及策略执行的顺序。这被封装在业务组件中。该组件是用于与规则进行通信的主数据对象。该组件称为TASRuleAssistant。/对UW《动移兹这些组件称为TASRulesConverter。通常无法自动地上传较小数目的规则的手动再声明。^f移潜/《^"魂iVW卑法本发明的实施方式支持以下方面1.标识已有的旧有规则中的模式,这些模式可以是经常重复的规则和构造(construct)。示例1.1EffectiveData是否在'01-01-1900,和'01-01-2003,之间。1.2ColumnValue是否在列表"1|2|3|4"中。2.创建支持以上模式的词汇表。publicabstractclassTASVocabularySimpleEditspublicabstractboolinList(TASConverter.DriverFactRuleTypescontext,stringlist);publicabstractboolbetween(TASConverter.DriverFactRuleTypescontext,stringminValue,stringmaxValue);publicabstractboolIsValidMask(TASConverter.DriverFactRuleTypescontext,stringmask);publicabstractbooladdErrorID(stringerrorID);3.-使用上述抽象类来构建BRE词汇表。示例词汇表随同本文档一起提供。4.利用每个抽象方法的至少一个规则来创建模板策略。5.使用各种"and"(与)、"or"(或)构造来创建示例模板。如果需要嵌套的"and"或者"or",则使用那些构成来创建规则。6.使用"规则引擎部署向导"将模板策略导出到.XML。理解所导出的XML策略的结构。7.将所导出的策略XML分解为各个较小的文件,每个文件包含唯一的模式。示例为了添力。成为addErrorID的动作<fbnction><vocabularylinkuri="534f50ac-8e6c-4bfe-877f-4e75a0ecf4e2"element^"503f5d7e-c85c-4017-969c-938c291blfca"><classmemberclassre,"TASVocabulary"membe产"addErrorID"sideeffects="true"><argument><constant><string>{0}</string></constant></argument></classmember></function>为了创建版本号和主报头<brlxmlns="http:〃schemas.microsoft.com/businessruleslanguage/2002"><rulesetname="TAS—3000500"〉<versionmajor="{0}"minor="{l}"description-"'modifiedby="RESBT2404VAdministrator"date="2007-02-13T16:20:35.7514080-05:007></ruleset>(configuration/>20为了找到列是否在给定的列表中<predicate><vocabularylinkuri="534f50ac-8e6e-4bfe-877f-4e75a0ecf4e2"element="2cc6fb474-f735-45b5-b9dd-8d60c0f90Aal07><classmemberclassref="TASVocabulary"membe产"inList''sideeffects="true"><argument><argument><referencc〉<vocabularylinkuri=''f5029754-44db-440c-8820-8d55eedfd7bl"element^"7b218bc0-4ac9匿4ee4-b3b9-7606aef40626"/〉<classrefref="TASConverter.DriverFactRuleTypes"/></reference></argument〉<argument><constant><string>{0}</string></constant></argument></classmember></predicate>应当注意,"{"和"}"用作使用C弁语言的文本替换的占位符。来自旧有规则的实际值将替换大括号。8.在创建模式之后,程序性的事情是遍历已有的旧有规则库,并替换模板中的旧有值,继而将模板构成为各种规则和策略,这在下文代码中示出。classMigrateRulesToBre〃/<summary〉〃/应用的主入口点〃/</summary>21[STAThread〗staticvoidMain(string[]args)stringmyConnString=ConfigurationSettings.AppSettings["TASMetaData"];〃读取旧有数据stringmySelectQueiy="SELECT*FROMTCSTVOIOWHEREMINVAL!=""+""。RMAXVAL!="ORVALLIST!="";SqlConnectionmyConnection=newSqlConnection(myConnString);SqlCommandmyCommand=newSqlCommand(mySelectQueiy,myConnection);myConnection.Open();SqlDataReadermyReader;myReader=myCommand.ExecuteReader();〃将"i","2"替换为策略的主版本和辅版本Console.WriteLine(getMain("1","2"));//得到绑定信息Console.WriteLine(getBindings());while(myReader.Read())〃读取第一旧有规则stringruleName=myReader["RULENAME"].ToString().Trim();stringelementName=myReader["ELEMENT"].ToString().Trim();stringmessageNum=myReader["MSGNUM"].ToString().Trim();stringdataType=myReader["DATATYPE"].ToString().Trim();stringminVal=myReader["MINVAL"].ToString().Trim();stringmaxVal=myReader["MAXVAL"].ToString().Trim();stringvalList=myReader["VALLIST"].ToString().Trim();stringacf2res=myReader["ACF2RES"].ToString().Trim();stringruleVERS=myReader["RULEVERS"].ToString().Trim();StringBuilderruleText=newStringBuilder();stringruleTag=String.Format("〈rulename=\"{0}\"priority=\"0V'active=\"true\">",ruleName);ruleText.Append(ruleTag);/*这里是所生成的BRE规则的示例ifCOLNAME=NRC—CAT_CDandnotSIMPUEEDITFACTSisINLIST1|2|3|4thenERRORNUM=TASMA945.其中COLNAME是元素,而SIMPLEEDITFACTS具有类似于列类型的上下文信息,其中包含列值*/ruleText.Append("<if><and>',);〃添加COLNAME检查。这对于所有规则而言是公共的。rule丁ext.Append(getEqual('言COLNAME",elementName));〃如果MINVALorMAXVAL存在,则使用"between"来创建规则ruleText.Append("<not>");if(minVal!=""||maxVal!="")ruleText.Append(getBetween(minVal,maxVal));else〃如果"valList"存在,则使用"inlist"来创建规则if(valList!=',"){ruleText.Append(getInList(valList));ruleText.Append("</not>");ruleText.Append("</and></ifV);ruleText.Append("<then>");〃基于MSGNUM来添加少见则动作ruleText.Append(AddErrorID(messageNum));ruleText.Append("</then>");ruleText.Append("</rule>");Console.WriteLine(ruleText.ToString());Console.WriteLine("</ruleset></brl>");〃在完成读:f又时总是调用ClosemyReader.Close();〃当连接完成时关闭连接myConnection.Close();staticstringAddErrorID(stringerrorlD)using(StreamReadersr=newStreamReader("TemplateAddErrorID.xmr'))stringtemplateText=sr.ReadToEnd();returnString.Format(templateText,errorID);staticstringgetBindings()using(StreamReadersr=newStrearnReader("TemplateBindings.xml"))stringtemplateText=sr.ReadToEnd();returntemplateText;staticstringgetBetween(stringfirst,stringsecond)first=first.Trim();second=second.Trim();using(StreamReadersr=newStreamReader("TemplateBetween.xml"))stringtemplateText=sr.ReadToEnd();returnString.Format(templateText,first,seeond);staticstringgetInList(stringlist)list=list.Trim();using(StreamReadersr=newStreamReader("TemplateInList.xmr'))stringtemplateText=sr.ReadToEnd();returnString.Format(templateText,list);staticstringgetMain(stringmajorVersion,stringminorVersion)using(StreamReadersr=newStreamReader("TemplateMain.xml"))stringtemplateText=sr.ReadToEnd();returnString.Format(templateText,majorVersion,minorVersion);staticstringgetEqual(stringlhs,stringrhs)lhs=lhs.Trim();rhs=rhs.Trim();using(StreamReadersr=newStreamReader("TemplateEqual.xmr》stringtemplateText=sr.ReadToEnd();returnString.Format(templateText,lhs,rhs);^于脊^^W付葛^^在一岸二^^才式^/ji衷^;f口河,r《存在多种方式来创立策略和词汇表。最常用的方式是使用业务规则组成器工具,该方式由作为基于规则的处理的主要目标的业务分析师来排他地使用。下面讨论程序员的创立。这些技术支持编写动态创建规则的应用,并且同样支持创建用于应用部署的工具。可以通过两种方式在组成器之外创立规则集。这些方法主要是针对工具开发和系统管理的。第一是使用XML文档。这是BizTalk用来导出和导入策略和词汇表的方法。另一种是通过.NETAPI和编程。5A丄-z,法ZM丄义—i具有数据库管理经验的程序员可能已经执行了关系数据库到文本文件的批量数据转储。这些通常是平面文件,其格式例如是提供更多结构的CSV.XML,这就是BizTalk如何使数据进、出SQL服务器存储的方式。其还用来将策略和词汇表保存在SQL服务器之外的文件中。尽管不常见,但是可以完全利用文件来运行基于规则的应用。微软为该任务而建议的XML语法称为业务^L则语言或BRL。请注意,BRL的命名空间声明为http:〃schemas.microsoft.com/businessruleslanguage/2002。这是专属于微软的命名空间。尽管将策略和词汇表导出到了与业务规则组成器分离的文档中,但是两个文档具有相同的文档元素,brl。列表A示出了策略文件(在此称为规则集)的开始。如下,列表A示出了显示版本、配置和绑定信息的部分规则集文档。<brlxmlns="http:〃schemas.microsoft.com/businessruleslanguage/2002"〉〈rulesetname="RFP"><versionmajo产"l"minor="4"description-""modifiedby="myserver、user"date="2004-02-15T00:29:02.6381024-05:00"/><configuration><factretriever><assembly>DbFactRetriever,Version=1.0.1505.34508,Culture=neutral,PublicKeyToken=d4e488d64afflda4</assembly><class>Que.BizTalk.RFP.myFactRetriever.RFPDbFactRetriever</class></factretriever></configuration)<bindings>〈xmldocumentref="xml—0"doctype:"RFPEstimateXML.RulesRFP"instances="16"selectivity"1"instance="0"><sdector>严[local-nameO'RFP'和命名空间-uri()='http://RFPEstimateXML.RulesRFF]</selector>26<schema>C:\RulesRFP.xsd</schema></xmldocument><datarowref="db—1"server="myserver\Consulting"dataset="Consulting"table-"Rates"instances="16"selectivity="1"isdataconnection="true"instance="0"/〉</bindings>应当注意,版本元素声明了策略的主版本和辅版本,以及谁修改了策略以及何时做出的修改。版本控制在规则开发中是非常重要的。从配置(configuration)元素向下,可以看到,策略被配置为使用数据库事实检索器。指定了封装和类信息。最后要看的区域是绑定(binding)部分。binding元素的第一子元素通过指定.NET类型的合格类名、基于本地名称和命名空间来选择文档的根的XPath表达式以及指定模态的物理文件,来将XML文档绑定至策略作为事实来源。因为最后一项是文件路径,因此应当在导出规则集时将文件转送到新的服务器。示例性文档继续使用XML结构来指定规则,其中XML结构允许在前缀符号中表达条件和动作。列表B描绘了具有一个复合条件和三个动作的规则。最后两个动作已经针对空间进行了编辑。如下,列表B以友好形式示出了业务规则IfHoursisgreaterthan160ANDScamequalsServiceThenApprovedTrueCommentsDiscountApprovedCost(0.9*(Hours*HourlyRate))应当注意,MJ'J元素如何锚定(anchor)MJ'j。这里^[吏用属性来给出规则的名称、优先级和状态。规则下面的所有内容表示了规则的结构。条件包含在z/元素中。在前缀符号中,首先是AND元素(其是对两个条件进行结合的逻辑运算符)。接下来是针对第一谓词的大于号运算符。词汇表链接(vocabularylink)元素指示该运算符在内置谓词词汇表中。从这里开始,在此情况下把XML文档中的Hours字段绑定到事实。这形成了谓词的左侧(lhs)。右侧是常量十进制值160。如下,列表C示出了来自规则集文档的规则定义片段<rulename="DiscountRate"priority="0"active="true"><if><and>〈compareoperator="greaterthan"〉<vocabularylinkuri="3f0e9bcc-6212-4e6a-853c-e517fl57a626"element="b276a0f4-12d9-4380-b242-135bbfc5e2877><lhs><fimction><vocabularylinkuri="8a4906c8-3797-4ae6-a9b6-864c23c81438"element="728b3a0b-b270-4cfa-aac6-b24e3aaad8dd7><xmldocumentmemberxmldocumentre,"xml一O"type="decimarsideeffects="false"〉<field〉*[local-name()='Hours'andnamespace-uri()="]</field><fieldalias>Hours</fieldalias></xmldocumentmember></fUnction></lhs〉<rhs><constant><decimal>160</decimal></constant></rhs></compare><compareoperator="equar'>...<!--detailsomittedforspace-~></comparc></and></if>28<then><fUnction><vocabulaiylinkuri="8a4906c8-3797-4ae6-a9b6-864c23c81438"element="89745202-17d8-412f-bfa3-382d6711la91"/>〈xmldocumentmemberxmldocumentref="xml—0"type="boolean"sideeffects="true"><field〉*Docal-name()='Approved'andnamespace-uri()="]</field><fieldalias>Approved</fieldalias><argument><constant><boolean>true</boolean></constant></argument></xmldocumentmember></fUnction〉<fonction>..,<!--detailsomittedforspace--></fonction><fiinction>...<!—omittedforspace—></function〉</then〉</rule〉可以按此方式继续,直至到达Aew元素,其锚定了规则的动作部分。第一动作来自列表B,它为XML文档的Approved字段指派布尔值true(真)。指派函数获得XML文档绑定和一个自变量(值)。列表A和C中的词汇表链接将规则集文档与两个内置词汇表(函数和谓词)以及发明人自己建议的词汇表相关联。列表D示出了发明人的词汇表部分。对于规则集文档,以brl元素开始。此后是具有其版本控制信息的词汇表元素。从这里开始,具有一系列的词汇表定义元素。每一个将友好名称绑定至数据库列或者XML文档字段。如下,列表D示出了词汇表BRL文档。29<brlxmlns="http:〃schemas.microsoft.com/businessruleslanguage/2002''>〈vocabularyid=',8a4906c8-3797-4ae6-a9b6-864c23c81438"name="RFP"uri=""description""><versionmajor='T'mino产"l"description-""modifiedby="myserver\user"date=',2004-02-14T21:57:55.6504144-05:007><vocabularydefmitionicH'693a705f-a6a4-4e37-92b9-06a52a2553c7"name="SvcName"description:""><bindingdefinition><databasecolumnbindingdefinitioncolumn=',rate—name"type="string"><databaseinfoserver="myserver\Consulting"database="Consulting"table="Rates"connection="true"instance="0"/></databasecolumnbindingdefmition></bindingdefinition〉〈formatstringlanguage二"en-US"string:"SvcName"/></vocabularydefinition>〈vocabularydefinitionid="0c2f3a3a-e598-4c96-9bb2-0b0797e9ef3e"name="Cost"description=""><bindingdefinition〉<documentelementbindingdefinitionfield="*[local-nameO='Estimate'andnamespace-uri(K]"fieldalias="Estimate"type="decimar><documentinfoschema=',C:\RulesRFP.xsd',documenttype="RFPEstimateXML.RulesRFP"selector^"/*[local-name()='RFP'andnamespace-uri()=,http://RPPEstimateXML.RulesRFP']"selectoralias-,卩ocal-name():'RFP'andnamespace-uri()='http://RFPEstimateXML.RdesRFP']"instanceyo"/><argumentposition="0"〉<valuedefinitionliteraltype="decimal"><decimal>0</decimal></vauedefinitionliteral></argument></documentelementbindingdefinition></bindingdefmition〉<formatstringlanguage="en-US"string="Cost{0}"delimitei="{+}"><argumentposition="0">〈valuedefinitionlitemltype="deeimar><decimal>0</decimal></valuedefinition1iteral></argument></formatstring></vocabularydefinition></brl>第一定义是名称SvcName与Consulting(咨询)数据库中的Rate(税率)表中的列rate—name之间的绑定。首先命名databasecolumnbindingdefinition元素中的歹'J,继而在databaseinfo元素中提供数据库和表信息。所示的第二定义是名称Cost与XML文档中Estimate字)殳的关联。databasecolumnbindingdefmition元素表示对XML文档中的元素的绑定,而非对XML文档元素的绑定。当在该元素中提供了适当的XPath表达式以选择字段之后,documentinfo元素提供.NET样式类型的文档、物理模态文件以及显式定位此特定文档类的文档元素的XPath。可以看到,在BRL中创立规则集和词汇表是一项精确的任务。通常,人们不会希望手工完成这一任务,而是存在模态。其可以用来方便地修改已有的导出文件。例如,可以使用XPath来定位和修改模态文件路径,以反映目标服务器环境。还可以借助于提供正式文档的方式来使用XSLT将规则集显示为HTML。创立规则的其他方式是使用用于规则开发的.NETAPI的类进行编程。所需的类可以在Microsoft.RuleEngine包中找到。其实现在BizTalk服务器2004安装文件夹中的Microsoft.RuleEngine.dll组装中。基本方法是创建LogicalExpresion类的实例(表示规则的条件部分),ActionCollection的实例用以保持规则的动作。在适当设置了两个对象时,将其添加到Rule类的实例。继而将规则添加到RuleSet对象。当希望持续规则时,使用FileRuleStore或者SqlRuleStore类之一。为了在开发时运行规则集,需要PolicyTester对象。在产生规则集之后,可以使用较为简单的Policy类。这些类仅仅是规则开发API中的多个类中的几个,但是它们是用于创立的主要类。如果希望创建创立工具并且利用.NET类扩展地工作,需要详细研究产品文档。然而,可以考虑在基于规则的应用开发中使用的主要类。龙唐W厕规则API属于两个包。主包是Microsoft.RuleEngine.dll中实现的Microsoft.RuleEngine。另一个是Microsoft.BizTalk.RuleEngineExtensions,其增加了3个类,以扩展基于规则的系统。两个组装都位于BizTalk服务器安装文件夹中。这些包书面上包含多个类,但是只有几个是重要的。应当认为这些类是核心类,例如,policy(策略)。另一个类PolicyTester在开发期间发挥其作用,但是策略表示可用于执行的、完整的、基于生产知识的系统。为了执行,应当对其进行配置,但是其应当加载规则集。RuleSet(规则集)类继而加载和使用Rule类的一个或多个实例。如上所述,Rule对象包含LogicalExpression对象和Action对象。然而,与规则同样重要,无法在没有事实的情况下具有基于知识的系统。策略的实例使用所开发的、实现IFactRetriever接口的类。这是管理长期事实和事实库的类。当策略加载了规则和事实时,其已经可以由规则引擎来执行。规则引擎可以仅将策略保存在存储器中,其是感兴趣的实验工具,但可能不适用于企业应用。抽象类RuleStore开发用于策略和词汇表的可持续存储的语义。其由两个派生类实现,FileRuleStore和SqlRuleStore。顾名思义,FileRuleStore使用盘文件用于存储,而SqlRuleStore使用SQL服务器关系引擎。BizTalk策略是规则集,并且存在与BizTalk规则引擎对应的类,但是策略类是对多个事物的有用封装。其将程序员与规则存储和规则引擎的具体操作细节隔离开。这样,应当配置策略实例,并且利用其进行工作,就好像它是规则引擎本身一样。其加载RuleSet的实例,因此可以区分策略类与BizTalk策略的一般性概念。策略类具有两个构造函数。一个采用字符串,该字符串的值命名了想要利用的策略。另一个具有相同的参数,并且添加了两个System.Int32参数用于主策略版本号和辅策略版本号。通过策略构造函数加载的任何策略必须部署在规则存储中。另一类PolicyTester的接口非常类似于Policy,但是其具有附加的构造函数,其允许加载已发布的策略和来自其他服务器的策略。相反,策略利用本地存储来工作,并且涉及产生就绪的规则集。Policy具有四个公共属性。MinorRevision和MajorRevision—起定义Policy实例的版本号。PolicyName是策略的名称。RuleSetlnfo是重复祖先信息并且添加关于谁保存以及何时保存策略的数据的类。所有这四个属性都是只读的。策略类具有一个主要的公共方法Execute(执行)。该方法具有四种重载形式。此方法的目的是将事实加载到策略中并且向其应用规则集。第一种形式采用System.Object参数,其是类的某个实例,表示系统中的事实。第二种形式采用这种参数的数组。其余的形式重复该模式(单个对象和对象数组),但是添加了第二参数,即实现IRuleSetTrackinglnterceptor的对象的实例。该接口用于实现规则引擎的调试系统。该类具有构成其构造函数的8个版本。第一个采用字符串参数,其命名规则集。与策略不同,这并不意味着类从存储加载所命名的规则集。其通常初始化类的新实例,并且给与其指定的名称。存在另一构造函数,其获取名称和版本号,并且执行相同的初始化。还存在构造函数的两个版本,其采用相同的参数,并且添加了类型System.Collections.ICollection的对象。这是构成规则集的规则汇集。剩余版本重复上述所有,还添加了类型VocabularyLink的最终参数。该参数确定利用其友好名称和特定事实绑定来提供规则集的词汇表。该类具有6个属性,其中三个对于程序员来说特别重要。其在表1中说明。表1:RULESET类的重要属性属性含义ExecutionCoiifiguration管理事实检索器的类实例RuleSetExecutionConfiguration的读/写属性,控制规则执行的其他对象,以及用于存储器和循环大小的参数。这些因素控制规则引擎中规则的执行。Rules只读RulesDictionary对象。该类收集少见则集中的规则。VocabularyLink相同名称的类的读/写实例。该属性将规则集与名称和对事实的绑定相关联。如果在应用中动态绑定规则集,则将使用该类。可以这样来构建工具,或者可以使用它来自动生成规则集,其中,具有包括规律变化的值的基本规则的已知集合。在这种情况下,可以采用来自应用或数据库的值并且程序上创建规则,从而重新生成规则集。该类34存在6个构造函数。第,个采用命名新规则的System.String。这并不从任何存储加载规则。其通常创建空的规则对象,并且给与其名称。下一个采用名称参数,并且增加了VocabularyLink对象作为第二参数。该构造函数也给出空对象,但是现在可以具有对可以在已构造规则中使用的名称的链接。其余构造函数构基于传递给构造函数的参数来构造完整的规则。该组的第一个构造函数采用用于名称的System.String,用于规则条件的LogicalExpression对象,以及用于动作的ActionCollection对象。下一个形式采用名称参数,表示规贝寸4尤先纟及的System.Int32,以及LogicalExpression和ActionCollection对象。最后两个构造函数重复如上所述的两种形式,并且最后增加了VocabularyLink对象。这两个形式的第一个采用名称、条件、动作和链接。最后一个采用名称、优先级、条件、动作和链接。Rule类具有6个属性,其所有都是可读/写的。属性描述了规则对象的部分和状态。Action是包含^L则的动作的ActionCollectin。Active是布尔变量,其指示规则是活跃的还是休眠的。Condition是LogicalExpression。除了名称之外,规则仅具有一个条件,但是其可以是复合表达式。Name是字符串,其必须是规则集内唯一的。Priority是lnt32,其具有感兴趣的值范围。该值越大,优先级越高。然而,零(0)既是默认值又是中间值。VocabularyLink是最终属性的名称及其类型二者。其在规则与域特定的定义之间建立链接。该类只具有一个方法,即Clone。其产生规则的深拷贝(deepcopy)。这是生成大量类似规则的快捷、方便的方法。在调用Clone之后,可以修改不同于原有部分的那些规则部分。可以进行到^L则的内部工作和组件。LogicalExpression表示头见则条件。其具有单个构造函数,该构造函数不具有参数,并且创建空的条件对象。该类具有两个属性。第一个是Type,其是System.Type类的只读属性。VocabularyLink是分类为具有该名称的类对象的读/写属性。与Rule类似,该类具有单个方法Clone,其进行条件的深拷贝。这是类的所有属性和方法。明显缺少用于构造逻辑表达式本身的任何类型的方法。已经证明存在表示所有谓词的类,诸如NotEqual,以及用于组成复合表达式的三个逻辑运算符及其否定的类LogicalAnd,LogicalOR以及LogicalNot。结合自己的类或者词汇表链接来使用它们给出了构建规则条件的灵活性。汇集。该类具有两个构造函数。一个没有参数,并且生成空汇集。另一个采用ICollection的实例,并且基于已有的动作汇集来创建对象。该类具有单个属性Item,其充当C弁中的类索引器。其是可读/写属性,其采用整数索引,并且得到或设置Function类的实例。Function来自RuleEngine命名空间。它是抽象类,充当实现动作的任何类的祖先。该抽象允许ActionCollection处理所有类型的动作,而无需专用代码。该类具有8个方法,并且其中的几个具有重载形式。这些方法在表2中列出。表2:ActionCollection类方法<table>tableseeoriginaldocumentpage36</column></row><table><table>tableseeoriginaldocumentpage37</column></row><table>类FileRuleStore和SqlRuleStore是从在其头部具有RuleStore类的继承树派生出的。其他类形成了使规则可以作为可执行内容来工作的类的相关集合。需要存储类给出存储词汇表和规则地的场所。多数程序员将不会实现其自己的规则存储类,因此并不十分需要覆盖抽象基类。当处理SQL服务器规则存储时,可以使用Policy和PolicyTester的方法来加栽规则集。为了简洁起见,对于面向规则存储的整个主题的含义,可以查看FileRuleStore的细节。FileRuleStore具有四个构造函数,在表3中说明。基本上,所有构造函数都通过定位文件存储来初始化新创建的对象。最后三个构造函数增加了用户安全和加载方便利的参数。<table>tableseeoriginaldocumentpage38</column></row><table>FileRuleStore没有属性,但是其具有表4中列出的6个方法。文件规则存储是规则集和词汇表的简单汇集。这些方法实现了添加、移除和读取汇集中项的共享汇集操作。表4:FileRuleStore方法<table>tableseeoriginaldocumentpage39</column></row><table><table>tableseeoriginaldocumentpage40</column></row><table>注意,GeTRuleSets和GetVocabularies并不直接检索规则集和词汇表。相反,他们表示对规则存储的查询,以找到与这些方法的参数中指定的特定标准相匹配的规则集或词汇表。可能需要GetruleSet或者GetVocabulary来4全索感兴趣的实际^L则集或者词汇表。/Fa"/"Wsv6r婆口在编写实现该接口的类时,可能需要管理长期的事实库。该接口包括单个方法,所以该实现的复杂度仅由緩存方案的复杂性决定。可能需要良好地估计事实库将可能多么频繁地改变,并且针对从将事实緩存在存储器中而获得的好处来对该信息进行平衡。UpdateFacts是实现需要的方法。该方法返回System.Object的实例,其被规则引擎用来处理已更新的事实。系统将检查返回的实际对象,以确定如何处置它。例如,当其遇到ADO数据库连接时,其理解其应当使用ADO对象和方法从所考虑的数据库检索事实。UpdateFacts采用三个参数。第一个参数是RuleSetlnfo对象,其描述使用中的规则集。第二个是对执行规则集的RuleEngine对象的引用。使用这些类的方法来得到需要什么事实的线索。第三个参数是System.Object实例。在第一次调用你的类时,该参数将是空。此后,该参数是UpdateFacts的先前调用的返回值,由此给出甚至比事实库的状态更多的有关信息。^^脊换乔移扭付悉_£^r"^巡i^哞源^7静,悉才法可以在规则中直接调用静态函数。例如,可以在少见则内直接调用DateTime.Now函数或者其他类似标准函数,而无需将其作为事实对象来传递。为了添加StaticSupport注册表4建点击开始;点击运行;键入RegEdit,继而点击OK。展开HKEY—LOCAL—MACHINE,展开Software,展开Microsoft,展开BusinessRules,并选择3.0。*在右侧面板中,点击右键,指向New(新建),继而点击DWORD值。*对于名牙尔,4建入StaticSupport如果StaticSupport注册表键已经存在,并且需要改变其值,执行以下步骤。为了改变StaticSupport注册表键的值点击开始,点击运行,键入RegEdit,点击OK。展开HKEYLOCAL—MACHINE,展开Software,展开Microsoft、展开BusinessRules,继而展开3.0。双击StaticSupport注册表键,或者右键点击它,并继而点击修改。上述键接受如下所示的三个有效值0:这是默认键值,并且该值模拟BizTalk服务器2004的行为,其中,总是需要对象的实例作为输入事实,并且仅当赋值或者执行规则时才调用该方法。1:不需要对象的实例,并且无论何时赋值或者执行规则,都调用静态方法2:不需要对象的实例,但是在规则转译时(仅当参数是常量时)。该值基本上作为性能优化。然而注意,用作动作的静态成员将不会在转译时执行,而用作参数的静态方法可以执行。因此,需要使用1或者2来启用静态支持以及直接调用静态方法。冉^^^潔fX斧^重我'S#j鍵可以通过使用应用配置文件来重载注册表条目。注册表设置对于主控规则引擎实例的所有应用来说是全局的。可以通过使用应用配置文件在应用层重载这些注册表设置。对于BizTalk服务器应用,主控应用时BTSNTSvc.exe,而配置文件是BTSNTSvc.exe.config。可能需要如下所述为希望在应用配置文件中重载的配置参数指定值<configuration><configSections><sectionname="Microsoft.RuleEngine"type="System.Configuration.SingleTagSectionHandler"/></configSections><Microsoft.RuleEngineUpdateServiceHost="localhost"UpdateServicePo炉"3132"UpdateServiceName="RemoteUpdateService"CacheEntries="32"CacheTimeout="3600"Pollinglnterval="60"TranslationTimeout="3600''CachePruneInterval="60"DatabaseServer="(localhost)"DatabaseName="BizTalkRuleEngineDb"SqlTimeout="-rStaticSupport='T'/></configuration〉遞过在,財5/^9^说W可以使用Microsoft.RuleEngine.RuleEngineExtensions命名玄间中的RuleSetDeploymentDriver以及使用RuleEngineComponentConfiguration类来调用应用内部的规则和策略,从而通过程序来部署规则。下文示例描述了用来通过程序部署规则的代码stringpolicyName="TAS—E3000500";intmajorRev=Convert.ToIntl6(args卩]);intminorRev=Convert.ToIntl6(args[2]);RuleSetlnforsinfo=newRuleSetInfo(policyName,majorRev,minorRev);Microsoft.BizTalk.RuleEngineExtensions.RuleSetDeploymentDriverdd;depdriver=newMicrosoft.BizTalk.RuleEngineExtensions.RuleSetDeploymentDriver();depdriver.Deploy(rsinfo);如果正在向BizTalk服务器环境被配置使用的数据库部署策略,则无需在代码中创建RuleSetDeploymentDriver对象。相反,可以通过调用System.RuleEngine命名空间中的Configuration类的GetDeploymentDriver方法,来请求规则引擎为其创建RuleSetD叩loymentDriver对象。下面的代码示例说明了如何调用GetDeploymentDriver方法Microsoft.BizTalk.RuleEngineExtensions.RuleSetDeploymentDriverdd;dd=newMicrosoft.RuleEngine.Configuration.GetDeploymentDriver();GetDeploymentDriver方法检索HKEY—LOCAL_MACHINE\Software\Microsoft\BusinessRules\3.0下的DeploymentDriverAssembly和DeploymentDriverClass的注册表键的值,并且创建DeploymentDriverClass的实例。下面是上述4建的两个值參DeploymentDriveAssembly-Microsoft.BizTalk.RuleEngineExtensions參DeploymentDriverClass-Microsoft.BizTalk.RuleEngineExtensions.RuleSetDeploymentDriverRuleSetDeploymentDriver类实现了IRuleSetDeploymentDriver接口。可以通过创建实现IRuleSetDeploymentDriver接口的类来开发自己的策略部署驱动器,并且适当地改变如上所述的注册表键值。可以4吏用上述iw/eEwg7'weCowpowe^Cowj7gwa/7'ow类中的RuleEngineComponentConfiguration方法来传递自定义事实,钕口下面的代码所示RuleSetExecutionConfigurationreel=newRuleSetExecutionConfiguration();RuleEngineComponentConfigurationrecc1=newRuleEngineComponentConfiguration("FactRetrieverForE3000500","Microsoft.Samples.BizTalk.TASPolicies.FactRetrieverForClaimsProcessing.DbFactRetriever");rec1.FactRetriever=recc1^rsl.ExecutionConfiguration=rec1;除上述之外,已经向Policy类添加了称为C/ear的方法,其重置为了策略的执行而创建的规则引擎实例的存储器。而且,为了支持可为空的类型,一般性方法和类是对BizTalk服务器2006中的业务规则引擎的其他增强。發茂5发'w>7,r4一说身与所有软件开发相似,在事实词汇表正确无误之前,通常需要它的多个版本。无法夸口说在使其规则按照期望工作之前可以容易地处理词汇表的20-30个版本。备选方案是不直接在规则数据库中发布词汇表。该过程是1.发布词汇表2.测试引用该词汇表的规则3.打开BizTalkRuleEngineDb中的re—vocabulary表,并且将nStatus字段从1改为0(1=已发布;0=未发布)。可以通过strName字段中保存的名称来标识词汇表。4.将词汇表信息重新加载到规则组成器,并且添加/修改事实。5.保存词汇表,并继而将nStatus字段设置回1:不从规则组成器重新发布词汇表,否则将得到主键违规。6.在规则组成器中重新加载策略/词汇表一次,并且重置策略。可以使用与策略相同的方法。尽管通常不需要发布规则以便使用规则组成器的测试工具来测试它们,但是如果意欲根据某个安排它们,则可以这么^f故。在此过程中可以找到与单元测试期间一样多的错误。可以改变re一ruleset表中的nStatus字段来临时不发布策略以便编辑它,而不是创建策略的新版本。图4示出了按照本发明一个实施方式的、用于转换规则组件的架构400。通过规则提取器405从COBOL代码401中提取规则(类似于图1所示的规则提取器107提供的功能)。来自COBOL代码401的词汇表(由词汇表提取器403提取)和所提取的逻辑合并,以形成新的规则集,其由规则部署器407导入到业务规则引擎409。^于说身逸伴脊^W^;程图5示出了按照本发明一个实施方式的、用于执行表单规则转换的高层流程500。规则转换才莫块503从Accenture税务管理系统(TAS)501转换词汇表和规则,并将其写入通用规则引擎语言(BPEL)。将词汇表和规则导入到BizTalk505(对应于图2所示的目标应用217的业务规则引擎)。而且,第三方规则引擎507可被导出到BPEL,并且经由所开发的例程来加载。图6示出了按照本发明一个实施方式的、用于执行后端规则转换的高层流程600。转换例程605从TAS601和关联的数据库603提取后端规则。规则被标准化为BPEL,并且被导出到BizTalk607以供后端规则执行。炎拔脊换图7示出了按照本发明一个实施方式的数据移植过程700。旨在实现更大的客户端请求的AccentureEnterpriseRevenueSolution(AERS)程序包含TAS转换应用703,其转换来自源服务器701的规则和数据,并且通过中间服务器705将经过转换的规则和数据移植到目标服务器709。移植应用为TAS客户提供了到AERS的数据转换/转接的快速方法。TAS意在提供以下内容■提供用于已有TAS客户端的升级路径■降低ITS升级的成本■降低ITS升级的风险■缩短内核升级的时间TAS转换器703包含用于转换的以下方面数据转换、表单规则转换、接口转换、对应关系转换、后端规则转换、账目的收入账目表移植,以及已有TAS报表的转换。在高层,数据转换经过5个步骤,如下所述。1.TAS转换器应用703从指定的ITS(整合税务系统,在此情况下是Accenture税务管理系统)后端结构701选择和提取数据。该应用利用通用SQL"SELECT"和"JOIN"语句来拉取有关数据。2.应用对所提取的数据执行任何预备净化(cleansing)和格式化操作。此后,ITS数据被插入并临时存储到SQL服务器存储库705中。3.TAS转换器应用703使用通用SQL"Select"语句从SQL存储库705提取所有数据,以便在平面文件导出之前进行最终数据净化和格式化。4.通过TAS转换器应用703,所有提取的数据进行所需的净化和格式化。此后,将数据导出到自动生成的平面文件707中,以便批量插入到目标系统(SAP或者其他系统)709。将平面文件保存在预先指定的文件系统位置。5.使用Emigall作为批量插入程序,其将所生成的平面文件中的数据上传到SAP后端系统709。TAS转换器703依赖于四层结构,其提供用于将ITS数据迁移和净化到SAP系统709中的通用、独立和灵活的方法。该结构包括以下层■源"源"层容纳客户的ITS,其维护将要移植的数据的原始集合。■中间"中间"层提供临时结构,其接收将要净化和临时存储的"源"数据。■目的地"目的地"层接收和维护包含已净化"中间"的已生成平面文件。■SAP:"SAP"层是源数据的最终目的地。图8示出了按照本发明一个实施方式的TAS转换器过程800。多数移植过程由TAS转换器过程800管理。使用SSIS的过程800执行ITS数据的提取、转换和加载。而且,过程800可以提供图形界面,其绘制移植流程的可视进展。下面是TAS转换器过程800执行的步骤。47步骤l:清理中间数据库表(步骤801)■将中间数据库中的所有数据清理出来步骤2:提取和加载TAS数据(步骤803)■从DB2表TF1ENTITY和TF1BUSDET提取数据,加载到SQL表TAXPAYERS中■从DB2表TF1ADDR提取数据,加栽到SQL表ADDRESSES中■从DB2表TF1ID提取数据,加载到SQL表IDENTIFICATIONS中■从DB2表TF1ACCT提取数据,加载到SQL表ACCOUNTS■从DB2表TF1RELA提取数据,加载到SQL表RELATIONSHIPS■从DB2表TFINAME提取数据,加载到SQL表NAMES步骤3:变换表Taxpayers、Names、Addresses、Identifications(步骤805)■针对TAXPAYERS执行变换和代码映射,加载到TAXPAYERS—NEW中■针对ADDRESSES执行变换和代码映射,加栽到ADDRESSES—NEW中■针对NAMES执行变换和代码映射,加载到NAMES—NEW中■针对IDENTIFICATIONS执行变换和代码映射,加载到IDENTIFICATIONS—NEW中■针对TAXPAYERS执行变换和代码映射,加载到TAXPAYERS—NEW中步骤4:变换表Relationships、ContractAccounts、ContractObjects(步骤807)■针对ACCOUNTS执行变换和代码映射,加载到ACCOUNTS—CA中■针对ACCOUNTS执行变换和代码映射,加载到ACCOUNTS_CO中■针对RELATIONSHIPS执行变换和代码映射,加载到RELATIONSHIPS—NEW中步骤5:移除自我关系(步骤809)■使用SQL移除所有与自己的关系步骤6:创建平面文件(步骤811)■^卩本生成平面文4牛TaxPayers.txt、ContractAccounts.txt、ContractObjects.txt以及Relationships.txt■使用TASConverter.DataConversion类来才丸行平面文件创建步骤7-8(在SAPGUI中一未在图8中明确示出)步骤7:创建用于SAP的导入文件■导航到事务EMIGALL—〉MigrationObject(移植对象)_>DataImport(数据导入)■创建SAP可以记载的导入文件■Edit(编辑)一〉Data(数据)一〉Upload(上传)步骤8:运行数据导入■从Data(数据)菜单选择ImportData(导入数据)^f伴#^WS悉在图9示出了按照本发明一个实施方式的、用于从TAS转换收入账目表的高层流程900。转换例程903从Accenture税务管理系统(TAS)901获得账目表,并且将账目表转换为标准格式。一旦处于公共结构,便将账目表导入到SAP服务器905,以提供更新的结构。图10示出了按照本发明一个实施方式的、从Accenture税务管理系统(TAS)1001转换数据组件的高层流程1000。从税务管理系统1001获得数据组件的数据元素,其中旧有数据元素被提取到预定义的去正则化结构中。用于数据元素的去正则化数据结构映射到SAP应用1005中。/《f^它*斧W脊^W萄^《悉在图11示出了按照本发明一个实施方式的、从税务管理系统1101转换对应关系组件的高层流程图1100。转换例程1103将对应关系数据元素从Accenture税务管理系统(TAS)1101映射到SAP数据元素。对应关系内容和数据元素被导入到SAP应用1107。而且,第三方模板或者数据1105可以映射到转换例程。图12示出了按照本发明一个实施方式的用于从税务管理系统转换接口组件的高层流程1200。接口1205保持不动,以支持SAP服务器1201正在进行的操作。虛拟数据库1203是概念化TAS数据结构,旧有转换例程和接口可以在其上运行。图13示出了按照本发明一个实施方式的用于从税务管理系统1301转换报表组件的高级流程130。TAS报表的数据元素被映像到SAP系统1305中的数据元素,以便向机构报表提供相同的数据输入。报表能力1307支持使用数#元素的相同解释以及按照类似的呈现来重新产生报表。而且,客户端可以将旧有数据结构1303映像到转换例程,以-使映^f象到SAP系统1305。^辦^7^5"乂口^^"《"^迷图14示出了按照本发明一个实施方式的TAS人口统计表结构1400。基于选定的行业ITS以及用作源和目的地后端系统的AERS配置的软件,来开发和测试TAS转换器。作为源ITS系统,使用AccentureTAS系统,特别地,其具有类似于已有客户端实现的后端配置。目的地AERS后端系统是SAPPSCD才莫块。通过包含Accenture管理和SME,人口统计数据结构被选择为将要移植的第一数据序列。TAS系统包括9个后端表,其维护人口统计数据,并且利用TAS转换器加以处理。TAS人口统计表详细说明如下。TAS人口统计数据结构<table>tableseeoriginaldocumentpage51</column></row><table>rAs乂口婉/,^y多迷TF1ACCT:纳税者可以在该表上记录其注册的每个税务类型,例如,个体、销售和使用、公司收入、预扣等。对于每一个,该表保存诸如acctid的信息(如果适用,仅销售和使用以及预扣账目),账目的有效日期、提交频率等。注意对于季节性提交者,存储关于他们在哪几个月提交的信息。TF1ADDR:纳税者可以在此表上具有不止一个条目,可以具有不同的地址类型,诸如主要地址、通邮地址、位置等,并且这些不同的地址类型可以与整个纳税者相关联,或者与特定的账目类型相关联,例如销售和使用、预扣等。TF1ASSET:纳税者在该表可以具有或者不具有信息。该表存储已经收集的关于纳税者的资产信息,其可以用于收集目的(也即,银行账户、雇主等)。TF1BUSDET:除了该表的名称之外,包括个人在内的纳税者在该表上将具有条目;尽管某些字段仅与商业实体有关,例如NAICS代码。该表保存诸如业务类型、NAICS代码以及业务何时还是和/或结束的信息。TF1ENTITY:该表存储实体的类型,例如纳税者、相关方、财产等,不论他们是否是受限的纳税者,例如,既能由具有特定安全性的用户查看,并且不论他们在CRM系统中是否具有服务请求。TF1EXEMPT:纳税者可以在该表上具有或者不具有信息。该表存储特定账目的免除类型,例如非盈利机构在此表上针对其销售和使用账目具有记录。TF1ID:IDINTERNAL是用于每个纳税者的唯一标识符;纳税者在此表上可以具有不止一个条目,因为其可以具有不止一个外部ID类型,但是只有一个外部ID可以是主ID。TF1NAME:纳税者在该表上可以具有不止一个条目,因为其可以具有不止一个名称类型(例如,法律、商业等)。TF1RELA:纳税者在该表上可以具有或者不具有信息。该表将系统中的实体彼此链接,并且指示关系是否可用于抵消。本小节的目的是提供支持AERS的TAS转换器开发基础架构所需的硬件和软件需求的概况。所列出的软件对应于所使用的开发和测试环境。将这些软件组件部署和引入到TAS转换器技术范畴的顺序在详细部署规划小节中明确说明。TAS转换器将在AERS环境中使用以下操作系统■1Windows2003服务器-1CPU,2GBRAM(DB2DB)■1Windows2003服务器-1CPU,2GBRAM(SQLServerDB)■1Windows2003服务器-1CPU,4GBRAM(ECC6.0)需要下列软件以便构建TAS转换器开发环境■MicrosoftSQLServer2005EnterpriseEdition■IBMDB2Version9.1■MicrosoftVisualStudio2005ProfessionalEdition■MicrosoftOLEDBProviderforDB2■MicrosoftVisualSourceSafe2005(Optional)■SAPmySAPERP2005(PSCD)^多/遂审署魂W本小节的目的是详细描述建立TAS转换器环境所需的步骤序列。这应当充当TAS转换器团队在组装TAS转换器基础设施时的指南。该小节是软件安装及其组件的高层细节。用户可以参考该小节作为TAS转换器环境的顺序和概况的指南。1.安装SAPPSCDa.由Basis团队安装任务2.IBMDB2安装a.安装DB2V9b.导入TAS表结构i执行SQL插入查询c.更新TAS数据i映射平面文件字段3.安装MicrosoftOLEDataProviderforDB2a.在开发机器上安装DB2Providerb.在运行时机器上安装DB2Provider4.安装MicrosoftSQLServer2005a.在开发机器上安装SQLServer2005b.在运行时机器上安装SQLServer2005c.导入SQL表结构5.TAS转换器应用导入a.拷贝已有的SSIS应用b.将SSIS应用上传到VisualSourceSafec.配置应用i配置数据源证书和位置ii配置文件系统证书和位置尽管已经关于包括执行本发明的优选模式的特定示例描述了54本发明,但是本领域技术人员将会理解,在所附权利要求记载的本发明的精神和范围内,将存在对上文描述系统和技术的多种变形和替换。叫T厶989000Jpop戶p'薩dn.qpn.zqp-iuqvuio;3/3!doi/6A/Avriizqp/M9iU330ju!/uiocrurqrj3PFloq.qHqnd.//:d:ni((s丛opu!AV),^,芳W紫今,4紫^:I:乙8G90/0690/c)89o/oOAo/oI9o/"Ao/oA9o/o乙Zo/c^JOliris3"uiunnqqBipBC^/qpTi3qp/30p.。3'qptv乙qp.um.iuo3/3!do:i/8A/Ami2qPA!柳9C)qju!/uio:vuiq卩3pirioq.q!iqrid〃d叫丰,^谅c《骄錄錄.qpn.乙qp'uiq!.uio3/o!doi/8A/Avrii2;qp/j柳3;30ju!/uiocvuiq卩3pirioq.q!iqnd〃d:ni[(SAVopuAV)靠芳g《古务ff4奪^f辨豫6AZ8dl"^^/4,杀抑。者^i^4靠芳zaaT^,^^彩(inS008800S附录B:字母组合和缩写<table>tableseeoriginaldocumentpage57</column></row><table>附录C:SQL查询ZXB2炎承普询TFIENTITY和TFIBUSDETDB2表"M/C7/H/rF7五腊7T.CD—nT£_£M77T'J7T^jV777T:CD—SOLACE—"尸D」"M/C7/HJ(9/77Z".rF7五脂7r:/z)一服尸丄(9ra:五一c/m47^,c4S7TM/c/^el/ownz".rf7五at/7T:Drj7尸zwr五爿sj^/C7W/po"爿s"r—f/尸zx4(^77,(://^.嫌772"7^7£腊7^窗—"尸^7^5驗C股/卿MrMJ7m47^,"M/C/i4五丄.JOi77Z"7^75f/SD五rCD一7T尸五—SL/S/A^S5:58〃m/c7/hjomz〃rF7SV77jr:/£>一餅£酉丑=〃m/ct^虹.j:c^ztz".TF1ADDRDB2表驢C股i卿爿SDr—£FF£Cr,"M/Cii4五U(9i77Z"^djv^Affi^rr五7V77cw;〃M/Ctt4五厶乂(97J7Z"7V^MjD"兄^d一S77^i:r—,"M/Ctt4£Z.J.Oi77Z"rFWDD兄爿Z)一S77五五r—2,"M/Ctt4£Z.■/0/77Z"7T^DDiJZ)—C/7T'"M/C7/感./OmZ".7T^MDZ)/.CD—」朋/—COWV7W'"M/c7/HJO腊Z".rF"DDim—朋她,"M/CHH■/O腊Z".77^£>"义/£)一尸//0厄_6)/^践"M/c/zujamz".rF"d皿cd一tt尸五—^ccr一狐,"M/C/W五丄.JC^77Z".r尸"DD兄CD—7T尸五J五丄,"ikf/C/Wfi丄.JOi77Z"'营C7i4虹.J(9i77Z"7^"""/.乾陋—尸O,"M/C/i^U(9腊Z"7"D/./"—M/M一卿一乾肌TF1IDDB2表"m/o/息jr"瓜cd—s(9Wc^一"m47^,〃m/ct/嵐.j:6^7vz"7,尸爐/"_,尸2:<9鹏一"尸£^r五,C4S7r"M/c7/n.j:c^77z".r尸/瓜:rM一"m4r雄K4ic//^,wrM"尸A4r五,TF1ACCTDB2表:'覽c7/m:o腊z".7F"ccn—d《術iv一FzscM丄,"m/c7/^zjo腊z".:tf"cctc"一f朋q一孤荡,"m/C7i4ur尸"ccr.cdj£^cw—"m4r五,rF"ccz/D一服尸丄o鹏一"m4re,C4WM/C7/nJO腊z".rF"ccr力—"mOT爿s隨cz/厨卿xsC4S7Y"M/c/i4五uoi77z"rF"ccr.:rM—t/尸iur五爿s^ic/i4ipo"爿s"M/C/i4E丄.J:Oi77Z"TF"CCr./W—S五尸3TMB五尺61"M/c/wuomz".rF"ccr.cz)一jy尸五一r^o4觸,〃M/C7^虹.乂a/77Z".rccr.z/v一脇y,'"M/C7/感.脂77Z"TF"CC7:/Z)—A4肌"M/C似U0/77Z"r尸"CCrJ"(XT—A4肌C/^2T"M/C别UH'.7F"CCn一"肌J吸W,C7/聘卿wTFIRELADB2表〃M/Ctt4U:Tf7肌ACD—7T尸五一力(XT一愿,"M認息.j.o腊z".7T舰".CD一nr五一肌,C4WM/C/^L/Oi77Z〃77^脆ADr一五FFrW隱C股/,W"MC7/息.JC^77Z"7T^纖ACD一5X47T/5"—嵐,"M/C〃H.J0腊Z"rF潔L4.CD一SOWC5J7尸ZX4r五,〃M/C7/H.JO腊Z".,組ACZ)J脇CW—f/尸ZX47E,"M7C/i4虹JO腊Z".rW肌/l/D五M尸IO鹏J7m4r五,TF1NAMEDB2表〃M/C7/H.JOT77Z".rF扁腿/D一/A7^崩丄,"M/C7/息./O腊Z".rF扁感/"一M/M一卿JVJ城"M/CT/HJOmZ".7F扁MECD—7TP£—沼感,W/C7/孤.J:0/77Z〃rF層ME層一F/线"M/C/Z孤.0腊Z〃rF層M五.腹一層7147一M/DD丄五,"M/C/ZH.7(9/7YZ".rF扁腿7/V—""尸丄/C47^一A^鄉〃M/C/i4U6^J7Z"TF濯M五.CD一S0WC五一"m4r五,,c股五丄.jOR77Z".r尸洲mecdjfi4scw一"m4〃M/C///^L■/Oi77Z"TF爐ME/D一五M尸丄0舰一"m4〃M/C股U0腊Z"rF履M5.7/V一細iG五,〃M7C7/HJ(9i77Z"rF扁M五.層—7Y7X五,C^77Z"7F扁皿廢一sL^ra:用于将表TAXPAYER变换为表TAXPAYER—NEW的SQL提取查询表ADDRESSES到表ADDRESSES—NEW:v4""腦孤/D—M/M—卿—JDi)/,爿Z)Z)/ES^.CD一7T尸五一v4CCr'爿DDi孤ES1./djeer,爿DD腐鹏.Dr—五f尸五cr,爿d"愿sES."r—fiVAyi"£)/ES^£S.^Z)—A^M£_^rr五iV77CW'v4DDi五5^五S.爿D一S77五五r—7,v4Z^五SSES.乾S77五五r一2,爿Z^五鹏"Z)一C/7T'^DD/^鹏51.CD■」DD腦鹏.^一脇几—貼r"錢/£>_///認五一//0細,v4DD/ES淑/£)一£灯—7^//OM£,尸/ZO厄一OFF线爿朋i孤五51.CD一7T尸五一/4Ccr一尺虹,爿AD愿皿/D—力ccrj五丄,爿DZ^鹏S.Dr一"尸ZX47^,爿,腐雄rM—"m4r五'爿ZIDiES鹏.五M4/丄n/^鹏6W爿""愿鹏./Z)—/AT£m4Z=n/W鹏.乾/AT57A^表NAMES到表NAMES—NEW:;W.層一fiV77rKA7.層—《J^A7.層一尸7^7:iW.層一層r嵐—M/朋仏a7.乾而尸丄/C4r五一M4M五,脱cd一S7MmSms;A7./z)一,尸zora^jym4r五,服r乾r£,"r—t/m4r五,iW.淑一^V7Y7T一《iWU7KE一i^4G尸加M『服i五(W/.CZ)一7T尸五一AW£=广孤五CTM/AYO)—7T尸五一A64M巧爿SCZ)一7T尸五—崩MEfA7./D一/ATO扁=/D—鮮^嵐,碧D(7W./D一M/M一卿—眉細卩孤rMiyr/D—m/乾卿—a^滅」w/d一m7m一卿—眉她CD一7T尸五jv赢柳爿M)fw.c/)—nr五—^ccr=(7V〃"一鮮五履^丄=/D一/ATOA^H)fV/.CD一7T尸J^CCr=表IDENTIFICATIONS到表IDENTIFICATIONS—NEW:SELECTIDENTIFICATIONS.ID—INTERNAL,IDENTIFICATIONS.CD_TYPE」D,IDENTIFICATIONS.ID—ENTITY,IDENTIFICATIONS.ID—OCCURRENCE,65IDENTIFICATIONS.INIDPRIMARYFROMTAXPAYERSINNERJOINIDENTIFICATl0NSONTAXPAYERS.ID一烈TERNAL—IDENTIFICATIONS;IDINTERNAL表ACCOUNTS到表ACCOUNTS—CASELECTA1jIDjINTERNAL.A17CD二rYPE』CCZA1.TEMP—ID—ACCT,A1.DTEFFECT,彳■DT—ENDFRoM彳CCOUNTSASAlINNERJOINTAXPAYERSONAl.IDINTERNAl=TAXPAYERS.ID—INTERNALWHERE(Al,DT土FFECT。(SELECTMIN(DTEFFECT)ASDT——EFFECTFROMACCOUNTSASA2WHERE(A1j11)hYTERNAlID~INTERNAL)AND(A1.CD二rYPEjCCT=CDTYPEACCT)AND(DTEND>=CONVERT(CHAR(IO)lGETDATEO.120))))GROUPBYAl.IDINTERNAl,A1.CD—TYPE—ACCT,A1.TEMP—ID—ACC~AlDT—EFFECT,A1.DT—ENDORDERBYAljIDINTERNALA1jCDJYPE』CCT表ACCOUNTS到表ACCOUNTS—COSELECTACCOUNTS.IDINTERNAL,ACCOUNTS.DT_EFFECT,ACCOUNTS.DT_END,ACCOUNTS.CD_FREQ_FILING,ACCOUNTS.TEMP——ID——ACCT,ACCOUNTS.TEMP——D1——CO,TAXPAYERS.CDTyPEBUSINESSFROMACCOUNTSINNERJOINTAXPAYERSONACCOUNTS.ID_INTERNAL==TAXPAYERS.ID_INTERNALWHERE似CCOUNTS.TEMP—ID—ACCTIN(SELECTA1.TEMPIDACCTfTOM爿CCW愿M"層WJ課W/ffii五/£>/AT£W/^4I=/Z)JATEiA^"爿WD07.CD7TPWCCr=CD7Ti^CCr"」爿M)^7力r一五M)〉=CCW,77C/^,」,g^m4r邻,72曙表RELATIONSHIPS到RELATIONSHIPS—NEW:/五ncws麼譜/iv環im,i五"r腹s麼s.cDnr五—^4Ccr'肌v47YCW甜/尸51.CCr'皿J77CW柳尸S./D一/AT五麵丄—肌風力r證S/Z/尸S.纖j77cws麼51.Dr一五A/D,脆^r腹紐监cd—■ros一皿尸船m7XOW薦CWM"77CW57/"./D—W潔崩丄肌=附录D:脚本代码为CA和CO指派TEMP—ID:为ContractAccount和ContractObject创建唯一的数字PublicClassScriptMainInheritsUserComponentPublicTEMPJDJNTERNALAsDecimalPublicTEMP—ID—ACCOUNTAsIntegerPublicTEMPIDCOAsIntegerPublicIEMP一CD一TYPE一ACCTAsDecimalPublicOverridesSubInputO一ProcessI叩utRow(ByValRowAsI叩utOBuffer)IfTEMPJDACCO潔T-0ThenSetStartValues(Row.IDINTERNAL,Row.CDTYPEACCT)EndIfAssignTempID(Row.I画TERNAL,Row.CDTYPEACCT,Row.TEMPIDACCT)Row.TEMPIDACCT=TEMPJD一ACCOUNTRow.TEMPIDCO=TEMPJDCOEndSubPrivateSubAssignTempID(ByValinputIDINTERNALAsDecimal,ByValinputCDTYPEACCTAsDecimal,ByValinputTEMPJDACCTAsInteger)Ifi叩utID一INTERNAL=TEMPJDJNTERNALThenIfinputCDTYPEACCTTEMP—CD—TYPE—ACCTThenTEMP—CD—TYPE—ACCT=i叩utCD—TYPE—ACCTTEMPJD—ACCOUNT+=1EndIfElseTEMPJD一INTERNAL=inputIDINTERNALTEMP—CD—TYPE—ACCT=inputCD一TYPE一ACCTTEMPJD—ACCOUNT1EndIfTEMPJD—CO+=68EndSubPrivateSubSetStartValues(ByValinputlDINTERNALAsDecimal,ByValinputCDTYPEACCTAsDecimal)TEMPCD—TYPE—ACCT=inputID—INTERNALTEMP—ID—INTERNAL=inputCDTYPEACCTEndSubEndClass变换日期从日期字段中删除"-"PublicClassScriptMainInheritsUserComponentPublicOverridesSubInputO—ProcessI叩utRow(ByValRowAsInputOBuffer)Row.DTSTARTBUS=ConvertDate(Row.DTSTARTBUS)Row.DTENDBUS=ConvertDate(Row.DTENDBUS)EndSubPrivateFunctionConvertDate(ByValinputDateAsString)AsStringinputDate=inputDate.Replace("-","")DimiYearAsIntegeriYear=CInt(i叩utDate.Substring(O,4》IfiYear<1900TheninputDate=""EndIfReturninputDateEndFunctionEndClass变换伙伴类型执行代码映射PublicClassScriptMainInheritsUserComponentPublicOverridesSubInputO—ProcessInputRow(ByValRowAsInputOBuffer)Row.CDTYPEBUSINESS=ConvertPartnerCategoiy(CInt(Row.CDTYPEBUSINESS))EndSubPrivateFunctionConvertPartnerCategory(ByValcatAsInteger)AsIntegerIfcat=100Orcat=110Orcat=161Orcat=162Orcat=163Orcat=164Orcat=165Orcat=700Thencat=1Elsecat=2EndIfTransformHouse:DeriveshousenumberfromaddressPublicClassScriptMainInheritsUserComponentPublicOverridesSubInputO—ProcessI叩utRow(ByValRowAsInputOBuffer)Row.HOUSE=ConvertHouse(Row.HOUSE)Row.ADSTREETl=ConvertStreet(Row.ADSTREETl)EndSubPrivateFunctionConvertHouse(ByValvalAsString)AsStringDimiSpaceAsIntegeriSpace=val.IndexOf("")IfNotiSpace=-lThenval=val.Substring(O,iSpace)EndIfReturnvalEndFunctionPrivateFunctionConvertStreet(ByValvalAsString)AsStringDimiSpaceAsIntegeriSpace=val.IndexOf("")IfNotiSpace=-lThenval=val.Remove(O,iSpace)EndIfReturnvalEndFunctionEndClassTransformAddressType:PerformscodemappingPublicClassScriptMainInheritsUserComponentPublicOverridesSubInputO—ProcessInputRow(ByValRowAsInputOBuffer)Row,CDTYPEADDRSAP誦ConvertAddressType(Row.CDTYPEADDR)EndSubPrivateFunctionConvertAddressType(ByValvalAsDecimal)AsStringDimtypeAsStringtype="XXDEFAULT"Ifval=lOThen'MAILINGtype="MAILING"Elselfval=20Then'PREMISEtype="LOCATION"Elselfval=30Then'LOCATIONtype="LOCATION"Elselfval=40Then'SECONDARYtype="MAILING"Elselfval=50Then'EMAILtype="MAILING"Elselfval=60Then'PRIMARYtype="XXDEFAULT"Elselfval=70Then'RESIDENTtype="0002"Elselfval=90Then'UNKNOWNtype="MAILING"EndIfReturntypeEndFunctionEndClassTransformZip:Removes"-"fromzipcodePublicClassScriptMainInheritsUserComponentPublicOverridesSubInputO—ProcessInputRow(ByValRowAsInputOBuffer)DimzipAsStringzip=Row.CDADDRZIPIfNotIsNumeric(zip.Replaee("-",""))ThenRow.CDADDRSTATE="VA"EndIfRow.CDADDRZIP=ConvertZIP(Row.CDADDRZIP)EndSubPrivateFunctionConvertZIP(ByValvalAsString)AsStringDimtempAsStringtemp="20000-0000"71Ifval.Trim丄ength=0Thenval=tempElselfNotIsNumeric(val.Replace("-",""))Thenval=tempEndIfReturnvaiEndFunctionEndClass变换标识类型执行代码映射PublicClassScriptMainInheritsUserComponentPublicOverridesSubInputO—ProcessInputRow(ByValRowAsInputOBuffer)Row.CDTYPEIDSAP=ConvertlDTypes(Row.CDTYPEID)EndSubPrivateFunctionConvertIDTypes(ByValvalAsDecimal)AsStringDimtypeAsStringtype="FS001"'IDCARDIfval=lThen'EINtype="EIN"Elselfval=2Then'SSNtype="IBSOOl"Elselfval=4Then'JNTtype="ZTAXID"Elselfval=5Then'BTNtype="ZTAXID"Elselfval=6Then'SSLtype="ZTAXID11Elselfval=7Then'BUYRtype="ZTAXID"Elselfval=100Then'TEMPtype="ZTAXID"EndIfReturntypeEndFunctionEndClass变换账目类别执行代码映射PublicClassScriptMainInheritsUserComponentPublicOverridesSubI叩utO一ProcessI叩utRow(ByValRowAsInputOBuffer)Row.CDTYPEACCTSAP=ConvertAcctCategories(Row.CDTYPEACCT)EndSubPrivateFunctionConvertAcctCategories(ByValvalAsDecimal)AsStringDimtypeAsStringtypeIfval=100Thentyps="IN"Elselfval-111Thentype="GS"Elselfval:125Thentyps="GS"Elselfval-:150Thentype="IF"Elselfval=161Thentype="GS"Elselfval::162Thentype="GS"Elsdfval=163Thentype="GS"Elselfva卜:164Then"GS"Elselfval=210Then"GS"Elselfval=250Thentypc='CF'Elselfval=260Thentype-'GS"Elselfval二280Thentyps='CF"Elselfval=300Thentype-'丽"Elselfval==310Thentyps='GS"Elselfval=350Then'SU"Elselfval=360Thentyp6='CF'Elselfval=370Thentypc='GS"Elselfval=380Thentypc='CF'Elselfval=400Thentypc='RE"Elselfval=450Thentype="GS"Elselfval=510Thentype="GS"ElselfVal=520Thentyps="GS"ElselfVal=530Thentyp6="GS"ElselfVal=540Thentyps="GS"Elselfval=:550Thentype="GS"Elselfval=:560Thentypc="GS"Elselfval:=565Thentyps="CF"Elselfval=:570Thentypc="GS"Elselfval==575Thentyp6="GS"Elselfval==580Thentyps="GS"Elselfval==585Thentype-"GS"Elselfval=600Thentype="GS"Elselfval=610Thentype="GS"Elselfval=700Thentype="RE"Elselfval=710Thentype="RE"Elselfval=720Thentype="GS"Elselfval=730Thentype="GS"Elselfval=998Thentype="GS"EndIfReturntypeEndFunctionEndClass变换周期执行代码映射PublicClassScriptMainInheritsUserComponentPublicOverridesSubInputO—ProcessInputRow(ByValRowAsInputOBuffer)Row.CDFREQFILING=ConvertPeriodicity(Row.CDFREQFILING)EndSubPrivateFunctionConvertPeriodicity(ByValvalAsDecimal)AsDecimalIfval=1Then'Annualval=6Elselfval=12Then'Monthlyval=3Elselfval=365Then'Dailyval=1'MustconfigurePSCDforDailyEndIfReturnvalEndFunctionEndClass变换伙伴类别C0:纟丸行代码映射PublicClassScriptMainInheritsUserComponentPublicOverridesSubInputO—ProcessInputRow(ByValRowAsInputOBuffer)Row.CONTRACTOBJECTTYPE=ConvertPartnerCategoiy(CInt(Row.CDTYPEBUSINESS))EndSubPrivateFunctionConvertPartnerCategory(ByValcatAsInteger)AsInteger74Ifeat=100Orcat=110Orcat=161Orcat=162Orcat=163Orcat=164Orcat=165Orcat=700Thencat=10Elsecat=20EndIfReturncatEndFunctionEndClass变换关系执行代码映射PublicClassScriptMainInheritsUserComponentPublicOverridesSubInputO—ProcessI叩utRow(ByValRowAsInputOBuffer)Row.CDTYPERELSAP=ConvertRelTypes(Row.CDTYPEREL)EndSubPrivateFunctionConvertRelTypes(ByValvalAsDecimal)AsStringDimtypeAsStringtype="BUR006"ReturntypeEndFunctionEndClass创建平面文件生成人口统计平面文件ImportsSystemImportsSystem.DataImportsSystem.MathImportsTASConverter.DataConversionImportsMicrosoft.SqlServer.Dts.RuntimeImportsSystem.DiagnosticsPublicClassScriptMain'Theexecutionenginecallsthismethodwhenthetaskexecutes.'Toaccesstheobjectmodel,usetheDtsobject.Connections,variables,events,'andloggingfeaturesareavailableasstaticmembersoftheDtsclass.'Beforereturningfromthismethod,setthevalueofDts.TaskResulttoindicatesuccessorfailure.'ToopenCodeandTextEditorHelp,pressFl.'ToopenObjectBrowser,pressCtrl+Alt+J.PublicSubMain()'AddyourcodehereDimobAsNewDataConverterDimdbAsStringDimlocPayerAsStringDimlocAccAsStringDimlocCoAsStringDimlocRelAsStringTrydb="DataSource=RESBT2403;InitialCatalog=NEW—EMIGALL—TAS;UserID=tasconverter;pwd=********"locPayer="C:\TAS—Output\TaxPayers.txt"locAcc="C:\TAS_Output\ContractAccounts.txt"locRel="C:\TAS_Output\Relationships.txt"locCo="C:\TASOutput\ConctractObjects.txt'ob.CreateTaxPayersFile(db,locPayer)ob.CreateContractAccountsFile(db,locAcc)ob.CreateRelationshipsFile(db,locRel)ob.CreateContractObjectsFile(db,locCo)CatcheAsExceptionSystem.Diagnostics.EventLog.WriteEntiy("ScriptMain",e.ToStringO)FinallyEndTryDts.TaskResult=Dts.Results.SuccessEndSubEndClass附录E:SAP人口统计结构人口统计结构可以位于与l是取该文件相同的目录。文件:PARTNER_STRUCT.HTMCONTRACT—ACCOUNTS—STRUCT.HTMCONTRACT—OBJECTS—STRUCT.HTMRELATIONSHIPSSTRUCT.HTM<table>tableseeoriginaldocumentpage78</column></row><table>^T,jya.《I^^C^TJv丄',,-(lgytiqf^MfftlDB2:TFINAME^资,络'窗.>:趣',;%頃,《g瞎'l②-yj*;;3£幽toth^MiBHtAfmjatfgtwl'ffyrn^i翻,,,'謂y,隱謂a,nm-*X--.-、-::一".(\..》1、i..v"n际"〕r:、丰,二".1「々.一么;,43"......ts,v、、v々v79<image>imageseeoriginaldocumentpage80</image><table>tableseeoriginaldocumentpage81</column></row><table><image>imageseeoriginaldocumentpage82</image><image>imageseeoriginaldocumentpage83</image>FLATFILE:TAXPAYERRJsE孕Pwr^一畴—■…一—一.____P*UcncnK抓P"U《e2柳0-0鹏FREEDOMMIV£WSVAOO50103SrtM,YO貼CO,"tM加O-OOOODOtPHIWLAMEUS84<image>imageseeoriginaldocumentpage85</image>SAP:NAME,gi^veWf"afwf£抑狄豕&-gn^onm柳咏tem改&…效':「二」二二二m^'^使,迈屋!g-^M^,gjC鞋逸儸^.—",^"〉pg眺陶yPerson:700加191沐foleT狄Parmeir圆圆國鈔齢翻靡v'1》、;r^r-:^FTr,:......j脇a—hT,顾7'隐R^Sliwi國L謹■—*-!'袭.扭'沐'二:,".'b、.bw「晰,my啤gy加—沐—鄉t^c-'〕-鹏'■'、,"86SAP:ADDRESS:'^fefSS,瞩徵^i!^il^^^^ja^^g^:虚l^^^^^jllglpy^j^1^^i)逸"短'短:惑#^|输!3'(@'"'—:,DisplayPerson:7卿01&1兆roleT抓Partne二画Butinf,,P,柳&柳P似,,呢ST加VH2E^&0,B^JjUfctS^beg、I國画丄曙l國HJJlJJMUr4屬lL亂—丄亂rl顯f]「:,^V"r^5^i:Tr、U^M^H^iA'Sir"必—FfjBliep離5Bagfaw,',>luS,ytiC》"顿^:奶《)0^顿3,^535疏0恥節.粘"5!下lfi5:^s^^fflgf^^':■*■':」」...::'■':.■::-:二'-,丄-:.:服函0t幼1卿t,的,敏的fRKDOMDWVE'RESTOW賴卿XM)0的,噸,,^鲁雄",稀^:4''',線碟燕,':','______抓■l鑫g^^鑀^^^lt拔^^^^^安',;谶Em整'、"….、'、》、,^87<image>imageseeoriginaldocumentpage88</image>权利要求1.一种方法,包括(a)从旧有应用获得第一组件;(b)根据旧有元素生成中间状态元素,所述旧有元素包含在所述第一组件中;以及(c)将所述中间状态元素转换为目标元素,目标应用被配置为使用所述目标元素。2.如权利要求1的方法,其中所述第一组件包括规则组件,并且所述方法进一步包括(d)从所述旧有应用获得所述规则组件,所述旧有应用包含以第一软件语言指定的旧有源代码;(e)根据旧有规则生成中间状态表达,所述旧有规则包含在所述规则组件中;以及(f)将所述中间状态表达转换为目标规则,目标应用被配置为执行所述目标规则,所述目标应用包含以第二软件语言指定的目标源代码。3.如权利要求2的方法,进一步包括(g)从所述旧有应用获得数据组件;以及(h)根据旧有数据元素生成中间数据元素,所述旧有数据元素包含在所述数据组件中;以及(i)将所述中间数据元素转换为目标数据元素。4.如权利要求3的方法,进一步包括(j)在执行所述目标规则时,访问所述目标数据元素。5.如权利要求2的方法,其中所述第一软件语言和所述第二软件语言是不同的软件语言。6.如权利要求2的方法,其中所述第一软件语言和所述第二软件语言是相同的软件语言。7.如权利要求l的方法,进一步包括(d)从所述旧有应用获得对应关系组件;(e)根据旧有数据元素生成中间对应关系元素,所述旧有对应关系元素包含在所述对应关系组件中;以及(f)将所述中间对应关系元素转换为由所述目标应用使用的目标对应关系元素。8.如权利要求l的方法,进一步包括(d)从所述旧有应用获得接口组件;(e)根据旧有接口元素生成中间接口元素,所述旧有接口元素包含在所述接口组件中;以及口元素。9.如权利要求l所述的方法,进一步包括(d)从所述旧有应用获得报表组件;(e)根据旧有报表元素生成中间报表元素,所述旧有报表元素包含在所述报表组件中;以及表元素。10.如权利要求l的方法,进一步包括(d)在从所述旧有应用移植到所述目标应用时,对所述第一组件与其他组件进行同步。11.如权利要求l的方法,进一步包括(d)当在将所述旧有元素移植到所述目标元素时检测到错误的时候,调用错误恢复过程。12.如权利要求2的方法,其中所述第一软件语言由COBOL规范指定。13.如权利要求1的方法,其中所述旧有应用涉及税务管理系统。14.如权利要求2的方法,进一步包括(g)从所述规则组件提取词汇表项,所述词汇表项与所述旧有规则相关联;(h)将所述中间状态表达与所述词汇表项进行聚集,以形成所述目标规则;(i)将所述目标规则部署到所述目标应用。15.—种装置,包括存储器;以及处理器,其访问所述存储器以获得计算机可执行指令,并且执行所述计算机可执行指令,以完成(a)从旧有应用获得规则组件,所述旧有应用包含以第一软件语言指定的旧有源代码;(b)根据旧有规则生成中间状态表达,所述旧有规则包含在所述规则组件中;以及(c)将所述中间状态表达转换为目标规则,目标应用被配置为执行所述目标规则。16.如权利要求15的装置,所述处理器进一步执行所述计算机可执行指令,以完成(d)从所述旧有应用获得数据组件;(e)根据旧有数据元素生成中间数据元素,所述旧有数据元素包含在所述数据组件中;以及(f)将所述中间数据元素转换为目标数据元素,所述目标应用被配置为在执行所述目标规则时使用所述目标数据元素。17.如权利要求15的装置,所述处理器进一步执行所述计算机可执行指令,以完成(d)从所述规则组件提取词汇表项,所述词汇表项与所述旧有规则相关联;(e)将所述中间状态表达与所述词汇表项进行聚集;以及(f)将所述目标规则部署到所述目标应用。18.—种有形计算机可读介质,具有计算机可执行指令,用以执行(a)从旧有应用获得规则组件,所述旧有应用包含以第一软件语言指定的旧有源代码;(b)根据旧有规则生成中间状态表达,所述旧有规则包含在所述,见则组件中;以及(c)将所述中间状态表达转换为目标规则,目标应用被配置为执行所述目标规则。19.如权利要求18的有形计算机可读介质,进一步配置用于执行(d)从所述旧有应用获得数据组件;以及(e)根据旧有数据元素生成中间数据元素,所述旧有数据元素包含在所述数据组件中;以及(f)将所述中间数据元素转换为目标数据元素,所述目标应用被配置为使用所述目标数据元素。20.如权利要求18的有形计算机可读介质,进一步配置用于(d)从所述规则组件提取词汇表项,所述词汇表项与所述旧有规则相关联;(e)将所述中间状态表达与所述词汇表项进行聚集;以及(f)将所述目标规则部署到所述目标应用。21.—种转换器,包括规则提取器,其从旧有应用的规则组件获得旧有规则,并将所述旧有规则转换为中间状态表达;规则部署器,其将所述中间状态表达转换为目标规则,并且将所述目标规则部署在目标应用;数据提取器,其从所述旧有应用的数据组件获得旧有数据元素,并将所述旧有数据元素转换为中间数据元素;以及数据部署器,其将所述中间数据元素转换为目标数据元素,并且将所述目标数据元素部署在目标应用。22.如权利要求21的转换器,进一步包括词汇表提取器,其从所述规则组件提取词汇表项,所述词汇表项与所述旧有^见则相关联;聚集器,其将所述中间状态表达与所述词汇表项进行聚集,以形成所述目标^L则。23.如权利要求21的转换器,所述中间状态表达包含在XML文件中。全文摘要本发明实施方式的各方面提供一种装置、计算机介质和方法,用于从旧有应用获得规则组件,随后根据包含在规则模块中的旧有规则生成中间状态表达。将中间状态表达转换为目标规则,其被目标应用所执行。而且,从旧有应用获得数据组件,并且根据旧有数据元素生成中间数据元素。将中间数据元素转换为目标应用在执行目标规则时可以访问的目标数据元素。从规则组件提取词汇表项。将词汇表项与中间状态表达进行聚集以形成目标规则。随后将目标规则部署到目标应用。文档编号G06Q10/00GK101689259SQ200880023789公开日2010年3月31日申请日期2008年6月9日优先权日2007年6月8日发明者J·多伊勒申请人:埃森哲环球服务有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1