|
Проблемы динамической обработки nested reports
|
|||
---|---|---|---|
#18+
Может быть у кого нибудь есть идея как решить следующую проблему: Необходимо получить доступ к любому элементу репорта. К примеру 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, ...) Какие нибудь идеи? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2009, 10:39 |
|
Проблемы динамической обработки nested reports
|
|||
---|---|---|---|
#18+
Эээ... что-то я не пойму, а зачем так извращаться? Объект DataWindowChild тоже имеет метод GetChild(...) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2009, 11:00 |
|
Проблемы динамической обработки nested reports
|
|||
---|---|---|---|
#18+
getChild() не работает на Nested Reports ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2009, 11:40 |
|
Проблемы динамической обработки nested reports
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2009, 13:06 |
|
Проблемы динамической обработки nested reports
|
|||
---|---|---|---|
#18+
Локшин МаркЭээ... что-то я не пойму, а зачем так извращаться? Объект DataWindowChild тоже имеет метод GetChild(...) Дело в том что при более чем одном уровне вложенности, GetChild уже на первом уровне не срабатывает. На вопрос в том виде как его задал ТС ответа нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2009, 13:33 |
|
Проблемы динамической обработки nested reports
|
|||
---|---|---|---|
#18+
mikegrНеобходимо получить доступ к любому элементу репорта. К примеру datawindow содержит 7 репортов 3 из них имеют детишек и т.д. GetChild() отработает только на 4 простых. Dot Notation использовать нельзя так как таких datawindow в системе сотни и каждое содержит сотни элементов которые могут изменяться динамически по business rules. А какая задача решается? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2009, 13:37 |
|
Проблемы динамической обработки nested reports
|
|||
---|---|---|---|
#18+
PL99Можно изменить свойство processing (установить его равным 5), но,в рантайме это сделать не получится Почему не получится? Этот способ как раз для GetChild в рантайме и придуман. Другое дело, что это не поможет mikegr, т.к. проблема описанная им существует и с композитными отчетами. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2009, 13:40 |
|
Проблемы динамической обработки nested reports
|
|||
---|---|---|---|
#18+
Правильно, поэтому я и использую __get_attribute рекурсивно двигаясь по всем reports. Не понятно почему падение происходит на sub-sub уровне. Если dot notatition пропускает dw_parent.Object.dw_child.Object.dw_grandchild.Object.Datawindow.Objects то почему падает ldwo = ldwo_grandchild.Object при том что все остальное в этом объекте доступно? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2009, 13:41 |
|
Проблемы динамической обработки nested reports
|
|||
---|---|---|---|
#18+
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 (свойства, методы). Может это натолкнет вас на решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2009, 13:50 |
|
Проблемы динамической обработки nested reports
|
|||
---|---|---|---|
#18+
да, Анатолий, я именно там и смотрел. Но ведь 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 остальные вызывают большой интерес. Может у кого-то есть информация о них? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2009, 17:39 |
|
|
start [/forum/topic.php?fid=15&fpage=32&tid=1336218]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 142ms |
0 / 0 |