NC65开发遇到的问题

75次阅读

共计 6037 个字符,预计需要花费 16 分钟才能阅读完成。

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 文件下面;

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

OA 服务器 IP:114.116.23.103 
用户名:administrator 
密码:Nanshecun001

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