Здравствуйте.

При разработке бизнес-процесса необходимо установить значение логического параметра.

Изображение удалено.

Установил с помощью контексно меню дизайнера. Но при сохранении выдает ошибку.

Изображение удалено.

Эти ошибки не дают возможности скомпилировать конфигурацию.

Подскажите, что сделать?

Нравится

2 комментария

а если через "формулу" задать true/false заработает?

Здравствуйте, Данила. Собственно, true и false установил, конфигурация скомпилировалась. Заработало) Но осадочек остался) Спасибо за оперативную помощь. 

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

Как обновить деталь reloadDetail?

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

В схеме детали на эту кнопку я сделал ссылку в свойстве visible и он успешно работает. Но деталь загружается на страницу 1 раз при входе. Нужно обновлять деталь и видимость ее кнопок после изменения поля прямо внутри страницы.

Информации по деталям считай никакой нет. Все функции, которые есть в ядре совершенно не гуглятся. Думаю, что функция, которая обновляет деталь называется

this.reloadDetail("MyDetailName");

Она вызывается, но вызывает ошибку - entitySchemaInfo is undefined

Как обновить деталь вместе с контролами и их видимостью?

Нравится

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

Откуда взялась reloadDetail и как её применить?

Сделай перестрел событий по sandbox. По клику на + посылай message в карточку, карточка как только получает эту мессагу посылает в ответ сообщение со значением вашего поля. Деталь принимает это сообщение и обрабатывает его и так далее и тому подобное.

Это сделать проще ну или можно покопаться  в кишках:

Кисловский Михаил Андреевич,

значение поля я и так получаю внутри детали. просто запросом к entity, но я не могу после этого сообщить детали, чтобы она полностью перегрузилась, чтобы изменилась видимость кнопки +. при нажатии + вызывается метод, ну да. 

Если вам нужна видимость то она, на мой взгляд, решится только this.reloadEntity самой карточки.

При попытке реализовать данный метод ничего не вышло. У Terrasoft нету entitySchemaInfo вобще и по исходникам примеров вызова данного метода не наблюдается.

 

Кисловский Михаил Андреевич,

ну а я о чем. что это за методы, которые в базовом коде есть, но нигде не вызываются? баг?

Данько Дмитрий Леонидович пишет:

ну а я о чем. что это за методы, которые в базовом коде есть, но нигде не вызываются? баг?

 Почему баг? Остатки старой реализации, либо узкоприменимый для особых нужд метод. 

Это нормально.

Кисловский Михаил Андреевич,

понял спасибо. а как лучше применить 

this.reloadEntity на странице раздела там где находится деталь, если да, то с какими параметрами?

Данько Дмитрий Леонидович,

Специально для тебя и для тех кто будет потом искать по этой теме. В кишках исходников нашёл this.updateDetail.

Пример использования:

this.details - полный массив деталей на какой либо карточке,

this.updateDetail({"detail": "Название детали из этого массива"}); - для перезагрузки

Данный метод доступен в карточке раздела или если пробросить this в document то можно просто в консоли баловаться с помощью него.

)))) спасибо за помощь. но это не то. .updateDetail перегружает ТОЛЬКО грид, ТОЛЬКО данные. он как раз у меня работает. нужен именно reloadDetail, который перегружает контрол целиком вместе с кнопками и гридом. в этом фишка

Данько Дмитрий Леонидович,

Кисловский Михаил Андреевич,

Чисто на уровне теории:

1) Замещаем BaseDetailV2

define("BaseDetailV2", ["terrasoft"],
	function(Terrasoft) {
		return {
			messages: {
				"ReloadDetail": {
					mode: Terrasoft.MessageMode.PTP,
					direction: Terrasoft.MessageDirectionType.SUBSCRIBE
				}
			},
			methods: {
				subscribeSandboxEvents: function() {
					this.sandbox.subscribe("ReloadDetail", function(config) {
						this.init(function() {}, this);
					}, this, [this.sandbox.id]);
				}
			}
		};
	}
);

2) Замещаем BasePageV2, добавить этот кусок

messages: {
	"ReloadDetail": {
		mode: Terrasoft.MessageMode.PTP,
		direction: Terrasoft.MessageDirectionType.PUBLISH
	}
},
methods: {
        reloadDetail: function(detailName) {
		var args = {}; //тут можно что-нибудь кинуть в деталь
		Terrasoft.each(this.details, function(detailInfo) {
			if (detailInfo.detailName === detailName) {
				this.sandbox.publish("ReloadDetail", args, [this.getDetailId('ContactCommunication')]);
			}
		}, this);
	},
}

Ну и если теперь кинуть что-то типа this.reloadDetail('ContactCommunication');

деталь должна заново проинициализироваться. Тестил 2минуты, возможно ничего не работает)

я не нашел подписку на событие 

ReloadDetail, думал может оно в ядро посылается и мне не видно. вполне вероятно что и правда - это остатки старого. 
Показать все комментарии

