- 浏览: 686540 次
- 性别:
- 来自: 中山
文章分类
最新评论
-
wuhuizhong:
jFinal支持Rest风格吗?可以想spring mvc那样 ...
在JFinal的Controller中接收json数据 -
wuhuizhong:
在jfinal中应如何获取前端ajax提交的Json数据?ht ...
在JFinal的Controller中接收json数据 -
wuhuizhong:
jfinal如何处理json请求的数据:问题: 在某些api接 ...
在JFinal的Controller中接收json数据 -
wuhuizhong:
Ubuntu14.04 安装 Oracle 11g R2 Ex ...
Oracle 11g release 2 XE on Ubuntu 14.04 -
alanljj:
这个很实用,已成功更新,谢过了!
odoo薪酬管理模块l10n_cn_hr_payroll
其实,使用ActiveX本身实在是没有什么难度,Datawindow大家都很熟悉。这也是我没有把它写下来的动力的原因之一。不过在实施过程中,确实 还碰到过一些问题,也有一些心得,也还有解决不了的问题存在。我就做个总结吧,今天吃的比较饱,有些絮絮叨叨,希望大家忍了,哈哈。
大家都知道,Web页面中做打印一般就两种方法:
首先是写纯Web的打印,也就是使用Web自己的打印功能,用ExecWB命令,直接打印页面。说实在的我对HTML的语法是有些怵的,也只能算小半桶
水,经过一些了解,知道直接做Web页面打印难度对我来说很大,尤其是你要实现多层次的分组合计等等功能。项目紧迫也没有这个时间。
那接下来,只能选择客户端打印控件了,我还真想去买一个好的控件用用,那多好啊,代码可以写的少些,代码执行效率,开发效率肯定也高,可惜我深知Boss的为人,这几K钱就给他省了吧。
幸好我一直对PB的Web开发方案一直保持着兴趣,本人在n年前从PB6.5开始起就研究Web.PB,Window ActiveX,Datawindow ActiveX,到PowerJ,再到后来的Web Datawindow,虽然说,有些东东看起来象是玩具,有些么闭门造车,无法流行。不过勉为其难,土法上马还是可以解决些问题的。
本来Web Datawindow还象个样子,不过Web Datawindow需要EAServer的支持。那就罢了,只有选择Web
Datawindow
ActiveX了。说实在的,它作为一个Web客户端打印工具还是非常好的,因为Datawindow功能是太强大了,哪怕ActiveX没有包含
Datawindow全部的功能,但是也足够打印使用了。其缺点就是界面比较难看单调,配不上那绚丽的Web页面效果。
进入正题。
首先要说明一下,我选择的是PB10版本的ActiveX控件。因为据我测试,从PB8到10都有些问题,PB8的ActiveX不支持WinXP,
PB9的ActiveX竟然是已经过期了,IE上装不了(当然可能和我用盗版PB有关系,哦弥陀佛,罪过),而PB10是不支持Win98系统的。最后只
能不管Win98了,反正现在很少人用98了。
首先必须有个页面来安装控件,把如下代码添加到html页面中。别忘记了将psdwc100.cab放到相应服务器目录下,因为Cab包比较大(2M多),这个页面作为一个独立的安装页面比较好。
<OBJECT id="webdw" width="0" height="0"
codeBase="/tmsweb/include/dwprint/psdwc100.cab#Version=10,0,1,3600"
classid="CLSID:AAAA1503-AAAA-1000-8000-080009AC61A9" name="webdw">
安装Web DataWindow控件失败!</OBJECT>
页面写好了,发布到Web服务器,在客户端访问这个页面,安装插件即可。
接下来在打印页面w_print.jsp中引用此控件:
<OBJECT id="dw_print" height="0" width="0" classid="CLSID:AAAA1503-AAAA-1000-8000-080009AC61A9" name="dw_print">
<PARAM NAME="SourceFileName" VALUE="">
</PARAM>
<PARAM NAME="DataWindowObject" VALUE="">
</PARAM>
<PARAM NAME="SuppressEvents" VALUE="false">
</PARAM>
<PARAM NAME="VScrollBar" VALUE="true">
</PARAM>
<PARAM NAME="HScrollBar" VALUE="true">
</PARAM>
<PARAM NAME="HSplitScroll" VALUE="true">
</PARAM>
以下都是javacript脚本:
然后,设置打印用的datao b j e c t:
dw_print.SourceFileName="/tmsweb/pdwo/trafficorder_record.pbd"
dw_print.DataWindowObject="trafficorder_record"
//我所使用的是有两个子报表的NestReport作为例子,其他报表更简单
//这里获取子报表控件
dw_print.GetChild("dw_header")
print_h=dw_print.GetChildObject()
dw_print.GetChild("dw_detail")
print_d=dw_print.GetChildObject()
//开始填入打印用的数据
//因为是ActiveX客户端控件,因此不方便直接连接数据库来取数据,所以我这里是首先通过Web的方式
//获取到打印用的数据到客户端的一个类似datawindow的对象中,然后复制给dw_print的。
print_h.reset();print_d.reset()
dw_header.rowscopy_a(1,1,print_h)
dw_detail.rowscopy_a(1,dw_detail.rowcount(),print_d)
其中,dw_header,dw_detail是页面中的htc客户端控件,rowscopy_a我想就不用解释了,后续会贴出其完整代码。
在rowscopy后,如果还需要对dw_print中的某些字段赋值,则比如调用:
setitem(print_h,1,"year_1",“2006”)
其中setitem方法是一个js函数,稍后贴出其代码。
现在,dw_print的子报表的数据都已经填充好了,可以预览打印了,
因为这里是复合报表,datawindow自动预览的,因此就不需要设置预览属性了,
如果是一般的grid类型窗口,最好是设置预览属性,这样可以看得出页面的大小,打印页数等。
设置的时候用dw_print.modify()方法,用dw_print.Object.DataWindow.Print.Preview的方式是不行的,
Activex不支持。
最后,就可以打印了。
if (confirm("是否打印?"))
{
dw_print.print(false)
}
很简单,是不是?
附录:
setitem方法:
function setitem(dw_print,row,column,value)
{
var datavalue,datatype
datatype = dw_print.Describe(column+".Coltype")
if (datatype.indexOf("char",0)>=0)
{
datavalue=value
}else if (datatype.indexOf("decimal",0)>=0 || datatype.indexOf("number",0)>=0||datatype.indexOf("long",0)>=0)
{
datavalue=parseFloat(value)
}else if (datatype.indexOf("integer",0)>=0)
{
datavalue=parseInt(value)
}else if (datatype.indexOf("date",0)>=0)
{
alert("有系统不支持的Date,Datetime类型["+column+"],请检查打印数据源")
}else
{
datavalue=value
}
dw_print.setitem(row,column,datavalue);
}
rowscopy_a方法:
function RowsCopy_A(ai_start,ai_end,aobj_dw)
{
var ll_columncount
var datatype
var datavalue
if (ai_start<=0) return -1;
if (ai_end >RowCount()) ai_end=RowCount();
ll_columncount=getColumnCount();
for (var i=ai_start;i<=ai_end;i++)
{
row=aobj_dw.insertrow(0);
for (var k=0;k<ll_columncount;k++)
{
if ((Columns[k].ColumnType!=null)&&
(Columns[k].ColumnType.Trim().toLowerCase()=="computed")&&
(typeof(Columns[k].ColumnType)!="undefined")) continue
datatype = aobj_dw.Describe(Columns[k].ColumnName+".Coltype")
if (datatype.indexOf("char",0)>=0)
{
datavalue=getItemWithID(i,k+1)
}else if (datatype.indexOf("decimal",0)>=0 ||
datatype.indexOf("number",0)>=0||datatype.indexOf("long",0)>=0)
{
datavalue=parseFloat(getItemWithID(i,k+1))
}else if (datatype.indexOf("integer",0)>=0)
{
datavalue=parseInt(getItemWithID(i,k+1))
}else if (datatype.indexOf("date",0)>=0)
{
alert("有系统不支持的Date,Datetime类型["+Columns[k].ColumnName+"],请检查打印数据源")
}else
{
datavalue=getItemWithID(i,k+1)
}
datavalue = getDisplayValue(row,Columns[k].ColumnName,datavalue)
aobj_dw.setitem(row,Columns[k].ColumnName,datavalue);
}
}
return 1;
}
这里要说明一下,现在维一解决不了的问题是,我在javascript中无法找到一个类型能够匹配Datawindow的datatime类型列, 而如果不转换直接赋值,是没有效果的。可能是我对javascript的研究还不够吧?如果有那位兄弟知道解决办法,请告诉我。我现在只能在pbl中把 datatime列都先用convert转换为string类型。
发表评论
-
Talend ESB Runtime查看服务的部署情况
2016-05-04 11:05 764在 Talend Runtime 中: Hit ' ... -
talend的常用控件使用教程
2016-05-04 06:53 26041、建立作业,然后在 ... -
精彩RSS源推荐
2016-04-12 11:21 10231科技类 36氪 http://www.36kr.co ... -
Anypoint Studio 社区版
2016-03-09 23:24 4510Anypoint Studio is just one o ... -
中山市住房公积金提取
2015-06-23 15:41 352中山市住房公积金提取 ================== ... -
用Base64把圖片轉成文字編碼
2014-12-24 09:59 876• 編碼工具: http://www.base64-imag ... -
应用Sphinx + LaTeX + reStructuredText制作PDF文件
2014-05-28 17:24 1727参考: 用Sphinx制作中文pdf http: ... -
開啟Eclipse問題處理一例
2012-03-21 08:27 930開啟Eclipse時報錯並提示查看.metadata\.log ... -
公司内网用eclipse自动更新
2012-03-20 13:27 1413新增eclipse.ini代理设置 -Dorg.eclips ... -
Git常用操作命令
2012-03-08 10:09 855Git常用操作命令收集: ... -
一个成功的Git分支模型
2012-03-04 15:30 412一个成功的Git分支模型. http://nvie.com/ ... -
Using KDiff3 as Git GUI Merge Tool on Windows XP and Windows 7
2012-03-03 05:45 3208Add the KDiff3 directory to yo ... -
使用DocBook
2011-12-22 04:11 1540参考: http://addcn.blogbus.co ... -
在windows上运行的SSH服务器-OpenSSH for Windows和Copssh
2011-11-02 08:31 29326下面介绍两款在windows上 ... -
How to install OpenSSH sshd server and sftp server on a Windows
2011-11-02 08:20 2685http://pigtail.net/LRP/printsrv ... -
敏捷开发修炼之道 - 读后感
2011-10-08 05:47 948高效程序员的45个习惯 敏捷开发修炼之道http://www. ... -
汇率数据
2011-10-06 09:24 2247外汇-人民币即时报价 WEB 服务http://webs ... -
VirtualBox for Windows下安装linux的网络设置
2011-01-24 01:21 3918举例: 主机(windows)设网络桥IP:192.168. ... -
linux单网卡上配置双IP
2010-10-10 19:38 7184/sysconfig/network-scripts在ne ... -
CentOS Linux修改IP地址, DNS, 网关
2010-10-10 19:31 3565一、CentOS 修改IP地址 修改对应网卡的IP地址的配置 ...
相关推荐
2、本例子使用的技术是:Datawindow Web ActiveX + C# 3、由于Datawindow Web ActiveX的限制,本例子只能运行于IE浏览器 4、本例子采用SQLSERVER2008数据库,理论上支持SQLSERVER2005数据库,如果不使用真分页控件的...
第3章 Plug-in与Window ActiveX实现技术 第4章 Web DataWindow实现技术 第5章 Web ActiveX实现技术 第6章 Web Services实现技术 第7章 PowerBuilder与XML
综上所述,PowerBuilder通过Web.PB、插件和ActiveX技术提供了在WEB环境下开发应用的解决方案,结合其强大的数据窗口和PowerScript语言,使得开发人员能够在浏览器端提供类似桌面应用的体验,同时利用服务器端的强大...
脚本回调的关键在于,它利用了“Microsoft.XMLHTTP”ActiveX对象(非IE浏览器使用XMLHttpRequest对象)作为客户端回调管理器组件的底层协议,因此,XML RenderFormat与脚本回调有天然的兼容性。 XML RenderFormat...
8. **高级功能**:如Web服务集成、ActiveX控件使用、用户自定义函数和类的创建等。 9. **版本控制与团队协作**:PB在版本控制工具如SVN或Git下的使用策略,以及如何在团队中有效协作。 10. **最佳实践与案例分析**...
1. **Web服务**:PB可以调用Web服务(SOAP或RESTful),将PB应用程序与Web应用程序进行集成。 2. **DLL/ActiveX**:通过调用DLL或ActiveX组件,PB能与非PB环境下的代码进行交互,增强功能。 3. **Excel导出**:使用...
Microsoft WebBrowser 控件是基于Internet Explorer的一个ActiveX控件,它允许开发者在应用程序中嵌入网页浏览器的功能。在PowerBuilder中使用该控件的步骤如下: - 在PowerBuilder的窗口中插入OLE对象。 - 通过...
- **DataWindow**:PB的核心特性之一,DataWindow是用于数据展示和操作的强大组件,能处理复杂的SQL查询,支持多种数据库系统。 2. **数据库连接与操作** - **ADO.NET与ODBC**:PB可以使用ADO.NET或ODBC进行...
在 PowerBuilder、Web DataWindow 和 Web ActiveX 中,该方法的语法为: ```plaintext string dwcontrol.Modify(string modstring) ``` - **dwcontrol**: 指向一个数据窗口控件、数据存储或子数据窗口的引用。 - *...
9. **ActiveX Control**:开发人员可以将PowerBuilder组件作为ActiveX控件发布,供其他应用程序使用。 10. **Internationalization and Localization**:支持多语言和全球化,便于构建适用于不同地区和文化的软件。...
7. **Applet和ActiveX Support**:PowerBuilder 8.0 可以生成Java Applet或ActiveX控件,使得应用程序能在Web浏览器中运行,拓展了应用程序的分发和使用范围。 8. **PBL(PowerBuilder Library)和Workshop**:PBL...
使用C++ Builder和Delphi,开发者可以利用VCL(Visual Component Library)或FireMonkey框架来构建高效的桌面、移动和Web应用程序。C++ Builder采用C++语言,支持COM、ActiveX等技术,Delphi则使用Object Pascal语言...
9. **高级特性**:可能涉及PowerScript(PowerBuilder的内置脚本语言)、用户自定义函数(UDF)、ActiveX集成、Web服务等高级主题,提升开发能力。 10. **最佳实践和调试技巧**:学习如何编写高效、可维护的代码,...
在6.5版本中,PowerBuilder开始支持Internet应用开发,引入了Web DataWindow,使得开发Web应用程序成为可能。Web DataWindow可以将数据窗口转换为HTML格式,通过HTTP协议传输到客户端,从而实现了B/S架构的应用开发...
PowerBuilder可以与其他系统进行接口集成,如通过COM/ActiveX组件与.NET或Java应用交互,或者使用Web服务接口与外部系统通信。 10. 实例分析与实战项目: 结合实例学习是最好的教学方式。通过完成实际项目,如...
A: APB 在客户端使用的是 ActiveX 技术,服务器端使用的是 J2EE 技术,包括Servlet、EJB、JDBC。APB 综合使用了 ActiveX 技术和 J2EE 技术。JSP 则主要是服务器端的技术,给客户端传来的是 HTML 标记的文档,用于...
学会使用PowerBuilder的调试工具,定位和解决代码中的错误,同时了解性能优化策略,提高应用程序的运行效率。 9. **PowerBuilder的扩展与集成**: PowerBuilder支持与其他系统和工具的集成,例如.NET Framework、...
9. **高级特性**:包括Web发布、ActiveX集成、远程数据服务(RDS)等,这些特性使PowerBuilder能够适应不断变化的技术环境。 10. **最佳实践与案例分析**:手册可能会提供一些实际项目案例,帮助读者将理论知识应用...
OCX(OLE Control Extension)是微软ActiveX技术的一部分,用于创建和使用ActiveX控件。 5. **PB9版本**:指的是该工具兼容PowerBuilder 9.0版本。PowerBuilder 9是Sybase公司发布的一个版本,它提供了许多新特性,...
同时,可能还会涉及到Web服务、ActiveX控件的使用等。 8. **集成开发环境(IDE)**:熟悉PB的开发环境,如代码编辑器、调试器、版本控制工具的使用,提升开发效率。 9. **最佳实践和案例分析**:书中可能会提供...