powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Проблемы динамической обработки nested reports
11 сообщений из 11, страница 1 из 1
Проблемы динамической обработки nested reports
    #36076773
mikegr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может быть у кого нибудь есть идея как решить следующую проблему:
Необходимо получить доступ к любому элементу репорта. К примеру 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
Проблемы динамической обработки nested reports
    #36076854
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эээ... что-то я не пойму, а зачем так извращаться? Объект DataWindowChild тоже имеет метод GetChild(...)
...
Рейтинг: 0 / 0
Проблемы динамической обработки nested reports
    #36077001
mikegr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
getChild() не работает на Nested Reports
...
Рейтинг: 0 / 0
Проблемы динамической обработки nested reports
    #36077239
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Проблемы динамической обработки nested reports
    #36077302
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркЭээ... что-то я не пойму, а зачем так извращаться? Объект DataWindowChild тоже имеет метод GetChild(...)
Дело в том что при более чем одном уровне вложенности, GetChild уже на первом уровне не срабатывает.

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

Почему не получится? Этот способ как раз для GetChild в рантайме и придуман.
Другое дело, что это не поможет mikegr, т.к. проблема описанная им существует и с композитными отчетами.
...
Рейтинг: 0 / 0
Проблемы динамической обработки nested reports
    #36077332
mikegr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильно,
поэтому я и использую __get_attribute рекурсивно двигаясь по всем reports.
Не понятно почему падение происходит на sub-sub уровне.
Если dot notatition пропускает
dw_parent.Object.dw_child.Object.dw_grandchild.Object.Datawindow.Objects
то почему падает
ldwo = ldwo_grandchild.Object
при том что все остальное в этом объекте доступно?
...
Рейтинг: 0 / 0
Проблемы динамической обработки nested reports
    #36077370
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Проблемы динамической обработки nested reports
    #36078298
mikegr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, Анатолий, я именно там и смотрел. Но ведь 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
Проблемы динамической обработки nested reports
    #36078428
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пустое...
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Проблемы динамической обработки nested reports
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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