Есть ли возможность такого? Необходимо дать группе пользователей возможность создавать и редактировать шаблоны Email сообщений с помощью редактора. Но его использование требует прав на редактирование справочников:

message: Uncaught Текущий пользователь не имеет прав на запуск администрируемой операции с кодом "CanManageLookups".

Есть ли возможность преодолеть это ограничение, при этом не давая пользователям права на управления справочниками? Была мысль дать право на операцию, но при этом ограничить доступ на уровне объекта Lookup. Но мне кажется это довольно сомнительным.

Нравится

2 комментария

Вообще, крайне необходимо разделить управление разными справочниками. А то смешивать в одну кучу "Города" и "Настройки почтовых провайдеров" - это как-то неправильно. Нужно вводить категории справочников и раздавать на них доступ

Узнал, что можно вывести любой справочник из-под этого ограничения довольно просто. Достаточно создать замещающий объект, и переопределить метод CheckCanManageLookups, который есть во всех объектах, наследуемых от BaseLookup. Однако EmailTemplate не является справочником, но в нём есть такая же проверка. Но сам код проверки находится внутри ScriptTask, т.е. переопределить поведение так же как и для обычного справочника - невозможно. Т.е. одно из решений сводится к тому, чтобы переопределить код внутри одно из элементов "Задание-сценарий". Но как сделать это - непонятно.

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

Здравствуйте.

При синхронизации мобильного приложения в оффлайн-режиме во время импорта данных возникает ошибка "Unable to get property 'IsVirtual' of undefined or null reference". Упоминания 'IsVirtual' нашел только в нескольких схемах, не связанных с мобильным приложением. проблема возникает только при синхронизации с пользовательским рабочим местом. Основное рабочее место работает отлично.

Подскажите, пожалуйста, в чем может быть проблема?



Заранее спасибо!

Прикрепленные файлы

Нравится

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

Добрый день, Роман!



Судя по предоставленной информации у Вас используется не последняя версия мобильного приложения. Обновите её пожалуйста и проверьте работу функциональности.



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

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

Добрый день!

На академии есть статьи про возможность импорта только из .xlsx файлов.

Кто-нибудь сталкивался с необходимостью импортировать в раздел данные из файлов с форматом *.txt? Если да, какие действия вы предприняли, чтобы получился корректный импорт?

Нравится

3 комментария

В txt-файле могут быть в самых разных форматах: от CSV до XML или JSON, или же какие-то собственные соглашения. В зависимости от формата и нужно придумывать логику импорта. 

Допустим, формат обычный, сверху вниз идут определённые ключи и через знак равенства им присваиваются значения. Логику импорта придумать не проблема. Вопрос в том, как её внедрить в стандартный режим? Что переопределять, расширять? Возможно ли это вообще?

 Эх. Есть тут пара клиентов, для которых нажать 3 кнопки и соотнести столбцы в .xls файле - непосильная задача. Пришлось делать импорт в 1 клик. В кратце по импорту абсолюно любого файла в систему:

1) делаем кнопку для вызова окошка выбора файла (подсмотреть можно в fileDetail)

2) Ломаем onFileUpload и upload методы, в upload указываем ссылку на собственный сервис.

3) Пилим C# сервис, куда приходит стрим с данными(они приходят в обёртке, там надо унаследовать интерфейс), из данных берём стрим с файлом.

4) Далее всё зависит от вашей фантазии. Парсите какие угодно файлы, каким угодно способом, используйте любые сторонние библиотеки, результат сохраняйте в бд через entity.

Кузнецов Сергей пишет:

как её внедрить в стандартный режим?

Это в ImportWizard? Ну... в теории можно разломать визард. Но тогда придётся один раз вычитывать файл(по какой-то определённой логике), брать колонки, присылать в js ответ с конфигом, генерить страницу с соответсятвием колонок и потом посылать вместе со стримом файла объект с мэппингом куда что вставлять. Опять же объект принять в своём сервисе и самому парсить... Так скажу: на импорт pdf я убил довольно много времени, лучше не надо эту гору кода трогать)

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

При свернутом окне браузера хотелось бы иметь возможность получать визуальную\аудио сигнализацию о новых сообщениях/ активностях, чтобы пользователь мог обратить внимание.

Вопрос: кто- нибудь решал подобную проблему? Можно ли сделать визульное/звуковое уведомление при работе в браузере, например Google Chrom?

Заранее спасибо!

Нравится

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

Здравствуйте, Светлана!

Данный функционал уже реализован в системе, более подробно Вы можете ознакомиться в статье Академии: https://academy.terrasoft.ru/documents/sales-enterprise/7-11/kak-obraba…

Спасибо! А есть возможность включать/ отключать звук этих уведомлений?

Здравствуйте, Светлана!

Уведомления приходят без звука. 

Новак Руслан пишет:

Здравствуйте, Светлана!

Уведомления приходят без звука. 

