powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Дублирование функций для DS & DW
24 сообщений из 24, страница 1 из 1
Дублирование функций для DS & DW
    #32416918
andy753
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть большое число функций, где в качестве параметров необходимо указывать DW-DS. Сейчас приходится дублировать с одним единственным изменением - в типе параметра. Поддерживать это хозяйство муторно. Что-то да забываешь продублировать. Да и библиотеки хорошо раздувает.

Посему - может кто сталкивался - пытался сделать так: передавать тип PowerObject или что-то тоже достаточно абстрактное а потом динамически вызывать функции (события)?

Сразу прошу пессимистов воздержаться от комментариев :) И так Вашу точку зрения знаю :)
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32417338
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А Вы не могли бы описать более конкретно, так сказать "на пальцах", то, что Вы хотели бы сделать?
А то уж всё больно сумбурно...
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32417524
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что тут собственно может быть конкретнее?

Читайте тут:

http://www.romu.com/download/ROMUSoftware_PBDJ_Interfaces_2.pdf
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32418672
andy753
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп, спасибо. Посмотрю... появилась еще одна идея. Что в итоге выйдет - напишу...

Для Урваса - попробую на пальцах. Когда пишете собственную библиотеку по работе с ДВ - ДС. Проблема описывать общие функции по какому нибудь обработчику. Примитивный пример - функция get_item - которая возвращает any переменную нужного столбца и строки и нужного DW-DS. Ну и попробуйте это сделать одной функцией - общей. В общем случае - приходится дублировать функции, отличающихся только одним параметром. Вот я и ищу способ переделки уже большого числа функций. А еще и желательно и библиотеки классов.
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32418867
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если сделать функцию внешней (например, глобальной) и вызывать её из событий?
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32418879
andy753
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы попробуйте :) И сразу вопрос поймете, надеюсь. Если будет проблемы с пониманием все таки - пишите на мыло. Я вам одну из функций пришлю.
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32419152
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробую ответить...
Но сначала попытаюсь сформулировать Вашу задачу своими словами:
Я хочу создать пользовательский объект DataWindow c расширенной функциональностью, в самом примитивном случае позволяющей возвращать некой внешней функции одно-единственное значение из конкретной ячейки нашего объекта, адрес которой (строка и столбец передается из вызывающей функции).
Правильно ли я переформулировал задачу?

Если правильно, то в такой формулировке всё элементарно, но явно это не то, что требовалось. Что-то недосказано... А, видимо, заранее не известен тип возвращаемого значения. Что делать? А взять и вернуть в функцию не только значение типа ANY, но и тип этого значения. А как узнать тип? А Describe() на что??? В вызывающей функции добавить обработчик. Предположим, эта часть решена.
Что дальше? Оказывается вызывающая функция привязана к совершенно конкретному объекту, но разве это - тупик?! Что мешает создать массив DataWindow (а ещё лучше массив структур), по какому-то, одному Вам известному признаку, выбирать из массива необходимый объект, а затем

dw .FUNCTION DYNAMIC uf_myfunc(r,c)
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32419212
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>urvas
Да не так. У andy753 совершенно реальная задача.
Постановка (пример):
Создать объект, имеющий ф-ю of_Препарировать_строку( ... ) : int
где аргументы:
al_RowNum
a?_?? или datastore или datawindow
Придется писать ДВЕ ф-ии, для DW и для DS, а лень, однако.
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32419228
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллега Guest!
А такое понятие Overloading Вам знакомо???
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32419245
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>urmas
Спасибо Коллега urmas. "Overloading", как и много других слов встречал :)
Я говорил не о внешнем представлении, а о минимизации собственно кода.
Да можно создать две ф-ии с разными типами арг-ов, но это будет ДВА тела,
а не одно.
Да можно использовать ShareData, any, typeof, classname, case .... но это, IMHO, криво и является обходом, а не решением задачи.

P.S.
1. Все вышесказанное прошу рассматривать строго как IMHO
2. Лень, однако :)
3. Мечта: вот был-бы один предок у DW и DS ....
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32419304
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Guest!
Прошу не путать Бабеля с Бебелем, кобеля с кабелем, а меня с мифическим urmas'ом. Это - во-первых!
Во-вторых, о каких, собственно, ДВУХ функциях идет речь? Кому эти тела принадлежат? Код какого объекта Вы хотите минимизировать?
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32419330
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый urvas!
Приношу свои извинения за неправильно указанный NIC.
О постановке, на мой взгляд, все сказал автор, но повторюсь:
класс n_cst_additional_func
должен предоставлять:
of_Препарировать_строку( long al_Row, datawindow adw_DW) : int
of_Препарировать_строку( long al_Row, datastore ads_DS) : int
По функциональности оба метода равнозначны.

