Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Узнать DataObject DataWindowChild-а / 11 сообщений из 11, страница 1 из 1
05.03.2013, 20:50
    #38175213
Ursego
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать DataObject DataWindowChild-а
Задача вроде банальная, но, как ни странно, столкнулся с трудностями.
Итак, в функцию передаётся аргумент adwc типа DataWindowChild. Как узнать евойный DataObject?

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

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

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

Для начала, для чего нужно знать евойный DataObject?
...
Рейтинг: 0 / 0
05.03.2013, 23:33
    #38175302
Ursego
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать DataObject DataWindowChild-а
У нас во фреймворке есть булева функция 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
05.03.2013, 23:45
    #38175309
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Узнать DataObject DataWindowChild-а
Ursego,

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

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

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


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