А можно ли сделать звуковое сопровождение? 

Никита, эти уведомления — функция браузера. Вы можете или поставить плагин для звуков при любых уведомлениях (не только от Creatio) или воспроизводить звук кодом самостоятельно, как описано тут:

function playSound(url) {
  const audio = new Audio(url);
  audio.play();
}

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

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

Коллеги, доброго дня!

 

В Академии есть хорошая статья по настройке e-mail - уведомлений о новом комментарии к сообщению в ленте:

https://academy.terrasoft.ru/documents/technic-bpms/7-10/kak-uvedomit-p…

 

Хотелось бы получать уведомление о новом сообщении и новом комментарии, но только в одном из каналов.

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

 

Заранее спасибо за помощь.

Нравится

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

Здравствуйте, Эрнст!

Для Вашего кейса Вы можете взять за пример стартовые сигналы базового процесса "Уведомления в ESN".

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

Добрый день!

Подскажите, пожалуйста, можно ли открывать карточку не совмещенном режиме,а сразу в обычном при открытии из раздела. Просто немного надоело делать кнопочки на двух страницах, и в page и section.

Насколько  я помню, это можно решить какой-то настройкой, но я к сожалению не помню какой.

Так же интересно, чем я жертвую, отключая данную опцию)

 

Нравится

4 комментария

Я так думаю ничем, кроме "удобства" для пользователя, хотя я ни разу не видел как кто-то пользовался по итогу этой узенькой полоской. Легче вернуться в секцию и найти нужную запись.

По теме: я просто сделал windows.open, когда пользователь нажимает на кнопку открыть в гриде (onActiveRowAction вроде функция называется. Там ещё case обработчик тэгов кнопок должен быть). Возможно не самый изящный способ, можно было бы и через pushHistoryState, но срабатывает

Варфоломеев Данила,

если делать через window.open кнопка "Закрыть" не срабатывает, можно ли как то сделать чтобы она работала? 

window.close ?

Если открывали в _self, тоесть в том же окне, то:

window.history.back();

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

Коллеги, добрый день.

 

Столкнулись с проблемой при разворачивании bpm'online для работы с Oracle.

Подскажите, где можно прочитать процесс установки с использование СУБД Oracle. Версия сервера 11g2.

Разворачивали аналогично инструкции для MSSql server.

По итогу получили следующий экран: http://joxi.ru/DrlzMjjU4nq4b2

При этом запросы через developer для аналогичных настроек из connectionstrings проходят без проблем: http://joxi.ru/KAgYJjjhgeygDm

Нравится

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

Огромная благодарность тех. поддержке.

 

При разворачивании онсайт под Oracle необходимо указывать в web.config в корне схему бд.

 

<db>

    <general securityEngineType="Terrasoft.DB.Oracle.OracleSecurityEngine, Terrasoft.DB.Oracle" executorType="Terrasoft.DB.Oracle.OracleExecutor, Terrasoft.DB.Oracle" isCaseInsensitive="true" maxAnsiJoinCount="0" engineType="Terrasoft.DB.Oracle.OracleEngine, Terrasoft.DB.Oracle" metaEngineType="Terrasoft.DB.Oracle.OracleMetaEngine, Terrasoft.DB.Oracle" metaScriptType="Terrasoft.DB.Oracle.OracleMetaScript, Terrasoft.DB.Oracle" typeConverterType="Terrasoft.DB.Oracle.OracleTypeConverter, Terrasoft.DB.Oracle" connectionStringName="db" binaryPackageSize="1048576" useOrderNullsPosition="true" currentSchemaName="BPMONLINE770RUS" maxEntitySchemaNameLength="30" />

</db>

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

Здравствуйте.

Столкнулся с проблемой установки фильтра в реестре участников активности в мобильном приложении. То есть, когда производится выбор участника активности при его добавлении или редактировании, хотелось отфильтровать реестр выбора контактов по, например, типу.

Была попытка в обработчике onEmbeddedDetailItemApplied контроллера добавить фильтр на поле Participant.

Примерно таким кодом:

var filter,
	filterName = "OnContactTypeFilter";
	filter = Ext.create("Terrasoft.Filter", {
		name: filterName,
		modelName: "Contact",
		assocProperty: "Id",
		property: "Type",
		value: "66a90515-0026-4f43-93a5-dc3e9c18f552"
	});
 
	record.changeProperty("Participant", {
		removeFilter: filterName
	});
	if (!Ext.isEmpty(filter)) {
		record.changeProperty("Participant", {
		addFilter: filter
	});
	}

Но это не возымело эффекта.

Где же еще можно настроить данный фильтр?

Нравится

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

Добрый день, Павел!

 

Судя по предоставленным данным у Вас некорректно настроена конструкция фильтра. Более правильно будет следующим образом:

filter = Ext.create("Terrasoft.Filter", {

name: filterName,

property: "Type",

value: "66a90515-0026-4f43-93a5-dc3e9c18f552"

});

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