关于BOTP集成的FAQ

更新时间:2024-04-22 07:33:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

关于BOTP集成的FAQ

1. 扩展属性配置

BOTP规则定义过程中涉及到较多的扩展属性,例如目标单据上的哪些属性可以被映射,哪些属性可以作为分组属性,这些都是通过扩展属性来配置的(从业务角度出发,不能将目标单据的所有属性作为转换属性或者分组属性)。下面详细解释一下BOTP中用到的几个主要扩展属性: 扩展属性名称 isForMapping 性 是否分组属性,目标单据/单据分录实体中需要参与BOTP分组合并isForGrouping 的属性,只有isForMapping为true的属性,才可以将该属性设置为true isForMatching isForWrittenBack 是否核销属性,目标单据/单据分录实体中需要参与BOTP核销的属性,只有isForMapping为true的属性,才可以将该属性设置为true 是否反写属性,源单据/单据分录实体中需要参与BOTP反写的属性 描述 是否映射属性,目标单据/单据分录实体中需要参与BOTP映射的属 其它BOTP可能用到的扩展属性: 扩展属性名称 listUI editUI defaultF7Query 描述 单据序时簿界面类名,BOTP在单据联查、单据转换时需要使用 单据编辑界面类名,BOTP在单据转换后显示单据编辑界面时需要使用 拉式生成时显示源单据F7需要使用

可以定义botp规则的单据应满足一下条件: 1.从CoreBillBase继承;

2.包名必须注册在子系统的xml中;

2. 单据转换后部分连接属性不能正常显示

这通常是由于业务系统传递给BOTP的源单据本身的连接属性不全导致的,例如源单据getValue时没有指定相应的selector,则默认仅会获取连接属性的ID,这样转换到目标单据后,目标单据的相应属性也就是一个只包含ID的值对象,导致连接属性显示为空(通常是用name属性作为显示属性的)。要解决这个问题,需要源单据序时簿界面重载getBOTPSelectors()方法,使其返回的selectors包含转换过程中需要用到的源单据属性,以确保转换后的连接属性能够正常显示。

在转换过程中,只有有一个属性没有取到,就会重新从数据库里再取一遍,这时就会丢掉之前getBOTPSelectors()已定义的属性,因此该方法一定要包含规则定义中涉及到的所有源单据属性。同是也要注意不要添加不需要的属性,轻者影响性能,重者会出现“无法创建比允许的最大值还大的工作表行”的异常。

3. 单据转换(下推生成)时分组属性不能正常显示

问题同上,是由于业务系统传递给BOTP的源单据本身的连接属性不全导致的,例如以公司属性作为分组属性,但是源单据的公司属性只有ID,没有Name,则分组属性不能正常显示。解决方法同上,即源单据序时簿界面重载getBOTPSelectors()方法,使其返回的selectors包含转换过程中需要用到的源单据属性。

对于源单据的主键和目标单据分组属性的映射属性,要求在源单据实体上的”

defaultF7Query”有对应的查询字段,而且查询字段名与listUI中绑定的query中查询字段名称相同;此外,对于目标单据分组属性的源单据映射属性,如果为连接属性,则要求连接属性对应实体上定义扩展属性” defaultDisplayField”的值,如果没有定义,默认为name属性;

根据CoreBillListUI中isNeedShowBOTPRule()方法的返回值,决定用户是否可以选择转换规则,默认为false;业务系统可以重载; 4. 拉式生成

拉式生成时供选择的f7上绑定的query为源单据扩展属性” defaultF7Query”的query,另会根据源单据实体上” listUI”类的getFilterInfo方法设置默认的过滤条件;

在拉式生成时可重载CoreBillEditUI中方法isNeedShowBOTPRule()用以允许用户选择合适的转换规则;

5. “查询对象与表列名不对应!”错误

该种类型问题,一般是由于实体上defaultF7Query扩展属性对应的Query对象中是否没有包含所有分组属性(分组属性可以查规则定义)。例如,一般单据都会以公司作为分组条件,则要求单据Query上包含company.id属性。

6. 单据转换平台的固定反写逻辑

某些单据有一些相对固定的逻辑,例如借款单分录已报销金额=借款金额,则该分录的是否关闭标志置为true。如果该逻辑在单据的保存的时候都适用的话,则该逻辑建议写在单据本身的update方法里,单据转换后的反写过程中会间接调用单据本身的update方法来保存源单据,如果该逻辑仅适用于反写,则该逻辑建议写在单据本身的reverseSave方法中,该方法的默认实现为调用update,可以自行重载先调用反写逻辑,再调用super.reverseSave()。

7. 动态会计平台的固定反写逻辑

动态会计平台不支持反写规则定义,但是其包含如下反写逻辑:

a.)大部分需要转换成凭证的单据需要定义fiVouchered属性(bool类型),以标示单据是否生成凭证。对于该属性为true的单据,动态会计平台不允许其再次生成凭证。对于该属性为false的单据,动态会计平台在转换生成凭证后会将该属性设置为true。

b.)对于有其它固定反写逻辑的单据(例如反写生成的凭证ID等),要求单据的值对象实现IDAPBill接口,在其中的setVoucher(VoucherInfo voucher)方法中实现自己的反写逻辑。

c.)其他反写逻辑可以通过重载reverseSave方法实现,在botp转换后会调用该方法;

8. 关于自定义公式支持

对于某些不能通过直接映射定义的转换逻辑,虽然通过脚本也能实现,但是由于写脚本的方式对于业务用户而言较难接受,所以可以通过将这些转换逻辑封装成自定义公式,然后业务用户可以在公式平台适用该公式的方式来简化规则定义。有关自定义公式的定义,可以参见BaseFormulaFunctions类或者BotpFormulaFunctions类。然后在具体需要使用该自定义公式的目标单据上配置扩展属性billFormulaClass,以便BOTP在规则定义时能将自定义公式的实现类注册到公式平台中。

具体约束为:

1. 注册函数应注册在目标单据的billFormulaClass扩展属性上; 2. 注册函数名称以”__BOT”开头;

3. 方法声明第一个参数为Context类型(因为在服务端调用),在使用公式平台时直接略过

第一个参数;

4. 该类实现IFormulaFunctions接口;

本文来源:https://www.bwwdw.com/article/z4wp.html

Top