powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Узнать DataObject DataWindowChild-а
11 сообщений из 11, страница 1 из 1
Узнать DataObject DataWindowChild-а
    #38175213
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача вроде банальная, но, как ни странно, столкнулся с трудностями.
Итак, в функцию передаётся аргумент adwc типа DataWindowChild. Как узнать евойный DataObject?

Видимо, в своё время ПауэрСофт решил, что "adwc.DataObject" - слишком просто для реальных пацанов.

Если б был в наличии DataWindow, в котором находится поле с дропдауном, то можно было бы извлечь через "dddw.name" этого поля, но в распоряжении функции - только adwc.

Спасибо!
...
Рейтинг: 0 / 0
Узнать DataObject DataWindowChild-а
    #38175262
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ursego,

Для начала, для чего нужно знать евойный DataObject?
...
Рейтинг: 0 / 0
Узнать DataObject DataWindowChild-а
    #38175302
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас во фреймворке есть булева функция uf_row_found, определяющая имеется ли в датавиндове/датасторе строка по заданному условию поиска. Я захотел изменить её так, чтоб она хавала также и DataWindowChild. DataObject требуется чтоб указать его в сообщении об ошибке (в выплёвываемом функцией эксепшене) - смотри единственную закоментаренную строку (на самом деле функция оперирует не аргументом adwc типа DataWindowChild, а локальной переменной ldwc что не меняет сути вопроса - я упростил чтоб не грузить подробностями):

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
/**********************************************************************************************************************
Acc:	public
-----------------------------------------------------------------------------------------------------------------------
Dscr:	Reports if in the passed DW, DS or DWC exists a row which satisfies the passed logical expression.
		Should be used instead of the built-in DW's Find(). Advantages:
		
		1. Decreases the number of code lines in the calling script:
				A. Var ll_found_row must not be declared and checked if it's more than 0.
				B. The searched DW / DS must not be checked for validity (error es displayed if it is invalid).
				
				So, the fragment
				
						long ll_found_row
						
						if not IsValid(ads) then
							gnvuo_util.uf_msg("Invalid DataStore passed to function", "uf_...", this)
						end if
						ll_found_row = ads.Find(ls_search_expr, 1, ads.RowCount())
						if ll_found_row > 0 then...
						
				shrinks to one line:
				
						if gnvuo_util.uf_row_found(ads, ls_search_expr) then...
				
		2. If the search expression is incorrect, PB's Find() function displays the message "Expression is not valid"
			which doesn't help a lot. The function uf_row_found displays an additional message which:
				A. Explains exactly what and where has happened so the bug will be found quickly and easily.
				B. Displays the incorrect expression (usually it is built dynamically, so it saves extra debugging).
				C. Displays the DW/DS/DWC's DataObject and suggests to check if it has all the fields, mentioned in the expression.
-----------------------------------------------------------------------------------------------------------------------
Arg:	apo_data_widget (PowerObject) - DataWindow, DataStore or DataWindowChild to search in
		as_search_expr - the logical expression to search by
-----------------------------------------------------------------------------------------------------------------------
Ret:	boolean
-----------------------------------------------------------------------------------------------------------------------
Thr:	nvuo_ex
**********************************************************************************************************************/
long					ll_found_row
string				ls_dataobject
Object				lo_type_of_arg
DataWindow			ldw
DataStore			lds
DataWindowChild	ldwc

if uf_empty(as_search_expr) then
	return false
end if

lo_type_of_arg = apo_data_widget.TypeOf()
choose case lo_type_of_arg
case DataWindow!
	ldw = apo_data_widget
	if not IsValid(ldw) then f_throw(PopulateError(1, "Invalid DataWindow passed to function"))
	ll_found_row = ldw.Find(as_search_expr, 1, ldw.RowCount())
case DataStore!
	lds = apo_data_widget
	if not IsValid(lds) then f_throw(PopulateError(2, "Invalid DataStore passed to function"))
	ll_found_row = lds.Find(as_search_expr, 1, lds.RowCount())
case DataWindowChild!
	ldwc = apo_data_widget
	if not IsValid(ldwc) then f_throw(PopulateError(3, "Invalid DataWindowChild passed to function"))
	ll_found_row = ldwc.Find(as_search_expr, 1, ldwc.RowCount())
case else
	f_throw(PopulateError(4, "Type of argument apo_data_widget must be DataWindow, DataStore or DataWindowChild."))
end choose

choose case ll_found_row
case is > 0
	return true
case 0
	return false
case -1 // General error
	f_throw(PopulateError(5, "Find() failed."))
case -5 // Bad argument
	choose case lo_type_of_arg
	case DataWindow!
		ls_dataobject = ldw.DataObject
	case DataStore!
		ls_dataobject = lds.DataObject
	case DataWindowChild!
//		ls_dataobject = ldwc.DataObject
	end choose
	f_throw(PopulateError(6, "Invalid search expression passed to Find():~r~n~r~n~"" + as_search_expr + &
						"~"~r~n~r~nCheck if all fields, mentioned in the expression, exist in " + ls_dataobject + "."))
end choose

return false
...
Рейтинг: 0 / 0
Узнать DataObject DataWindowChild-а
    #38175309
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ursego,

Понятно, то бишь нет реальной причины... Придется обойтись строкой ошибки без названия DataObject
...
Рейтинг: 0 / 0
Узнать DataObject DataWindowChild-а
    #38175331
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж... Пока сделал так (эту строку можно считать апогеем моей программерской мысли):

Код: vbnet
1.
ls_dataobject = "the DataObject"
...
Рейтинг: 0 / 0
Узнать DataObject DataWindowChild-а
    #38175345
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ursego,
а нельзя что ли создать функцию типа "of_get_DataObject" и дергать её где потребуется?
...
Рейтинг: 0 / 0
Узнать DataObject DataWindowChild-а
    #38175346
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ursego,
а нельзя что ли создать функцию типа "of_get_DataObject" и дергать её где потребуется?
...
Рейтинг: 0 / 0
Узнать DataObject DataWindowChild-а
    #38175660
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну Describe можно же сделать. Выражение типа ldwc.Describe("DataWindow.Name")
Но вообще в этом случае предпочтительней было бы считать выражение повыше - <DW Control Name>.Describe("<Columnname>.DDDW.Name")
...
Рейтинг: 0 / 0
Узнать DataObject DataWindowChild-а
    #38176590
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spas2001,

И что же по вашему Выражение типа datawindowchild.Describe("DataWindow.Name") покажет? :-)
...
Рейтинг: 0 / 0
Узнать DataObject DataWindowChild-а
    #38176875
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп, честно сказать, сам не знаю:) Никогда не использовал. Так что каюсь в своей необразованности:(
Я бы при вызове данного сервиса для чаилда сразу имя считывал бы. Так что можете меня еще немного попинать:)
...
Рейтинг: 0 / 0
Узнать DataObject DataWindowChild-а
    #38177822
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AISUrsego,
а нельзя что ли создать функцию типа "of_get_DataObject" и дергать её где потребуется?Можно подробней? Вот имеется переменная типа DataWindowChild. Куда именно я должен добавить функцию?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Узнать DataObject DataWindowChild-а
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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