powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Получение свойств объекта
9 сообщений из 9, страница 1 из 1
Получение свойств объекта
    #37521830
miv32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Есть форма с гридом.
Источником данных служит табличка с перечнем форм.
Например:
FORM_ID тип N FORM_NAME тип C
1 Bank
2 Customer
................................
100 Contract

Возможно ли получить свойства выбираемой формы?
Надо как-то дать понять, что содержимое FORM_NAME объект, а не строковая переменная.
И что этот объект существует.
...
Рейтинг: 0 / 0
Получение свойств объекта
    #37521847
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как проверить факт существования (использования, открытия) формы

Код: plaintext
1.
2.
3.
IF TYPE("_VFP.Forms('MyForm')")="U"  
	* Формы со свойством name = MyForm не существует (не открыта)  
ENDIF

Обратите внимание, что здесь используется системная переменная _VFP. Использовать аналогичный синтаксис с системной переменной _SCREEN - не получится. Коллекция _SCREEN.Forms() не принимает в качестве параметра символьные значения. Только числовые.

Кроме того, данный способ не сработает для форм, имеющих значение совйства ShowWindow = 2 - As Top-Level Form. В этом случае придется просто перебирать весь массив _SCREEN.Forms() или _VFP.Forms()

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
LOCAL lnI, loForm  
loForm = NULL  
FOR lnI= 1  TO _SCREEN.FormCount  
	loForm = _SCREEN.Forms(m.lnI)  
	IF m.loForm.Name = "MyForm"  
		* Нашли форму со свойством Name = "MyForm"  
		EXIT  
	ENDIF  
	loForm = NULL  
ENDFOR  
IF IsNull(m.loForm) = .T.  
	* Формы со свойством name = MyForm не существует (не открыта)  
ENDIF
...
Рейтинг: 0 / 0
Получение свойств объекта
    #37522376
miv32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, но этот рецепт мне известен. :)
А если форма не открыта?

Суть задач в следующем:
1) Необходимо перед сохранением данных проверять поля, необходимые для заполнения.
Мудрить код под кнопкой "Сохранить" в каждой форме как-то не спортивно.
Хотелось бы быстро иметь возможность включать/выключать проверку на нужные поля.
Формы построены на основе класса. Соответственно достаточно поправить только в одном месте.

2) Enabled/Disabled;Visible/Invisible элементов на форме.
(для разных пользователей разный уровень доступа)

В Init прописывается процедурка, которая ищет в <табличке> имя формы. Если находит перечень имен объектов формы, то нужный объект каким-либо образом выделяется. Можно фон чуть подкрасить, например. Данные о нужных полях кладем в массив.

Перед сохранением смотрим массив. Поле -> Значение. Если что-то не заполнено - "Ошибка".

Вот и хотелось бы манипулировать формами из отдельного рабочего места.
Загрузил список форм, выбрал нужную. Вывалились объекты. Галочками отметил (или снял) нужные, сохранил в <табличке>.
Думаю, что придется форму открывать, но в режиме HIDE(), но тогда как перебирать свойства?
...
Рейтинг: 0 / 0
Получение свойств объекта
    #37522407
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miv32Спасибо, но этот рецепт мне известен. :)
А если форма не открыта?

Суть задач в следующем:
1) Необходимо перед сохранением данных проверять поля, необходимые для заполнения.
Мудрить код под кнопкой "Сохранить" в каждой форме как-то не спортивно.
Хотелось бы быстро иметь возможность включать/выключать проверку на нужные поля.
Формы построены на основе класса. Соответственно достаточно поправить только в одном месте.
Ну и кнопку на основе класса сделай, если переписывать неохота - BINDEVENT()

miv32Думаю, что придется форму открывать, но в режиме HIDE(), но тогда как перебирать свойства?
Не открывая формы никак свойства не переберешь, нельзя получить то что не существует.
...
Рейтинг: 0 / 0
Получение свойств объекта
    #37522589
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miv321) Необходимо перед сохранением данных проверять поля, необходимые для заполнения.
Этим должна заниматься сама база данных, а не форма. Контроль на уровне интерфейса - это вспомогательный инструмент. Окончательный контроль на уровне данных. Например, RULE-записи (RULE-поля слишком жестко и не удобо для пользователя) или в триггере. Может, Вы заполняете некое поле программно, на основе введенных пользователем значений?

miv32Мудрить код под кнопкой "Сохранить" в каждой форме как-то не спортивно.
Как правило, этот код заключается в одной или нескольких командах TableUpdate() если необходимо, окруженных транзакцией. Если все-таки необходима некая проверка перед сохранением, то, как правило, она уникальна для каждой формы.

miv322) Enabled/Disabled;Visible/Invisible элементов на форме.
(для разных пользователей разный уровень доступа)
Ну, успехов в этом трудном деле. Мало будет один раз открыть, надо будет еще синхронизировать ту таблицу, где будут помечаться эти самые разрешения/запреты и изменения в формах. Если удалили объект в форме, то надо будет не забыть удалить запись в таблице. Особое удовольствие Вы получите, когда некие объекты формы сначала были в контейнере, а потом контейнер удалили, но объекты оставили. Или наоборот, объекты лежали на форме, а потом их положили в контейнер.

