Как увидеть буфер данных в отладчике PowerBuilder 12.5?

Поскольку эта опция должна быть новой функцией в PowerBuilder 12.5 .NET, но в отладчике я не видел никаких данных в объекте DataStore. Информация об объекте, отображаемая в отладчике, представляет собой только «базу», «DataObject» и «FlowDirection», но не более того. Как добраться до просмотра данных в объекте DataStore во время отладки?

В предыдущих версиях PowerBuilder я мог сделать это, вызвав метод SaveAs() в Watch, и данные DataStore сохранялись в локальном файле. Но сейчас эта опция не работает (только в исходниках) возвращает ") ожидаемо".


person 4ir4o    schedule 20.09.2012    source источник


Ответы (3)


Мой совет: проведите модульное тестирование DataWindows. Вы можете протестировать их вручную в DataWindow Painter или написать модульные тесты в PowerUnit. Вы не должны интересоваться данными в DataWindow, когда находитесь в отладчике. Если код, который вы отлаживаете, обращается к данным, вы увидите значения, которые он получает, аргументы извлечения и т. д. Если код не обращается к данным, какое вам дело до того, что это такое? Так случилось, что я только что изменил SELECT примерно в 30 окнах DataWindow из-за изменения схемы, и я прекрасно провожу время, тестируя их, так как никто не писал для них тесты раньше. Кроме того, напишите свой код, чтобы его было легче отлаживать. Например, получайте возвращаемые значения в переменные вместо того, чтобы использовать их напрямую.

person Hugh Brackett    schedule 28.09.2012
comment
Я должен упомянуть, что наша структура (на основе PFC) имеет SaveAs›Excel и SaveAs›PDF, встроенные в меню предков, событие в нашем предке среднего уровня для u_dw для SaveAs и код в нашем предке среднего уровня w_sheet, который направляет событие к самому большому видимому DataWindow, если последний сфокусированный объект не является DataWindow (это в основном для отчетов). Сохранить как использует диалоговое окно DataWindow «Сохранить как», поэтому вы можете сделать его в любом формате. Из-за этого данные в DataWindow всегда находятся всего в паре щелчков мыши. - person Hugh Brackett; 02.11.2012

добавлен дополнительный абзац на 11/2-12 - я наткнулся на довольно классный способ просмотра данных буфера во время отладки, это было бы наиболее полезно для хранилищ данных, но должно хорошо работать для окна данных. Ознакомьтесь с разделом этого сайта Сохранить хранилище данных из отладчика.

Один обходной путь, который я обычно использую, заключается в добавлении кода к событию clicked элемента управления окна данных (предок даже лучше) и использовании функции нажатия клавиши для определения предопределенного и была нажата непонятная комбинация клавиш. Если да, то данные должны быть сохранены в файл.

Мне нравится создавать скрытые пасхальные яйца для наиболее распространенных типов, включая одну общую, которая запрашивает у пользователя тип и имя файла.

ctl+alt+e для Excel!

ctl+alt+t для текста!

ctl+alt+c для CSV!

ctrl+alt+a для любого (запрашивается диалоговым окном «Сохранить как»)

Таким образом, если пользователь удерживает ctrl+alt+e и щелкает в любом месте объекта данных, будет запущен следующий код, в результате чего данные будут записаны в excel, а файл excel автоматически открыт. Я часто оставляю эту функцию в производственных приложениях (иногда я фильтрую свой идентификатор пользователя в зависимости от того, насколько конфиденциальны данные), потому что это ОТЛИЧНЫЙ инструмент поддержки производственной среды. Нашему отделу контроля качества также нравится эта функциональность, так как они могут легко документировать данные и просматривать все столбцы, даже те, которые не показаны.

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"

Это не совсем то, что вы искали, но это работает!

ХТН

person Rich Bianco    schedule 27.10.2012

Вы заинтересовали меня этим, когда сказали, что эта функция доступна в PB12.5, поскольку я не думал, что это возможно.

После некоторых проб и ошибок я узнал, что новая функция окна данных доступна только в некоторых целях PowerBuilder 12.5. Короче говоря, эта функция ограничена недавно разработанным окном данных WPF. На изображении ниже показано, как выглядит новая функция. Вы можете развернуть каждый раздел буфера, чтобы просмотреть строки в этом буфере, и вы можете развернуть строку, чтобы просмотреть все столбцы для этой строки.

введите здесь описание изображения

Я создал сообщение в блоге, в котором показаны примеры использования новой функции, включая отображение данных в первичном буфере и буфере фильтра. Статью в блоге можно найти по этой ссылке: Новая функция отладки буфера PowerBuilder 12.5.NET DataWindow.

person Rich Bianco    schedule 03.11.2012