【问题标题】:How to see data buffer in the PowerBuilder 12.5 Debugger?如何在 PowerBuilder 12.5 调试器中查看数据缓冲区?
【发布时间】:2012-11-03 09:22:35
【问题描述】:

因为这个选项应该是 PowerBuilder 12.5 .NET 中的新功能,但在 Debugger 中我看不到 DataStore 对象中的任何数据。 Debugger中显示的对象信息只有“base”、“DataObject”和“FlowDirection”,仅此而已。调试时如何到达查看DataStore对象中的数据?

在以前的 PowerBuilder 版本中,我可以通过调用 Watch 中的 SaveAs() 方法来做到这一点,并将 DataStore 数据保存在本地文件中。但是现在,这个选项不起作用(仅在源代码中)它返回“)预期”。

【问题讨论】:

    标签: .net debugging powerbuilder datastore watch


    【解决方案1】:

    我的建议是对您的 DataWindows 进行单元测试。您可以在 DataWindow Painter 中手动测试它们,也可以在 PowerUnit 中编写单元测试。 当您在调试器中时,您不应该对 DataWindow 中的数据感到疑惑。如果您正在调试的代码正在访问数据,您将看到它正在获取的值、检索参数等。如果代码不访问数据,您为什么要关心它是什么?碰巧的是,由于架构更改,我刚刚在大约 30 个 DataWindows 中修改了 SELECT,并且我正在对它们进行单元测试,因为之前没有人为它们编写过测试。此外,编写代码以便更容易调试。例如,将返回值放入变量中,而不是直接使用它们。

    【讨论】:

    • 我应该提一下,我们的框架(基于 PFC)在祖先菜单中内置了 SaveAs>Excel 和 SaveAs>PDF,在我们的中间层祖先中为 SaveAs 的 u_dw 提供了一个事件,在我们的如果最后一个焦点对象不是 DataWindow(这主要用于报告),则 w_sheet 的 mid_tier 祖先将事件定向到最大的可见 DataWindow。另存为使用 DataWindow 的另存为对话框,因此您可以将其设为任何您想要的格式。因此,DataWindow 中的数据始终只需单击几下鼠标即可。
    【解决方案2】:

    在 2012 年 11 月 2 日添加了附加段落 - 我在调试时遇到了一种非常酷的方式来查看缓冲区数据,这对数据存储区最有用,但对于数据窗口应该可以正常工作。查看此站点部分Save DataStore from Debugger

    我常用的一种解决方法是将代码添加到 datawindow 控件(祖先更好)的单击事件,并使用 keydown 函数来确定前-已按下定义且晦涩的组合键。如果有,则数据应保存到文件

    我喜欢为最常见的类型创建隐藏的复活节彩蛋功能,包括一种提示用户输入文件类型和名称的通用类型。

    ctl+alt+e 用于 Excel!

    ctl+alt+t 用于文本!

    ctl+alt+c 用于 CSV!

    ctrl+alt+a 表示任意(使用另存为对话框提示)

    因此,如果用户按住 ctrl+alt+e单击数据对象上的任意位置,则会触发以下代码,从而将数据写入 excel,并且excel文件自动打开。我经常将此功能保留在生产应用程序中(有时我会根据数据的敏感程度过滤我的用户 ID),因为它是一个伟大的生产支持工具。我们的QA 部门也喜欢该功能,因为他们可以轻松记录数据,并且可以查看所有列,甚至是未显示的列。

    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

    【讨论】:

      【解决方案3】:

      当您说 PB12.5 中提供该功能时,您让我对此感到好奇,因为我认为这是不可能的。

      经过反复试验,我了解到新的数据窗口功能仅在某些 PowerBuilder 12.5 目标中可用。简而言之,该功能仅限于新设计的 WPF 数据窗口。下图显示了新功能的外观。您可以展开每个缓冲区部分以查看该缓冲区中的行,也可以展开一行以查看该行的所有列。

      我创建了一篇博文,展示了使用新功能的示例,包括在主缓冲区和过滤缓冲区中显示数据。可以通过此链接找到博客文章:New PowerBuilder 12.5.NET DataWindow Buffer Debugging Feature

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-11
        相关资源
        最近更新 更多