DataWindow属性窗口允许你:
l 选择允许和禁止 DataWindow服务
l 查看选定服务的PFC语法
l 交互式地访问和修改 DataWindow属性,包括:
DataWindow缓冲区
行和列状态
统计
DataWindow对象中所有对象的属性
DataWindow属性窗口属性页
DataWindow属性窗口有三个属性页:
l Services 显示 DataWindow的服务列表。
选择一项服务并按需要点击Enable或Disable。点击Properties以显示当前选定服务的信息:
l Buffers 点击鼠标器右键显示弹出菜单,允许你对行进行如下操作:
l Status flags 按需要改变DataWindow状态标志。
单选框Assist Status Change允许你执行两状态变化成为一步:
服务对话框属性页
每个服务显示它拥有的一套属性页以显示它的属性。本例子显示排序服务的属性页:
l General 显示选定服务的有关信息:
Syntax 显示用于选定服务的PFC语法:
用法
使用DataWindow属性窗口调试和测试你的应用程序和 DataWindow服务的用途。
显示DataWindow属性窗口:
1 由调用u_dw of_SetProperty函数允许DataWindow属性服务:
this.of_SetProperty(TRUE)
2 当显示DataWindow后,右击并选择 DataWindow Properties,以显示出DataWindow属性窗口。
SQL间谍
SQL间谍工具自动为DataWindows和EXEC IMMEDIATE语句捕获并保存SQL。你能使用 SQL间谍显示和随意地修改 DataWindow的 SQL语句,并把本地SQL记入日志。修改 SQL 如果你在使用 ODBC数据源,你必须将连接字符串中的DisableBind置为1。
SQL间谍将SQL语句记入日志文件,你能随意地在弹出窗口中显示。
用法
使用SQL间谍,你可以调用函数以启动间谍工具,指定日志文件,和控制 w_sqlspy窗口的显示。
你还能调用函数到将本地 SQL记入日志。
虽然你能从应用程序以内的任何地方调用SQL间谍功能,但一般说来,你应该在应用程序管理器的pfc_Open事件中初始化SQL间谍。
启动SQL间谍:
1 通过调用 n_cst_appmanager of_SetDebug函数启动调试服务:
this.of_SetDebug(TRUE)
2 通过调用 n_cst_debug of_SetSQLSpy函数启动 SQL间谍:
this.inv_debug.of_SetSQLSpy(TRUE)
3 (可选项)通过调用 n_cst_sqlspy of_SetLogFile函数指定日志文件:
this.inv_debug.inv_sqlspy.of_SetLogFile &
("c:/PB6/adk/pfc/appdbug.log")
显示 w_sqlspy弹出窗口:
调用 n_cst_sqlspy of_OpenSQLSpy函数:
gnv_app.inv_debug.inv_sqlspy.of_OpenSQLSpy(TRUE)
w_sqlspy弹出窗口显示日志文件中最近记载的项目:
在DataWindow提交到数据库以前w_sqlspyinspect对话框允许你查看和随意地修改SQL语句。
显示 w_sqlspyinspect对话框:
调用 n_cst_sqlspy of_SetBatchMode(FALSE)函数:
gnv_app.inv_debug.inv_sqlspy.of_SetBatchMode &
(FALSE)
使用 对话框w_sqlspyinspect:
1 更新数据库、插入、删除或修改行。对话框w_sqlinspect显示:
2 检查SQL语句,随意修改数值。
3 单击适当的命令按钮:
Step 更新当前的行并显示将被更新的下一行的信息
Resume 更新当前的行并更新所有剩余的行;
禁止SQL间谍检查功能
Cancel 不更新当前的行并显示将被更新的下一行
Cancel All 不更新所有剩余的行
手动地将SQL语句记入日志 :
使用n_cst_sqlspy of_SQLSyntax函数,把将被记入日志的 SQL语句传递给它:
String ls_sql ls_sql = "SELECT * FROM employee;" gnv_app.inv_debug.inv_sqlspy.of_SQLSyntax & ("Native SQL", String(Now()) + ": " + & String(Today()) + ": " + ls_sql) |
安全性
PFC提供需要在应用程序中进行少量编码的数据库驱动的安全系统。
它允许你在安全数据库中记载如下信息:
窗口控制
DataWindow列
用户对象
菜单项
然后创建用户和组的真值表,控制这些项的访问权限。
在执行时,PFC按安全数据库中的记载选择允许、禁止或隐藏被保护的项。
PFC安全系统包括:
安全管理工具 允许你定义用户、组、被保护的项和用户访问权限。
安全扫描器 扫描用户自定义对象以搜所有集能被保护的项目的信息。安全数据库包含有关用户、组、被保护的项目和用户对那些被保护项的访问权限的信息。
以本地数据库交付 PFC提供一个本地数据库以保存安全性信息。
无论如何,当你实施安全性时,你将想使用服务器数据库。
由异常提供安全性
PFC安全特性由异常提供。
默认地,安全系统使用对象的当前设置。
这意味着PFC仅修改安全数据库中明确指定的设置。
过程
安全管理工具是PowerBuilder应用程序,你用来:
定义用户和组
运行安全性扫描器
为对象和控件定义安全性
关联用户和组与对象和控件
在你的应用程序中,添加如下代码以实现安全性:
对象 添加代码
应用程序管理器 调用 n_cst_appmanager of_SetSecurity函数以启动安全性服务,n_cst_security
应用程序管理器或框架窗口 建立事务对象,连接到安全性数据库,并且调用 n_cst_security of_InitSecurity函数
of_InitSecurity函数允许你为用户设置缺省组。
如果用户没有设定为其它组,安全系统将使用缺省组。
要求安全性的窗口 在窗口Open事件中调用 of_SetSecurity函数
如需要有关在应用程序中实现安全性的更多信息,参看 "在应用程序中实现安全性" 。
定义用户和组
概述
要使用 PFC安全性,你必须定义用户和组。
用户可以是零个或多个组的成员;
用户设置总是优先于组设置。
用法
你使用安全管理工具定义用户和组,并关联用户和组。
运行安全管理工具
运行安全管理工具,启动 PowerBuilder,打开应用程序画板,在 pfc/security目录选择 PFCSECAD.PBL,将 PFC PBLs加到库列表,并运行应用程序。
如果连接到 PFC.DB数据库出现问题,检查 PFCSECAD.INI文件和你的工作站的 ODBC设置。
如果你已将PFC安全性表从PFC.DB移动到其它的数据库,你必须更新PFCSECAD.INI文件的Database段以使用正确的数据库连接参数。
定义用户:
1 从菜单栏选择File>User/Groups。
User/Groups管理窗口显示:
2 在Users列右击并选择Add Item。
Add User对话框显示:
3 输入用户名和描述。
用户名必须符合应用程序在执行时能存取的用户ID。
4 单击OK。
5 按需要继续添加用户。
6 从菜单栏File>Save。
定义组:
1 在Groups列右击并选择Add Group。Add Group对话框显示:
2 输入组名、描述和优先权。
零是最高的优先权;
无论如何,用户设置优先于组设置。
3 单击OK。
4 按需要继续添加组。
5 从菜单栏选择File>Save。
关联用户和组:
拖放用户到组上。
从组中删除用户:
1 在用户上右击并选择Delete Item。从组中删除用户对话框显示。
2 单击OK。
3 从菜单栏选择File>Save。
修改先前定义的用户或组:
1 在项目上右击并选择Edit Item。编辑用户或编辑组对话框显示。
2 按需要修改信息。
3 单击OK。
4 从菜单栏选择File>Save。
运行安全性扫描器
安全性扫描器在应用程序中检查所有窗口、数据窗口、菜单以及用户对象。
它保存如下信息到PFC数据库:
窗口
窗口控件
对于DataWindow控件,有关关联在DataWindow对象上的列信息菜单项
用户对象和属性页控件;
收集有关定义在用户对象或属性页上所有控件的信息
用法
你能从PowerBuilder运行安全性扫描器或者创建安全性扫描器可执行版本并从安全管理工具中运行它。
从 PowerBuilder运行安全性扫描器:
1 启动 PowerBuilder。
2 打开应用程序画板。
3 选择 PFCSECSC.PBL并选定pfcsecurity_scanner应用程序。
4 运行应用程序。
如果在连接时遇到困难 如果连接到PFC.DB数据库出现问题,检查 PFCSECAD.INI文件和你的工作站的 ODBC设定。
创建安全性扫描器的可执行版本:
1 复制 PFCAPSRV.PBL文件到安全性目录。
2 打开应用程序画板。
3 打开PFCSECSC.PBL并选择 pfcsecurity_scanner应用程序。
4 关闭应用程序画板。
5 打开 Project 画板。
6 指定可执行文件名 (PFCSECSC.EXE)及资源文件名 (PFCSECSC.PBR)。
7 从菜单栏选择 Design>Build Project。
单独的可执行文件
因为扫描器应用程序会复位它的库搜索路径,安全性扫描器必须被创建为没有PBDs的单独可执行文件。
8 编译过程完成后,关闭Project画板。
9 使可执行文件能被找到:
Windows 95和Windows NT 添加pfcsecsc.exe文件的目录到AUTOEXEC.BAT的PATH语句中。
并确保路径中包含PowerBuilder执行时DLLs的目录 (如 PBVM60.DLL)
Windows 95和Windows NT
为 pfcsecsc.exe在HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/Current Version/App Paths添加项目。
本项目必须包含关键字Path(字符串),值为包含 PowerBuilder运行时DLLs的目录UNIX将pfcsecsc.exe的目录添加到PATH环境变量中。
同时确保LD_LIBRARY_PATH环境变量包含 PowerBuilder执行时DLLs的目录。
从内部安全管理工具运行安全性扫描器:
1 从菜单栏选择File>Scan Application。
选择应用程序对话框显示出定义在pb.ini文件Application段中的应用程序列表:
2 选择被扫描的应用程序并单击Select。选择被扫描的对象对话框显示:
3 按CTRL+单击或SHIFT+单击选择被扫描的对象。
选择对象为了使安全性数据库最小,不要选择你不准备实施安全性的对象。
4 单击Scan。
5 当扫描完成,单击Exit。
定制启动了安全性的控件:
1 从安全管理工具菜单栏中选择File>Templates。模板管理窗口显示出来:
2 在你刚才扫描应用程序上双击。
一个窗口列表显示出来。
3在窗口之一上双击 。
一个控件列表显示出来:
4 按需要修改描述。
在本窗口修改描述能在将用户和组与窗口、窗口控件以及菜单项关联起来时使一切显得更清楚明了。
5 在你不准备实施安全性的项目上右击并选择Delete以删除该项。
删除没必要的项以减少安全性数据库的大小,从而提高性能。
6 完成后,从菜单栏选择File>Save。
7 在实施安全性的所有对象上继续本过程。
为用户和组定义安全性规则
运行扫描器记录了对象和控件并选择性地删除了不需要安全性的项目之后,你可以通过关联用户和组与对象和控件定义安全性规则。
用法
对于每个用户和组,你可以允许或禁止他们访问窗口控件、 DataWindow列、用户对象以及有关被保护的对象的菜单项。
用户可以属于零个或多个组。
用户设置总是优先于组设置。
如果没有用户设置,那么具有最高优先权的组设置将被使用 (0是最高优先权)。
为用户或组定义安全性规则:
1 从菜单栏选择File>Users/Objects。
用户/对象管理窗口显示:
2 点击用户下拉列表框并选择一个将要设置安全性的用户。
3 双击包含被保护对象的应用程序。
4 选择所有的单选按钮 (如果它尚未被选定)。
你现在已准备好去设置安全性项目了。
5 对于被保护的项,使用状态下拉列表框指定Enable、Disabled、Invisible(不要设为不改变对象设置)。
6 完成后,从菜单栏选择File>Save。
7 继续设置该对象直到所有用户和组都设定完毕。
8 继续设定其它对象。
在应用程序中实现安全性
一旦你定义了安全性数据库,那么在你的应用程序中启动安全性服务。
用法
在你的应用程序中启动安全性服务包括:
启动安全性服务
建立与包含安全性表的数据库的连接并与安全性服务进行通讯在适当的窗口启动安全性服务为应用程序启动安全性服务:
调用 n_cst_appmanager of_SetSecurity函数:
gnv_app.of_SetSecurity(TRUE)
建立与包含安全性表的数据库的连接并与安全性服务进行通讯:
1 创建事务对象并连接到数据库 (本例子假定了一个自定义 n_cst_appmanager子孙的实例变量itr_security):
gnv_app.itr_security = CREATE n_tr gnv_app.itr_security.of_Init & (gnv_app.of_GetAppINIFile(), "Security") gnv_app.itr_security.of_Connect() |
安全性表布置 最小化你的应用程序与数据库的连接数目,把安全性表放置于应用程序数据库内。
2 调用 n_cst_security of_InitSecurity函数:
Integer li_return li_return = & gnv_app.inv_security.of_InitSecurity & (gnv_app.itr_security, "EISAPP", & gnv_app.of_GetUserID(), "Default") |
为窗口启动安全性:
在窗口的Open或 pfc_PreOpen事件中调用 n_cst_security of_SetSecurity函数:
gnv_app.inv_security.of_SetSecurity(this)
维护安全性数据库
PFC安全系统的表发布在本地数据库PFC.DB中。
PFC安全性表有:
Security_apps Security_groups Security_info Security_template Security_users |
你能使用本地数据库 PFC.DB定义用户和组、扫描对象,并且定义存取权限。
无论如何,在发布应用程序前你将需要移动这些表到服务器数据库中。PFC安全系统和安全性数据库为易于移动到服务器数据库作了设计:
所有数据库通过DataWindows与PFC安全性进行交互(没有嵌入SQL)
PFC安全系统强迫使用手动的级联删除
用法
将PFC安全性表移动至服务器数据库,为应用程序的所有用户启动安全性。
移动PFC安全性表至服务器数据库:
1 使用数据管道画板移动表定义和数据到服务器数据库。
尽可能地保留表和列名。
2 使用 DataWindow画板访问 PFC安全性 DataWindow。
注意下列情况:
保留 DataWindow的列的顺序和 DataWindow列名。
如果必要的话,使用选择画板更改联合的数据库表或列的名字以匹配那些在服务器数据库上的表或列。记得不要更改 DataWindow的列名。
3 在你的应用程序中,正确地为包含安全性表的服务器数据库设定事务对象。
库扩展器
你可以使用PFC库扩展器自动创建和设定位于二个已有层次(PFC祖先层和PFC扩展层)的中间扩展层。
例如,你可以使用库扩展器给PFC创建包含所有你公司扩展库的中间扩展层:
加入公司和部们的中间扩展层使得应用程序程序员能充分利用扩展层。
用法
库扩展器安装在 PFC工具目录。
完整的用法,请参见“库扩展器在线帮助”。
移植助手
移植助手扫描 PowerBuilder库 (PBLs)并且突出显示废弃的函数和事件。
废弃的函数和事件仍然工作在 PowerBuilder的当前的版本但是不可以工作于今后的版本。
如果你打算保正应用程序将来的运行,最好使用当前的语法和事件。
用法
移植助手被安装在 PowerBuilder目录。
参阅 完整的用法,参见“移植助手在线帮助”。