Код n_cst_additional_func желательно минимизировать.

Поскольку все это уже напоминает flame, позволю себе откланяться
и не занимать Уважаемое сообщество.

P.S.
а ведь там "....Бабеля с Бебелем,..." был и Гегель ;)
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32419343
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, о птичках!
Т.е., о DataWindow и DataStore.
Насколько я понимаю, DataStore - это УРЕЗАННЫЙ DataWindow c ПОСТОЯННО ВЫКЛЮЧЕННЫМ Visible. Так какая ж апатитская сила может ВЫНУДИТЬ нас использовать и тот и другой объект, вместо использования одного-единственного - DataWindow???
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32419376
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Guest
авторДа можно использовать ShareData, any, typeof, classname, case .... но это, IMHO, криво и является обходом, а не решением задачи.
P.S.
...
3. Мечта: вот был-бы один предок у DW и DS ....

Вообще-то общим предком является PowerObject.
А почему typeof() есть криво?
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32419383
andy753
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем! Информации для размышления более чем Филиппу отдельно, интересный вариант, я чесно говоря так не собирался реализовывать.

TO urvas: спасибо за столь рьяное участие. Насчет "... DataStore - это УРЕЗАННЫЙ DataWindow c ПОСТОЯННО ВЫКЛЮЧЕННЫМ Visible ..." боюсь Вы не совсем правильно понимаете. DS является наследником невизуального класса, а DW является наследником окна и соответственно, с присущими ему уникальными свойствами и функционалом. У них конечно есть общий предок PowerObject - но он настолько дальний, что делать с ним особо и нечего. Совсем "динамический" код это конечно здорово, но тогда много ошибок останется в рантайме - а это не очень хотелось бы.

Засим предлагаю, закрыть обсуждение. Еще раз - ВСЕМ СПАСИБО!
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32419387
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обратимся к первоисточнику:

A DataStore is a nonvisual DataWindow control. DataStores act just like DataWindow controls except that many of the visual properties associated with DataWindow controls do not apply to DataStores. Because you can print DataStores, PowerBuilder provides some events and functions for DataStores that pertain to the visual presentation of the data.
However, graph functions such as CategoryCount, CategoryName, GetData, SeriesCount, and so forth depend on the visual graph control, which is not created for a DataStore object. These functions return an error value or an empty string when used with DataStores.
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32419424
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to urvas
А вы читали те две статьи, ссылку на 2-ю из которых привел Филипп?
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32419534
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, читал!
Только Вашего вопроса, извините, Марк, не понял...
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32419576
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я про CreateFrom говорю, или тогда я не понял к чему вы цитату привели.
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32420010
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
urvas , ваши обращения к "первоисточнику" хороши, но к сожалению первоисточник не всегда поспевает за действительностью. Она такова, что начиная с РВ8 имплементация DS начала резко меняться, DS теперь не обязан иметь window handle (в силу чего, если PBVM бежит под EAServerом, то можно bind thread отключать, дабы DS local thread storage не использовал, а в дальнейшем тоже самое и не под EAServerом тоже самое можно будет делать). Datawindow с другой стороны - это ВСЕГДА window (в смысле Windows(tm)).
А вот подобные заявления: авторТак какая ж апатитская сила может ВЫНУДИТЬ нас использовать и тот и другой объект, вместо использования одного-единственного - DataWindow??? выдают непонимание темы обсуждения, так что вы это, решите для себя...
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32420821
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Более того, Филипп! Смею уверить Вас, что мои заявления, да ещё будучи вырванными из контекста задачи, кроме всего прочего, могут ещё выдать мои и группу крови, и резус-фактор, и уровень IQ, и чего ещё.
Но! Я убежден, что в рамках поставленной задачи, когда кому-то муторно, а кому-то просто лень поддерживать несколько различных типов объектов, идея применять только DataWindow имеет не только полное право на существование, но, заметьте, и вполне работоспособна, не смотря на классовые различия, сословные противоречия и, особенно, отсутствия возможности CreateFrom...
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32421684
andy753
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению, Вы не правы urvas, наше приложение использует довольно активно Ягуар, но там можно использовать исключительно DS :)
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32421875
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый andy753!
Очень жаль, что про Ягуар выяснилось только на третьем десятке сообщений, по-моему, это очень принципиальный момент. Знай об этом раньше, я бы вообще не стал ничего говорить и спрашивать, т.к. АБСОЛЮТНО на ничего не знаю об этом кошаке...
...
Рейтинг: 0 / 0
Дублирование функций для DS & DW
    #32421883
andy753
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
 "....Есть большое число функций, где в качестве параметров необходимо указывать DW-DS...." 


Обратите внимание на слово Н Е О Б Х О Д И М О !!! Все остальное без комментариев.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Дублирование функций для DS & DW
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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