CN101763340B - 一种业务单据转换的方法、装置及系统 - Google Patents

一种业务单据转换的方法、装置及系统 Download PDF

Info

Publication number
CN101763340B
CN101763340B CN2009101892344A CN200910189234A CN101763340B CN 101763340 B CN101763340 B CN 101763340B CN 2009101892344 A CN2009101892344 A CN 2009101892344A CN 200910189234 A CN200910189234 A CN 200910189234A CN 101763340 B CN101763340 B CN 101763340B
Authority
CN
China
Prior art keywords
node
formula
syntactic structure
structure tree
reverse
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN2009101892344A
Other languages
English (en)
Other versions
CN101763340A (zh
Inventor
张俊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kingdee Software China Co Ltd
Original Assignee
Kingdee Software China Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Kingdee Software China Co Ltd filed Critical Kingdee Software China Co Ltd
Priority to CN2009101892344A priority Critical patent/CN101763340B/zh
Publication of CN101763340A publication Critical patent/CN101763340A/zh
Application granted granted Critical
Publication of CN101763340B publication Critical patent/CN101763340B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明适用于计算机领域,提供了一种业务单据转换的方法、装置及系统,所述方法包括下述步骤:获取预设的正向公式脚本,并对所述正向公式脚本进行语法分析,生成与所述正向公式脚本对应的正向公式语法结构树;根据二叉树的结构,对所述正向公式语法结构树进行逆向操作,生成逆向公式语法结构树;根据逆向公式语法结构树生成与正向公式脚本逻辑完全相反的逆向公式脚本;根据所述逆向公式脚本以及获取的源业务单据的数据,将源业务单据的相应字段转换为反写前的原始值。本发明中,可以不依赖具体的代码逻辑实现实际场景中各种特殊反写和反反写逻辑的需求,减少了公式脚本配置的工作量,并且具有很好的适应性。

Description

一种业务单据转换的方法、装置及系统
技术领域
本发明属于计算机领域,尤其涉及一种业务单据转换的方法、装置及系统。
背景技术
企业的各种业务之间存在一定的逻辑关系,而且这种逻辑关系在不同企业或企业的不同时期是不同的,体现在管理软件中就是一种业务单据的数据,是根据另一业务单据的数据得来的,比如收款一般都是根据开票的金额决定的;发票或收款的金额需要做账生成凭证等。
单据转换功能在ERP系统中已经开始发挥越来越重要的作用,在单据转换的过程中,由于单据转换产生的目标业务单据与源业务单据之间存在着一定的业务逻辑关系,如果目标业务单据被修改,则源业务单据对应的字段也要同步修改,通常称之为反写源单,这种反写源单往往不仅是简单的字段赋值操作,而是需要对目标业务单据的字段值进行一定的逻辑运算后,才能将结果反写到源单,具体可以通过生成公式脚本来配置相应的业务逻辑来制定相应的转换逻辑,然而,当目标业务单据被删除或作废时,则需要将源业务单据的状态恢复到反写前的状态,此时就需要对原来的正向公式脚本进行逆向运算操作,又被称为反反写操作,否则源业务单据的状态就可能会发生错误。
例如,销售订单可以生成销售出库单,假设销售出库单上定义了一个字段叫出库数量,销售订单上定义了一个字段叫已出库金额,初始状态下这两个字段值都是等于0,实际业务中一张销售订单可能生成多张销售出库单,即出库行为可能发生多次,每次出库其中一部分数量。
当用户修改并提交了某一张销售出库单的出库数量时,系统中销售订单上的已出库金额也需要同时被反写为出库数量*单价,以公式来描述以上反写逻辑为:
源单.已出库金额=源单.已出库金额+目标单.收货数量*目标单.单价
当删除此销售出库单时,源单的已出库金额字段值需要修改回来,即相当于执行以下公式:
源单.已出库金额=源单.已出库金额-目标单.收货数量*目标单.单价
由上述内容可以看出,对于同一个业务场景来说,反写源单逻辑在单据转换和单据删除时需要执行完全相反的两种操作。
现有技术,一种通过编写代码来实现这两种相反的业务逻辑,但这种方式,开发成本很高,并且不具备可维护性和可扩展性;另一种是写公式脚本来定义反写逻辑,但这意味着用户除了定义正常的正向公式脚本外,还需要为每种反写逻辑再定义一种完全相反的逆向公式脚本,由于实际的应用系统中单据种类很多,各种单据间的映射关系都不一样,正向公式脚本的内容及结构也各不相同,如果每一种公式都需要用户去分析逻辑关系,再定义一套逻辑完全相反的公式出来,一方面成倍地增加了用户设置公式脚本的工作量,另一方面需要由用户保证删除单据时的公式与定义的正常的正向公式脚本在逻辑上完全地相反,当公式脚本的内部逻辑关系比较复杂时,风险较大,系统稳定性差。
发明内容
本发明实施例的目的在于提供一种业务单据转换的方法,旨在解决在ERP应用系统中,业务单据自动转换过程中公式脚本的逆向运算的问题。
本发明实施例是这样实现的,一种业务单据转换的方法,所述方法包括下述步骤:
获取预设的正向公式脚本,并对所述正向公式脚本进行语法分析,生成与所述正向公式脚本对应的正向公式语法结构树;
创建一个空的逆向公式语法结构树,并创建一个根结点,该节点为一个赋值运算符,设置根节点为该逆向公式语法结构树的当前节点;
遍历正向公式语法结构树的所有节点,找到反写前的源单据字段的节点,将正向公式语法结构树上的反写前的源单据字段的节点移除,增加为逆向公式语法结构树当前节点的左侧子节点,设置反写前的源单据字段的节点的父节点为正向公式语法结构树的当前节点;
将正向公式语法结构树的当前节点的运算符修改为逻辑相反的运算符,然后连同子树一次复制到逆向公式语法结构树,增加为逆向公式语法结构树的当前节点下的右侧子树;
移除正向公式语法结构树的当前节点及其子树,设置其父节点为新的当前节点,并设置逆向公式语法结构树的反向运算符节点为新的当前节点;
A、继续处理正向公式语法结构树的当前节点,如果是运算符节点,则将正向公式语法结构树的当前节点的运算符修改为逻辑相反的运算符,然后连同子树一次复制到逆向公式语法结构树,增加为逆向公式语法结构树的当前节点下的左侧子节点;
B、移除正向公式语法结构树的当前节点及其子树,并设置其父节点为新的当前节点,并设置逆向公式语法结构树的反向运算符节点为新的当前节点;
重复步骤A和B,直到正向公式语法结构树的当前节点为根节点,在逆向公式语法结构树的当前节点下增加反写后的源单据字段节点作为左侧子节点;
根据逆向公式语法结构树生成与正向公式脚本逻辑完全相反的逆向公式脚本;
根据所述逆向公式脚本以及获取的源业务单据的数据,将源业务单据的相应字段转换为反写前的原始值。
本发明实施例的另一目的在于提供一种业务单据转换装置,所述装置包括:
脚本执行引擎,用于获取预设的正向公式脚本,并对所述正向公式脚本进行语法分析,生成与所述正向公式脚本对应的正向公式语法结构树;
逆向公式生成器,用于创建一个空的逆向公式语法结构树,并创建一个根结点,该节点为一个赋值运算符,设置根节点为该逆向公式语法结构树的当前节点;
遍历正向公式语法结构树的所有节点,找到反写前的源单据字段的节点,将正向公式语法结构树上的反写前的源单据字段的节点移除,增加为逆向公式语法结构树当前节点的左侧子节点,设置反写前的源单据字段的节点的父节点为正向公式语法结构树的当前节点;
将正向公式语法结构树的当前节点的运算符修改为逻辑相反的运算符,然后连同子树一次复制到逆向公式语法结构树,增加为逆向公式语法结构树的当前节点下的右侧子树;
移除正向公式语法结构树的当前节点及其子树,设置其父节点为新的当前节点,并设置逆向公式语法结构树的反向运算符节点为新的当前节点;
A、继续处理正向公式语法结构树的当前节点,如果是运算符节点,则将正向公式语法结构树的当前节点的运算符修改为逻辑相反的运算符,然后连同子树一次复制到逆向公式语法结构树,增加为逆向公式语法结构树的当前节点下的左侧子节点;
B、移除正向公式语法结构树的当前节点及其子树,并设置其父节点为新的当前节点,并设置逆向公式语法结构树的反向运算符节点为新的当前节点;
重复A和B,直到正向公式语法结构树的当前节点为根节点,在逆向公式语法结构树的当前节点下增加反写后的源单据字段节点作为左侧子节点;
逆向公式脚本生成单元,用于根据逆向公式语法结构树生成与正向公式脚本逻辑完全相反的逆向公式脚本;
数据转换单元,用于根据所述逆向公式脚本以及获取的源业务单据的数据,将源业务单据的相应字段转换为反写前的原始值。
本发明实施例的另一目的在于提供一种业务单据转换的系统,包括:客户端和业务单据存储端,所述系统还包括如上所述的业务单据转换装置。
本发明实施例,预先生成用于业务单据之间转换的正向公式脚本,根据该正向公式脚本生成逆向公式脚本,调用逆向公式脚本,将源业务单据的相应字段转换为反写前的原始值,从而不依赖具体的代码逻辑实现实际场景中各种特殊反写和反反写逻辑的需求,减少了公式脚本配置的工作量,并且具有很好的适应性。
附图说明
图1是本发明实施例提供的业务单据转换方法的实现流程图;
图2是本发明实施例提供的业务单据转换系统的结构示意图;
图3是本发明实施例提供的生成的正向公式语法结构树的示例图;
图4是本发明实施例提供的生成的逆向公式语法结构树的示意图;
图5是本发明实施例提供的生成的逆向公式语法结构树的示意图;
图6是本发明实施例提供的生成的逆向公式语法结构树的示意图;
图7是本发明实施例提供的利用如图2所示的单据转换系统实现业务单据的转换的方法的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
在本发明实施例中,获取预设的正向公式脚本,并将其转换成逻辑完全相反的逆向公式脚本;根据该逆向公式脚本以及获取的源业务单据的数据,将源业务单据的相应字段转换为反写前的原始值,从而不依赖具体的代码逻辑实现实际场景中各种特殊反写和反反写逻辑的需求,减少了公式脚本配置的工作量,并且具有很好的适应性。
本发明提供了一种业务单据转换的方法、装置及系统:
所述方法包括下述步骤:
获取预设的正向公式脚本,并对所述正向公式脚本进行语法分析,生成与所述正向公式脚本对应的正向公式语法结构树;
根据二叉树的结构,对所述正向公式语法结构树进行逆向操作,生成逆向公式语法结构树;
根据逆向公式语法结构树生成与正向公式脚本逻辑完全相反的逆向公式脚本;
根据所述逆向公式脚本以及获取的源业务单据的数据,将源业务单据的相应字段转换为反写前的原始值。
所述转换装置包括:
脚本执行引擎,用于获取预设的正向公式脚本,并对所述正向公式脚本进行语法分析,生成与所述正向公式脚本对应的正向公式语法结构树;
逆向公式生成器,用于根据二叉树的结构,对所述正向公式语法结构树语法结构树进行逆向操作,生成逆向公式语法结构树;
逆向公式脚本生成单元,用于根据逆向公式语法结构树生成与正向公式脚本逻辑完全相反的逆向公式脚本;
数据转换单元,用于根据所述逆向公式脚本以及获取的源业务单据的数据,将源业务单据的相应字段转换为反写前的原始值。
所述业务单据转换的系统,包括:客户端和业务单据存储端,所述系统还包括如上所述的转换装置。
实施例一:
图1是本发明实施例提供的业务单据转换方法的实现流程,详述如下:
在步骤S101中,获取预设的正向公式脚本,并对正向公式脚本进行语法分析,生成与正向公式脚本对应的正向公式语法结构树。
在步骤S102中,根据二叉树的结构,对正向公式语法结构树进行逆向操作,生成逆向公式语法结构树。
在步骤S103中,根据逆向公式语法结构树生成与正向公式脚本逻辑完全相反的逆向公式脚本。
在步骤S104中,根据逆向公式脚本以及获取的源业务单据的数据,将源业务单据的相应字段转换为反写前的原始值。
实施例二:
图2为本发明实施例提供的业务单据转换系统的结构,为了便于说明,仅示出了本发明实施例相关的部分。该业务单据转换系统可以作为独立的挂件集成到ERP系统或者ERP系统的应用系统中。该业务单据转换系统包括:单据转换平台11、正向公式脚本生成装置12、转换装置13和业务单据存储端14。
其中,正向公式脚本生成装置12和转换装置13可以是内置于单据转换平台11中的软件单元、硬件单元或者软硬件相结合的单元,或者作为独立的挂件集成到单据转换平台11中,以实现从业务单据存储端14调用目标业务单据的数据,根据目标业务单据的数据的变化更新源业务单据,实现业务单据之间的转换。
其中,转换装置13包括:脚本执行引擎131、逆向公式生成器132、逆向公式脚本生成单元133、数据转换单元134。
脚本执行引擎131获取预设的正向公式脚本,并对所述正向公式脚本进行语法分析,生成与所述正向公式脚本对应的正向公式语法结构树。
逆向公式生成器132根据二叉树的结构,对正向公式语法结构树语法结构树进行逆向操作,生成逆向公式语法结构树。
逆向公式脚本生成单元133根据逆向公式语法结构树生成与正向公式脚本逻辑完全相反的逆向公式脚本。
数据转换单元134根据逆向公式脚本以及获取的源业务单据的数据,将源业务单据的相应字段转换为反写前的原始值。
下面以这些装置分别是单独的部件为例来说明,整个系统的工作过程如下所述:单据转换平台11接收用户输入的选择待转换的业务单据的指令,根据所述指令选择要进行转换的目标业务单据和源业务单据;正向公式脚本生成装置12根据单据转换平台11所选择的目标业务单据字段和源业务单据字段生成单据转换的正向公式脚本存储并返回正向公式脚本已经生成的消息至单据转换平台11;单据转换平台11接收到该消息后,向正向公式脚本生成装置13获取存储于其中的正向公式脚本,再调用转换装置13将正向公式脚本转换成逻辑完全相反的逆向公式脚本并存储,其中,转换装置13的脚本执行引擎131先对单据转换平台11所获取的单据转换正向公式脚本进行转换,生成正向公式语法结构树,再通过逆向公式生成器132根据二叉树的结构,对脚本执行引擎131生成的正向公式语法结构树进行逆向操作,生成与正向公式脚本逻辑完全相反的逆向公式脚本。此后,当需要将目标业务单据的数据的变化更新到源业务单据中时,单据转换平台11可以获取正向公式脚本生成装置12中存储的单据转换的正向公式脚本,同时向业务单据存储端14获取业务单据的数据,再调用转换装置13,由转换装置13根据单据转换平台11获取的正向公式脚本以及业务单据的数据执行实际的单据转换,最后发送单据转换后的执行结果至单据转换平台11;当需要删除目标业务单据时,单据转换平台11获取转换装置13生成的单据转换逆向公式脚本,同时向业务单据存储端14获取业务单据的数据,再调用转换装置13,由转换装置13根据单据转换平台11获取的逆向公式脚本以及业务单据的数据执行实际的单据转换,将源业务单据的相应字段转换为反写前的原始值,最后发送单据转换后的执行结果至单据转换平台11。
其中,为了实现将正向公式脚本生成装置12生成的公式通过转换装置13自动生成逆向公式脚本,需要预先做一些约定:
1.使用SourceFiledBefore和SourceFiledAfter分别代表反写前/后的源单字段;
2.公式脚本内容必须为以下格式:
SourceFiledAfter=公式表达式;
3.公式表达式中必须出现且仅出现一次SourceFiledBefore;
4.公式脚本中可以使用括号改变计算优先级,并支持以下逆向操作的运算符:
运算符           逆向运算符
+:加            -:减
-:减            +:加
*:乘            /:除
/:除            *:乘
在这里只考虑需要多次反写源业务单据的情况,这种场景下由于多次反写时需要累加,公式内容中必定会出现待反写源业务单据的字段名称,同时如果公式中出现多个待反写源业务单据的字段变量,将导致反反写逻辑关系非常地复杂,大多数情况下不允许配置这么复杂的反写逻辑,因此,在本发明实施例中,只讨论公式中只出现一次待反写源业务单据字段变量名称的场景,重点描述实现逆向执行公式的实现方法。
典型的正向公式脚本如下:
SourceFiledAfter=SourceFiledBefore+Source.price*Dest.qty
上述公式的逻辑为每次在源业务单据字段SourceFiledBefore的当前值基础上,加上源单.单价*目标单.数量,这样每次目标业务单据执行反写后,源业务单据的对应字段值SourceFiledAfter就不断增加。
反过来,当删除目标业务单据后,对应的源业务单据的字段需要把当前业务单据所增加的那一部分减回来,此时不能影响其它目标业务单据所增加的那部分值,因此逆向执行公式可理解为就是要把执行公式前的SourceFiledBefore字段值算出来,只需要实现将普通的正向公式脚本生成逆向公式脚本,然后由转换装置14直接执行逆向公式脚本即可。
具体的转换装置13将正向公式脚本生成装置12生成的正向公式脚本转换成逆向公式脚本的步骤是:
首先,转换装置13的脚本执行引擎131对单据转换平台11所获取的单据转换正向公式脚本进行转换,生成正向公式语法结构树,脚本执行引擎131解析正向公式脚本,并据此建立相应的正向公式语法结构树,简称为A树,该树有且仅有一个根节点,树的每个叶子节点为具体的字段值,而非叶子节点则为运算符,例如,对于反写逻辑:源单.待反写字段=(源单.待反写字段X(目标单.字段A+目标单.字段B))一目标单.C X(源单.D+源单.E)×17%,替换预定义公式变量后,实际的正向公式脚本可以表示为:
SourceFiledAfter=(SourceFiledBefore X(目标单.字段A+目标单.字段B))-目标单.C X(源单.D+源单.E)×17%,对该公式脚本,通过脚本执行引擎131生成的正向语法结构树如图3所示。
其次,转换装置13的逆向公式生成器132根据二叉树的结构对脚本执行引擎131生成的公式语法结构树进行逆向操作,生成逻辑完全相反的逆向公式脚本。具体的步骤是:
1.创建一个空的逆向公式语法结构树,简称为B树,并创建一个根结点,该节点为一个赋值运算符,设置根节点为B树的当前节点,如图4所示。
2.遍历A树的所有节点,找到SourceFiledBefore节点,将A树上的SourceFiledBefore节点移除,增加为B树当前节点的左侧子节点,设置SourceFiledBefore节点的父节点为A树的当前节点,根据前面的约定,SourceFiledBefore必须出现且只能出现一次,因此一定可以找到。
3.A树当前节点是父节点,因此一定是一个运算符节点,将A树当前节点的运算符修改为相反的运算符,然后连同子树一次复制到B树,增加为B树当前节点下的右侧子树,得到的B树的结构,如图5所示。
4.移除A树当前节点及其子树,并设置其父节点为A树新的当前节点,并设置B树的反向运算符节点为B树新的当前节点。
5.继续处理A树的当前节点,如果是运算符节点,则将A树当前节点的运算符修改为相反的运算符,然后连同子树一次复制到B树,增加为B树当前节点下的左侧子节点。
6.移除A树当前节点及其子树,并设置其父节点为A树新的当前节点,并设置B树的反向运算符节点为B树新的当前节点。
7.重复执行步骤5至6,直到A树的当前节点为根节点,根据前面的约定,根节点一定是运算符节点且左侧子节点一定是SourceFiledAfter,将A树节点全部移除,在B树当前节点下增加SourceFiledAfter节点作为左侧子节点,得到的B树的结构,如图6所示。
8.逆向公式语法结构树生成完毕,按照优先级遍历该逆向公式语法结构树,生成逆向公式脚本。
本发明实施例提供的单据转换系统使用正向正向公式脚本来描述业务单据间各种复杂的反写映射关系,再根据描述反写映射关系的正向公式脚本自动生成逆向公式脚本,来描述业务单据间各种复杂的反反写映射关系,不依赖具体的代码逻辑实现,解决了实际场景中各种特殊反写和反反写逻辑的需求,减少了公式脚本配置的工作量,并且具有很好的适应性。
实施例三:
图7是本发明实施例提供的采用如图2所示的业务单据转换系统实现单据转换的方法的流程,详述如下:
1、单据转换平台根接收到的单据转换请求指令,选择要进行转换的目标业务单据和源业务单据。
作为本发明的一个实施例,单据转换平台接收用户输入的选择待转换业务单据的指令,选择源业务单据和目标业务单据,选择好后,即可确定目标业务单据和源业务单据字段之间的逻辑关系。
2、正向公式脚本生成装置根据选择的目标业务单据字段和源业务单据字段生成单据转换的正向公式脚本并存储。
正向公式脚本生成装置根据目标业务单据字段和源业务单据字段生成单据转换的正向公式脚本,单据转换公式内容为按类JAVA语法定义一个计算表达式,支持各种运算符和括号等,例如:
为了便于阅读,这里我们首先作一些约定:
SourceFiledBefore:代表反写前的源业务单据的字段
SourceFiledAfter:代表反写后的源业务单据的字段
典型的正向公式脚本如下:
SourceFiledAfter=SourceFiledBefore+Source.price*Dest.qty
具体进行业务单据之间的转换时,计算出结果SourceFiledAfter并赋值给预定的源业务单据的属性字段即可。具体情况如上所述,在此不再赘述。
3、单据转换平台获取正向公式脚本生成装置存储的单据转换的正向公式脚本。
4、转换装置获取单据转换平台从正向公式脚本生成装置读取的正向公式脚本。
5、转换装置根据正向公式脚本生成单据转换的逆向公式脚本。
作为本发明的一个实施例,单据转换平台首先调用转换装置的脚本执行引擎对获取的正向公式脚本进行语法解析,生成正向公式语法结构树,然后再调用逆向公式生成器,根据二叉树的结构,对生成的正向公式语法结构树进行逆向操作,生成逻辑完全相反的逆向公式脚本。具体的步骤是:
1).创建一个空的逆向公式语法结构二叉树,简称为B树,并创建一个根结点,该节点为一个赋值运算符,设置根节点为B树的当前节点,如图3所示。
2).遍历A树的所有节点,找到SourceFiledBefore节点,将A树上的SourceFiledBefore节点移除,增加为B树当前节点的左侧子节点,设置SourceFiledBefore节点的父节点为A树的当前节点,根据前面的约定,SourceFiledBefore必须出现且只能出现一次,因此一定可以找到。
3).A树当前节点是父节点,因此一定是一个运算符节点,将A树当前节点的运算符修改为相反的运算符,然后连同子树一次复制到B树,增加为B树当前节点下的右侧子树,如图4所示。
4).移除A树当前节点及其子树,并设置其父节点为A树新的当前节点,并设置B树的反向运算符节点为B树新的当前节点。
5).继续处理A树的当前节点,如果是运算符节点,则将A树当前节点的运算符修改为相反的运算符,然后连同子树一次复制到B树,增加为B树当前节点下的左侧子节点。
6).移除A树当前节点及其子树,并设置其父节点为A树新的当前节点,并设置B树的反向运算符节点为B树新的当前节点,如图5所示。
7).重复执行步骤5)至6),直到A树的当前节点为根节点,根据前面的约定,根节点一定是运算符节点且左侧子节点一定是SourceFiledAfter,将A树节点全部移除,在B树当前节点下增加SourceFiledAfter节点作为左侧子节点,如图6所示,其中,生成逆向公式脚本的完整示例图见图7。
8).逆向公式语法结构树生成完毕,按照优先级遍历该逆向公式语法结构树,输出逆向公式脚本。
6、单据转换平台获取转换装置生成的单据转换逆向公式脚本。
7、单据转换平台获取业务单据存储端存储的业务单据的数据。
8、当接收到所述单据转换平台发送的执行单据反写的指令时,转换装置根据所述单据转换平台获取的单据转换的正向公式脚本以及业务单据的数据执行单据转换。
9、当接收到所述单据转换平台发送的删除目标业务单据的指令时,转换装置根据所述单据转换平台获取的单据转换的逆向公式脚本以及源业务单据的数据,将源业务单据的相应字段转换为反写前的原始值。
10、转换装置发送单据转换的执行结果至单据转换平台。
在本发明实施例中,获取预设的正向公式脚本,并将其转换成逻辑完全相反的逆向公式脚本;根据该逆向公式脚本以及获取的源业务单据的数据,将源业务单据的相应字段转换为反写前的原始值,从而不依赖具体的代码逻辑实现实际场景中各种特殊反写和反反写逻辑的需求,减少了公式脚本配置的工作量,并且具有很好的适应性;此外,单据转换的逆向公式脚本的生成支持运行期动态生成,不需要修改代码,公式内容可以由熟悉业务场景的业务人员根据需要来添加/修改,提高了系统的可扩展性;另外,通过动态转换正向公式语法结构树的方式来生成逆向公式脚本,结构性强,便于将来扩展更多的语法支持和特性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (6)