Более простой представляется схема, когда форма сама настривает доступ к объектам в зависимости от выполняемых функций. Т.е. права раздаются не на уровне объектов, а на уровне выполняемого функционала. А уж какой объект какому функционалу соответствует форма должна "знать" сама.
...
Рейтинг: 0 / 0
Получение свойств объекта
    #37523151
miv32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:)
Сами формы юзеры трогать не будут. Права на изменения доступности полей только у админа.
Сейчас реализовано следующим образом:
При загрузке формы сканируется табличка. Ищутся объекты и в зависимости от прав юзера объекты на форме Видимы/Невидимы, Доступны/Недоступны. Если объект не найден в таблице, то соответственно ставятся дефаултные значения, т.е. полный доступ.
Дело в том, что в разных конторах функционал могут выполнять либо несколько человек, либо один. Например: "Оператор", "Кассир","Менеджер","Директор"
Оператор может регистрировать клиентов, но не должен видеть кассовые операции, Для Кассира с точностью до наоборот. Менеджер может только видеть, ничего крутить не должен. А директор должен иметь право на все. :)
Но вот таблицу пришлось руками делать. Я хотел, чтобы был некий интерфейс, чтобы "Директор" сам создавал профили. И для любого сотрудника выбирал нужный.
...
Рейтинг: 0 / 0
Получение свойств объекта
    #37523673
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miv32Сами формы юзеры трогать не будут. Права на изменения доступности полей только у админа.
Какое отношение к модификации форм имеют юзеры? Вообще никакого! Это Вы себе кучу проблем создаете при таком подходе. Вы же будете "связаны по рукам и ногам" при любой, даже самой незначительной, модификации формы. Любой формы! Вы будете постоянно бороться с проблемой вроде доступ дали, а не доступно. Или наоборот, доступа нет, а доступно. По банальной причине, у Вас будет постоянная рассинхронизация реального "дерева объектов" и прав доступа назначенных на ту или иную "ветку объектов"

miv32Сейчас реализовано следующим образом:
При загрузке формы сканируется табличка. Ищутся объекты и в зависимости от прав юзера объекты на форме Видимы/Невидимы, Доступны/Недоступны. Если объект не найден в таблице, то соответственно ставятся дефаултные значения, т.е. полный доступ.

Да со стороны формы понятно что будет происходить. Проблема именно с настройками.

miv32Дело в том, что в разных конторах функционал могут выполнять либо несколько человек, либо один. Например: "Оператор", "Кассир","Менеджер","Директор"

Оператор может регистрировать клиентов, но не должен видеть кассовые операции, Для Кассира с точностью до наоборот. Менеджер может только видеть, ничего крутить не должен. А директор должен иметь право на все. :)

Ни и зачем Вам в этой идеологии при настройке прав "опускаться" до уровня отдельных объектов формы? Форма должна сама "знать" какие объекты к какому функционалу относятся и что с ними можно делать.

Как это можно реализовать? Ну, например, добавить каждому объекту по парочке свойств. Одно будет хранить название "функционала", например, "Кассир, Менеджер", а второе - тип операции "Show, Edit, Add, Update". Далее смотрите, есть ли права на пару значений "Функционал-Действие" и соответственно разрешаете/запрещаете что-то делать. Сам форма за этим следит. Нет необходимости "вручную" заниматься такой мелочевкой

miv32Но вот таблицу пришлось руками делать. Я хотел, чтобы был некий интерфейс, чтобы "Директор" сам создавал профили. И для любого сотрудника выбирал нужный.
Да не получится по простому это сделать. Я же уже говорил. Проблема будет не в первоначальном создании, а в синхронизации этой самой таблички и изменений в формах. Проблем "огребете" по самое "не балуйся".
...
Рейтинг: 0 / 0
Получение свойств объекта
    #37524257
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такой журнал FoxTalk. Сайт русскоязычного издания http://newsletter.narod.ru/foxtalk/FoxTalk.htm

Так вот, в номерах 5,6,7 за 2005 была статья: "Тук, тук! Кто там?" Авторы Энди Крамек и Марсиа Акинз. Эта статья как раз и посвященная одной из стратегий настройки прав доступа. Если вкратце, то там они давали права на доступ к полям таблиц, и по значению ControlSource объектов идентифицировали эти права.

К сожалению, пока эти статьи не выложены в свободный доступ, но можно свободно скачать коды примеров по этим статьям на том же сайте. В принципе, по коду можно понять, как это все "тикает". Достаточно скачать код к последнему номеру.

Принцип, по которому они обновляли права доступа был описан в 6 номере за 2004 год в статье "Чья же это все-таки работа?". Вот эту статью можно скачать с сайта. В статьях 2005 года использовался тот же принцип, просто к нему "прикрутили" таблицы с настройкой прав.
...
Рейтинг: 0 / 0
Получение свойств объекта
    #37524974
miv32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, посмотрю обязательно.
Насколько я помню, FoxTalk издавал гуру по Фоксу Лес Пинтер.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Получение свойств объекта
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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