Вопрос

асинхронная загрузка данных в контролы

Добрый день. Только начинаю работу с bpm'online, есть задача сделать на нескольких контролах формы подгрузку данных из стороннего сервиса. Т.е. надо запустить ajax запрос, заблокировать и показать крутилку на контролах, а потом выставить значения.

Вот с крутилкой и блокировкой я что-то подвис. Как я понимаю прямого доступа к контролам нет.

Как правильно сделать подобный функционал, возможно где-то уже есть что-то подобное?

Нравится

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

А что вы имеете ввиду под контролами?

Попробуйте в вашем коде вызывать методы showBodyMask() и hideBodyMask() в соответствующих местах. Они как раз и показываются крутилку и блокируют карточку.

Спасибо за ответ. Задача прогрузить данные из сторонней системы в ридонли поля, например остаток денег на счету, дату, т.е. какие-то простые типы. Методы showBodyMask/hideBodyMask, как я понимаю, блокируют всю карточку и в принципе могут решить задачу, но если сторонняя система подвиснет, карточка будет вечно заблокирована, что нехорошо, есть ли возможность показать крутилку рядом с конкретными контролами или секцией?

Я не совсем понимаю зачем блокировать поля, если они у вас и так ридонли и юзер туда ничего писать не может? Если они не ридонли, то их можно забиндить на аттрибут и ваш код будет их блокировать (делать ридонли) на время пока выполняется запрос. Или я как-то неправильно понимаю вашу задачу?

Добрый день

Есть такая возможность. К примеру в поле ввода номера телефона в Cti панели, когда производится поиск

var phoneNumberEdit = Ext.getCmp("PhoneNumber");
var maskId = Terrasoft.Mask.show({
	selector: phoneNumberEdit.selectors.wrapEl,
	frameVisible: false,
	caption: ""
});
this.callExternalService(function(response) {
	Terrasoft.Mask.hide(maskId)
}.bind(this));

 

Артем Гура,

Спасибо, то что надо! а в форме селектор какой-то не такой красивый как у вас. У меня он получается типа "AccountPageV2UsrAddDescriptionContainer_Control", так и должно быть, или можно как-то красивее выйти на контрол?

Артем Гура,

Дополнительный вопрос - если я хочу сделать контрол, не имеющий связи с полем, только для считывания и сохранения данных в сторонний сервис, это возможно ведь? 

Я начал описывать так:

{
	"operation": "insert",
	"values": {
		"layout": {
			"colSpan": 12,
			"rowSpan": 1,
			"column": 0,
			"row": 2,
			"layoutName": "CategoriesControlGroupContainer"
		},
		"enabled": true,
		"contentType": 0,
		"caption" : "UnBindedField",
		"className": "Terrasoft.MemoEdit"
	},
	"parentName": "CategoriesControlGroupContainer",
	"propertyName": "items",
	"index": 4
}

но получаю ошибку "Невозможно найти колонку по конфигурации", метка прорисовывается, контрол нет. Явно делаю что-то не то))), но примера подобного найти не могу. Пробовал играться с className, разными itemType, и дочерними items, но не смог подобрать комбинацию, когда мне и Label и контрол покажутся без ошибок. Описания использования этого функционала нигде в итене не нашел, куда посмотреть, и как решить задачу?

Вопрос: а имя не давали этому контролу? Если дать имя, то генератор будет пытаться сделать bind на одноименный атрибут модели. Далее, если вы используете свой атрибут, то вам нужно прописать данный атрибут в схеме

Артем Гура,

Создал отдельную ветку 

https://community.terrasoft.ru/questions/sozdanie-kontrola-bez-privazki… и решил сложным способом - через добавления контейнеров метки и контрола, и простым - через виртуальное поле, теперь с гридом пытаюсь сделать аналогичную манипуляцию )

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