1.一种业务单据的转换方法,其特征在于,所述方法包括下述步骤:
获取预设的正向公式脚本,并对所述正向公式脚本进行语法分析,生成与所述正向公式脚本对应的正向公式语法结构树;
创建一个空的逆向公式语法结构树,并创建一个根结点,该节点为一个赋值运算符,设置根节点为该逆向公式语法结构树的当前节点;
遍历正向公式语法结构树的所有节点,找到反写前的源单据字段的节点,将正向公式语法结构树上的反写前的源单据字段的节点移除,增加为逆向公式语法结构树当前节点的左侧子节点,设置反写前的源单据字段的节点的父节点为正向公式语法结构树的当前节点;
将正向公式语法结构树的当前节点的运算符修改为逻辑相反的运算符,然后连同子树一次复制到逆向公式语法结构树,增加为逆向公式语法结构树的当前节点下的右侧子树;
移除正向公式语法结构树的当前节点及其子树,设置其父节点为新的当前节点,并设置逆向公式语法结构树的反向运算符节点为新的当前节点;
A、继续处理正向公式语法结构树的当前节点,如果是运算符节点,则将正向公式语法结构树的当前节点的运算符修改为逻辑相反的运算符,然后连同子树一次复制到逆向公式语法结构树,增加为逆向公式语法结构树的当前节点下的左侧子节点;
B、移除正向公式语法结构树的当前节点及其子树,并设置其父节点为新的当前节点,并设置逆向公式语法结构树的反向运算符节点为新的当前节点;
重复步骤A和B,直到正向公式语法结构树的当前节点为根节点,在逆向公式语法结构树的当前节点下增加反写后的源单据字段节点作为左侧子节点;
根据逆向公式语法结构树生成与正向公式脚本逻辑完全相反的逆向公式脚本;
根据所述逆向公式脚本以及获取的源业务单据的数据,将源业务单据的相应字段转换为反写前的原始值。
2.如权利要求1所述的方法,其特征在于,所述根据逆向公式语法结构树生成与正向公式脚本逻辑完全相反的逆向公式脚本的步骤具体为:
按照优先级遍历逆向公式语法结构树,生成与正向公式脚本逻辑完全相反的逆向公式脚本。
3.一种业务单据转换装置,其特征在于,所述装置包括:
脚本执行引擎,用于获取预设的正向公式脚本,并对所述正向公式脚本进行语法分析,生成与所述正向公式脚本对应的正向公式语法结构树;
逆向公式生成器,用于创建一个空的逆向公式语法结构树,并创建一个根结点,该节点为一个赋值运算符,设置根节点为该逆向公式语法结构树的当前节点;
遍历正向公式语法结构树的所有节点,找到反写前的源单据字段的节点,将正向公式语法结构树上的反写前的源单据字段的节点移除,增加为逆向公式语法结构树当前节点的左侧子节点,设置反写前的源单据字段的节点的父节点为正向公式语法结构树的当前节点;
将正向公式语法结构树的当前节点的运算符修改为逻辑相反的运算符,然后连同子树一次复制到逆向公式语法结构树,增加为逆向公式语法结构树的当前节点下的右侧子树;
移除正向公式语法结构树的当前节点及其子树,设置其父节点为新的当前节点,并设置逆向公式语法结构树的反向运算符节点为新的当前节点;
A、继续处理正向公式语法结构树的当前节点,如果是运算符节点,则将正向公式语法结构树的当前节点的运算符修改为逻辑相反的运算符,然后连同子树一次复制到逆向公式语法结构树,增加为逆向公式语法结构树的当前节点下的左侧子节点;
B、移除正向公式语法结构树的当前节点及其子树,并设置其父节点为新的当前节点,并设置逆向公式语法结构树的反向运算符节点为新的当前节点;
重复A和B,直到正向公式语法结构树的当前节点为根节点,在逆向公式语法结构树的当前节点下增加反写后的源单据字段节点作为左侧子节点;
逆向公式脚本生成单元,用于根据逆向公式语法结构树生成与正向公式脚本逻辑完全相反的逆向公式脚本;
数据转换单元,用于根据所述逆向公式脚本以及获取的源业务单据的数据,将源业务单据的相应字段转换为反写前的原始值。
4.一种业务单据转换的系统,包括:客户端和业务单据存储端,其特征在于,所述系统还包括如权利要求3所述的业务单据转换装置。
5.如权利要求4所述的系统,其特征在于,所述系统还包括:
正向公式脚本生成装置,用于根据预先选择的目标业务单据字段和源业务单据字段生成单据转换的正向公式脚本。
6.如权利要求4所述的系统,其特征在于,所述系统还包括:
单据转换平台,用于根据客户端发送的生成单据转换公式的请求指令,选择目标业务单据字段和源业务单据字段。
CN2009101892344A 2009-12-22 2009-12-22 一种业务单据转换的方法、装置及系统 Active CN101763340B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2009101892344A CN101763340B (zh) 2009-12-22 2009-12-22 一种业务单据转换的方法、装置及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2009101892344A CN101763340B (zh) 2009-12-22 2009-12-22 一种业务单据转换的方法、装置及系统

