起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7944|回复: 10

[结贴] importExcel是否可以将导入的数据更新到数据库而不是插入数据

[复制链接]

26

主题

72

帖子

294

积分

中级会员

Rank: 3Rank: 3

积分
294
QQ
发表于 2017-2-23 11:32:02 | 显示全部楼层 |阅读模式
版本: BeX5V3.5 小版本号: 2552
数据库: MS SQLServer 服务器操作系统: Windows 应用服务器: Tomcat
客户端操作系统: Windows 7 浏览器: IE10
用户的需求是将Excel文件中指定的人员部分信息更新到数据库中的既存数据中去。

貌似系统提供的importExcel组件只能实现数据的插入,无法进行更新动作。
按照其他帖子的提示,现在在ImportExcelBeforeAction的处理后事件中人为的将读入数据更新到数据库中,并且成功了。
问题是这样做的话,系统仍然会去调用importExcel的Action,导致INSERT数据出错。
虽然可以在BeforeAction的处理后事件中将所有row.removeCell掉后就不出错了。
但是这样做同样无法返回给前台更新的数据件数。

本来考虑直接在BeforeAction的后处理中直接扔业务异常出来,但是由于使用的是Model的Connection,无法手动提交更新的结果。
请告知如何将更新条数返回给前台?

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36178
发表于 2017-2-23 13:50:16 | 显示全部楼层
可以自己把excel文件上传的服务器上,然后BIZ层操作文件从里面读取数据进行更新,更新再把文件删除
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

26

主题

72

帖子

294

积分

中级会员

Rank: 3Rank: 3

积分
294
QQ
 楼主| 发表于 2017-2-23 15:06:09 | 显示全部楼层
本帖最后由 jjbboox 于 2017-2-23 15:07 编辑
jishuang 发表于 2017-2-23 13:50
可以自己把excel文件上传的服务器上,然后BIZ层操作文件从里面读取数据进行更新,更新再把文件删除 ...

您的意思是完全脱离importExcel来实现吗?
功能我基本已经在importExcel的方法上实现了,现在只想知道,如果importExcel执行完了,需要返回某些值到前台的话需要修改哪里?
正常情况下导入完成也会返回一个导入件数的,这个值在哪里返回的?
如果我要针对这个特殊应用单独做的话,是需要在这个process的action中重新添加一个类似的importExcel,然后让画面上的importExcel组件的action指向这个action,这样可以实现吗?
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36178
发表于 2017-2-23 16:08:46 | 显示全部楼层
导入相关的都在/BIZ/SA/excel和/UI2/system/components/justep/excel/server下可以自己跟踪代码
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

26

主题

72

帖子

294

积分

中级会员

Rank: 3Rank: 3

积分
294
QQ
 楼主| 发表于 2017-2-23 16:51:38 | 显示全部楼层
本帖最后由 jjbboox 于 2017-2-23 16:53 编辑
jishuang 发表于 2017-2-23 16:08
导入相关的都在/BIZ/SA/excel和/UI2/system/components/justep/excel/server下可以自己跟踪代码 ...

我现在这样做
先以importExcel为蓝本,自己建一个importExcelForUpdate的action,让画面的import组件的action指向该自建的action,然后在这个action中完成导入excel数据的检查和更新数据库的动作。如果错误就抛业务异常出去,正确就返回更新数据的件数。

但是原来放在beforeAction后处理中的代码,复制到importExcelForUpdate中,编译没有问题,执行时却出错了。
错误信息如下。

org/apache/poi/ss/usermodel/Workbook
编码:
原因:
[url=]隐藏详细[/url]
java.lang.reflect.InvocationTargetException        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)        at java.lang.reflect.Method.invoke(Method.java:497)        at com.justep.system.action.Engine.invokeActions(Native Method)        at com.justep.system.action.Engine.invokeActions(Unknown Source)        at com.justep.business.server.BusinessServer.doAction(Unknown Source)        at com.justep.business.server.BusinessServer.doExcute(Unknown Source)        at com.justep.business.server.BusinessServer.excute(Unknown Source)        at com.justep.business.server.BusinessServer.excute(Unknown Source)        at com.justep.business.server.BusinessServerServlet.execService(Unknown Source)        at com.justep.business.server.BusinessServerServlet.service(Unknown Source)        at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)        at com.justep.x.bs.BusinessServerServlet.service(Unknown Source)        at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)        at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Workbook        at HRP0020.importExcelForUpdateQuit(HRP0020.java:25)        ... 27 more Caused by: java.lang.ClassNotFoundException: 模块"/Makita/HRP0020/logic/code"中找不到类"org.apache.poi.ss.usermodel.Workbook"        at com.justep.model.impl.ModelImpl$ModelClassLoader$1.findClass(Unknown Source)        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)        ... 28 more

