NC65开发遇到的问题

NC开发初步准备
安装orcle数据库
nc安装包
nc项目的配置文件配置数据源、服务器、安全日志等配置 home\bin\sysConfig.bat
使用超级管理登录系统初步登录nc首先先创建自己的账套
登录自己的账套创建集团管理员-创建人员-分配角色-分配权限

NC安装开发工具
uap-stadio 配置需要的服务器地址
新建组件项目-新建项目 在run的项目中配置-Dorg.owasp.esapi.resources=F:\yonyou\home\ierp\bin\esapi -Duap.hotwebs=lfw,portal,fs,uapws
需要发布webservice的时候,接口代码写在模块下的public端,实现类写在private端。使用自带插件WsTool发布webservice生成wsdl文件,手动添加upm文件到META-INF下,添加自己的component。
重启项目。

调试代码的html文件存放的位置例子:C:\Users\John\AppData\Local\UClient\apps\1d0c6632-a016-3f22-b986-eaf62ad1f859\nc_client_home\NCCACHE\SPR_部门-保存20200513105438.html

NC问题总结
1 生成NC单据接口调用说明

2 NC生成接口事件监听,调用第三方接口传输数据

(1) 实现IBackgroundWorkPlugin接口 重写函数 再 开发配置–插件管理–业务插件注册 --后台类型任务注册 填写实现类路径

(2)动态建模平台–开发配置–插件管理–业务插件注册 – 选择监听的业务模块 配置实现类路径

3 集成平台 必须买
需要配置账套编码和集团编码才可以调用接口或者手动执行 日志输入指定的sql语句
1 应用集成平台-外部交换平台
外部系统信息配置—pfxx-demodata—
2检验文件管理
3 基础数据对照表 可以设置外部系统 设置基础数据对照关系
4 交换日志平台 所有调用NC接口日志数据

## E:\home\pfxx 外部交换平台的配置文件

Billconfiginfo
模块每个接口对应的入口类

Billdefine
翻译的文件(前台配置的规则) 效验 打补丁的时候配置好

Businessprocessor
入口类 文件

Demodata
样例文件
对应文档接口的xml里面必要参数说明*

billtype属性,这个属性值决定了这个XML文件(文档)中所有单据的单据类型,外部交换平台所有的处理都是围绕单据类型的。(对应nc系统中的那个单据类型)

sender属性,这个属性值设置的是(外系统编码),指定的是数据的来源系统,即习惯上所说的发送方

account属性,这个属性指定要将数据导入至NC系统的哪个帐套。

receiver属性,这个属性指定数据的接收方。接收方又是有一定格式的,可以将这个格式用一个正则表达式表示为:
接收方 =(公司编码|公司主键)(@主体帐簿编码)?
也就是说接收方根据单据类型的需要,可以是公司或者公司下的主体帐簿。当接收方是公司,如编码为“yy”名称为“yk”的公司,其主键为“1046”,那么根据外部交换平台总体参数设置中的接收公司匹配规则的设置(参考2.5节)可设为receiver=yy或者receiver=1046。当接收方是公司下的主体帐簿时,如编码为“yy”名称为“yk”主键为“1046”的公司下有一编码为“yy-0001”名称为“yy公司基准帐簿”的主体帐簿时,根据外部交换平台总体参数设置中的接收公司匹配规则可将接收方属性设置为receiver=yy@yy-0001或者receiver=1046@yy-0001。

filename属性,在数据导入过程中,对于每张单据我们都可以记录其原始数据、翻译后数据,对整个文档我们也可以记录其导入后的回执信息,这个filename属性的值就是用于记录上述数据文件时的文件名。当然,如果您没有设置的话,系统会为每个导入的文档默认生成文件名。

isexchange属性,这个属性值决定了在外系统的数据在导入NC系统的过程中,是否使用外部交换平台提供的翻译转换和校验功能。正常情况下应将这个属性设置为“Y”,或者干脆不设。除非从其他NC系统产生的符合NC转换后标准的XML数据直接导入NC系统,并且很多基础档案数据字段直接用的是PK值,此时可以设置属性为“N”和“n”,可避免无谓的翻译转换。

在我们制作好的XML进行发送加载的时候,翻译转换可能会将某一个属性重复翻译而导致发送失败,这时我们可以将isexchange属性设置为“N”。

replace 属性,这个属性值决定是否允许将相同单据往同一个接收方重复导入。V50版的插件一般允许相同单据重复导入,除了将第一次导入视作新增之外,其余导入视作更新。关于这方面的具体内容请参见2.6节内容。如果不允许相同单据的重复导入,那么将这个属性值设置为“N”或者“n”。否则将其设置为“Y”或者干脆不设。

Exportbill

Prxxtemp
交互的文件 indocs 原始的xml trans…翻译后文件

Receivedbills
回传的xml文件

注:
按钮添加修改
开发配置–功能注册—对应的xml文件 代码都放在模块的client里面

同步基础档案,找到基础档案原xml 查看源码类调用接口

管理员账号 定时任务配置:开发配置—后台任务管理—后台任务类型注册

按钮配置:

    <!--在何种状态下显示-->
    property name="actionType" value="edit"/>
    <!--表示按钮在界面中的位置-->
    property name="target" ref="linkQueryActionGroup"/>
    <property name="pos" value="after"/>
    <!--将按钮的Bean放入到按钮扩展类中-->
    property name="action" ref="tidaiping"></property>

按钮添加监听