Publications (2)

Publication Number Publication Date
CN101763340A CN101763340A (zh) 2010-06-30
CN101763340B true CN101763340B (zh) 2012-06-27

Family

ID=42494505

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009101892344A Active CN101763340B (zh) 2009-12-22 2009-12-22 一种业务单据转换的方法、装置及系统

Country Status (1)

Country Link
CN (1) CN101763340B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102541520B (zh) * 2010-12-20 2014-10-01 金蝶软件(中国)有限公司 表格数据关联反写的方法及装置
CN102521411B (zh) * 2011-12-28 2013-09-18 畅捷通信息技术股份有限公司 公式及公式数据处理装置和公式及公式数据处理方法
CN103778154B (zh) * 2012-10-24 2017-08-08 金蝶软件(中国)有限公司 表单属性的反写方法及装置
CN103164393B (zh) * 2013-04-12 2016-03-09 中国农业银行股份有限公司 报表公式处理方法和系统
CN107465757B (zh) * 2017-08-24 2021-04-02 金蝶软件(中国)有限公司 一种单据的处理方法以及相关业务系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1381945B1 (en) * 2001-04-23 2007-06-13 Electronic Data Systems Corporation Method and system for reporting xml data based on precomputed context and a document object model
CN101419552A (zh) * 2008-12-03 2009-04-29 浪潮集团山东通用软件有限公司 一种通用业务数据采集表单的定义与生成方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1381945B1 (en) * 2001-04-23 2007-06-13 Electronic Data Systems Corporation Method and system for reporting xml data based on precomputed context and a document object model
CN101419552A (zh) * 2008-12-03 2009-04-29 浪潮集团山东通用软件有限公司 一种通用业务数据采集表单的定义与生成方法