能帮忙看一下具体什么原因吗?
  1.             //获得excel文件
  2.             Workbook workBook = (Workbook)ModelUtils.getRequestContext().getActionContext().getParameter("excel");
  3.             Sheet sheet = workBook.getSheetAt(0);
  4.             Integer count = 0;
  5.                
  6.             //获得mapping文件
  7.             ImportConfig importConfig = (ImportConfig)ModelUtils.getRequestContext().getActionContext().getParameter("config");
  8.             String keyWord = importConfig.getKeyWord();
  9.             System.out.println(keyWord);
  10.             int startLineExcel = importConfig.getRowRange(0, workBook).getStart() - 1;
  11.                 String ConceptName = importConfig.getConceptConfig().getName();
  12.                 String kSql = "SELECT " + ConceptName + ".* FROM " + ConceptName + " " + ConceptName + " WHERE 1=1 ";
  13.                
  14.                 //用来对日期字段进行格式化
  15.                 DateFormat df = DateFormat.getDateInstance();
  16.                
  17.                 //从mapping文件中获取字段map<字段id, ExcelCellIndex>
  18.                 List<ImportRelationConfig> list = importConfig.getConceptConfig().getRelationConfigs();
  19.             HashMap<String, Integer> itemMap = new HashMap<String, Integer>();
复制代码

错误信息的第25行是 上面代码段的第3行
Sheet sheet = workBook.getSheetAt(0);


是否在importExcel中无法取到excel文件和mapping文件?那么在importExcel action中需要如何取到sheet和mapping config?

回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36178
发表于 2017-2-23 17:32:39 | 显示全部楼层
模块"/Makita/HRP0020/logic/code"中找不到类"org.apache.poi.ss.usermodel.Workbook"

在自己的code下创建lib目录,把/BIZ/SA/excel/logic/code/lib的jar拷贝到自己的lib下,并在构建路径中导入看看
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

26

主题

72

帖子

294

积分

中级会员

Rank: 3Rank: 3

积分
294
QQ
 楼主| 发表于 2017-2-24 09:53:40 | 显示全部楼层
本帖最后由 jjbboox 于 2017-2-24 09:55 编辑

能告知如何将后处理中的某个值传递到前台吗?
感觉后处理是系统在调用action的时候自己调用的,如何和action交换参数?
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36178
发表于 2017-2-24 10:43:28 | 显示全部楼层
定义为action,action方法前端需要的值,在前端调用action获取返回值
/UI2/demo/actions/process/invokeAction/mainActivity.w
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

26

主题

72

帖子

294

积分

中级会员

Rank: 3Rank: 3

积分
294
QQ
 楼主| 发表于 2017-2-24 11:06:55 | 显示全部楼层
本帖最后由 jjbboox 于 2017-2-24 11:09 编辑

我的意思可能表达的不够清楚。

现在画面的importExcel控件设定的action是/SA/excel/logic/action/importExcel
然后在Biz的process的动作设置中已经添加了importExcel,importExcelBeforeAction
然后在importExcelBeforeAction的执行后事件中添加了自己的检查更新代码。
我需要将执行后事件中的更新件数返回给前台或者至少能在ImportGenerator.generate执行完IMPORT_BEFORE_ACTION后能够获取到这个值,请问用什么方法?

执行后事件应该是系统的ActionUtils.invokeAction在调用了importExcelBeforeAction之后自动调用的。传入和返回参数都是空的。return回来也没地方接啊!
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36178
发表于 2017-2-24 13:59:08 | 显示全部楼层
那你可以把需要的存在一个文件中或者存到数据库中,然后前端需要的时候去获取
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2025-6-23 06:39 , Processed in 0.073412 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表