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

QQ登录

只需一步,快速开始

查看: 14856|回复: 10

[结贴] 请问可不可以直接在服务端导出xls? 或者有其他的什么变通...

[复制链接]

9

主题

51

帖子

199

积分

初级会员

Rank: 2

积分
199
QQ
发表于 2014-3-12 18:36:19 | 显示全部楼层 |阅读模式
版本: X5.2.6 小版本号:
数据库: 服务器操作系统: 应用服务器:
客户端操作系统: 浏览器:
报表控件,可以在UI层用下述语句导出为xls文件
        //导出
        justep.xbl("gridReport").exportExcel();


现在有个问题:
请问可不可以直接在服务端直接生成上面的xls文件?
而不需要在客户端导出,
然后用附件上传的方式送到服务端,
因为这样会增加用户的交互过程.

感觉和下面这个帖子的问题接近
http://bbs.justep.com/forum.php?mod=viewthread&tid=35969


请帮看看,谢谢!!

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
发表于 2014-3-13 09:20:21 | 显示全部楼层
做报表不用bizServer,而是用reportServer,所以无法在bizServer直接写代码
可以尝试在/UI/system/service/report/reportBrowse.j文件中获取从reportServer返回的文件流,再上传到bizServer,存入文档服务器
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

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

使用道具 举报

9

主题

51

帖子

199

积分

初级会员

Rank: 2

积分
199
QQ
 楼主| 发表于 2014-3-13 13:44:17 | 显示全部楼层
谢谢,能提供大概的代码不?
是通过response来处理吗?

public class ReportBrowse extends JProcessorImpl {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                try {
                        System.out.println("1111");
               
                        ReportHelper reportHelper = new ReportHelper(request);
                        reportHelper.service(response);


                } catch (Exception e) {
                        throw new ServletException(MessageUtils.getMessage(UIMessages.class, UIMessages.REQUEST_REPORT_ERROR), e);
                }
               
        }
回复 支持 反对

使用道具 举报

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
发表于 2014-3-13 14:02:41 | 显示全部楼层
是response
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

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

使用道具 举报

9

主题

51

帖子

199

积分

初级会员

Rank: 2

积分
199
QQ
 楼主| 发表于 2014-3-13 15:49:49 | 显示全部楼层
请问有无现成或比较接近的案例?
response里面的内容写入容易,读取怎么搞,求助
回复 支持 反对

使用道具 举报

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
发表于 2014-3-14 08:58:02 | 显示全部楼层
你好楼主,这个问题需要我做一个例子给你,所以会花费较长时间,请你耐心等待,我完成后会第一时间将例子发上来的,谢谢!
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

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

使用道具 举报

9

主题

51

帖子

199

积分

初级会员

Rank: 2

积分
199
QQ
 楼主| 发表于 2014-3-14 09:35:24 | 显示全部楼层
thanks a lot
回复 支持 反对

使用道具 举报

11

主题

1134

帖子

1261

积分

金牌会员

Rank: 6Rank: 6

积分
1261
QQ
发表于 2014-3-21 12:04:48 | 显示全部楼层
本帖最后由 song_ning_ning 于 2014-3-21 14:18 编辑
localhost 发表于 2014-3-14 09:35
thanks a lot

简要:现在功能是当点击“导出为excel工作薄”时,不再下载文档而是上传到文档服务器  点其他(导出为。。。)的时候还是下载

1.修改/UI/system/service/report/printGetFile.j文件:(如果以文件名来区别上传文档服务器还是下载 可以在下面中代码中通过reportName进行判断)

