.net 如何在PowerBuilder 12.5调试器中查看数据缓冲区?
由于此选项应作为PowerBuilder 12.5.NET中的新功能,但在调试器中,我无法在数据存储对象中看到任何数据。调试器中显示的对象信息仅为“base”、“DataObject”和“FlowDirection”,仅此而已。如何在调试时查看数据存储对象中的数据.net 如何在PowerBuilder 12.5调试器中查看数据缓冲区?,.net,debugging,powerbuilder,datastore,watch,.net,Debugging,Powerbuilder,Datastore,Watch,由于此选项应作为PowerBuilder 12.5.NET中的新功能,但在调试器中,我无法在数据存储对象中看到任何数据。调试器中显示的对象信息仅为“base”、“DataObject”和“FlowDirection”,仅此而已。如何在调试时查看数据存储对象中的数据 在以前的PowerBuilder版本中,我可以通过在Watch中调用SaveAs()方法来实现这一点,并且数据存储数据保存在本地文件中。但是现在,这个选项不起作用(仅在源代码中),它返回“)expected”我的建议是对数据窗口进行单
在以前的PowerBuilder版本中,我可以通过在Watch中调用SaveAs()方法来实现这一点,并且数据存储数据保存在本地文件中。但是现在,这个选项不起作用(仅在源代码中),它返回“)expected”我的建议是对数据窗口进行单元测试。您可以在DataWindow Painter中手动测试它们,也可以在PowerUnit中编写单元测试当您在调试器中时,不应该对数据窗口中的数据感到疑惑。如果您正在调试的代码正在访问数据,您将看到它正在获取的值、检索参数等。如果代码没有访问数据,您为什么会关心它是什么?碰巧,由于模式的改变,我在大约30个数据窗口中修改了SELECT,现在我有一个很好的时间对它们进行单元测试,因为以前没有人为它们编写测试。另外,编写代码以便于调试。例如,将返回值放入变量中,而不是直接使用它们。在11/2-12中添加了额外的段落-我在调试时遇到了一种非常酷的查看缓冲区数据的方法,这对数据存储非常有用,但对于datawindow应该可以很好地工作。查看此网站部分 我通常使用的一种解决方法是向数据窗口控件的单击事件添加代码(祖先更好),并使用keydown函数确定是否按下了预定义的模糊组合键。如果有,则应将数据保存到文件 我喜欢为最常见的类型创建隐藏复活节彩蛋功能,包括一个提示用户输入文件类型和名称的通用类型 ctl+alt+e用于Excel 文本的ctl+alt+t ctl+alt+c用于CSV ctrl+alt+a(使用“另存为”对话框提示) 因此,如果用户按住ctrl+alt+e并单击dataobject上的任何位置,将触发以下代码,导致数据写入excel,并自动打开excel文件。我经常在生产应用程序中保留此功能(有时我会根据数据的敏感程度筛选用户ID),因为它是一个非常好的生产支持工具。我们的质量保证部门也很喜欢该功能,因为他们可以轻松地记录数据,并且可以查看所有列,即使是未显示的列
long ll_handle
string ls_filename, ls_null, ls_dir
if keydown(KeyControl!) and keydown(KeyAlt!) then
// set work variables to be used in save
SetNull(ls_null)
// grab handle to MDI frame window for the ShellExecute function
ll_handle = Handle(gwMdi)
// construct the filename using dataobject and datetime
ls_dir = "c:\temp"
ls_filename = ls_dir + '\debug_dataobject_' + this.dataobject + '_date_' + string(Today(),'mmddyyhhmmss')
// determine if we are saving excel, text, csv, or prompting for filetype
if keydown(keye!) then
ls_filename =+ '.xls'
dw_1.SaveAs(ls_filename, Excel!,True!)
elseif keydown(keyt!) then
ls_filename =+ '.txt'
dw_1.SaveAs(ls_filename, Text!,True!)
elseif keydown(keyc!) then
ls_filename =+ '.txt'
dw_1.SaveAs(ls_filename, Csv!,True!)
elseif keydown(keya!) then
ls_filename =+ ''
// empty string forces dialog open
dw_1.SaveAs(ls_filename)
end if
// now automatically open the file using default program
// for the file type via Windows API function
if fileexists(ls_filename) then
gwMdi.ShellExecute(ll_handle, 'open', ls_filename, ls_null, ls_dir, 3)
end if
end if
// Define ShellExcecute as Local External Function
// somewhere in your application or as Global External Function:
Function Long ShellExecute (Long hWnd, String lpOperation, String lpFile, String lpParameters, String lpDirectory, Long nShowCmd) Library "shell32.dll" Alias For "ShellExecuteA"
这不完全是你想要的,但它很有效
HTH当你说PB12.5中提供了该功能时,我对这一点感到好奇,因为我认为这是不可能的 经过一些尝试和错误,我了解到新的datawindow功能仅在PowerBuilder 12.5的一些目标中可用。简而言之,该特性仅限于新设计的WPF数据窗口。下图显示了新功能的外观。可以展开每个缓冲区部分以查看该缓冲区中的行,也可以展开一行以查看该行的所有列
我创建了一篇博客文章,展示了使用新功能的示例,包括在主缓冲区和过滤器缓冲区中显示数据。博客文章可以通过以下链接找到。我应该提到,我们的框架(基于PFC)在祖先菜单中内置了SaveAs>Excel和SaveAs>PDF,这是我们的中端祖先u_dw for SaveAs中的一个事件,以及w_sheet的中间层祖先中的代码,如果最后一个焦点对象不是数据窗口(这主要用于报告),则将事件定向到最大的可见数据窗口。“另存为”使用DataWindow的“另存为”对话框,因此您可以将其设置为所需的任何格式。因此,数据窗口中的数据总是只需点击几下鼠标即可访问。