通过ajax记录打印信息
润乾自带的打印直接可以通过触发js事件来进行调用。onClick="report1_print();return false;"
如果客户需要记录某个用户在某个时间段进行打印的次数以及规定该用户在某个时间段打印的权限,并且日后要根据这些记录进行统计,该怎么做到呢?下面提供了一套方案可以解决该问题,此方案也可以灵活的针对客户的这类需求。
具体需求:例如规定某个用户只能在8点到9点之间进行打印,其余时间需要授权后才能进行打印,后台需要记录该用户的打印时间、是否为超时打印等信息用来统计。
解决思路:
1, 判断一个时间段是否能掉打印这个比较简单,可以在单元格中加入if语句判断时间,是否显示触发打印的js,也可以先调用一段判断的js满足条件后再调用润乾的打印js。
2, 记录打印的相关信息,通过点击打印的js后先通过ajax与servlet交互进行数据的插入,然后再调用润乾的打印js。
下文采用js的方式来实现判断功能,通过ajax进行数据的插入。
随意准备一张报表作为打印的例子。
首先,先来时间判断的功能,在展现报表的页面(showReport.jsp)中接受外界的两个参数,username(用户姓名)和type(超时后授权,值为2时为超时后授权打印),然后加入js代码:
function printtime() {
//首先对日期类型数据进行格式转化,从网上找的日期格式化代码begin
Date.prototype.format = function(format) {
/*
* eg:format="YYYY-MM-dd hh:mm:ss";
*/
var o = {
"M+" : this.getMonth() + 1, // month
"d+" : this.getDate(), // day
"h+" : this.getHours(), // hour
"m+" : this.getMinutes(), // minute
"s+" : this.getSeconds(), // second
"q+" : Math.floor((this.getMonth() + 3) / 3), // quarter
"S" : this.getMilliseconds()
}
if (/(y+)/.test(format)) {
format = format.replace(RegExp.$1, (this.getFullYear() + "")
.substr(4 - RegExp.$1.length));
}
for ( var k in o) {
if (new RegExp("(" + k + ")").test(format)) {
format = format.replace(RegExp.$1,
RegExp.$1.length == 1 ? o[k] : ("00" + o[k])
.substr(("" + o[k]).length));
}
}
return format;
}
//日期格式化代码end
//模拟起始时间和结束时间
var begintime='08:00:00';
var endtime='09:00:00';
var now = new Date().format("hh:mm:ss");//取当前系统时间并转换成相应格式
//判断当前时间是否在规定的时间内或者是否给予了授权
if((begintime<now&&endtime>now)||<%=type%>=="2")
{
run();
}else{
alert("已经超时,请联系管理员");
}
}
这样就可以进行判断是否满足规定,如果满足调用润乾的打印功能report1_print();
接下来创建一个servlet做后台处理工作.主要是把前台传入过来的打印的相关信息插入数据库中.
临时测试数据库表结构:
String userName = request.getParameter("username");
String type = request.getParameter("type");
if (type == null)
type = "1";// 正点打印type为1,授权后type为2
String printTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.format(new Date());
String sql = "insert into print values('" + userName + "','"
+ printTime + "','" + type + "')";
Connect con = new Connect();
con.executeInsert(sql);
然后构建ajax框架,url为上文中的的servlet,传入参数为之前页面中接受的两个参数username和type.
//核心对象变量
var xmlHttp;
//区分浏览器创建XMLHttpRequest核心对象
function create() {
if (window.XMLHttpRequset) {
xmlHttp = new XMLHttpRequest();
} else if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
//ajax核心执行方法(此处为提交到servlet处理)
function run() {
create();
var URL = "../servlet/PrintTime?username=<%=username%>&type=<%=type%>";
xmlHttp.open("POST", URL, true);
xmlHttp.onreadystatechange = callback;
xmlHttp.send(null);
report1_print();
}
//回调函数
function callback() {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
var v = xmlHttp.responseText;
}
}
}
最后在toolbar.jsp中修改调用打印的js事件 onClick="printtime();return false;",这里我们先要进行判断,所以直接调用判断的js,通过后会自行调用ajax记录打印以及打印报表的相关方法。
测试结果:
1,在8点到9点之间,用户名为zhangsan的用户允许打印报表,并且在数据库中记录:
2,在9点以后,用户名为zhangsan的用户打印报表时提示超时。
3, 模拟管理员给张三授权允许他在超时情况下打印,报表中type参数模拟成2,此时再超时情况下允许打印报表,并且在数据库中记录:
当然这里的权限是模拟出来的,具体实际应用中会根据不同的需求,数据机构、权限控制、判断条件都会有所变动,但是思路相同,这样就可以通过ajax来实践记录打印的功能。
附件中也相关的jsp、java、此例中的数据库建表语句。
通过ajax记录打印信息相关推荐
- 野路子玩Android(二)使用log打印信息
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 1.log函数 2.函数实现 总结 前言 本系列主要用来记录学习Android的相关内容,本文学习Android如何打 ...
- 关闭Linux内核打印信息方法
调试内核模块过程中,kmsg打印信息太多,通过修改/proc/sys/kernel/printk文件内容来控制. 一般通过 echo 0 > /proc/sys/kernel/printk关闭打 ...
- python使用logging打印信息到日志文件中
python使用logging打印信息到日志文件中 参考 Python输出日志信息 Python + logging 输出到屏幕,将log日志写入文件 使用logging打印日志到文件中的目的是: 解 ...
- NetSuite自定义子记录打印模板之坑
这是一篇"避坑文",源自近日的一个案例. 从NetSuite的设计原则上来看,自定义记录也应该可以进行Advanced PDF Print Template的应用.但是事实给了我们 ...
- 【FFmpeg】降低转码延迟方法、打印信息详解、refcounted_frames详解
文章目录 1.FFmpeg降低转码延迟方法 2.ffmpeg打印信息:源码里打印的这段是这样定义的 3.解码时 refcounted_frames 标志的使用 3.1 启动该标志 3.2 解码后,记得 ...
- 【Qt】通过QtCreator源码学习Qt(五):QLoggingCategory管理、分类、过滤打印信息
1.QLoggingCategory简介 在QtCreator源码中新学到一个类QLoggingCategory. QLoggingCategory可以控制打印输出类别和区域.方便在调试时,过滤掉不关 ...
- 【linux】Valgrind工具集详解(三):打印信息说明
一.打印信息格式 Valgrind打印信息的格式如下,很容易和程序输出信息区分出来 == 进程ID ==Valgrind的打印信息 二.打印到何处 1.打印到文件描述符中 主要是设置打印到终端上,默认 ...
- python加颜色_Python 给屏幕打印信息加上颜色的实现方法
语法 print('\033[显示方式;字体色;背景色m文本\033[0m') # 三种设置都可以忽略不写,都不写则为默认输出 配置如下 # 字体 背景 颜色 # ------------------ ...
- 《OpenACC并行程序设计:性能优化实践指南》一 3.5 在应用程序执行期间记录性能信息...
3.5 在应用程序执行期间记录性能信息 应用程序将自动使用第一个插装事件启动Score-P性能监视器.使用几个环境变量来配置性能监视器.为了尽量减小运行时间扰动,Score-P默认设置产生一个基于性能 ...
最新文章
- C++笔试、面试题总结
- 目录忽略_宣传册设计中目录的构思方法和运用
- pandas使用groupby函数进行分组聚合并使用agg函数将每个分组特定变量对应的多个内容组合到一起输出(merging content within a specific column of g
- SAP Spartacus的登录验证机制 - user login Authentication
- python开源系统_搭建轻量级的开源推荐系统-Python-recsys
- Louvain社区划分算法及Java语言实现
- iSlide系列教程视频简介——PPT的简化神器
- 简单的sql注入之2WP
- android获取Bitmap对象,获取图片宽高
- codewars----Descending Order
- Python数据分析:柱形图的绘制方法
- 最“丑”录取通知书,谁家院校上榜?新一波研究生通知书已送达
- Unknown column 'xxxx' in 'field list'
- 豆瓣电台WP7客户端 开发记录 8
- VC++ 编写程序计算月亮方位,高度,赤经,赤纬等信息
- 计算机科学 中文核心,什么是最快的计算机科学中文核心期刊?
- 关于COM组件部分总结
- tmail邮箱服务器,邮件服务器(一)Sendmail服务器1
- anaconda创建虚拟环境Solving environment: failed
- Java编程语言是什么 JAVA有什么优势