首页 PowerBuilder程序员手册

PowerBuilder程序员手册

举报
开通vip

PowerBuilder程序员手册PowerBuilder程序员手册 PowerBuilder程序员手册 广东金宇恒科技发展有限公司 编号:ITC0010 编号:ITC0010 密级:机密 名称:PowerBuilder程序员手册 作者:广东金宇恒科技有限公司 修改时间:2011年2月12日 读者:广东金宇恒科技有限公司PowerBuilder程序员 审阅人: 版权信息:本文档归广东金宇恒科技有限公司所有,仅限于公司内部使用,任何人不得将其泄露给公司以外的其他人员。 PowerBuilder程序员手册 为了提高编码的效率和标准化程度...

PowerBuilder程序员手册
PowerBuilder程序员 手册 华为质量管理手册 下载焊接手册下载团建手册下载团建手册下载ld手册下载 PowerBuilder程序员手册 广东金宇恒科技发展有限公司 编号:ITC0010 编号:ITC0010 密级:机密 名称:PowerBuilder程序员手册 作者:广东金宇恒科技有限公司 修改时间:2011年2月12日 读者:广东金宇恒科技有限公司PowerBuilder程序员 审阅人: 版权信息:本文档归广东金宇恒科技有限公司所有,仅限于公司内部使用,任何人不得将其泄露给公司以外的其他人员。 PowerBuilder程序员手册 为了提高编码的效率和标准化程度,增强代码的可读性,制定本规范作为广东金宇恒科技有限公司PowerBuilder程序员开发规范,并作为PowerBuilder程序员考核的依据之一。 1. 命名规范(naming conventions) 在命名规范中,约定统一的命名规则如下: , 命名要有意义、具有描述性,避免含糊,具有可读性。 , 使用全名,名称前后要一致。 )之间用下划线分隔。 , 每个有意义的单位(单词 , 大小约定: 标识符(identifier)、对象(object)、自定义 关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函 数(user_defined function)全部小写。 1.1 pbl文件命名规范 按系统的功能模块命名,子系统内部按模块封装对象的类型命名,每个 pbl 文件应不大于800kbs,且每个pbl文件中的对象数目应控制在50个以内。 子系统内部命名以封装的对象分类,命名规范如下: <系统缩写>_<模块缩写>[_<对象分类缩写>][_<功能描述>].pbl 标准对象分类缩写如下: 对象分类 缩写 Window win Data window dw User object uo Structure stru Project prj global function fn Menu mn fe 杂项(包括application,主窗口) 例:xq_dd_dw.pbl为西樵项目党员管理模块的数据窗口对象库。 如某一类对象较多,可分建多个pbl:1、可按照对象的功能进行分类,命名在原有名称后加上功能说明,并在pbl备注中注明;2、可直接在对象分类缩写后面加上序列号,但对象在各序列的pbl库中必须按字母顺序排列。 例:xq_dd_dw_dddw.pbl为党员管理模块所涉及的下拉式数据窗口对象库; xq_dd_win1为党员管理模块的第一个window对象库。 必须对每个pbl文件加上注解。 1.2 pb对象命名规范 pb对象:指独立存在于各个pbl库中的实体。 - 1 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 为便于统一识别,pb对象命名应严格使用标准前缀。 每个子系统中建立的对象,其命名原则应考虑到将来合并为单一系统时的重名问题。若 各子系统在最终运行为各自独立运行,则对象命名时可以省略其模块代号。因此,所有对象 的命名应采用如下标准: [_<模块缩写>]_ <对象描述>[_<功能描述>] 例:d_dd_dyjbxx为党员基本信息的数据窗口,d_dd_dyjbxx_print为党员基本信息的打印 数据窗口。 pb对象创建后必须标明相应的中文描述(亦即在library中看到的注释)。 pb对象标准前缀定义及范例如下: pb对象 标准前缀 范例 application a a_sale datawindow d d_ware_stock function f f_get_string menu m m_sale_main pipeline pl pl_backup project prj prj_sale query q q_stock report r r_ware_print structure str str_parm user object u u_dw_ancestor window w w_sale_base 在对用户对象命名时,由于用户对象的基类不同,故应采用如下命名标准: u _<用户对象基类前缀>_ <变量描述> 其中,用户对象基类为visiual中custom的前缀为vcs,例: u_vcs_workbench 用户对象基类为visual中standard的前缀如下: 用户对象基类 标准前缀 范例 checkbox cbx_ u_cbx_draft commandbutton cb_ u_cb_ok datawindow dw_ u_dw_employee_entry dropdownlistbox ddlb_ u_ddlb_color_choice dropdownpicturelistbox ddplb_ u_ddplb_employee editmask em_ u_em_phone graph gr_ u_gr_emp_salaries groupbox gb_ u_gb_print_choice hscrollbar hsb_ u_hsb_red listbox lb_ u_lb_vendor_number listview lv_ u_lv_employee multilineedit mle_ u_mle_comments olecontrol ole_ u_ole_execl picture p_ u_p_employee picturebutton pb_ u_pb_update picturelistbox plb_ u_plb_view radiobutton rb_ u_rb_include_comments richtextedit rich_ u_rich_text singlellineedit sle_ u_sle_customer_name statictext st_ u_st_main_window_title tab tab_ u_tab_query treeview tv_ u_tv_department - 2 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 vscrollbar vsb_ u_vsb_percent_done 用户对象基类为class中custom的前缀为ncs,例: u_ncs_queryserver 用户对象基类为class中standard的前缀如下: 用户对象基类 标准前缀 范例 connection cn u_cn_connect datastore ds u_ds_ancestor dynamicdescriptionarea dda u_dda_first dynamicstagingarea dsa u_dsa_normal error err u_err_critical mailsession ms u_ms_session message msg u_msg_notice oleobject oo u_oo_word olestorage ostg u_ostg_storage olestream ostm u_ostm_stream pipeline pl u_pl_backup transaction tr u_tr_new transport trp u_trp_transport 1.3 控件对象(control object)命名规范 控件对象:指存在于window或可视user object中的对象。 控件对象的命名规范为: <控件对象标准前缀> _ <变量描述> 例:dw_print为供打印用的数据窗口。 控件对象标准前缀定义及范例如下: 控件对象 标准前缀 范例 checkbox cbx_ cbx_draft commandbutton cb_ cb_ok datawindow dw_ dw_employee_entry dropdownlistbox ddlb_ ddlb_color_choice dropdownpicturelistbox ddplb_ ddplb_employee editmask em_ em_phone graph gr_ gr_emp_salaries groupbox gb_ gb_print_choice hscrollbar hsb_ hsb_red line ln_ ln_shortline listbox lb_ lb_vendor_number listview lv_ lv_employee multilineedit mle_ mle_comments ole ole_ ole_execl oval oval_ oval_mid picture p_ p_employee picturebutton pb_ pb_update picturelistbox plb_ plb_vendor_number radiobutton rb_ rb_include_comments rectangle r_ r_rect richtextedit rich_ rich_text roundrectangle rr_ rr_screen singlellineedit sle_ sle_customer_name - 3 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 statictext st_ st_main_window_title tab tab_ tab_query tabpage tabpage_ tabpage_first treeview tv_ tv_department user object uo_ uo_salcalc vscrollbar vsb_ vsb_percent_done 1.4 变量命名规范 变量的命名规范如下: <作用范围><类型前缀>_<变量含义> 除一般的循环变量以外,所有定义的变量均必须加上注释以标明其用途。 作用范围: 前缀 说明 a 事件或函数的参数 g 全局变量 i 实例变量 l 局部变量 s 共享变量 类型前缀分为数据类型前缀和对象类型前缀。其中, 数据类型前缀: 说明 前缀 any a blob blb boolean b character ch date d datetime dt decimal c double dbl enumerated e integer i long l real r string s time t unsignedinteger ui unsignedlong ul 对象类型前缀: 说明 前缀 application app checkbox cbx commandbutton cb connection cn connectioninfo cninfo connectobject cno datastore ds datawindow dw datawindowchild dwc - 4 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 dragobject drg drawobject drw dropdownpicturelistbox ddplb dropdownlistbox ddlb dwobject dwo dynamicdescriptionarea dda dynamicstagingarea dsa editmask em environment env error err extobject ext graph gr graphicobject go graxis grax grdispattr grda groupbox gb horizontalscrollbar hsb line ln listbox lb listview lv listviewitem lvi mailfiledescription mfd mailmessage mm mailrecipient mr mailsession ms mdiclient mdi menu m menucascade mc message msg multilineedit mle nonvisualobject nv olecontrol oc oleobject oo olestorage ostg omcontrol omc omcustomcontrol omcc omembeddedcontrol omec omobject omo omstream omstm omstorage omstg oval oval picture p picturebutton pb picturelistbox plb pipeline pl powerobject po radiobutton rb rectangle rec remoteobject rem richtextedit rte - 5 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 roundrectangle rrec rteobject rteo singlelineedit sle statictext st structure str tab tab tabpage tabpage transaction tr transport trp treeeview tv treeviewitem tvi userobject u verticalscrollbar vsb windowobject wo window w 变量含义:简明的英文单词,能表示该变量含义的简洁单词。 1.5 函数命名规范 变量的命名规范如下: [<父对象类型>]_<函数含义> 应为函数指明父对象类型如下: 前缀 父对象类型 uf_ user object functions wf_ window functions mf_ menu functions 1.6 用户事件命名规范 用户事件命名规范如下: ue_<事件含义> 例如:ue_enter为当前对象键入回车键后触发的事件。 2. PowerBuilder语句规范 2.1 script语句规范 script语句应体现循环或控制的层次,每不同层次之间应该用一个制表符(tab)区分,如: //对数据窗口dw_items中的每一条记录的used_status赋值为1 for ll_row=1 to dw_items.rowcount() dw_items.object.used_status[ll_row]=1 //如果为当前行,则不进行后面操作,而继续循环 if ll_row=dw_items.getrow() then continue end if … next - 6 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 2.2 script注释规范 在编写script语句时,须遵循以下注释原则: , 每5、6条script语句至少应该有一条注释说明; , 每个事件、函数的开始必须包含说明信息,说明功能描述、参数描述或返回值描述等; , 在循环语句的头进行注释说明; , 在选择语句的头进行必要的注释说明; , 在条件分支语句的头进行必要的注释说明; , 在关键的script语句前进行注释说明; , 对带返回值的return语句必须对返回值进行说明。 3. PowerBuilder界面规范 3.1 应用程序总体界面规范 总体界面风格: , 分辨率:800x600显示模式 , 颜色:256色以上模式 , 字体:小字体 , 汉字系统均以win 95的汉字为标准 应用程序采用mdi多文档界面,整个应用的窗口的基本组成如下:(三级响应窗口) , 一个mdi frame with microhelp主窗口,从window型pb对象 w_mdi_base继承; , 多个response窗口,从window型pb对象w _response_base继承。 , 整个应用的菜单的组成如下:(两级菜单控制) , 一个主菜单,供mdi主窗口使用。对于用于打开sheet 窗口的菜单条,均按layered! 方式打开子窗口; , 多个二级菜单,二级菜单从主菜单继承产生,供每个二级sheet窗口使用,在一级主 菜单中如设置有toolbar,在二级菜单中不要显示主菜单定义的toolbar。为便于设定, 建议从一级主菜单继承产生一菜单,作为二级菜单共同的祖先。 3.2 窗口界面规范 在进行窗口对象设计时应遵循以下规范: 3.2.1 基本规范 是所有窗口应遵循的规范: , 窗口上的显示字体(不可编辑字体)均采用t arial , 尺寸为9; , 窗口颜色应为light gray(rgb(192,192,192)); , 窗口的控件应以3d形式显示,其中datawindow、groupbox是采用3d lower等等。 , 窗口中同类对象的大小、间距、格式要一致; , 窗口中同组对象的排列应左对齐或上对齐; , 自制(未从类库中继承)的窗口应注意操作权限的控制; , 不能擅自覆盖(Override)祖先窗口的代码,若因业务需要,则首先应将需求提交类 库维护人员讨论是否需要扩展类库,经类库维护人员同意后方可Override。 3.2.2 sheet窗口 sheet窗口遵循规范: , sheet 窗口的尺寸不固定,使用各控件时应考虑尺寸变化,其打开方式为opensheet 或 - 7 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 opensheetwithparm ; , 参考window office 风格, 将每个sheet视同工作台,尽量扩大工作台的面积,如sheet 上的控件过多,可采用tab control 分层,tab control 采用标准的pb控件,并在resize 事件中按窗口尺寸调整; , 各模块查询功能都在sheet 窗口解决, datawindow 的显示风格如果是grid 也应尽量 扩大显示面积; , 在sheet窗口中控制主要通过窗口菜单、右键弹出菜单、toolbar、热键实现,尽量避免 使用按钮, 由于sheet 的特性为多窗口, 对于一些有依赖关系的操作,应下放到第三 级response窗口。 3.2.3 response窗口 response窗口遵循规范: , response窗口只为解决简单的输入/输出问题而产生,界面应尽量简洁, 只使用少数的 几个控件构成窗口; , response窗口尺寸固定, 打开方式为open 或 openwithparm; , response窗口打开时应该在整个屏幕居中显示; , response窗口不带有菜单。 3.2.4 数据维护查询窗口 数据维护查询窗口是指从窗体w_dataedit_masterdetail, w_dataedit_master_two_detail, w_dataedit_multiple,w_dataedit_single, w_jxc_single,w_dataedit_treeview,w_datareport,w_jxc_bill继承的所有子窗体。 以上窗口中所有按钮均隐藏在dw_buttom(将dw_button Send to front,而不是把按钮设为Invisible)后面,其缺省顺序及快捷键如下:新增ALT+a,复制ALT+c,修改ALT+m,删除ALT+d,存储ALT+s,取消ALT+u,签字ALT+i,打印ALT+p,刷新ALT+r,查询ALT+q,统计ALT+t,退出ALT+x,首条记录ALT+f,前一条ALT+v,后一条ALT+n,末条记录ALT+l,记录定位ALT+o,辅助信息ALT+h,明细新增insert,明细删除delete,明细复制F2,明细取消esc,帮助F1。在继承的子窗口中应注意以下方面: , 类库提供的快捷键在子窗口中不可修改; , 新加入的快捷键不能与已有的快捷键冲突; , 若因为业务需要不需要dw_button中的某些按钮,首先应从dw_button中删除,然后将 其对应的按钮设为Invisible; , 若因为业务需要在dw_button加入某些按钮,则必须在窗口中加入对应的按钮,并填 写按钮的clicked,getfocus,lostfocus事件,最后将其隐藏在dw_buttom后面; 3.2.4.1 多表窗口 , 说明:通用于编辑多表资料 , 窗口布局: , 功能:此类实现如下功能 1:New 新增功能 2:Modify 修改功能 3:Delete 删除功能 4:Copy 复制功能 5:Cancel 取消功能 6:Save 保存功能 7:Refresh 刷新功能 8:Print 打印功能 9:Page Process 翻页功能 , 使用方法: - 8 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 第一步:由本窗口继承创建一新窗口 选择窗体中工具条中“窗体”。如图 从弹出菜单中,选择inherit Button,之后需要从PFC目录下选择公共数据业务基类: pubdataedit.pbl;并选择数据业务基类中w_dataedit_multiple 。 另存为自己设定的窗体名称,例如 w_jxc_jcbm。 第二步:在ue_setlistview事件中设定本窗口维护的程序组,并设定相关程序设定如下变量: 请在此设定如下变量的值 执行程序过程中须设定以下一些参数, 例如: If as_classname = 'w_jygl_cwsk' Then astr_programparameter.s_title = '财务收款' astr_programparameter.s_program_id = 'w_jygl_cwsk' astr_programparameter.s_program_name = '财务收款' astr_programparameter.ws_windowstate = Maximized! astr_programparameter.i_editstyle = 0 astr_programparameter.s_dataobject[1] = 'd_jygl_cwsk_master' //master astr_programparameter.s_dataobject[2] = 'd_jygl_cwsk_detail_ins' //popup astr_programparameter.s_dataobject[3] = 'd_jygl_cwsk_master' //report astr_programparameter.s_protect_column[1] = 'jhd_code' end if 如上例中: 1(_classname = 'w_jygl_cwsk' 通过设定as_classname使类库获得要执行的窗体名称 2(astr_programparameter.s_title = '财务收款' 通过astr_programparameter.s_title可以设定窗体TEXT,如下图 以上设置会对应上图中“经营管理系统- [采购 合同 劳动合同范本免费下载装修合同范本免费下载租赁合同免费下载房屋买卖合同下载劳务合同范本下载 ]”的相同位置产生影响。 3 。 而设置astr_programparameter.s_program_name 会对上图中datawindow中的标题产 生影响 4(通过设置astr_programparameter.ws_windowstate,可以确定显示窗体是窗体的具体状 态,如果设置 astr_programparameter.ws_windowstate= Maximized! ,则显示窗体最大状态。 窗体状态常用三类:Maximized!、Normal!和Minminzed~可以通过4的设置,得到比较 理想尺寸的窗体。 5(类库中设定两种数据窗口的编辑方式,可以通过设置astr_programparameter.i_editstyle 来进行选择。如果设置 astr_programparameter.i_editstyle 为1,编辑方式为弹出另外窗体 进行编辑的模式;如设置为 0 则直接编辑模式。 6( 在多表维护类窗口中,通过以下参数的设置可以使类库知道相应datawindow的名称, 以便使用。 - 9 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 astr_programparameter.s_dataobject[1] = 'd_jygl_cwsk_master' 设置显示窗口 astr_programparameter.s_dataobject[2] = 'd_jygl_cwsk_detail' //设置弹出编辑窗口 astr_programparameter.s_dataobject[3] = 'd_jygl_cwsk_master' //设置打印数据窗口 对于多表维护类窗口参数设置完成。 第三步:创建相关的数据窗口,如果要以弹出窗口进行编辑,则相应要多创建一个数据窗口 要求:如果编辑资料以弹出窗口方式进行,则要求编辑资料的数据窗口的datawindow object与浏览资料的数据窗口的datawindow object语法一致 第四步:如果需要可在ue_insertinit事件中添加脚本,指定在新增时分情形的的初始值 在此ue_insertinit事件中可以添加序号,时间等一些参数。如在w_jcbm中,添加了如下程序,此程序的ue_insertinit主要目的是添加序号(对于表中序号为整型变量): li_temp = dw_edit.getitemnumber(ll_row,ls_column_name) If li_add_item < li_temp Then li_add_item = li_temp End If If li_add_item < li_temp Then li_add_item = li_temp End If // If li_add_item =0 Then li_add_item = 1 Else li_add_item = li_add_item + 1 End IF adw_datawindow.setitem(al_row,ls_column_name,li_add_item) 第五步:如果需要可在ue_datacheck事件中添加脚本,指定在在保存时用户的分情形检查动作,将ue_datacheck事件override。 此处,对执行功能需要的设定,包括参数范围,类型等都可以在此进行检查。不进行检查,如果存在数据方面的错误,在保存事件中会产生SYSTEM 错误。 例如:还利用W-JCBM窗体。对整型变量数据进行检查(这里,只要求column不为空,如需要其他功能检查,可以另行添加)。 li_temp=dw_edit.getitemnumber(al_row,ls_column_name) If li_temp=0 Then MessageBox('提示', '某某不能为空!') Return False End If 第六步:在ListView控件中指定相关项目图片 通过设置ListView属性表,可以为不同DATAWINDOW选择不同的图标。 第七步:如果需要可在ue_datacheck事件中添加脚本,指定在在保存时用户的检查动作,将ue_datacheck事件override 第八步:如果需要可在ue_sign事件中设定签字字段名称和签字窗口title名称 如果需要签字功能,就要使用ue_sign事件。 第九步:如果需要可在ue_check_if_can_modify事件设置资料不能被修改的条件 - 10 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 如果需要设置是否可以修改的条件,可以在ue_check_if_can_modify事件中设置。因在类库修改动作之前,总是要执行ue_check_if_can_modify事件。如果不要求,则不必更改此事件。 , 注意事项:非特殊情况,请不要轻易override除ue_setlistview,ue_insertinit,ue_datacheck 以外的事件 3.2.4.2 单表窗口 , 窗口布局: , 说明:通用于编辑单一表资料 , 功能:此窗口类实现如下功能 1:New 新增功能 2:Modify 修改功能 3:Delete 删除功能 4:Copy 复制功能 5:Cancel 取消功能 6:Save 保存功能 7:Refresh 刷新功能 8:Print 打印功能 9:Page Process 翻页功能 , 使用方法: , 第一步:由本窗口继承创建一新窗口 , 第二步:创建相关的数据窗口(即该窗口所需的数据窗口),如果要以弹出窗口进行编 辑,则要多创建一个数据窗口用于弹出的编辑窗口 要求:如果编辑资料以弹出窗口方式进行,则要求编辑资料的数据窗口的datawindow object与浏览资料的数据窗口的datawindow object的SQL语法一致 , 第三步:如果需要可在ue_insertinit事件中添加脚本,指定在新增时的初始值, 当新增时,就会执行此事件中的代码 , 第四步:如果需要可在ue_datacheck事件中添加脚本,指定在保存时用户的检查动作, 将ue_datacheck事件override , 第五步:如果需要可在ue_sign事件中设定签字字段名称和签字窗口title名称 , 第六步:如果需要可在ue_check_if_can_modify事件设置资料不能被修改的条件 , 注意事项:非特殊情况,请不要轻易override除ue_insertinit,ue_datacheck以外的事件 //以下为窗口Open事件中的代码,基本说明了在窗口打开之前应该做的事情 //定义和定位所有控件 F_setwindowcenter(This,1) // F_setwindowcenter为公共函数 This.Triggerevent('ue_setposition') //调用本窗口的定位用户事件ue_setpostion, //由用户自行定位窗体 //设置窗口属性 //获取程序参数,F_getprogramparameter为获取程序参数的公共函数,两个参数分别为:本窗体的名字(This.classname())为传入参数,iStr_programparameter为本窗体的实例变量为传出参数,用于返回该窗口的一些基本的设置 If Not F_getprogramparameter(This.classname(),iStr_programparameter) Then Close(This) Return End If //iStr_programparameter包括窗口的标题、窗口打开时的状态、数据编辑方式、 - 11 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 //本窗口所需要的数据窗口对象,is_dataedit_dataobject为一数组、编辑时的保护//栏位 This.title = iStr_programparameter.s_title //设定窗口标题 This.WindowState = iStr_programparameter.ws_windowstate //设定窗口打开时的状态 ii_editstyle = iStr_programparameter.i_editstyle //设定数据维护方式 0:画面上维护,1:弹出窗口维护 is_dataedit_dataobject = iStr_programparameter.s_dataobject //维护的数据窗口对象 If Upperbound(is_dataedit_dataobject) <= 0 Then Close(This) Return End IF dw_edit.dataobject = is_dataedit_dataobject[1] //is_dataedit_dataobject[1]一般为 //dw_edit的datawindow object dw_edit.Settransobject(SQLCA) dw_button.object.title_a.text = iStr_programparameter.s_program_name //设定程序名称 dw_button.object.title_b.text = iStr_programparameter.s_program_name //设定程序名称 //设定编辑时的保护栏位 dw_edit.uf_setprotectcolumn(iStr_programparameter.s_protect_column) //获取系统分配给用户的权限,如果用户没权限将不能打开此窗口,f_getuserright //为一公共函数,关键是设定istr_cb_enabled的状态 If Not F_getuserright(gs_employee_no,iStr_programparameter.s_program_id,istr_cb_enable d) Then Close(This) Return End If //设置用户操作权限 If Not wf_setuseright('open') Then Close(This) End If //资料呼叫,在此事件中可根据实际情况将dw_edit中的资料呼叫出来 This.event ue_retrieve() //签字设置 This.event ue_sign() //设置其他属性,可在此事件中设置一些其他的属性 This.Triggerevent('ue_otherproperty') //======================================================== 顺利经过以上的步骤之后将打开该窗口,之后我们必须为每一个具体的操作编写 相应的代码。窗口中的按钮如开始所讲,共有新增、复制、修改、删除、保存、 打印、刷新、查询、统计等功能。在点击窗口上的按钮时,都会执行dw_button 中的buttonpressed事件,根据点击的按钮的不同,调用相应的用户事件。 下面我们一一来介绍各个按钮的代码的编写步骤: 1、 新增 当按新增按钮时,首先执行的是dw_button中的buttonpressed事件,接着会调用窗口的ue_insert事件,在窗口的ue_insert事件中有调用了dw_edit中的ue_insert事件,在此事件中若ii_editstyle为1,则弹出一个窗口进行编辑。用户只要在窗口的ue_insertinit中进行初始化 - 12 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 即可。 2、 复制、修改 复制、修改编写代码方式与新增相似。 3、 删除 类库中已经写好, 一般不用编写代码 4、 保存 保存关键是要在窗口的 ue_datacheck中加上一些保存的检测即可 5、 打印 打印之前要选定要打印的数据窗口,类库中把要打印的数据窗口放在 is_dataedit_dataobject[3]中,我们可以改变放在别的地方。还要做的一件事是 在窗口的ue_report_retrieve中对dw_report进行一次retrieve ,这样才能将打印的数据显 示出来。 6、 刷新、查询、统计 类库中已经写好, 一般不用编写代码 3.2.4.3 主档明细档窗口 , 窗口布局 w_dataedit_masterdetait通常用于编辑主明细表资料 , 功能:此类实现如下功能 主档编辑功能 1:New 新增功能(Alt + A) 2:Modify 修改功能(Alt + M) 3:Delete 删除功能(Alt + D) 4:Copy 复制功能(Alt + C) 5:Cancel 取消功能(Alt + U) 6:Save 保存功能(Alt + S) 7:Refresh 刷新功能(Alt + R) 8:Print 打印功能(Alt + P) 9:search 查询功能(Alt + Q) 10:count 统计功能(Alt + T) 11:exit 退出功能(Alt + X) 12:fistpage 首条记录(Alt + F) 13:prevpage 前一条记录(Alt +V) 14:nextpage 后一条记录(Alt + N) 15:lastpage 末一条记录(Alt + L) 16:locate 记录定位(Alt + O) 17:othersHelp 辅助信息(Alt + H) 18:help 帮助(F1) 明细编辑功能 1:New 新增功能 (INSERT) 2:Copy 复制功能(F2) 3:Delete 删除功能(DELETE) 4:Cancel 取消功能(ESC) , 使用方法: , 第一步:由本窗口继承创建一新窗口 , 第二步:创建相关的主档和明细档数据窗口。 要求:如果编辑资料以弹出窗口方式进行,则要求编辑资料的数据窗口的datawindow - 13 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 object与浏览资料的数据窗口的datawindow object语法一致。 , 第三步:如果需要可在ue_insertinit事件中添加脚本,指定在新增主档资料时的初 始值。例如:对入库单编号的初始化 ls_rkd = <…> adw_datawindow.setitem(al_row,'rkd_code',ls_rkd) , 第四步:如果需要可在ue_detailinsertinit事件中添加脚本,指定在新增明细档资料时 的初始值。 例如:对日期的初始化 ld_rq = <…> dw_ detail.setitem(dw_detail.getrow(),’rq’,ld_rq) , 第五步:如果需要可在ue_masterdatacheck事件中添加脚本,指定在在保存时用户的 检查动作将ue_masterdatacheck事件override。 当保存时在此事件中检查主档中的数据是否正确,如果不正确则返回’flase’代码如下: if ISNULL(ls_ghs_code) or len(ls_ghs_code)=0 then Messagebox("错误提示","供货商不能为空") return false end if’ Return true 如果正确则返回’true’。 , 第六步:如果需要可在ue_detaildatacheck事件中添加脚本,指定在在保存时用户的检 查动作将ue_detaildatacheck事件override。用法同上 当保存时在此事件中检查主档中的数据是否正确,如果不正确则返回’flase’代码如下: as_columnname = <列字段名> Return False 如果正确则返回’true’。 , 第七步:如果需要可在ue_sign事件中设定签字字段名称和签字窗口title名称,调用签 字函数,其中的权限控制自动加入到此功能函数中。 例如: wf_signature(this,dwo,'zgqz',row,’主管签字’) … if sqlca.sqlcode = 0 then commit; else messagebox('错误讯息','签字失败,请重新签字!') rollback ; end if , 第八步:如果需要可在ue_check_if_can_modify事件设置资料不能被修改的条件。允 许修改返回true,否则返回false 例如: li_num = <…> if li_num > 0 then return false end if return true , 第九步:如果需要可在ue_save_before事件中书写对因业务需要对其他的数据进行处 理的代码,当数据处理结果成功时,请返回1,否则返回非1,但千万不要提交数据, - 14 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 数据的提交会在ue_save中提交。 顺利经过以上的步骤之后将打开该窗口,之后我们必须为每一个具体的操作编写相应的代码。窗口中的按钮如开始所讲,共有新增、复制、修改、删除、保存、打印、刷新、查询、统计等功能。在点击窗口上的按钮时,都会执行dw_button 中的buttonpressed事件,根据点击的按钮的不同,调用相应的用户事件。 下面我们一一来介绍各个按钮的代码的编写步骤: 7、 新增 当按新增按钮时,新增主档时执行的是dw_button_master中的buttonpressed事件;新增明细时执行的是dw_button_detail中的buttonpressed事件。主档新增时会调用窗口的ue_insert事件,用户只要在窗口的ue_insertinit中进行主档的数据初始化即可;明细档的数据新增时会调用窗口的ue_detailinsert事件,用户只要在窗口的ue_detailinsertinit中进行明细档的数据初始化即可。 8、 复制、修改 复制、修改编写代码方式与新增相似。 9、 删除 类库中已经写好, 一般不用编写代码 10、 保存 保存关键是要在窗口的ue_masterdatachaeck(对主档)和 ue_detaildatacheck(对明细)中加上一些保存的检测即可 11、 打印 打印之前要选定要打印的数据窗口,类库中把要打印的数据窗口放在 is_dataedit_dataobject[4]中,我们可以改变放在别的地方。还要做的一件事是 在窗口的ue_retrieve_report中对dw_report进行一次retrieve ,这样才能将打印的数据显 示出来。 12、 刷新、查询、统计 类库中已经写好, 一般不用编写代码 3.2.4.4 一主档两明细窗口 说明:通用于编辑一主档两明细表资料 功能:此类实现如下功能 主档编辑功能 1:New 新增功能 2:Modify 修改功能 3:Delete 删除功能 4:Copy 复制功能 5:Cancel 取消功能 6:Save 保存功能 7:Refresh 刷新功能 8:Print 打印功能 9:Page Process 翻页功能 明细1编辑功能 1:New 新增功能 2:Modify 复制功能 3:Delete 删除功能 4:Cancel 取消功能 明细2编辑功能 1:New 新增功能 - 15 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 2:Modify 复制功能 3:Delete 删除功能 4:Cancel 取消功能 使用方法: 第一步:由本窗口继承创建一新窗口 第二步:创建相关的主档和明细档数据窗口 要求:如果编辑资料以弹出窗口方式进行,则要求编辑资料的数据窗口的datawindow object 与浏览资料的数据窗口的datawindow object语法一致. 第三步:如果需要可在ue_insertinit事件中添加脚本,指定在主档新增时的初试值 第四步:如果需要可在ue_detailinsertinit事件中添加脚本,指定在左边明细档资料新增时的初试值. 第五步:如果需要可在ue_detailinsertinit2事件中添加脚本,指定在右边明细档资料新增时的初试值. 第六步:如果需要可在ue_masterdatacheck事件中添加脚本,指定在保存时对用户输入主档资料数据合法性的检查动作. 将ue_masterdatacheck事件override 第七步:如果需要可在ue_detaildatacheck事件中添加脚本,指定在保存时对用户输入左边明细资料数据合法性的检查动作. 将ue_detaildatacheck事件override 第八步:如果需要可在ue_detaildatacheck2事件中添加脚本,指定在保存时对用户输入右边明细资料数据合法性的检查动作. 将ue_detaildatacheck2 事件override 第九步:如果需要可在ue_sign事件中设定签字字段名称和签字窗口title名称 第十步:如果需要可在ue_check_if_can_modify事件设置资料不能被修改的条件 (无其他需要情况下, 不要对其他事件进行Override ) 3.2.4.5 树-明细窗口 , 窗口布局: , 说明:通用于编辑多表资料 , 功能:此类实现如下功能 1:New 新增功能 2:Modify 修改功能 3:Delete 删除功能 4:Copy 复制功能 5:Cancel 取消功能 6:Save 保存功能 7:Refresh 刷新功能 8:Print 打印功能 9:Page Process 翻页功能 , 使用方法: , 第一步:由本窗口继承创建一新窗口 , 第二步:在ue_settreeview事件中设定本窗口维护的资料层次关系(请override祖先的 - 16 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 ue_settreeview事件) , 第三步:在ue_retrieve事件中设定dw_edit与treeview的资料互动关系(请override祖先 的ue_retrieve事件) , 第四步:创建相关的数据窗口,如果要以弹出窗口进行编辑,则相应要多创建一个数据 窗口 要求:如果编辑资料以弹出窗口方式进行,则要求编辑资料的数据窗口的datawindow object 与浏览资料的数据窗口的datawindow object语法一致 , 第五步:如果需要可在ue_insertinit事件中添加脚本,指定在新增时分情形的的初试 值 , 第六步:如果需要可在ue_datacheck事件中添加脚本,指定在在保存时用户的分情 形的检查动作,将ue_datacheck事件override , 第七步:在treeView控件中指定相关项目图片 , 第八步:如果需要可在ue_sign事件中设定签字字段名称和签字窗口title名称 , 第九步:如果需要可在ue_check_if_can_modify事件设置资料不能被修改的条件 外的事, 注意事项:非特殊情况,请不要轻易override除ue_insertinit,ue_datacheck以 件 , Open 事件 (一般不要Override) Str_programparameter lStr_programparameter u_ncs_dwserver lu_ncs_dwserver //定义和定位所有控件 F_setwindowcenter(This,1) This.Triggerevent('ue_setposition') //设置窗口属性 If Not F_getprogramparameter(This.classname(),lStr_programparameter) Then //获取程序 参数 Close(This) Return End If This.title = lStr_programparameter.s_title //设定窗口标题 This.WindowState = lStr_programparameter.ws_windowstate //设定窗口打开时的状态 //======================================================== ii_editstyle = lStr_programparameter.i_editstyle //设定数据维护方式 0:画面上维护, , 弹出窗口维护 (ii_editstyle 的设置值关系到在单击新增后,是直接编辑还是弹出 W_dataedit_treeview_edit 界面编辑) is_dataedit_dataobject = lStr_programparameter.s_dataobject //维护的数据窗口对象 If Upperbound(is_dataedit_dataobject) <= 0 Then Close(This) Return End IF dw_edit.dataobject = is_dataedit_dataobject[1] dw_edit.Settransobject(SQLCA) dw_button.object.title_a.text = lStr_programparameter.s_program_name //设定程序名称 dw_button.object.title_b.text = lStr_programparameter.s_program_name //设定程序名称 //取得主档名称 - 17 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 is_table_name = dw_edit.object.datawindow.Table.updatetable //设定编辑时的保护栏位 dw_edit.uf_setprotectcolumn(lStr_programparameter.s_protect_column) //获取系统分配给用户的权限 If Not f_getuserright(gs_employee_no,lStr_programparameter.s_program_id,istr_cb_enabled) Then Close(This) Return End If //设置用户操作权限 If Not wf_setuseright('open') Then Close(This) End If //设置TreeView维护资料列表 This.event ue_settreeview() Wf_settreeview(lStr_programparameter.s_program_name) //控件定位 This.event ue_setposition() //设置其他属性 This.Triggerevent('ue_otherproperty') Dw_edit.Modify('datawindow.readonly=yes') , Ue_settreeview 把需要在Treeview 中显示的数据进行初始化显示,呈现Treeview结构。例如八一MIS人事系统 基本资料录入, Treeview 中显示的是部门名称, 而dw_edit中就显示每个部门的具体人员资料。 , Ue_insertinit 在该事件中主要是对新增一笔记录时,把一些需要初始化的资料进行初始化, 例如: 日期默认系统日期等。 Exp : adw_datawindow.setitem(al_row, gd_sysdate ) , Ue_datacheck 该事件是在对资料进行保存时, 对一些资料的约束进行检查,以使合法的数据能够顺利地保存。 例如: 数据库表的主键不可为空。另外在表中设置不可为空的,等等。 如果数据合法 该事件 Return true 否则 需要一个messagebox提示信息,同时 Return false . Exp : String ls_emp_id ls_emp_id = adw_datawindow.GetItemString(al_row, 'emp_id ' ) if isnull(ls_emp_id) or Trim(ls_emp_id) = “” Then MessageBox("提示信息","员工编号不能为空~") as_columnname = 'emp_id' Return False - 18 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 end if Return true 3.2.4.6 报表窗口 3.2.4.7 打印预览窗口 一般的窗口如果要打印,应该将要打印的 datawindow 传送给打印预览窗口,例如: 在类库中的窗口w_1 中要打印,先定义一个打印结构变量,如下的lstr_print ,其中有打印预览窗口所要的一些打印参数:程序名称、打印数据数据窗口、发送打印数据的窗口名称、是否直接打印。在设定完该结构变量后,将 打印数据窗口控件(dw_report)的dataobject属性进行赋值,而后是打印还是预览数据(通过设置lstr_print中的as_type成员)。 在做完以上的准备工作之后,即可打开打印预览窗口,实现的语句是: 调用公共函数:F_dataprint(lstr_print) lstr_print.report_name = this.title //程序名称 lstr_print.dw_report = dw_report //打印数据窗口 lstr_print.aw_window = this //发送打印数据的窗口名称 lstr_print.ishide = "show" //是否直接打印 dw_report.dataobject = is_dataedit_dataobject[3] //打印数据窗口的数据窗口对象 dw_report.settransobject(sqlca) lstr_print.as_type = as_type //打印或预览数据 F_dataprint(lstr_print) //调用打印或预览模块 在打开打印预览窗口之后,关键是利用message 对象中的powerobject来接收传来的结构变量。以下为w_dataprint中open事件中的代码(我们逐一解释): Datawindow ldw_object String ls_dwname //进行窗口的定位 F_setwindowcenter(this,1) //设定窗口的标题 This.Title = '打印预览' //设定该报表相关信息,istr_print即是从w_1中传来的打印结构变量 //用message 对象中的powerobject来接收传来的结构变量 istr_print = message.powerobjectparm ldw_object = istr_print.dw_report //w_1中的打印数据窗口控件赋给变量 ldw_object ls_dwname = istr_print.dw_report.dataobject //w_1中的打印数据窗口 dw_report.dataobject = ls_dwname //给w_dataprint中的dw_report的 dataobject进行赋值 dw_report.settransobject(sqlca) ldw_object.sharedata(dw_report) //进行数据窗口的数据共享 //这儿是最关键的地方, 调用w_1中的ue_report_retrive事件,将数据检索出来 istr_print.aw_window.dynamic event ue_report_retrieve(dw_report) //设置dw_report的大小、是否有标尺 - 19 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 dw_report.modify("datawindow.print.preview = yes") dw_report.modify("datawindow.print.preview.zoom = 100") dw_report.modify("datawindow.print.preview.rulers = no") dw_report.setfocus() //决定是否隐藏本打印预览窗口 if lower(istr_print.ishide) = 'hide' then this.visible = false timer(0.1) End if //====================================================== 3.3 数据窗口界面规范 3.3.1 查询、维护数据窗口 数据窗口类型: 对主表为Freeform类型,对明细表为Grid类型。 编辑方式: 对于字段较多的数据窗口,如果需要经过两次横向滚动(或两次tab键)才能完成数据 录入查询,则必须提供弹出窗口方式进行维护查询。 数据窗口: , 背景色(Background Color)为Cream; , 若Grid类型的数据窗口在一屏能现示完则禁止采用水平滚动条; , 垂直滚动条不得覆盖最后一列数据; , Grid方式显示的奇偶行颜色为:奇数行为:White,偶数行为:Light Green。 标题: , 名称为column名称加'_t' 后缀; , 字体为T Arial,大小为9; , 背景色为light gray , 形状为3D raised。 字段: , 可修改字段的背景色(底色)为Transparent; , 不可修改的字段背景色为light gray; , 所有字段的前景色(字符颜色)为black; , 形状为3D lowered; , 字型字体:数字类型的字段为T Arial 9,字符类型的字段为宋体 9; , 显示格式:日期格式: yyyy-mm-dd,数字: #,###,###,##0.00 或 #,###,##0,(财 务和其他有明确要求的)负数: 前景红色,加负号 (格式为 #,###,##0.00 [red] -#,###,##0.00; , 对齐方式:字符型必须左对齐, 数字型必须右对齐,日期型居中。 下拉数据窗口: , 背景色为Transparent; , 如果在下拉数据窗口中没有作记录的筛选,则不需要标题; , 下拉数据窗口中第一列为显示的列,其后是值以及其他字段列; , 如果下拉数据窗口中的行数大于15行,则必须在字段后提供按钮(text为…),通过 一个弹出窗口进行数据选择; , 下拉数据窗口中的行数已不超出窗口为限,一般不超过5行。 - 20 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 3.3.2 打印数据窗口 各种打印数据窗口均采用Tabular类型的数据窗口。 根据实际报表的要求设计各对象的格式,若没有实际要求,应采用以下规范: 标题: , 名称为column名称加'_t' 后缀; , 字体为T Arial,大小为9; , 背景色为light gray , 形状为Box。 字段: , 所有字段的背景色(底色)为transparent, , 所有字段的前景色(字符颜色)为black; , 形状为Box; , 字型字体:数字类型的字段为T Arial 9,字符类型的字段为宋体 9; , 显示格式:日期格式: yyyy-mm-dd,数字: #,###,###,##0.00 或 #,###,##0,(财 务和其他有明确要求的)负数: 前景红色,加负号 (格式为 #,###,##0.00 [red] -#,###,##0.00; , 对齐方式:字符型必须左对齐, 数字型必须右对齐,日期型居中。 4. PowerBuilder提示规范 4.1 提示规范 提示规范使用条件:当录入数据或保存数据等操作时,出现错误,需要给出提示信息或 警告;而当数据被正确输入后,动作能够继续执行。提示示例: 信息 ***********~ 确定 注意:提示窗口关闭后,当前的focus应该在错误发生行和列。 类型 格式/示例 输入不存在的某些object时进行提****** 不存在 ! 示 如:产品代码不存在 ! 某些栏位必须输入时进行提示 ****** 不能为空! 如:产品代码不能为空~ 某些数值性的输入不能为零 **** 必须大于零 ! 如:入库数量必须大于零~ ! 某种情况下,不允许输入已存在的******* 已经存在! 某object(关键字重复) 如:产品代码已经存在! 数据范围检查. ****** 超出范围! 如:数量超出范围~ 数值逻辑检查 *** 日期必须大于*** 日期~ - 21 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 如:截止日期必须大于起始日期~ 相关数据错误 *****错误~ 如:日期格式错误~ 4.2 确认(询问)规范 确认规范使用条件:需要用户选择是、否或取消的情况。示例: 确认 ? **********, 是 否 取消 类型 示例 在删除某记录或信息时进行确认 确认删除当前(所选择)记录? 在对记录进行修改后跳到其他记录或数据被修改,需要存盘吗? 关闭当前窗口等时询问是否存盘 4.3 错误规范 提示规范使用条件:表示出现了严重的错误,动作不能继续进行。示例: 错误 x **********~ 确定 类型 格式/示例 执行某动作失败后的信息提示 **** 失败 ! 如:数据保存失败! 读一个不存在的文件进行提示 找不到文件 ***! 打开文件失败时进行提示 打开文件 *** 失败 ! 5. 程序框架 所有应用程序若无特殊说明,均采用如下目录结构: \应用程序主目录(如:d:\xqmis) \picture 图标、图片 \rc 主界面图片 \pfc 类库 \data 初始化数据 \report 报表及模版 - 22 - PowerBuilder程序员手册 广东金宇恒科技发展有限公司 \sql 建表、存储过程及触发器文件 \… 子系统目录 \dbconnect.ini 数据库连接配置文件 \main.pbl 主控程序 \rc.pbr 资源文件 因此,程序中所有涉及磁盘文件的文件路径均为相对于应用程序主目录的相对路径。 6. 有关约束 1. 程序编写过程中,如果需要使用类库,必须采用公司内部的类库; 2. 对pbl库合理分类,如:窗口类、函数类以及本子系统单独的通用控件组合类等; 3. 一个窗口中最好不要超过两个主要的数据窗口,但不允许超过三个主要的数据窗口; 4. toolbar不采用下拉方式; 5. 业务处理过程中,应通过按扭、编辑框或其他对象提供用户方便的操作,而不是窗口 中仅仅只有一个或两个数据窗口的单调情况; 6. 在业务处理中,应根据用户对相关业务的需求,在窗口中设置按钮调用相关业务的处 理,以方便用户使用; 7. 业务处理中,应同时提供快速查询和模糊查询方式。快速查询指用户通过输入编码或 时间等简单信息立即查询出结果;模糊查询指快速查询不能满足要求时的一种灵活的 查询方式。对于业务数据的增长量(参见有关数据要求说明书)比较大的情况,还应采 用特殊的数据查询和数据定位方式; 8. 对主要业务的数据窗口中的数据,首先根据合理的条件过滤。不允许出现以下情况: 用户每次都必须通过查询才能得到需要处理的业务数据,或用户必须从不断增加的所 有业务数据中去定位需要处理的数据; 9. 业务或报表中涉及日期时间或年月等信息时采用以下方式处理:首先取服务器的日期 时间或年月等信息作为确省值;之后,通过编辑框等形式供用户修改; 10. 编程过程中,不能自行修改类库代码。如果确实需要修改,必须提出修改意见,由公 司组织统一修改。 - 23 -
本文档为【PowerBuilder程序员手册】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_215732
暂无简介~
格式:doc
大小:106KB
软件:Word
页数:46
分类:生活休闲
上传时间:2018-10-05
浏览量:51