<property name="interceptor">
<!--此处可以扩展添加自己的拦截器-->
<bean id="editOADjtbInterceptor" class="nc.ws.intf.EditOADjtbInterceptor">
<property name="model"><ref bean="bmModel"/></property>
<property name="editor"><ref bean="billForm"/></property>
</bean>
</property>

EditOADjtbInterceptor 类为监听类 添加billForm属性获取页面数据需要

private AbstractAppModel model;
private IModelDataManager dataManager;
protected BillForm billform;
private ShowUpableBillForm editor;

Demo 按钮类
private SettleModel model;
private ArapBillCardForm editor;

在配置文件java实现类中注入两个(Demo)(EditOADjtbInterceptor)
在按钮中添加监听
bean.setEditor(getBillFormEditor());
bean.setInterceptor(getEditOADjtbInterceptor());
在监听中添加
bean.setBillform(getBillFormEditor());

监听器类中的beforeAction方法

String actionName = null;
if(e == null)
actionName = ArapConstant.SAVE;
else
actionName = e.getActionCommand();
String operateCode = getOperateCode(actionName);
if(operateCode != null){
BaseAggVO bill[] = null;        //获取页面上主表类数组
BaseItemVO[] bills=null;        //获取页面上子表类数组
BaseBillVO basebill=null;        //主表对象
BaseItemVO baseitem=null;        //子表对象
if(getBillform() != null && getBillform().getBillCardPanel() != null && getBillform().getBillCardPanel().isShowing()){
Object selectedata = getBillform().getValue();
bill = (new BaseAggVO[] {(BaseAggVO)selectedata});
}else{
Object datas[] = ((ArapBillManageModel)getModel()).getSelectedOperaDatas();
bill = new BaseAggVO[datas.length];
System.arraycopy(((Object) (datas)), 0, bill, 0, datas.length);
}
for(int i = 0; i < bill.length; i++){
basebill=bill[i].getHeadVO();
System.out.println(basebill.getApprovenote());
System.out.println(basebill.getApprover());
System.out.println(basebill.getBillmaker());
System.out.println(basebill.getBillstatus());
System.out.println(basebill.getPrimaryKey());
bills=bill[i].getItems();
}
for(int i=0;i<bills.length;i++){
baseitem=bills[i];
System.out.println(baseitem.getBillno());
System.out.println(baseitem.getMoney\_de());
System.out.println(baseitem.getSupplier());
System.out.println(baseitem.getSubjcode());        //科目
System.out.println(baseitem.getBusidate());        //起算日期
}
if(basebill.getSupplier()==null || "".equals(basebill.getSupplier())){
MessageDialog.showWarningDlg(getEditor(), "提示", "税码没选因为当前单据主表未选择供应商!");
return false;
}
if(basebill.getSupplier()!=null && baseitem.getTaxcodeid()==null || "".equals(baseitem.getTaxcodeid())){
MessageDialog.showWarningDlg(getEditor(), "提示", "税码没选因为当前单据主表未选择供应商!");
return false;
}
}

return true;

数据库表
BD_cachetabversion 缓存表

xml传入系统的中间表
xx_idcontrast
yszf_sendoa 这是发送OA的日志表

nc打包笔记
nc打包的步骤,如果涉及到接口,放到meta-inf 下面的有upm 文件,还有classes文件里面放impl的文件或者是private模块下的;

外部接口的话 放到对应模块下面的classess文件下面;

如果是对应的源码放到对应的位置下面

nc中遇到的问题
1.如文件配置错误:文件路径=单据类型,异常信息:从后台读取交换规则定义文件发生错误
(1):可能的情况,nchome\pfxx\businessprocessor路径下的定义文件有问题
(2):定义文件没有成功读取到,可以尝试将对应要读取的定义文件直接放置到businessprocessor里,而不是放置到模块下的文件夹中,然后再重启服务

2.没有取得对应的单据定义,请检查是否存在单据类型:单据类型的定义文件。文件目录:NCHOME\pfxx\businessprocessor
(2.1):解决方法,可以尝试将对应单据类型定义文件中的level=“-1”,这个level代表的是单据加锁级别,这个标记删除之后再重新重启服务器

3.打开XML交换规则定义文件失败!文件不存在!
(3.1):解决办法,这个是NCHOME\pfxx\businessprocessor中的单据类型文件中的单据加锁级别导致的问题,将单据的加锁级别标志删除之后再重启服务即可

4.若定义文件(xml)改了之后,如加了中文,重新打开无法在浏览器中显示
(4.1):解决办法:可以将编码格式改成GBK

5.若接口返回插件:业务插件处理错误:插件类=nc.bs.bd.pfxx.plugin.PsndocPfxxPlugin,异常信息:业务插件处理错误:插件类=nc.bs.bd.pfxx.plugin.PsndocPfxxPlugin,异常信息:null
(5.1)这个应该是nc前台删除数据后,再次通过xml同步问档,代码中swapContext.getDocID()还能够取到值,获取到原来的key所以走了更新方法,后面PsndocVO oldvo = queryOldPSndovCO(vopk);走个方法查数据库的时候这些没有查到报错,如果没有处理异常就会报出null。

(5.2)如果nc前台删除数据后还想要通过xml文件同步数据需要删除中间表中的数据select * from xx_idcontrast where fileid=‘OA传输的billid’ 其中的fileid是xml的bill id="****"这个属性。

人员接口出现的错误
(6.1) 一个人员必须要设置一个主职而且同步多个职位的时候要先同步主职的xml然后才是兼职的xml还有兼职拼接的xml必须是bill id 跟主职的bill id保持一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值