Вопрос

Здравствуйте!
На локальном стенде добавил рабочее место мобильного приложения. В отдельном пакете создавал пользовательские схемы мобильных настроек разделов и прочее. Появилась необходимость воспользоваться мобильным приложением, подключаясь к другому стенду.
Подскажите, пожалуйста, какая правильная последовательность действий в данном случае?
Я установил пакет из хранилища, сгенерировал исходные коды и скомпилировал, но рабочее место в мобильном приложении не появилось. В мастере оно тоже не отображается.
Спасибо!

У меня такой же вопрос

0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Есть в БП автогенерируемая страница, за которой идет завершение. 

Проблема в том, что если пользователь нажал закрыть или закрыл окно, то процесс висит в стадии "Выполняется". Как настроить страницу так, чтобы процесс завершался независимо от того, что нажал или не нажал пользователь. Страница отобразилась, этого достаточно.

У меня такой же вопрос

0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать
Идея

Встроенный редактор кода BPM Online для JavaScript схем (ACE Editor - если не ошибаюсь), при комментировании выделенного сегмента (сочетание клавиш " Ctrl + / ") осуществляет форматирование всех строк попавших в выделение по следующей маске

//{символ пробела}{исходный код строки}

Встроенный же линтер (JSHint - при стандартном конфигурировании) на такое форматирование реагирует предупреждением "Mixed spaces and tabs"

Эта проблема конечно решается оборачиванием этих участков кода в управляющие последовательности 

/*jshint smarttabs:true */
     // //Какие-то закомментированные строки (с двойным комментированием)
     // Какие-то закомментированные строки
     // Какие-то закомментированные строки
     // Какие-то закомментированные строки
     // Какие-то закомментированные строки
/*jshint smarttabs:false */

но это требует дополнительных манипуляций.

Идея состоит в том чтобы исправить такое конфликтное поведение intellectual editor options и синтаксического статического анализатора, т.е. 

или исправить сниппет для комментариев - исключив пробельный символ

или внести коррективы в стандартный конфиг JSHint предусмотрев маску исключения.

 

Ну и как всегда, интересует мнение сообщества, касаемо того насколько данная проблема является насущной и мешает комфортной разработке, беспокоит ли Вас данная проблема ?

Обсуждение
0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Нужно запретить добавлять одинаковые типы адресов, т.е., например, чтобы не было два юридических адреса.

Однако, в детали просто не получается сделать добавление неактивным. Вот такой код вызывается (проверено в отладчике), но не приводит ни к какому результату. Как правильно?

define("AccountAddressDetailV2", [], function() {
	return {
		entitySchemaName: "AccountAddress",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		methods: {
			getEditPages: function() {
				var menuItems = this.callParent(arguments);
				for (var i = 0; i < menuItems.collection.items.length; i++) {
					menuItems.collection.items[i].values.Enabled = false;
//						{bindTo: "AddressNotExists_" + menuItems.collection.items[i].values.Tag};
				}
				return menuItems;
			}
		}
	};
});

 

У меня такой же вопрос

1 комментарий
Севостьянов Илья Сергеевич

деталь AccountAddressDetailV2 вероятнее всего является наследником базовой AccountCommunicationDetail или является отдельной ее имплементацией.
По этому можно предположить, что с ней можно "управиться" аналогичным образом, вам необходимо предусмотреть 2 варианта добавления, через пункт меню детали "Добавить", а так же не забыть о том что в контекстном меню отдельно взятого элемента тип записи можно изменить, т.е. "Домашний адрес" можно запросто сделать "Юридическим".
контролировать наличие пунктов контекстного меню динамически у меня не удалось, по этому проще просто исключить такую возможность.
Приведу пример замещающей схемы которая решает кейс:

Ограничить возможность добавления более 1-го пункта с типом "Основной телефон"