下面的代码login()是因为在这.j中取不到当前的bSessionID  而调用action时需要  所以以system登陆再注销(不影响)
  1.          protected void doGet(HttpServletRequest request, HttpServletResponse response)
  2.                         throws ServletException, IOException {
  3.                   String filename = request.getParameter("filename");
  4.                   String reportName=request.getParameter("reportName");
  5.                   String outputType=request.getParameter("outputType");
  6.                   String bsessionID=null;
  7.                   if("xls".equals(outputType)){
  8.                           try{
  9.                               if(filename.indexOf("/") == -1)
  10.                                   filename = System.getProperty("java.io.tmpdir") + "/" + filename;
  11.                                   System.out.println(filename);
  12.                                   OutputStream out = null;
  13.                                   bsessionID = login();
  14.                                   File reportFile = new File(filename);        
  15.                                   InputStream inputStream = new FileInputStream(reportFile);
  16.                                   Part[] parts = new Part[5];
  17.                                   parts[0] = new StringPart("process", "/demo/actions/process/invokeAction/invokeActionProcess");
  18.                                   parts[1] = new StringPart("activity", "mainActivity");
  19.                                   parts[2] = new StringPart("action", "upload");
  20.                                   parts[3] = new StringPart("reportName", java.net.URLEncoder.encode(reportName,"utf-8"));
  21.                                   InputStreamPartSource bps = new InputStreamPartSource(inputStream, "");
  22.                                   parts[4] = new FilePart("file", bps);
  23.                                   ActionEngine.invokeActions(parts, ActionUtils.MULTIPART_CONTENT_TYPE, null,bsessionID, "zh-cn", new StreamCallback(response));
  24.                           }finally{
  25.                                   ActionEngine.logout(bsessionID);
  26.                           }
  27.                   }else{
  28.                          ReportHelper.getFile(request, response);
  29.                   }
  30.         }
  31.         protected void doPost(HttpServletRequest request, HttpServletResponse response)
  32.                 throws ServletException, IOException {
  33.                 this.doGet(request, response);
  34.         }        
  35.         public String login() throws UnknownHostException {
  36.                 String businessServer = "http://127.0.0.1:8080/BusinessServer";
  37.                 String loginName = "system";
  38.                 String password = "123456";
  39.                 // 获得本地IP地址
  40.                 String localIP = java.net.InetAddress.getLocalHost().getHostAddress();
  41.                 // 初始化动作引擎
  42.                 ActionEngine.init(businessServer);
  43.                 // 登录
  44.                 String bSessionID = ActionEngine.login(loginName, ActionUtils.md5(password), localIP, null);
  45.                 // 返回bSessionID
  46.                 return bSessionID;
  47.         }
复制代码
2.在/BIZ/demo/actions/logic/action/invokeAction.action.m中新建upload  参数俩个:String类型的reportName  Object类型的file  代码如下:
Doc doc = docs.addDoc("defaultDocNameSpace");   红色部分为 文档中心默认目录的ID
如果想要上传到文档中心其它的目录下  比如:要上传到如图的文档目录下      就写成 Doc doc = docs.addDoc("0DAB29594BB04C768FF2082F7D47DCE2");  这个目录ID可以在sa_docnode中找到
QQ截图20140321115836.png
  1. public static void upload(String reportName,InputStream file) throws Exception{
  2.                 FileOutputStream outputStream=null;
  3.                 try{
  4.                         File f=new File(System.getProperty("java.io.tmpdir")+"/"+ java.net.URLDecoder.decode(reportName,"utf-8"));
  5.                         outputStream=new FileOutputStream(f);
  6.                         byte[] bt = new byte[1024];
  7.                         int i = -1;
  8.                         while((i = file.read(bt)) != -1){
  9.                                 outputStream.write(bt, 0, i);
  10.                         }
  11.                         outputStream.flush();
  12.                         Docs docs=new Docs();
  13.                         Doc doc = docs.addDoc("defaultDocNameSpace");
  14.                         doc.upload(f);
  15.                         docs.createVersion();
  16.                 }finally{
  17.                         outputStream.close();
  18.                 }
  19.         }
复制代码
远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要
回复 支持 反对

使用道具 举报

9

主题

51

帖子

199

积分

初级会员

Rank: 2

积分
199
QQ
 楼主| 发表于 2014-3-24 11:26:17 | 显示全部楼层
谢谢song_ning_ning及时回复
如法炮制了,但最后一步这里
导出时有个编译问题,请指教:
我前面有
import com.justep.doc.DocServerDefines;
import com.justep.doc.DocUtils;
import com.justep.doc.Docs;


Caused by: java.lang.Error: 无法解析的编译问题:
        Docs 无法解析为类型
        Docs 无法解析为类型
        Doc 无法解析为类型

        at Actions.upload(Actions.java:534)

回复 支持 反对

使用道具 举报

9

主题

51

帖子

199

积分

初级会员

Rank: 2

积分
199
QQ
 楼主| 发表于 2014-3-24 14:39:30 | 显示全部楼层
谢谢X5的开发人员远程提供支持,问题已解决
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 14:06 , Processed in 0.061519 second(s), 28 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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