Я сделал булев метод в methods:{ }, тот вычитывает атрибут entity и возвращает результат - равенство текста из свойства объекта моей подстроке.

Два метода: ExperimentVisible, ExperimentNonVisible, - проверяют результат что отдает первый метод и также возвращают булев результат.

В разделе diff одной новой и одной существующей кнопке в схеме наследования , на свойство visible были привязаны эти методы.

 

Две кнопки были помещены в верхний контейнер страницы, там где есть зеленая базовая кнопка "Сохранить".

 

Во время загрузки страницы получаю всегда разный результат моих методов. Так как кнопки расположены в верхнем контейнере, привязанный к видимости кнопки метод проверяется прежде всего. Иногда в схему, доступную через this , Креатио загружает атрибут entity для проверки, иногда еще нет. Зафиксировал что иногда он еще и кэширует состояние схемы (тогда в this присутствуют данные не корректные а соответствуют схеме прежде открытой в браузере страницы).

У меня кнопки отображаются корректно при повторной загрузке целевой страницы или же после принудительного обновления страницы в браузере.

 

Я пытался сделать более просто  - вместо чтения атрибута из this в моем методе написал загрузку объекта через EntitySchemaQuery и проверял мое свойство. Данные получались, но не были доступны через this страницы, они остались в scope запроса ESQ.

Мне надо понять как использовать принцип загрузки страницы правильно при проверке привязанных свойств. Мои кнопки поместить в другой контейнер нельзя.

 

Нравится

1 комментарий

А у Вас дело случайно не в том же, что и в недавней теме? Там в одних случаях работает логика для совмещённого режима, в других — для отдельной карточки. Если не в этом, то по изложению не очень понятно, что происходит, нужно производить в браузере отладку.

Показать все комментарии

Добрый день!
Понадобилось реализовать такую задачу:
В DataControlы карточки добавить появляющуюся при появлении значения в поле кнопку(за лупой, если это LookupDataControl), нажатие на которую очистит это значение и после этого кнопка снова исчезнет.
Данную задачу реализовываю при помощи ActionMenu, привязывая ее к DataField.Buttons динамически в событии OnDatasetDataChange и затем при удалении значения поля делаю DataField.Buttons = System.EmptyValue.
Так вот, все работает нормально, если удаляю значение кнопкой Delete с клавиатуры, кнопка появляется и исчезает нормально, но если значение удалять из события ActionMenuItemOnExecute (Sender.DataField.Value = null), вываливается ошибка List index out of bounds(2).
В чем может быть проблема?
Заранее благодарен!

Нравится

5 комментариев

Просто интересно, а чем Backspace не устраивал?

Вопрос к клиенту, наверное боятся мышь отпускать :wink:

Иван, реализуйте задачу немного иначе:
1. В функции dlDataOnDatasetDataChange пропишите логику скрытия amiActionMenuItem, например:

	if (FieldName == 'OwnerID') {
		if (IsEmptyValue (DataField.Value)){
	    amiActionMenuItem.IsVisible = false; 	
		}else{
		amiActionMenuItem.IsVisible = true;
		}
	}

2. В функцию обработки события OnExecute компонента amiActionMenuItem никаких изменений вносить не нужно.

Ошибка вызвана тем, что Вы находясь в уже вызванном обработчике события amiActionMenuItem, связанном с компонентом LookupDataField окна, пытаетесь сделать отвязку .

Спасибо Наталия, ситуация с ошибкой прояснилась.
Но проблема в том, что если сделать amiActionMenuItem.IsVisible = false, то он будет скрыт для всех DataField, которых очень много. А нужно это делать только для тех, в которых Value = null.

Вопрос решил обнулением Value по таймеру. Спасибо за наводку!

Показать все комментарии