Also Published As

Publication number Publication date
CN101763340A (zh) 2010-06-30

Similar Documents

Publication Publication Date Title
CN104216912B (zh) 一种无侵入式的业务表单工作流化的实现方法与装置
CN100424637C (zh) 用于构建无线应用程序的系统和方法
US7971145B2 (en) Systems and methods for adapting service interface behaviors
US7127702B2 (en) Application development system and method
CN101763340B (zh) 一种业务单据转换的方法、装置及系统
CN101436148B (zh) 集成客户端及进行桌面应用与网络应用交互的方法
CN104484216A (zh) 服务接口文档和在线测试工具生成方法、装置
CN101763339A (zh) 一种业务单据转换的方法、装置及系统
CN100561476C (zh) 一种基于asn类型对象的代码生成方法
CN100498787C (zh) 报表生成方法、设备及系统
US7904880B2 (en) Generating and binding web services to application components
CN102158516A (zh) 服务组合实现方法及系统、服务组合编译方法及编译器
CN103092602A (zh) 软件开发套件以及终端装置
CN100511140C (zh) 构件化软件系统实现脚本语言调用多输出参数接口的方法
CN102090039B (zh) 执行数据中间处理的方法、数据中间处理设备和信息系统
EP1506478B1 (en) Exchange infrastructure system and method
CN103646015B (zh) 发送、接收以及传输xml报文的方法和系统
CN102999329A (zh) 基于可扩展标记语言映射配置的活动目录接口开发方法
US9513878B2 (en) Component integration by distribution of schema definition on heterogenous platforms
CN100414509C (zh) 数据处理方法和数据处理装置
KR100377189B1 (ko) 워크플로우 시스템과 어플리케이션간의 데이터 교환시스템 및 그 방법
Brogi et al. Service adaptation through trace inspection
CN106354493A (zh) 一种解决传统软件开发痛点的开发模式的实现方法
US7716653B2 (en) Configurable importers and resource writers for converting data into another format
CN106484375A (zh) 一种指令块加载方法、软交换设备及系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant