Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Проблемы динамической обработки nested reports / 11 сообщений из 11, страница 1 из 1
07.07.2009, 10:39
    #36076773
mikegr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы динамической обработки nested reports
Может быть у кого нибудь есть идея как решить следующую проблему:
Необходимо получить доступ к любому элементу репорта. К примеру datawindow
содержит 7 репортов 3 из них имеют детишек и т.д. GetChild() отработает только
на 4 простых. Dot Notation использовать нельзя так как таких datawindow в системе
сотни и каждое содержит сотни элементов которые могут изменяться динамически
по business rules.
Попробовал следующую идею рекурсивной функции:

public subroutine of_get_children_reports (ref dwobject adwo_parent);
integer li_idx, li_objects
string ls_data_object, ls_describe, ls_object_type, ls_object_list[]
dwObject ldwo, ldwo_sub

ls_describe = adwo_parent.DataWindow.Objects

// Get list of objects
li_objects = gnv_utils.of_get_tokens(ls_describe, '~t', ls_object_list[])

FOR li_idx = 1 TO li_objects
// Get Current DWObject
ldwo = adwo_parent.__get_attribute( ls_object_list[li_idx], TRUE )
ls_object_type = ldwo.Type
ls_object_type = Upper( ls_object_type )
// Get Reports
IF ls_object_type = 'REPORT' THEN
ls_describe = ldwo.dataobject
ldwo_sub = ldwo.Object
of_get_children_reports( ldwo_sub)
END IF
NEXT

end subroutine

Вызов функции:
of_get_children_reports( anv_ds_report.Object )

Результат:
Первое вложение проходит отлично, включая и сложные репорты.
Падение на втором уровне (т.е. на внуках) в строке
ldwo_sub = ldwo.Object
"Error accessing external object property object..."
хотя все attributes of dwObject доступны (ldwo.Type, ldwo.dataobject, ...)

Какие нибудь идеи?
...
Рейтинг: 0 / 0
07.07.2009, 11:00
    #36076854
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы динамической обработки nested reports
Эээ... что-то я не пойму, а зачем так извращаться? Объект DataWindowChild тоже имеет метод GetChild(...)
...
Рейтинг: 0 / 0
07.07.2009, 11:40
    #36077001
mikegr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы динамической обработки nested reports
getChild() не работает на Nested Reports
...
Рейтинг: 0 / 0
07.07.2009, 13:06
    #36077239
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы динамической обработки nested reports
mikegrgetChild() не работает на Nested ReportsНе работает, это описано в документации:
PoweBuilder HelpGetChild method (DataWindows)

Description

Provides a reference to a child DataWindow or to a report in a composite DataWindow, which you can use in DataWindow functions to manipulate that DataWindow or report.

Можно изменить свойство processing (установить его равным 5), но,в рантайме это сделать не получится

PoweBuilder HelpProcessing DataWindow object property
Description

The type of processing required to display the data in the selected presentation style.
...
Syntax

PowerBuilder dot notation:

dw_control.Object.DataWindow.Processing

Describe argument:

"DataWindow.Processing"

Return values are:

0 — (Default) Form, group, query, or tabular
1 — Grid
2 — Label
3 — Graph
4 — Crosstab
5 — Composite
7 — RichText
...
Рейтинг: 0 / 0
07.07.2009, 13:33
    #36077302
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы динамической обработки nested reports
Локшин МаркЭээ... что-то я не пойму, а зачем так извращаться? Объект DataWindowChild тоже имеет метод GetChild(...)
Дело в том что при более чем одном уровне вложенности, GetChild уже на первом уровне не срабатывает.

На вопрос в том виде как его задал ТС ответа нет.
...
Рейтинг: 0 / 0
07.07.2009, 13:37
    #36077319
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы динамической обработки nested reports
mikegrНеобходимо получить доступ к любому элементу репорта. К примеру datawindow
содержит 7 репортов 3 из них имеют детишек и т.д. GetChild() отработает только
на 4 простых. Dot Notation использовать нельзя так как таких datawindow в системе
сотни и каждое содержит сотни элементов которые могут изменяться динамически
по business rules.
А какая задача решается?
...
Рейтинг: 0 / 0
07.07.2009, 13:40
    #36077330
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы динамической обработки nested reports
PL99Можно изменить свойство processing (установить его равным 5), но,в рантайме это сделать не получится

Почему не получится? Этот способ как раз для GetChild в рантайме и придуман.
Другое дело, что это не поможет mikegr, т.к. проблема описанная им существует и с композитными отчетами.
...
Рейтинг: 0 / 0
07.07.2009, 13:41
    #36077332
mikegr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы динамической обработки nested reports
Правильно,
поэтому я и использую __get_attribute рекурсивно двигаясь по всем reports.
Не понятно почему падение происходит на sub-sub уровне.
Если dot notatition пропускает
dw_parent.Object.dw_child.Object.dw_grandchild.Object.Datawindow.Objects
то почему падает
ldwo = ldwo_grandchild.Object
при том что все остальное в этом объекте доступно?
...
Рейтинг: 0 / 0
07.07.2009, 13:50
    #36077370
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы динамической обработки nested reports
mikegrПравильно,
поэтому я и использую __get_attribute рекурсивно двигаясь по всем reports.
Не понятно почему падение происходит на sub-sub уровне.
Если dot notatition пропускает
dw_parent.Object.dw_child.Object.dw_grandchild.Object.Datawindow.Objects
то почему падает
ldwo = ldwo_grandchild.Object
при том что все остальное в этом объекте доступно?
В свое время я случайно наткнулся на __get_attribute(тогда, в PB6, еще get_attribute) копаясь в ClassDefinition из DW и DW.Object.
Попробуйте и вы посмотреть что есть в ldwo_grandchild (свойства, методы). Может это натолкнет вас на решение.
...
Рейтинг: 0 / 0
07.07.2009, 17:39
    #36078298
mikegr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы динамической обработки nested reports
да, Анатолий, я именно там и смотрел. Но ведь parent, child & grandchild все тот же dwObject.
Всего есть 5 интересных функций:
__get_attribute ( readonly string s, boolean b ) returns any
__get_attribute_item ( readonly string s, unsignedinteger ns, readonly long subs[], boolean b ) returns any
__invoke_method ( readonly string s, unsignedinteger ns, readonly any args[], boolean b ) returns any
__set_attribute ( readonly string s, readonly any v )
__set_attribute_item ( readonly string s, unsignedinteger ns, readonly long subs[], readonly any v )

__get_attribute и __set_attribute понятны (более ни менее), а вот 3 остальные вызывают большой
интерес. Может у кого-то есть информация о них?
...
Рейтинг: 0 / 0
07.07.2009, 18:35
    #36078428
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы динамической обработки nested reports
Пустое...
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Проблемы динамической обработки nested reports / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]