您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 图解PFC-安装与创建
PFC是什么?PowerbuilderFoundationClassPFC就是Sybase公司给我们做好的混凝土预制件(即扩展的对象),我们可以拿来用,这些对象具有新的功能,使我们在开发过程中事半功倍。样例在以下环境通过:1.服务器:Windows2000Server2.客户端:Windows2000Professtion3.网络:100兆以太网4.数据库系统:MSSQLServer20005.数据库:pubs6.工具:Powerbuilder8.0.397047.联接:直接联接安装PFC:如果没有安装PFC,则要自定义安装(图1)(图2)如图1,图2的高亮度选择,将PFC安装到系统中。(图3)这样将会在系统的安装路径下面看到PFC文件夹。如图3在PFC文件夹里面有11个.pbl文件,我们将用到其中的10个文件,pfcapp.pbl不用。如表一pfcapsrv.pblpfcdwsrv.pblpfcmain.pblpfcutil.pblpfcwnsrv.pblpfepsrv.pblpfedwsrv.pblpfemain.pblpfeutil.pblpfewnsrv.pbl为了使用方便,可以将这10个文件拷贝到待开发的程序文件夹下面。例如:D:\study其中的5个PFC开头的文件是PFC的基础层类库,而PFE开头的5个文件是PFC的扩展层,PFE文件在使用中不是必需的,但是考虑到今后的升级,强烈建议使用PFE文件,如果需要对PFC进行扩展或对属性进行修改,也要在PFE文件库中进行。搭建PFC应用程序框架:(图4)我们从一个实际应用开始详细的介绍PFC程序的开发,首先我们建立一个工作空间(workspace),名字叫study。如图4(图5)建立一个目标名为study,选中第二项,即模板项。如图5(图6)(图7)(图8)(图9)这里是关键,一定要选择第三项。如图9(图10)将PFC的10个类库加进去。(图11)(图12)(图13)PFC的基本框架就搭建起来了,这里就是我们PFC的家。如图13但是这只是一个框架,还不能运行,我们还要做一些工作才可以。(图14)(图15)从pfemain.pbl库文件中继承窗口名字叫w_frame_app,继承对象为w_frame,(也可以直接使用w_frame窗口),如图14、图15(图16)(图17)从pfeapsrv.pbl库文件中继承用户对象名字叫u_cst_appmanager,继承对象为n_cst_appmanager,(也可以直接使用n_cst_appmanager),并且在u_cst_appmanager的pfc_open事件中添加脚本:open(w_frame_app)如图16、图17(图18)(图19)打开应用程序对象,将全局变量定义中的n_cst_appmanager改为u_cst_appmanager。将open事件中脚本的n_cst_appmanager改为:u_cst_appmanager如图19(图20)这个时候,程序就可以运行了。如图20(图21)(图22)好像标题栏缺少点什么?不要着急,u_cst_appmanager对象的constructor事件中写脚本:iapp_object.DisplayName=PFC应用程序引号里面的内容,各位自便。iapp_object.DisplayName是应用对象(application)的一个属性,PFC在运行的时将这个属性带进窗口的title属性。如图21、图22(图23)从pfemain.pbl库文件中继承窗口对象名字叫w_sheet_authors,继承对象为w_sheet,(也可以直接使用w_sheet)。如图23(图24)(图25)使用我们自己的菜单,从pfewnsrv.pbl库文件中继承菜单对象名字叫m_frame_app,继承对象为m_frame,(也可以直接使用m_frame)。在菜单的基本数据项的clicked事件下写脚本:message.stringparm='w_sheet_authors'of_sendmessage('pfc_open')如图24、图25(图26)将窗口w_frame_app的菜单指定为m_frame_app。在窗口的pfc_open事件下面写脚本:stringls_sheetw_sheetlw_sheetls_sheet=message.stringparmopensheet(lw_sheet,ls_sheet,this,0,original!)如图26(图27)运行后的结果。如图27到此为止,我们开始近距离接触PFC了。脚本:message.stringparm='w_sheet_authors'of_sendmessage('pfc_open')就是利用了PFC的消息路由器将菜单m_frame_app的指令传给了窗口w_frame_app,在传递过程中指明了一个字符串和一个事件,例子中就是传递了w_sheet_authors字符串,指明调用w_frame_app窗口的pfc_open事件。如果所调用的事件没有参数,则直接使用of_sendmessage('事件名')数据库联接:(图28)PFC有个登录窗口,在pfe_apsrv.pbl库中,名为w_logon,我们在u_cst_appmanager的pfc_open事件添加脚本:ifof_logonDLG()1thenhaltclose这时候我们运行程序,就会弹出登录对话框。但是这个对话框只能接收用户提供的登录名和口令,更多的连接信息要在要在u_cst_appmanager的pfc_logon事件中完成。(图29)我们在u_cst_appmanager的pfc_logon事件中添加脚本:integerli_rcSQLCA.DBMS=MSSMicrosoftSQLServerSQLCA.Database=pubsSQLCA.LogPass=as_passwordSQLCA.ServerName=127.0.0.1SQLCA.LogId=as_useridSQLCA.AutoCommit=FalseSQLCA.DBParm=li_rc=SQLCA.of_connect()ifli_rc=0thenreturn1returnli_rc如图29这样就可以连接到数据库上了。(图30)其中登录窗口w_logon有个ii_logonattempts实例变量,缺省值为1。我们可以更改变量ii_logonattempts的值,来确定错误登录次数。如图30(图31)但是这样后有一些不足,就是联接信息不能更改,所以我们要引入ini文件或注册表来更改和保存保存联接信息。在u_cst_appmanager的is_userinifile变量里面指定ini文件,要确保当前目录下有一个setup.ini文件,名字一定要保持一致(不一定是setup.ini)。如图31pfc默认的是在注册表中取联接信息并在联接成功后将连接信息写回到注册表中。下面是u_cst_appmanager的of_logondlg函数关于写回联接信息的脚本(是pfc的脚本,不是我们要添加的脚本):lnv_logonattrib=message.powerobjectparmifLen(lnv_logonattrib.is_userid)0thenifof_IsRegistryAvailable()thenRegistrySet(is_userkey+\logon,userid,lnv_logonattrib.is_userid)elseSetProfileString(is_userinifile,logon,userid,lnv_logonattrib.is_userid)endifof_SetUserID(lnv_logonattrib.is_userid)endifreturnlnv_logonattrib.ii_rc其中is_userinifile就是我们指定的ini文件名。我们在这里主要介绍以ini文件的方式读取和保存联接信息的方法。(图32)在u_cst_appmanager的of_isregistryavaliable函数下面添加脚本:ReturnFalse如图32因为pfc应用在windows操作系统环境中是使用注册表来读取和保存信息,ReturnFalse脚本将应用改为使用ini文件来读取和保存信息。(图33)在setup.ini文件里面添加脚本:[logon]DBMS=MSSMicrosoftSQLServerDatabase=pubsUserID=saLogPass=ServerName=127.0.0.1AutoCommit=FalseDBParm=如图33(图34)我们将u_cst_appmanager的pfc_logon事件脚本替换成下面的脚本:integerli_rcSQLCA.DBMS=ProfileString(is_userinifile,logon,DBMS,)SQLCA.Database=ProfileString(is_userinifile,logon,Database,)SQLCA.ServerName=ProfileString(is_userinifile,logon,ServerName,)SQLCA.DBParm=ProfileString(is_userinifile,logon,DBParm,)SQLCA.LogId=as_useridSQLCA.LogPass=as_passwordSQLCA.AutoCommit=falseli_rc=SQLCA.of_connect()ifli_rc=0thenreturn1returnli_rc如图34这样我们就可以通过更改setup.ini文件来实现不同的连接。(图35)如果要用注册表读取或保存信息,则要在is_userkey变量指明注册表项。如图35需要特别说明的是,u_cst_appmanager的pfc_prelogondlg事件在setup.ini文件中或在用户指定的注册表项中未能得到userid时,则会调用API函数在操作系统注册表中读取操作系统的登录名。
本文标题:图解PFC-安装与创建
链接地址:https://www.777doc.com/doc-4138175 .html