Официальный форум российского программного комплекса T-FLEX PLM


Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
Ох уж эти списки объектов?, Собираю опыт работы с такой структурой хранения данных как "список объектов"
 
Предисловие: Списки объектов довольно интересная и не совсем понятная структура а ввиду ее частого применения разработчиками возникают вопросы.
Как я понял эта структура - скрытый справочник связанный со справочником-владельцем особым типом связи (управляющая связь с односторонним управлением) позволяющим каскадно удалять связанные объекты из списка объектов, при удаления владельца. Из плюсов можно добавить возможность указать для типов справочника-владельца какие из типов СПИСКА ОБЪЕКТОВ доступны для создания. На мой взгляд плюсы заканчиваются и начинаются минусы.
Главный минус это закрытость объектов СПИСКА ОБЪЕКТОВ для других справочников. Их невидно из других справочников с которыми они связаны. Я не понимаю зачем так сделано. Это очень не удобно. получается основное достоинство в виде "каскадного удаления", которое к стати реализовать в обычных справочниках не так то просто, перекрывается его невидимостью.

Теперь сам вопрос. Есть такой элемент управления, используемый при оформлении рабочих страниц и диалогов свойств, - связь с объектом через уровни. Позволяет удобно просматривать объекты связанные через другие объекты. Так вот он не хочет работать если в качестве, в "пути связи" указать конечные объекты из СПИСКА Объектов.
Например: Справочник А связан связью(один со список) со справочником Б в котором есть список объектов С.
Задача: показать в диалоге свойств справочника А объекты С, связанные со справочником А через объекты справочника Б.
ЗЫ: Если список объектов С реализовать отдельным справочником все работает на ура.
 
Объекты списка видны из других справочников. В частности, в макросах есть метод, который возвращает список связанных объектов:
Код
Объект.СвязанныеОбъекты["(имя списка объектов, или связи 1:N, или связи N:N, или связи на любой справочник)"]
Заметьте, один метод для работы как со связями на другие справочники, так и со списком объектов.
Посмотрите "Руководство по T-FLEX DOCs Open API.chm".
Изменено: Валерий Степаненко - 10.09.2014 15:40:19
Главное - спокойствие!
 
Спасибо Валерий За оперативность. Но не все так просто. Дело в том что при создании связи в типах СПИСКА ОБЪЕКТОВ. В диалоге настройки связи заблокированы контролы отвечающие за настройки со стороны другого справочника, в частности флажок "Показывать связь в справочнике Б" и поле "Наименование связи со стороны справочника Б". Таким образом мы не видим эту связь в справочнике Б и у нее нет имени для обращения. В вашем фрагменте кода подразумевается что если справочник для объекта которого мы вызываем данный метод содержит и связи и списки объектов то их можно вызывать одним этим методом.
 
Указанные элементы управления разблокируются после указания справочника Б.
При попытке создать связь, не задав ей имя, система выдаст соответствующее предупреждение.
Если задать имени только со стороны справочника А, то и с другой стороны связь будет называться так же.
Галочку "Показывать связь в справочнике Б" всегда можно поставить или снять.
Изменено: Валерий Степаненко - 10.09.2014 16:47:43
Главное - спокойствие!
 
Цитата
Валерий Степаненко пишет:
Указанные элементы управления разблокируются после указания справочника Б.
При попытке создать связь, не задав ей имя, система выдаст соответствующее предупреждение.
Если задать имени только со стороны справочника А, то и с другой стороны связь будет называться так же.
Галочку "Показывать связь в справочнике Б" всегда можно поставить или снять.
А вы побывали со списком объектов такое проделать? Это все работает со справочниками в списке объектов это все заблокировано.
Давайте разбираться на картинках.
1. Создаем справочники А и Б со списком объектов С. Создаем связь от списка объектов С к справачнику А. Смотрим на картинку и видим что флажок и поле по прежнему неактивны.
2. Переходим к параметрам типа справочника А и не обнаруживаем этой связи(оно и понятно - галочку отображать связь мы же не смогли поставить). Нажимаем кнопку подключить(возможно связь лежит там ) но ее и там нет.
3. Активируем оба справочника. Создаем объекты в справочнике А и Б. Для объекта справочника Б создаем связанный объект СПИСКА ОБЪЕКТОВ С и добавляем для него связь на объект справочника А.
БЛИН Сервак Обновляется.... Продолжение комикса завтра... Но смысл я думаю понятен галочку поставить нельзя.... и по связи я вам объект С из справочника А программно не вызову завтра не вызову...уже пробывал...
 
Продолжение комикса...
Так вот значит. Создали Объект спр.А и Б и списка объектов С и добавили связь от С на А.

4. Смотрим можно ли отобразить Объект С в справочнике стандартными элементами управления. Создаем пользовательскую страницу... ищем там элемент управления связь... не находим его... кидаем на странице элемент управления связь с объектом через уровни... заходим в настройку параметр "Связь с объектом"(чтоб посмотреть доступные связи.... там тоже ничего нет...

5. Пробуем получить связанный объект програмно (С# нам в помощь). На панели справочника А создаем кнопку "Связанный Объект С"... в качестве действия по нажатию указываем макрос - проверяем догадку -"Если задать имени только со стороны справочника А, то и с другой стороны связь будет называться так же." (текст на картинке)...

6.Проверяем работу - выбираем объект А и нажимаем нашу кнопку.... и Видим данные методу ничего не возвращают (((

7. Итоги: Если я все сделал правильно получается то, о чем я говорил в самом начале...

Если я что то делаю не правильно, то буду признателен если укажите...
 
Поправочка на первом рисунке для связи я подключаю справочник Б к Списку объектов С - что является ерундой. После этого я переделал связь на справочник А. Просто не стал выкладывать картинку повторно, поскольку смысл не меняется галочки и поля все равно не активны :idontnow:
Страницы: 1