PageOffice 6 保存数据区域数据同时保存文档
在实际应用中,例如在线签订合同的时候,合同的签订日期,合同号等等这些信息既要保存到数据库,合同签订后又要将整个合同文件保存起来。这时候就需要用到PageOffice的保存数据区域数据的同时保存整个文件的功能。
后端代码
1.后端打开文件的接口方法中,在webOpen方法之前给SaveFilePage和SaveDataPage方法赋值(设置好保存时由哪个地址接口负责接收数据和处理控件上传的文件流)。
PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
// com.zhuozhengsoft.pageoffice.wordwriter命名空间的WordDocument
WordDocument wordDoc = new WordDocument();
//打开数据区域,openDataRegion方法的参数代表Word文档中的书签名称
wordDoc.openDataRegion("PO_contractNum").setEditing(true);
wordDoc.openDataRegion("PO_contractDate").setEditing(true);
poCtrl.setWriter(wordDoc);// 必须。
poCtrl.setSaveDataPage("saveData"); //设置保存数据时的接口地址
poCtrl.setSaveFilePage("saveFile");//设置保存文件时的接口地址
//webOpen的第一个参数支持能够输出下载文件的Url相对地址或者文件在服务器上的磁盘路径两种方式
//查看详细,请在本站搜索“PageOffice属性或方法中涉及到的URL路径或磁盘路径的说明”
poCtrl.webOpen("doc/test.docx", OpenModeType.docSubmitForm, "张三");
2.(1)在SaveDataPage属性指向的地址接口中,创建com.zhuozhengsoft.pageoffice.wordreader.WordDocument包下的WordDocument对象获取数据。
WordDocument doc = new WordDocument(request, response);
//获取提交的数值
String contractNum = doc.openDataRegion("PO_contractNum").getValue();
String contractDate = doc.openDataRegion("PO_contractDate").getValue();
String contractId = doc.getFormField("contractId");//getFormField的参数是Form控件的id
/**
*实际开发中,这块代码一般是连接数据库将上面获取的数据更新到数据库中
*/
doc.close();
2.(2)在SaveFilePage属性指向的地址接口中,创建FileSaver对象处理文件的保存工作。
FileSaver fs = new FileSaver(request, response);
fs.saveToFile(request.getSession().getServletContext().getRealPath("doc/") + fs.getFileName());
fs.close();
前端代码
本示例无前端关键代码。
SaveFilePage和SaveDataPage的区别
SaveFilePage:指定的页面可接受二进制文件流、Form域,直接保存修改后的文件。指定的页面只能创建FileServer对象。
SaveDataPage:指定的页面可接收页面提交的Word数据区域、Excel表格数据、Form域。指定的页面只能创建PageOffice.ExcelReader或PageOffice.WordReader命名空间下的对象。
SaveFilePage的使用:只需要保存修改后的文档,而不需要提取文档内容时。
SaveDataPage的使用:需要提交文档内容或用户输入的文档内容时。
保存文档和数据的事务实现
在实际开发中,我们可能会遇到这样的问题:如果数据保存失败了,PageOffice是否会继续保存文档呢?事实上,PageOffice的保存机制是先保存数据,再保存文件。但是,如果我们想用事务控制来解决这个问题,可能会遇到一些困难。原因是处理保存数据的页面和保存文档的页面通常是两个不同的servlet或action,这与事务机制并不完全符合。但是我们可以通过模拟实现一个“事务”,例如,在Session中设置一个变量来标识状态,比如用flag来表示,初始值为false。当数据保存成功时,将flag设置为true;保存失败时,flag为false。然后,在保存文件的页面中,根据flag的值来判断数据是否保存成功,从而进一步判断是否要保存文件。
参考链接:保存数据区域数据同时保存文档
PageOffice 6 保存数据区域数据同时保存文档的更多相关文章
- 从多个XML文档中读取数据用于显示webapi帮助文档
前言: 你先得知道HelpPageConfig文件,不知道说明你现在不需要这个,所以下文就不用看了,等知道了再看也不急.当然如果你很知道这个,下文也不用看了,因为你会了. 方法一: new XmlDo ...
- matlab将数据读取和写入txt文档
原文链接 matlab中打开文件 fid = fopen(文件名,‘打开方式’): 说明:fid用于存储文件句柄值,如果fid>0,这说明文件打开成功. 另外,在这些字符串后添加一个“t”,如‘ ...
- 从隔壁兄弟那爬点网页数据,整理成word文档
package com.parse_report; import com.report.utils.ParseUrl; /** * Create by JIUN 2018/7/14 */ public ...
- Storm项目:流数据监控1《设计文档…
博客公告: (1)本博客全部博客文章搬迁至<博客虫>http://blogchong.com/ (2)文章相应的源代码下载链接參考博客虫站点首页的"代码GIT". (3 ...
- [Swift通天遁地]七、数据与安全-(1)XML文档的创建和解析
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- python3如何随机生成大数据存储到指定excel文档里
本次主要采用的是python3的第三方库xlwt,来创建一个excel文件.具体步骤如下: 1.确认存储位置,文件命名跟随时间格式 2.封装写入格式 3.实现随机数列生成 4.定位行和列把随机数写入 ...
- ITTC数据挖掘系统(六)批量任务,数据查看器和自由文档
这一次带来了一系列新特新,同时我们将会从商业智能的角度讨论软件的需求 一. 批量任务向导 一个常用的需求是完成处理多个任务,可能是同一个需求以不同的参数完成多次,这类似批量分析某一问题:或者是不同的需 ...
- 问题:C#打开一个文本文档往里面写数据,没有就新建文档 ;结果:c#FileStream文件读写(转)
FileStream对象表示在磁盘或网络路径上指向文件的流.这个类提供了在文件中读写字节的方法,但经常使用StreamReader或 StreamWriter执行这些功能.这是因为FileStream ...
- MapGIS数据中心设计器 帮助文档
我以为是数据设计呢..数据设计按钮在哪里??? 数据库设计和管理(没mapgis k9那么好找)(可以编辑sql数据,可以开发吗?)文件中肯定是不行的,要网络发布,肯定是要导入sql数据库中的(或者是 ...
- 大数据项目之_15_帮助文档_NTP 配置时间服务器+Linux 集群服务群起脚本+CentOS6.8 升级到 python 到 2.7
一.NTP 配置时间服务器1.1.检查当前系统时区1.2.同步时间1.3.检查软件包1.4.修改 ntp 配置文件1.5.重启 ntp 服务1.6.设置定时同步任务二.Linux 集群服务群起脚本2. ...
随机推荐
- #dp#洛谷 3473 [POI2008] UCI-The Great Escape JZOJ 4019 Path
题目 \(n*m\)的地图,计算从\((n,1)\)到第\(x\)列的第\(y\)行的路径条数\(\bmod k\) , 走过的点不能再走,转弯只能向右转.转弯完之后必须往前走一格 分析 可以发现,走 ...
- CSP-S2021江西自评分数(10-26)
娱乐性质,不负责任 在机房大佬的努力下,评测完了 总表 姓名 编号 总分 airport bracket palin traffic JX-00001 JX-00001 0 0 0 0 0 JX-00 ...
- HMS Core Discovery第15期直播预告|构筑立体世界,共造沉浸式营销
[导读] AR技术,是一种将真实世界信息和虚拟世界信息"无缝"衔接的技术,现如今AR技术受到日益广泛的关注,在我们生活中发挥着重要的作用,并显示出巨大的潜力--它是如何改变我们观察 ...
- Mongoose介绍
官网 Mongoose.js中文网 (mongoosejs.net) 基本使用 安装 最新的是mongoose8.0.0版本,基于Promise,以前的版本是基于回调函数. npm npm i mon ...
- Spring Cloud 核心组件之Spring Cloud Zuul:API网关服务
Spring Cloud Zuul:API网关服务 SpringCloud学习教程 SpringCloud API网关 Spring Cloud Zuul 是Spring Cloud Netflix ...
- AI数字人互动大屏:如何改变我们的生活?
随着科技的飞速进步和人工智能技术的日益成熟,智能制造正在成为推动制造业转型升级的核心力量. 互动数字人具有强大的情感分析能力,可以根据观众的表情.语气等实时反馈,作出恰当而富有情感的回应.这不仅让每一 ...
- 重新整理数据结构与算法(c#)——算法套马踏棋算法[三十三]
前言 马踏棋盘 概念在这,不做过多复述. https://baike.sogou.com/v58959803.htm?fromTitle=马踏棋盘 思路是这样子的,一匹马有上面几种做法,然后进行尝试, ...
- D365虚拟机安装
原本有本地VM是2023.3.31安装的,奈何微软不断升级,导致程序一些新特性用不到,例如: 1,Master Planning ---> Planning Optimization, 2,mi ...
- D365调试进入系统类方法
在生成InventDIMID时,虽然设置了InventDIMID的Number sequence为自定义的Format,但是总是不按指定的Number sequence产生InventDIMID Di ...
- 剑指offer38(Java)-字符串的排列(中等)
题目: 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 示例: 输入:s = "abc"输出:["abc&q ...