PBWebForm问题
PB11在webform下DW中回车键的解决
PB11在webform下DW中回车键的解决
像PB11的C/S模式一样,DW中不支持回车键,我们一般是使用send消息机制实现回车的功能。
在webform下DW中的回车键必须在client-side中解决,也就是说要修改js文件,通过实验,发现PB11在安装文件夹下的dwcommon.js 文件中,具体形如:
C:\Program Files\Sybase\PowerBuilder 11.0\DotNET\webroot\scripts\dwcommon.js中修改
函数是:HTDW_inputKeyDown()
原来的:
if (event.keyCode == 9 && !event.ctrlKey && !event.altKey && !event.shiftKey)
ProcessTab(obj);
修改为:
if ((event.keyCode == 9 || event.keyCode == 13) && !event.ctrlKey && !event.altKey && !event.shiftKey)
ProcessTab(obj);
PB11发布时,会将此文件夹下的所有文件复制到发布的WEB应用下的相同文件夹下,形如:
C:\Inetpub\wwwroot\dx_main\scripts
如果你不想改变PB11系统本身的,也可在发布完后只去修改应用下的这个文件。
VDN做为PB For Web的解决方案
VDN与比较做为PB For Web的解决方案Vesn (简称VDN)是一套互联网数据库驱动系统,是继之后另一互联网数据高速传输系统,VDN的最大特性简单、高速、安全、丰富。
同Topany 框架相比VDN不需要大规模的代码迁移更加简单,底层代码的内存控制使其性能也加优化。
我们针对VDN的几大特点进行论证VDN相对的一些优势,并对其进行一系列的测试,最终决定采用哪种方式作为PB For WEB的解决方案。
简单利用VDN系统PB程序可以像操作局域网数据库一样操作互联网数据库,开发过程同普通的C/S程序开发,旧的PB系统无须代码迁移,修改一下数据库连接就可以高速连接互联网数据库。
一套代码可以无缝在局域网和互联网之间切换,大大的缩短了系统的开发周期。
开发人员不需要学习新的开发语言,VDN不涉及用户界面,不依赖任何PB组件,完全从底层控制,所以PB程序员用起来就更简单了,发布好服务器端,几分钟就可以将普通的PB程序连接上互联网数据库。
目前支持SQLSERVER和ORACLE(ORACLE存储过程和函数调用需要小幅度改动),对于ORACLE 来讲,每台客户端不需要单独安装ORACLE客户端,更加简化了客户端的发布。
以后还会支持PB以外的开发语言,完全可以替代使用繁琐的WebService等开发形式。
高速VDN针对互联网特性优化了数据响应方式,正式版对数据采用了多线程多级压缩,基于C++的高效代码,快速完成数据处理,适应互联网大数据小体积传递的需要。
下一步VDN还将增加数据本地缓存功能,对常用不常变的数据进行本地缓存,减少数据交互次数,大幅提高表单加载速度。
安全使用了VDN服务器端的数据库不需要开放端口,客户端不需要知道数据库的的任何信息,这样就减少了数据库受外网攻击的机会。
此外客户端同服务器端交互遵循消息契约,不是任意客户端就可以通过服务器端获取数据,安全性得到提升。
丰富除了基本的数据处理,VDN提供了即时消息推送,在线用户维护等功能。
关于PB11的Webform方式下客户端代码的深入编程
关于PB11的Webform方式下客户端代码的深入编程PB11为了不致使在客户端浏览器上修改DW的数据时产生过多的服务器端的回调请求(PostBack,现象是屏幕闪烁厉害,特别是慢机器),提供了客户端事件脚本JavaScript语言来解决,一般是这样的方式调用:1. 首先使用任何文本工具编写自己的js脚本,假设命名为:myscripts.js2. 在含有DW的窗口OPEN事件中书写如下形式的代码:#IF DEFINED PBWEBFORM THENdw_1.JavaScriptFile = "myscripts.js"dw_1.OnClientItemChanged = "bmbh_ItemChanged"#END IF上面的意思是说:如果是发布为WebForm应用,则给DW_1设置一个脚本处理函数,当client端的项目值发生改变时,调用JS文件中的“bmbh_ItemChanged”函数(来处理有关检查、计算等需求)如下是JS中该函数的具体代码:function requ_bmbh_ItemChanged(sender, rowNumber, columnName, newValue){if(columnName == "bmbh"){// The default function is invokedreturn PBDataWindow_ItemChangedReject(sender, rowNumber, columnName, newValue);}else{//do nothing}}意思是:当字段“bmbh”的值改变时会自动执行PBDataWindow_ItemChangedReject(会产生回调),因此当你在DW中编写了 PB 的PowerScript脚本时,实际上就会执行你的代码,你可以在ItemChanged事件中编写你的处理BMBH改变的代码,例如处理一个 DDDW来筛选指定部门的职工。
PB数据窗口技巧问答
PB数据窗口技巧问答数据窗口是PowerBuilder中用于显示、获取和更新数据库表格的对象之一、在使用数据窗口进行数据操作的过程中,有一些技巧和常见问题需要注意和解决。
以下是对数据窗口技巧和问答的详细介绍。
1.如何在数据窗口中添加一个新的数据库表格?可以通过以下步骤在数据窗口中添加一个新的数据库表格:(2) 选择“Insert”菜单,然后选择“Tables”子菜单。
(3)在弹出的对话框中选择要添加的数据库表格,然后点击“OK”按钮。
2.如何在数据窗口中显示特定的数据列?可以通过以下步骤在数据窗口中显示特定的数据列:(2) 在画布区域中右键点击并选择“Insert”菜单,然后选择“Columns”子菜单。
(3)在弹出的对话框中选择要显示的数据列,然后点击“OK”按钮。
3.如何在数据窗口中设置筛选条件?可以通过以下步骤在数据窗口中设置筛选条件:(2) 在画布区域中右键点击并选择“Filter”菜单。
(3)在弹出的对话框中输入要设置的筛选条件,然后点击“OK”按钮。
4.如何在数据窗口中设置排序条件?可以通过以下步骤在数据窗口中设置排序条件:(2) 在画布区域中右键点击并选择“Sort”菜单。
(3)在弹出的对话框中选择要设置的排序条件,然后点击“OK”按钮。
5.如何在数据窗口中添加计算列?可以通过以下步骤在数据窗口中添加计算列:(3)在弹出的对话框中输入计算列的表达式和名称,然后点击“OK”按钮。
6.如何在数据窗口中设置格式化?可以通过以下步骤在数据窗口中设置格式化:(2)在画布区域中选择要设置格式化的数据列。
(3) 在属性窗口中选择“Format”选项卡,然后选择要应用的格式化类型和样式。
7.如何在数据窗口中执行增、删、改操作?可以通过以下步骤在数据窗口中执行增、删、改操作:(1) 在数据窗口画布区域中右键点击并选择“Insert”菜单,然后选择“Rows”子菜单来添加新的行。
(2) 在数据窗口画布区域中右键点击并选择“Delete”菜单来删除选定的行。
PB11下的WebForm客户端打印输出的处理
PB11下的WebForm客户端打印输出的处理PB9后已经支持输出PDF类型的打印输出。
但如果要通过PB11的WebForm 模式在客户端输出PDF文档,必须安装SYBASE提出的虚拟打印驱动。
以下是我的经验:1.下载安装GhostscriptGhostscript是一个多功能的Postscript数据处理程序,能把Postscript 转换成不同的格式,是一套基于Adobe、PostScript及可移植文檔格式PDF的页面描述语言等而编译成的免费软件。
安装GS时,使其在PB11下能工作,一要注意其版本。
这点让我走了很多弯路,因为在网上查找时,我找到的是GS6.05,结果一直调试不通,要么生成不了PDF文件,要么生成的文件使用Adobe打不开,请求sybase的newsgroups 也搞不清什么原因,后来我下载了一个gs7.06后,一切问题就解决了。
点这里下载gs706w32.exe然后直接安装即可。
另外需要注意的安装位置,因为按SYBASE的提示装在PB软件安装目录下的Shared\PowerBuilder\gs下,最后的目录结构应该是:2. 添加虚拟打印机在 Shared\PowerBuilder\drivers 下建立一个批处理文件,内容是(注意是在一行内):rundll32.exe printui.dll, PrintUIEntry /if /f .\\ADIST5.INF /r "LPT1:" /b "Acrobat Distiller" /m "Acrobat Distiller"然后执行它创建一个虚拟打印机,然后将打印机的名字修改为“Sybase DataWindow PS”3. 修改打印机的用户操作权限如果没有ASPNET用户,必须先添加。
(注意我的是在XP下的操作)最后将打印机设置为默认打印机。
4. 最后就可输出dw的内容了示例代码如下://dw_report的“Data Export”下的“format to configure”修改为PDF //Saving as PDF select the distill methoddw_report.Object.DataWindow.Export.PDF.Method = Distill!//select printerdw_report.Object.DataWindow.Printer = "Sybase DataWindow PS"dw_report.Object.DataWindow.Export.PDF.Distill.CustomPostScript=" Yes"//printing pdf filesdw_report.SaveAs ( "zzz.pdf",PDF!,false)#if defined PBWEBFORM thenDownloadFile("zzz.pdf", true) // true=打开, false=下载#end ifdw_report.print() //如果要显示内定的打印任务窗口。
PB开发过程中几个常见问题的解决方案
PB开发过程中几个常见问题的解决方案第2l卷第5期2000年9月微计算机应用MICRoCoMPUTERAPPLICATIONSV01.21.No.5Sept.,2000PB开发过程中几个常见问题的解决方案宋铭(海军装备论证研究中心系统所北京100073)摘要:PowerBuilder开发过程中经常遇到‘些问题,如窗12I内控件尺寸位置的动态调整、下拉式数据窗口增量式录入、数据窗121多表更新等。
本文针对这些问题,分别提出了通用解决方案。
关t词:PowerBuilder数据窗口动态调整增量式录人多表更新1窗口内控件尺寸、位置的动态调整PowerBuilder的窗口对象是应用程序的主要图形用户界面(GUl),窗121对象内可放置各种控件,使得应用程序具有很强的表现力。
本文以PowerBuilder6.5为例,阐述实现控件动态调整尺寸、位置的方法。
PowerBuilder的窗121对象有一个重要的属性Control[]数组,它存储了窗口内放置的所有控件(运行时动态建立的控件除外),数组类型为WindowObject。
WindowObject包含两个子类,其中类DragObjeet有x、Y、Width、Height属性,类DrawObjeet(包括椭圆、矩形、圆角矩形、线段控件)一般用于窗口的美化装饰。
窗口事件Resize有两个整型参数NewWidth、NewHeight,代表改变尺寸后的窗口宽度、高度,与窗口原高度、宽度比较,得到两个比例x—proportion、Y—propoi'tion,分别利用这两个比例,计算出控件的x、Y、Width、Height属性。
即实现了窗口内控件尺寸的动态调整。
具体方法如下(以下脚本未考虑类DrawObject)。
在窗口画板建立新窗口W—ancestor,定义以下实例变量:Private:∥为了创建高度封装的对象,禁止Inti,J//循环计数器、可拖动控件计数器该类的后代对以下窗口实例变lRealww,hh//窗口上次的宽度、高度量的访问DragObjecta口//可拖动控件数组在其0pen事件中编写以下脚本:∥将Control[]数组存入a口数组中j--UpperBound(Contr01)FORi—lTOJa[i]=Control[i]在Resize事件中编写以下脚本:Realx—proportion,Y—proportion//x、y方向调整比例本文于2000—02—23收到.2000033l收到修改稿NEXT∥将窗口初始宽度、高度存入变量WW、hhWW—this.Widthhh=this.Height∥防止被0除IFNewWidth=0orNewHeight一0THEN万方数据。
PB中程序的错误和异常处理方法
PB中程序的错误和异常处理方法在PB(PowerBuilder)中,错误和异常处理是非常重要的,以确保程序的可靠性和稳定性。
当程序执行过程中发生错误或异常时,正确的处理方法可以帮助我们更好地定位和解决问题,避免程序崩溃或出现不可预料的行为。
本文将详细介绍PB中的错误和异常处理方法。
在PB中,常见的错误类型包括语法错误、运行时错误和逻辑错误。
语法错误是由于编码错误导致的,比如拼写错误、缺少标点符号等。
运行时错误是在程序运行过程中发生的错误,比如类型不匹配、数组越界等。
逻辑错误则是由于程序设计的问题导致的,比如算法错误、逻辑漏洞等。
对于运行时错误,PB提供了一些内置函数用于捕获和处理这些错误,比如Try-Catch机制。
Try-Catch机制允许我们在代码块中捕获可能抛出异常的代码,并在捕获到异常时执行相应的处理逻辑。
以下是PB中Try-Catch机制的基本使用示例:try//可能会抛出异常的代码//...catch(Exception e)//异常处理逻辑//...在Try块中可以放置可能会抛出异常的代码,当异常发生时,系统会自动跳转到Catch块中,并执行相应的异常处理逻辑。
在Catch块中,我们可以根据具体的异常类型进行不同的处理,比如输出错误信息、记录日志、回滚事务等。
除了Try-Catch机制,PB还提供了其他一些处理异常的方式。
比如可以使用ON_ERROR语句来处理未处理的运行时错误,使用ERROR函数来显示错误消息,使用MESSAGEBOX函数来弹出对话框显示错误信息等。
另外,PB还提供了一些调试工具,帮助我们快速定位和解决问题。
比如可以使用Trace功能来打印程序的执行流程和变量的值,使用Debug 功能来逐行调试程序等。
这些工具在错误和异常处理中起到了非常重要的作用,可以更好地帮助我们理解程序运行时的情况,找出问题所在。
总结起来,PB中的错误和异常处理方法包括使用Try-Catch机制来捕获和处理异常,在Catch块中执行相应的异常处理逻辑。
PB11和IIS7部署webform
将pbtutor应用程序作为Web Form部署至Windows Vista平台的IIS7上VAZI OKHANDIAR 与ALON BAADANI我最近买了一台新笔记本电脑。
然而挑选操作系统却折腾了我两个星期。
最后,我决定跟随潮流。
我订购了我的首套Vista系统。
但那只是一个艰苦卓绝的开端,直到现在我还在努力把我的环境和工具恢复正常!当我启动PowerBuilder 11.0的应用程序时,我首先注意到随PowerBuilder自带的pbtutor示例程序不能运行。
帮助文件也不能打开。
如果你刚开始碰到的情况和我说的类似,那么我希望你可以不用花太长的时间去将应用部署至IIS 7.0上作为.NET Web Form应用程序运行。
主要问题是Vista新的用户帐号控制器(User Account Control, UAC)阻止PowerBuilder连接数据库并运行pbtutor。
UAC是Windows Vista新的安全组件。
与XP的区别是,Vista并不会针对管理员(Administrators)组内的成员进行自动用户授权以访问所有Windows的资源。
关于如何更改UAC设置的信息,请访问/,然后搜索“Windows Vista User Account Control Step by Step Guide”。
无论你现在使用的Vista版本,有一种通用的解决方案是将应用程序的属性配置成使用administrator运行。
要将PowerBuilder应用程序配置拥有管理员的权力,可以从“所有程序”的菜单中鼠标右键单击PowerBuilder应用程序,然后选择“属性”,并在PowerBuilder 11.0属性窗口中选择“兼容性”选项页。
在PowerBuilder 11.0属性窗口中,点击“高级”按钮。
这将弹出高级属性窗口,选中“以系统管理员运行”选项,并单击“确定”(见图1)。
图1下一步:启动Internet 信息服务(IIS)Windows Vista自带了IIS 7.0和.NET框架。
PB问题解答之二
PB问题解答之⼆⼗⼀、在程式中如何控制让使⽤者在输⼊资料时,能够⾃动产⽣连续性的号码?在定义TABLE栏位时,其default值(最後⼀栏)设定中有⼀autoincrement选项,即会⾃动产⽣连续的号码。
⼗⼆、如何在视窗之间传递叁数?PowerBuilder提供了三个函数可以达到此功能:1.OpenWithParm()2.OpenSheetWithParm()3.CloseWithReturn()当在程式中呼叫了这些函数时,从视窗所传过来的叁数会放在message物件中。
可从message的属性中取得所要的叁数。
⼗三、<Function><Window Function><User Object Function>有何不同?<Function>:是任何Window 都可以使⽤<Window Function>:适⽤於单⼀Window<User Object Function>:适⽤於单⼀Object⼗四、如何读取不同Database的Data?1.点取PowerBar的Pipline(Painter Bar的Pipline)2.选择New3.在Quick Select下选取Source Connection和Descination Connection4.选取Tables和Columns⼗五、何谓汇⼊(Import)汇出(Export)?如何汇⼊及汇出?1.汇⼊(Import)汇出(Export):Import⽤於使Power Builder能读取其他软体的资料,Export则正好相反2.如何汇⼊及汇出:从Rows功能表中选择Import,出现Select import file视窗;指定要汇⼊的资料所在的档案名称,再选择Ok!⼗六、<Primary Buffer><Filter Buffer><Delete Buffer>三者的差异?<Primary Buffer>:存放使⽤者可以看到的资料列<Filter Buffer>:存放在资料视窗中滤掉的资料列<Delete Buffer>:存放被使⽤者透过程式码删除的资料列如果我们为该资料视窗定义了Filter,则被过滤掉的资料被转存放在Filter Buffer中,使⽤者不能再对这些资料进⾏修改,当资料被重新存⼊资料库其馀的资料保持不变,在刚开始时,先滤除不合格的资料外,其馀的资料都被存放到Primary Buffer中,使⽤者透过资料视窗控制件提供的⼀些Function可以对Primary Bu ffer中的资料进⾏动作,如果某列资料被删掉了,它就从Primary Buffer 移⾄D elete Buffer,使⽤者就不能在资料视窗中看到它,当呼叫Update function时重新把资料写⼊资料库时,Primary Buffer中的资料被写回硬碟,⽽Delete Buffer中的资料即被加上删除标记之後放回资料库或者直接被删除。
PB数据窗口技巧问答
PB数据窗口技巧问答1.如何让存储文件目录的列,显示图片? 答:选择对应的column的display as picture属性为true2、如何复制grid类型的所选择的行的数据到系统剪切板?答:string ls_selectedls_selected=dw_1.Object.DataWindow.Selected.Dataclipboard(ls_selected)3、如何复制graph风格的datawindow中的图形到剪切板?答:dw_1.clipbord("gr_1")4、如何设置的DW底色?在DW的editsource中改变color的值5、如何将Grid风格改成自由格式?在DW的editsource中将processing=1的1改为06、要新建一个表A但风格和现有表格B风格一样,怎么将A表快速设置成表B风格?复制B表C,在C表的DW中的editsource中将表名和字段名改成A表的,即可7、如何实现gird风格的datawindow的多栏表头?答:添加 text到header带区,并设置band属性为foreground保存,edit source 修改text的x和width 属性表达式如下:x="100~t integer(describe('firstcol.x')" width="100~tinteger(describe('lastcol.x')) -integer(describe('firstcol.x')) +integer(describe('lastcol.width'))8、如何过滤dddw编辑风格的显示值为指定值的记录?答:dw_1.setfilter("lookupdisplay('column_name')='"+ls_display_value_your+"'")dw_1.filter()9、如何设置datawindow的某一列为空?答:string ls_temp[]setnull(ls_temp)dw_1. O B J E C T.columnname.primary.current=ls_temp10、如何设置datawindow的单双行不同颜色间隔?答:在detail带区的color属性表达式中写上if(mod(getrow(),2)=1 ,rgb(255,0,0),rgb(0,255,0)),如果是当前行以第三种颜色表示,表达式如下:if(getrow()=current(),rgb(255,0,0),if(mod(getrow(),2)=1 ,rgb(0,0,255),rgb(0,255,0)))11、如何获取指定名称的datawindow O B J E C T?答:DWObject ldwo_use,ldwo_abcldwo_use = dw_1.Objectldwo_abc = ldwo_use.__get_attribute("t_1",FALSE)//t_1为datawindow中text对象的名称注﹕不是版本的问题,是你没找对位置。
pb中程序的错误和异常处理方法
PB程序中的错误处理方法PB开发中常会用到一些对错误的处理方法,根据错误的不同,处理方式也不相同。
常见的几种错误有系统级错误、数据库错误、数据窗口语法错误等。
1)系统级错误可以通过systemerror事件;2)数据库错误如果使用嵌入SQL可以通过Transcation属性获得,如果是数据窗口或数据存储可以通过dberror事件获得(要处理数据存储的错误捕捉必须通过继承实现);3)数据窗口语法错误,例如在DataWindow中使用SetFilter和Find函数时如语法错误就会自动弹出语法错误的提示信息,对于此类错误,可以改用DataStore来处理,因为DataStore使用SetFilter和Find函数时语法错误不会自动弹出而是返回-1。
以上几种方法都是对一些可以预知的错误的处理,实际开发中还会遇到很多不可预知的情况,会使程序错误,严重的使系统崩溃,停止运行。
例如,调用外部控件读取设备的信息,会有很多无法预知的错误,导致程序崩溃。
为防止不可预知的异常情况,避免系统崩溃,PB9中提供了处理此类异常的方法:TRY...CATCH...FINALLY...END TRY,其语法规则如下:TRYtrystatements //这里写自己的程序语法段CATCH ( ThrowableType1 exIdentifier1 )catchstatements1 //发生ThrowableType1异常时的程序处理CATCH ( ThrowableType2 exIdentifier2 )catchstatements2 //发生ThrowableType2异常时的程序处理...CATCH ( ThrowableTypeN exIdentifierN )catchstatementsN //发生ThrowableTypeN异常时的程序处理FINALLYcleanupstatements //不论异常发生与否,一定执行的语句放在此处,没有可以不要END TRY下面是一个简单的例子,供参考:Oleobject lo_connectlo_connect = create oleobjectli_rtn = lo_connect.ConnectToNewObject("ADODB.Connection")//lo_connect.ConnectionString=ls_connstringif li_rtn<0 then//error//-1 Invalid Call: the argument is the Object property of a control //-2 Class name not found//-3 Object could not be created//-4 Could not connect to object//-9 Other errorelsetrylo_connect.CursorLocation = 3lo_connect.ConnectionTimeout = 20lo_connect.open(ls_connstring)catch (runtimeerror err)// runtimeerror 运行时异常的处理catch (throwable err1)//其他异常的处理ls_err=err1.classname()+','+err1.GetMessage()if isnull(ls_err) then ls_err=''//messagebox("提示","连接异常!"+"~r~n"+ls_err)st_status.text="连接异常!"+"~r~n"+ls_errreturnend try下面是赠送的团队管理名言学习,不需要的朋友可以编辑删除谢谢1、沟通是管理的浓缩。
PB数据窗口技巧问答
PB数据窗口技巧问答一、控制数据窗口的显示方式1.使用数据窗口的打开方式:数据窗口可以在工具栏上选择打开方式,如:只读、可更新、可插入等。
3.使用数据窗口对象属性:在对象属性中设置数据窗口的显示方式,如设置为只读或可更新。
二、使用过滤器1. 使用过滤器自动过滤:在PowerBuilder中,可以通过在数据窗口对象的过滤器属性中设置过滤条件,自动过滤查询结果。
2.使用过滤器窗口:在运行时,可以使用过滤器窗口手动设置过滤条件,实时过滤查询结果。
三、使用计算列1.创建计算列:计算列用于在数据窗口中显示计算结果。
可以通过在数据窗口对象的计算列属性中设置计算表达式来创建计算列。
2. 使用计算列函数:PowerBuilder提供了一系列的计算列函数,可以通过在计算列属性中设置函数来实现复杂的计算操作。
四、使用排序功能1.使用数据窗口控制台进行排序:在数据窗口控制台中,可以使用排序按钮对查询结果进行排序。
2.使用数据窗口对象属性进行排序:在数据窗口对象的排序属性中设置排序条件,可以在运行时自动对查询结果进行排序。
五、使用数据窗口查询功能1.使用查询按钮:在数据窗口中添加查询按钮,可以方便用户执行查询操作。
2.使用自定义查询功能:可以在数据窗口对象的SQL属性中设置自定义查询语句,从而实现更高级的查询操作。
七、使用导航功能1.使用导航按钮:在数据窗口中添加导航按钮,可以方便用户浏览查询结果。
2. 使用导航函数:PowerBuilder提供了一系列的导航函数,可以通过调用这些函数实现数据的导航操作。
八、使用图形功能1.添加图形控件:可以在数据窗口中添加图形控件,用于显示图形数据。
2. 使用图形函数:PowerBuilder提供了一系列的图形函数,可以通过调用这些函数实现图形数据的处理和显示。
九、使用数据窗口布局功能1.使用数据窗口布局:可以在数据窗口对象的布局属性中设置布局方式,实现不同的显示效果。
2.使用数据窗口常规属性:在常规属性中,可以设置数据窗口的大小、位置、标题等。
PB调用各类WebService或c#程序
PB调用各类WebService或c#程序慢慢的有很多接口pb都已经无法调用了,还有一些进制计算,位移等pb都无法实现,这时最简单的就是用c#做好,让pb调用。
但是pb只能调用最基础的c++开发的标准dll。
通过无数次的百度,我找到了一个好的方法,也许您已经知道了。
但是我觉得还是要写出来,只要还有一个为此发愁的朋友存在。
谢谢!方法思路是:1、用c#写一个类,方法的参数一定要用标准数据类型,返回值也要是标准数据类型(string、int或者结构等等)。
在这个方法里面调用各类webservice或其他http接口等pb无法直接调用的。
2、我正巧要做一个调用java写的webservice,下面贴出代码,供参考,因为用csc.exe编译程序无法处理引用,所以using System;using System.Collections.Generic;using System.Text;using System.Security.Cryptography;namespace ysxt{public class ws{public string sendrecv(string sUser, string sPwd){string retu = "";try{xjca.YsxtMainServiceImplService myrefe = new xjca.YsxtMainServiceImplService(); //这里就是解决csc.exe无法编译引用问题的,xjca是在另外一个ysws.cs文件里,这个cs文件不是我写的,也不能写出来,这是用另外一个命令生成出来的,具体命令看本文最后备注myrefe.Url = myUrl;retu = myrefe.sendRecv(sUser, sPwd);}catch (Exception e){return e.Message;//一定要用try....catch,否则pb调用过程中出现错误,都没有办法知道哪里错了,这句话就是关键。
PB考题答案
请回答有关PB的问题1.一个窗口中有二个datawindow(dw_1,dw_2),在dw_1和dw_2的constructor 事件以及窗口的open事件中都写有脚本,写出它们的执行顺序。
答:Constructor 事件在窗口的open事件之前发生,dw_1和dw_2的constructor 事件执行顺序取决于它们的创建顺序。
2.1)什么时候触发datawindow的itemchanged event 和itemfocuschanged event?什么情况下要在这两个事件中写脚本?答:itemfocuschanged 是在焦点发生变化且获得焦点时发生。
itemchanged 是datawindow的column 改变且失去焦点时发生。
update() 前会调用accepttext(),accepttext()检验界面编辑text 到buffer 时如发生错误,报错datawindow失去焦点,此时也会触发datawindow的itemchanged event 。
一般itemchanged 没有触发itemerror 接受数据则会触发itemfocuschanged。
2)参数dwo代表什么?写出一两种用法。
答:Dwobject,itemchanged event; itemfocuschanged event ; itemerror event ;editchanged event.3)itemchanged event中参数data为什么是string类型?在itemchanged 事件中用getitemstring() 或getitemnumber()等函数能取到当前行列的数据吗?答:没有调用accepttext()检验成功前,更新的datawindowt编辑内容不能更新到primary缓冲区中。
4)选择:retrieve()函数有可能触发A.itemchanged eventB.itmefocuschanged eventC.两个都触发D.两个都不D3.解释datawindow的3个buffer的作用,以及datawindow的update()函数如何根据buffer 和dwitemstatus(即new!,notmodified!等)的值生成SQL语句的。
PB数据窗口技巧问答
PB数据窗口技巧问答PB(PowerBuilder)是一种集应用程序开发、部署和维护于一体的集成开发环境(IDE)。
PB数据窗口是PB的核心组件之一,用于与数据库交互和显示数据。
以下是一些PB数据窗口技巧的问答,帮助您更好地理解和使用PB数据窗口。
1.什么是PB数据窗口?PB数据窗口是PB的一个重要组件,用于与关系型数据库进行交互和显示数据。
它提供了丰富的功能,包括数据检索、修改、删除和插入等。
数据窗口可以通过自动生成的SQL语句或手动编写的SQL语句来实现与数据库的交互。
2.PB数据窗口有哪些类型?PB数据窗口有多种类型,包括查询数据窗口(Browse DataWindow)、单行数据窗口(Single Row DataWindow)、自由形式数据窗口(Freeform DataWindow)和图表数据窗口(Graph DataWindow)等。
每种类型都适用于不同的数据交互和显示需求。
3.如何创建一个PB数据窗口?创建PB数据窗口可以通过PB的IDE界面进行操作。
首先,打开PB的设计视图,在对象树中选择需要添加数据窗口的PBL或PBT文件。
然后,在菜单栏中选择 File -> New -> DataWindow,根据需要选择数据窗口类型并完成相关设置。
最后,设计数据窗口的外观和布局,并与数据库进行绑定。
4.PB数据窗口如何与数据库交互?PB数据窗口可以与数据库进行交互,并对数据进行增、删、改、查操作。
在设计视图中,可以绑定数据窗口的SQL语句或存储过程,通过调用数据窗口的相应方法或事件触发数据库操作。
数据窗口还可以设置过滤器、排序、分组和连接等功能,实现更复杂的数据处理逻辑。
5.如何在PB数据窗口中显示数据?PB数据窗口可以通过数据源对象(如数据库表或查询)来显示数据。
在设计视图中,可以设置数据窗口的数据源属性为相应的数据源对象,然后通过设计数据窗口的布局和样式,以及定义显示数据的参数和条件,来展示数据。
高版本PB问题续
关于把企星ERP升迁到高版本PB的若干问题(续)小试PowerBuilder 11.0新功能PB11增加了几种对微软dotNet支持的新功能。
其中之一是可以把原来开发的C/S程序转成网页,PB11叫做生成Web Form。
现在就尝尝鲜吧。
小试一下,看看有什么效果。
环境搭建既然是网页的东西,又是dotNet就一定要安装Windows的IIS,而且是5.0及以上。
既然是支持微软dotNet的东西,一定要安装微软的FremeWork SDK 2.0。
除此之外,PB11还要求事先安装微软的“IE WebControls”,这东西只有1.0版,而且据说微软已经不再支持了。
试验时使用了一台P III 933,256M内存,30 G硬盘,Windows XP sp2。
屏幕分辨率为800×600。
试验效果在看这篇文章的其它内容之前,先看看转换效果吧。
如果有兴趣,看完效果再耐着性子看下集《用PB11生成Web Form的操作过程》的内容。
试验时先用PB 651做了两个简单的程序,升迁成PB11。
转换一下试试,能够成功。
然后直接用企星ERP演示版的PB651基类,升迁成PB11转换一下,看看对基类支持到哪种程度。
下面是一些屏幕截图。
·QXERP登录界面因为制作时没有修改PB11默认的屏幕分辨率,欢迎图片超出了我的800×600的范围。
·QXERP主菜单界面也是屏幕分辨率的关系,显示成这个样子了·左边的树展开一层之后的主菜单界面·在部门管理中想用菜单查看组织结构图·能够打开组织结构图的窗口,说明菜单是可用的·在表管理中能够知道支持标签页(TabPage)·人员基本信息管理,支持动态生成的数据窗口·支持下拉数据窗口·双击“性别”字段,弹出对话框·支持下拉日历对话框·数据变更后未保存,退出时弹出询问对话框·工具栏图标有小提示初步印象从上面的一些屏幕截图看好像还比较完美,不像相像的那么糟糕。
PB应用走向WEB的技术方案选择
PB应用走向WEB的技术方案选择—Appeon for PowerBuilder WEB 发布和J2EE WEB应用重写方案的比较1 概述大多数企业已经认识到,将现有基于Client/Server架构的PB应用转换为成熟的N-Tier WEB 架构会给企业带来诸多的优势。
其中最显著的一点是在延伸企业应用到WEB架构之后,将会有更多的人如员工、合作伙伴、客户以及其他相关人员,能通过使用该WEB应用来运行相关的业务流程。
当他们在获得授权之后,可以通过互联网(Internet)随时随地访问WEB应用,让企业的运转更加方便、高效而有序。
另一方面,WEB应用和C/S应用比较而言,会更具伸缩性、更安全、更加易于维护,同时能有效地降低企业的总体拥有成本。
最为重要的是,应用转到WEB架构之后,能为企业带来可持续增长的利润和长期的竞争优势,保证企业在未来的日子里立于不败之地。
1.1 可行的解决方案由于J2EE平台的稳定性、安全性、平台无关性,以及许多基于J2EE平台的成功案例,使得很多企业更加关注J2EE平台。
因此本文侧重于介绍基于J2EE平台的解决方案:方案一、利用J2EE技术重写出一个全新的WEB应用。
重写以后,将在J2EE开发环境中维护新的应用。
方案二、使用Appeon for PowerBuilder(以下简称APB)产品对原有PB应用程序在PowerBuilder(以下简称PB)开发环境中进行WEB发布[注:APB不仅可以将应用发布到基于J2EE平台运行,也可以将应用发布到基于.NET运行]。
1.1.1 利用J2EE技术进行WEB应用重写重写是指利用J2EE技术按照原有的业务规则开发出一套新的WEB应用程序。
因此,整理出原有PB应用的业务规则和数据结构是所有重写活动的起点,同时也是重点。
原有PB应用的业务规则和数据结构的整理质量对于项目是否成功将起到决定性的作用。
然后再使用HTML、CSS、JavaScript、Jsp、Servlet、EJB等技术去实现这些已经整理出来的业务规则和数据结构。
PBWebForm问题
PowerBuilder 11~12.5的WebForm问题PowerBuilder11及更高版本提供将已经开发完毕的软件转化为类似于B/S的,客户端可以只使用浏览器的WebForm版本。
这个功能看似给熟悉传统PB开发的人员带来极大方便,实际上并没有什么实用性,并不能代替B/S开发。
开发人员还是要踏踏实实去学习B/S开发方法。
还是需要自己去亲自掌握C#(PowerBuilder的转WebForm是把原来程序先转成C#的),不能认为有了就能够偷懒。
一Resize问题(改变大小问题)由原来程序转成WebForm后,Resize的表现很不好。
打开窗口后,窗口中该扩大的控件——例如数据窗口、图片等不能够扩大到预想的大小。
用鼠标点击菜单等,或者出来一个对话框后,才能达到预想大小。
原来的程序在Resize的计算中是以newheight和newwidth为准的。
在WebForm的Target 里有一个Configuration的选项卡,其中的PBWindowDefaultHeight和PBWindowDefaultWidth 分别为指定MDI、MDIHelp及main类型窗口高度和宽度用的,默认值是600和1003。
折合成PB单位为2400和4585,newheight和newwidth就是这个值了。
以此作为Resize的基准,在1024×768显示器上看就会觉得不对头。
PowerBuilder制作出来的网页文件中,有一个default.htm,这个文件将检测当前屏幕分辨率,计算出浏览器工作区的大小,然后带参数启动default.aspx?<参数列表>。
传入的参数将改变PBWindowDefaultHeight和PBWindowDefaultWidth的值。
这样一来使MDI、MDIHelp 及main类型窗口的大小更适合于屏幕,看上去就好多了。
对于MDI或MDIHelp窗口中的Sheet窗口,需要以workspaceHeight()和workspaceWidth()为准来计算。
PB考试试题及答案
PB考试试题1、什么是窗口或控件的消息队列控件(包括窗口)都可以响应一系列的不同事件,当多个事件发生时,这些事件会根据触发先后或者触发方式(比如Trigger, Post)不一样,建立一个事件的消息队列来依次执行。
PB中的消息队列和VC中的消息队列是一样的,只是VC中允许显式的处理,而PB则基本上自动处理了,不过也预留了二部分的接口,一是预定的一些方法名,如close(),open(),size()等,这些基本上对应了VC中的WM_CLOSE,WM_CREATE,WM_SIZE,而还有一类是要自定义的,方法就是在PB中新建一个事件,然后在事件ID列表中选择一个ID号,就可以处理相对应的事件。
2、窗口和控件的区别是什么?窗口是应用程序与用户交流的主要界面,用它可以显示系统的有关信息,响应用户的鼠标和键盘输入等等;控件是对数据和方法的封装,它可以有自己的属性和方法。
属性是控件数据的简单访问者;方法则是控件的一些简单而可见的功能。
3、什么是上下文?一种属性的有序序列,它们为驻留在环境内的对象定义环境。
在对象的激活过程中创建上下文,对象被配置为要求某些自动服务,如同步、事务、实时激活、安全性等等。
多个对象可以存留在一个上下文内。
也有根据上下文理解意思的意思。
上下文对象描述的是应用程序执行的上下文信息,包括当前版本、是否在PB环境内按window插件或ActiveX控件运行等。
使用上下文信息,你可以修改显示信息和应用程序行为。
4、什么是上下文服务?是为上下文所标置的对象配置相应的同步、事务、实时激活、安全性等,并且为其提供一个相应的软件运行环境。
5、在建表的时候忘了添加列的唯一性指定,后来发现错误了,想加上去,结果提示有一个两行是不唯一的,问如何知道是哪两行不唯一,使得出现错误?对表的所有字段创建唯一索引,通过异常来获得含有相同值的rowid,然后关联原表来实现.生成测试表及测试数据。
6、什么叫继承?PB的非可视对象能否实现继承?继承就是面向对象中类与类之间的一种关系,继承的类称为子类,派生类,二被继承的类称之为父类、基类或超类。
PB如何提交WEB请求包含中文参数的解决方案全过程
PB如何提交WEB请求包含中文参数的解决方案全过程我要做的事情:我要用POST方式发送WEB请求到服务器,同时传输一些中文参数过去。
开发环境:WIN7 64位下的PB10。
服务器全部都是UTF8格式的。
走的弯路:1.我先试图用inet的geturl/posturl方式,具体方法是:新建一个标准类对象,选择inet,然后保存,命名成n_inet,然后再新建一个标准类对象,选择internetresult,保存,命名成n_ir。
注意,必须要修改n_ir的internetdata(data) 函数,这个函数是处理web请求后服务器返回回来的网页的,其中的参数data就是blob形式的网页。
这两个对象建好以后,然后就可以向web服务器发送请求了,因为geturl方式比较简单,所以我先用geturl进行尝试。
String ls_url,ls_text,ls_uid,ls_sendls_url = 'http://127.0.0.1:8081/smsSys/sms/sendSms?'ls_text = '呵呵哒'ls_uid = '1002'ls_send = ls_url + 'text=' + ls_text + '&uid=' + ls_uidn_inet ln_inetn_ir ln_irln_inet = create n_inetln_ir = create n_irinteger li_retli_ret = ln_inet.geturl(ls_send,ln_ir)if li_ret <1 thenmessagebox('发生错误',string(li_ret))elsemessagebox('提示','发送成功')end ifdestroy ln_inetdestroy ln_ir运行这段代码,我发现我的服务器确实接受到了web请求,并且这里的internetdata确实接受到了服务器返回的html,但是有一个问题:中文乱码!!一开始我以为这是一个小问题,但结果,它让我付出了3天半的时间才最终解决。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PowerBuilder 11~12.5的WebForm问题PowerBuilder11及更高版本提供将已经开发完毕的软件转化为类似于B/S的,客户端可以只使用浏览器的WebForm版本。
这个功能看似给熟悉传统PB开发的人员带来极大方便,实际上并没有什么实用性,并不能代替B/S开发。
开发人员还是要踏踏实实去学习B/S开发方法。
还是需要自己去亲自掌握C#(PowerBuilder的转WebForm是把原来程序先转成C#的),不能认为有了就能够偷懒。
一Resize问题(改变大小问题)
由原来程序转成WebForm后,Resize的表现很不好。
打开窗口后,窗口中该扩大的控件——例如数据窗口、图片等不能够扩大到预想的大小。
用鼠标点击菜单等,或者出来一个对话框后,才能达到预想大小。
原来的程序在Resize的计算中是以newheight和newwidth为准的。
在WebForm的Target 里有一个Configuration的选项卡,其中的PBWindowDefaultHeight和PBWindowDefaultWidth 分别为指定MDI、MDIHelp及main类型窗口高度和宽度用的,默认值是600和1003。
折合成PB单位为2400和4585,newheight和newwidth就是这个值了。
以此作为Resize的基准,在1024×768显示器上看就会觉得不对头。
PowerBuilder制作出来的网页文件中,有一个default.htm,这个文件将检测当前屏幕分辨率,计算出浏览器工作区的大小,然后带参数启动default.aspx?<参数列表>。
传入的参数将改变PBWindowDefaultHeight和PBWindowDefaultWidth的值。
这样一来使MDI、MDIHelp 及main类型窗口的大小更适合于屏幕,看上去就好多了。
对于MDI或MDIHelp窗口中的Sheet窗口,需要以workspaceHeight()和workspaceWidth()为准来计算。
在其Open事件中加入如下代码:
if not isNull( parentwindow( )) then this.width= parentwindow( ).workspaceWidth()
if not isNull( parentwindow( )) then this.height = parentwindow( ).workspaceHeight()
而Resize计算时仍然使用newheight和newwidth,在打开窗口时就能得到满意结果了。
对于使用PB6基类的情况,在w_sheet的Open事件中加入上述代码,仍然使用基类的Resize服务,所有继承的窗口就会统统起作用。
好像除了当作Sheet的窗口之外,基类的Resize服务在其他类型窗口中不起作用。
二窗口居中问题
本来不成问题。
只有在使用基类的窗口Base服务时才有问题,表现为偏向左下。
将PFC_winsrv.pbl→pfc_n_cst_winsrv→of_center修改一下,改成直接使用高版本PB中的窗口居中属性即可。
把原来代码去掉,改成下述代码:
//Check for a window association with this object
If IsNull(iw_requestor) Or Not IsV alid (iw_requestor) Then
Return -1
End If
// Center window
iw_requestor.Center = true //为适应高版本PB改成这样
Return 1
三左TreeView右ListView界面问题
有时会使用左TreeV iew右ListView界面。
往往界面上还要有菜单,还要有菜单的工具条。
这样一来,只能使用MDI或MDIHelp类型的窗口,因为只有这两种才能程序工具条。
只要有工具条,问题就来了。
在这样界面中,左边的东西像是往下坠似的,比右边的会低很多,极为难看。
不好办了,在WebForm中不支持菜单工具条的停靠,工具条只在上,不能到别的位置去。
试了很多办法,觉得只有不要工具条才行,但是不要工具条又看上去秃秃的,不好看。
只好用一排图形按钮来代替,这样感观上稍微好一点。
大概这几乎是唯一可行的办法了。
四不支持企星ERP界面中左右拖拽
没有任何解决方案。
五树中各个项目左边加号问题
不仅仅企星ERP主界面中TreeViewItem左边的加号不能去掉,而且单击有加号无子项的节点时,右边变成空白。
不使用基类的方法,手工写树,WebForm中使用.bmp的图形都变成原大小。
在TreeView 控件属性中设置16×16,因为不支持,所以不起作用。
六浏览器问题
PowerBuilder转出来的WebForm只能使用微软IE或IE内核的浏览器。
在当今各种浏览器争雄的时代,连微软自己的.NET做出来的东西都去支持非IE内核浏览器,PowerBuilder 转出来的WebForm却不能支持实在让人不解。