define("AccountCommunicationDetail", [], function() {
	return {
		methods: {
			//Далее в коментариях, "элемент детали" это отдельно взятая запись в коллекции детали,
			//т.е. одно отдельное средство связи в детали.
			"init": function() {
				this.callParent(arguments);
				//Подписка на изменение атрибута-флага, который принимает значение в true после полной загрузки данных
				//Установим метод-обработчик см.листинг-метку TAG1
				this.on(
					"change:IsDataLoaded",
					function() {
						if (arguments[1] === true) {
							this.mainPhoneInSubMenuExistsController();
						}
					},
					this
				);
			},
			//метод вызываемый при реализации действия "Добавить" или "Изменить" элемент детали
			"createOrUpdateCommunicationItem": function(typeId, config) {
				this.callParent(arguments);
				this.mainPhoneInSubMenuExistsController();
			},
			//метод вызываемый при реализации действия "Удалить" элемент детали
			"deleteCommunicationItem": function() {
				this.callParent(arguments);
				this.mainPhoneInSubMenuExistsController();
			},
			//метод формирующий список элементов для viewModel контекствного меню отдельного элемента детали
			//вызывается единожды при инициализации детали
			"getTypeMenuItems": function() {
				//получим список сформированный родительским методом
				var typeMenuItems = this.callParent(arguments);
 
				//ДЛЯ КАЖДОГО: элемента меню
				for (var each in typeMenuItems) {
					//ЕСЛИ: заголовок элемента "Основной телефон"
					if (typeMenuItems[each].caption === "Основной телефон") {
						//ТО: Удаляем соответствующий элемент из массива
						typeMenuItems.splice(each, 1);
						//Прерываем перебор массива
						break;
					}
				}
 
				//возвращаем модифицированное меню
				return typeMenuItems;
			},
			//TAG1
			//Метод осуществляющий контроль пункта подменю: "+" -> "Телефон" -> "Основной телефон"
			//Основополагающая логика: пункт не должен быть доступен если запись с типом "Основной телефон"
			//присутствует в детали (в т.ч. состоянии view), и становиться доступным при его удалении (в т.ч. состоянии view)
			"mainPhoneInSubMenuExistsController": function() {
				//Получим коллекцию ранее внесенных в деталь средств связи
				var existsCommunicationsCollection = this.get("Collection"),
					//Получим коллекцию сформированных элементов меню
					MenuItemsCollection = this.get("ToolsMenuItems");
 
				//Определим флаг наличия в ранее внесенных средствах связи, средства с типом "Основной телефон"
				var    mainPhoneNumberExistsFlag = existsCommunicationsCollection.collection.find(function(item) {
						var targetCollection = item.values ? item.values : item.changedValues;
						if (targetCollection.CommunicationType.displayValue === "Основной телефон") {
							return true;
						}
					}, this) ? true : false;
				//Определим объект элемента меню "Телефон"
				var    phoneMenuCollection = MenuItemsCollection.collection.find(function(item) {
						if (item.values.Caption === "Телефон") {
							return true;
						}
					}, this);
 
				if (mainPhoneNumberExistsFlag) {
					//Найдем в его коллекции элементов подменю пункт с заголовком "Основной телефон"
					var mainPhoneMenuItem = phoneMenuCollection.values.Items.collection.find(function(item) {
						if (item.values.Caption === "Основной телефон") {
							return true;
						}
					}, this);
					//попытка выполняется в блоке try...catch т.к. в некоторых случаях вызов
					//метода remove приводит к ошибке исполнения JS которая не влияет на результат
					//выполнения метода относительно коллекции, тем не менее прерывает выполнение здесь.
					//Проявляется при добавлении единственной записи в деталь в новой карточке контрагента
					//через поле в карточке, а не через меню детали
					try {
						//Удалим этот пункт меню из колекции подпунктов viewModel
						phoneMenuCollection.values.Items.collection.remove(mainPhoneMenuItem);
					} catch (e) {}
					//инициируем перестроение viewModel по его измененной модели
					MenuItemsCollection.loadAll();
				} else {
					//Вернем этот пункт в меню
					//выполнив новое построение колекции пунктов меню для viewModel
					this.initToolsMenuItems();
				}
			}
		}
	};
});

далее 

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Есть поле LookupDataControl. В датасете включена галочка "Отображать как выпадающий список в карточках".

Возможно ли после открытия списка, нажать на клавиатуре букву и сразу попасть на первую запись начинающуюся с выбранной буквой?
Версия 3.2.0.90

У меня такой же вопрос

2 комментария
Зверев Александр

В новых версиях 3.Х такое работает автоматически. Возможно, во времена 3.2 такого механизма ещё не было.

Марина Карапетян

Здравствуйте Александр.

Спасибо.

Войдите или зарегистрируйтесь, чтобы комментировать