Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何在PowerBuilder 12.5调试器中查看数据缓冲区?_.net_Debugging_Powerbuilder_Datastore_Watch - Fatal编程技术网

.net 如何在PowerBuilder 12.5调试器中查看数据缓冲区?

.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 12.5.NET中的新功能,但在调试器中,我无法在数据存储对象中看到任何数据。调试器中显示的对象信息仅为“base”、“DataObject”和“FlowDirection”,仅此而已。如何在调试时查看数据存储对象中的数据


在以前的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的“另存为”对话框,因此您可以将其设置为所需的任何格式。因此,数据窗口中的数据总是只需点击几下鼠标即可访问。