Подскажите как решить вопрос отправки email всем участникам проекта при добавлении активности по проекту конкретной категории.

С самим БП в принципе все ясно, вопрос в том как в получателей письма добавить коллекцию записей выборки участников проекта или как решить иначе...

 

Спасибо

Нравится

1 комментарий
Лучший ответ

Добавляете элемент "Читать данные", в котором отфильтровать всех участников данного проекта, которым не было отправлено данного письма. 

Читать первую запись, отправлять письмо. Вернуться обратно к элементу "Читать данные". И так по кругу, пока всем не будут отправлены письма.



Единственное, что если вы используете стандартный элемент Send email, то нигде в системе не остается следов о том, что письмо участнику было добавлено. Тогда можно сделать поле в объекте участника и отмечать в нём факт отсылки.

Добавляете элемент "Читать данные", в котором отфильтровать всех участников данного проекта, которым не было отправлено данного письма. 

Читать первую запись, отправлять письмо. Вернуться обратно к элементу "Читать данные". И так по кругу, пока всем не будут отправлены письма.



Единственное, что если вы используете стандартный элемент Send email, то нигде в системе не остается следов о том, что письмо участнику было добавлено. Тогда можно сделать поле в объекте участника и отмечать в нём факт отсылки.

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

Добрый день!

 

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

Нравится

2 комментария
Лучший ответ

Добрый вечер.

 

Сначала нужно определиться с критериями - какие обращения считать дублями.

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

Я бы их не объединяла, так как тогда в срм будет неполная история обращений.

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

 

Добрый вечер.

 

Сначала нужно определиться с критериями - какие обращения считать дублями.

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

Я бы их не объединяла, так как тогда в срм будет неполная история обращений.

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

 

Можно сделать и ручной процесс по действию в реестре и карточке обращения, где на автогенерируемой странице в справочном поле  указывать, чьим дублем является обращение. А в процессе закрыть его с причиной «Дубль» и связать с оригиналом.

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

Есть же стандартная  деталь «Подчинённые обращения», можно использовать её.

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

Подскажите, есть ли возможность заблокировать деталь со страницей редактирования?

По документации есть механизм бокировки "IsModelItemsEnabled", он блокирует поля, убирает кнопки "+" на детали и кнопки "Копировать", "Изменить", "Удалить", но если два раза клацнуть на запись детали то она открывается в странице редактирования и дальше делай что хочешь. Понимаю что можно заблокировать ее прочитав связанную продажу и там уже на основании какого-то признака блокировать, но может есть уже встроенный механизм и велосепед не нужно изобретать

Нравится

7 комментариев
Лучший ответ

Зверев Александр пишет:

Тогда механизм прав Вам не поможет, он регулирует доступность вне зависимости от раздела, где на детали видна запись.

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

Мы оставляли возможность открытия по двойному щелчку (а также с помощью "Изменить"), чтобы была возможность увидеть запись на странице детали.

А возможность сохранения регулировали правами на объект или запись

Владимир Соколов,

 тогда как решить такую задачу механизмом прав - есть продажа, у на последнем этапе у нее блокируются все поля и детали? При этом детали есть общие для раздела "Договоры" (сделаны как в заказе с продуктами) и деталь "Контакты", есть детали что в контрагенте. При этом наследовать права от продажи нельзя так как доступы в контрагентах другие и если запретить редактирование в детали то через контрагента добавить не сможем.

Можно раздавать права через бизнес-процесс для каждой записи в детали, но если мы меняем этам нам нужно снова запускать процесс по всему списку. К тому же на странице редактирования записи детали нет управления доступом и потому изменить доступ можно снова через бизнес-процесс. Так образом мы увеличиваем нагрузку увеличившимся количеством процессов и можем поучить еще и опасность зависание процесса.

Думаю удобнее сделать наследование блокировки как это реализовано для детали с редактируемым реестром но в открывающейся странице (удобно потому что полей много бывает и просто для просмотра надо бы открывать как сейчас реализовано)

Владимир Соколов,

 

И тогда вопрос - доступы раздела можно посмотреть в таблице "Sys + название схемы + Right", а вот где смотреть доступы для деталей? К примеру нужно скопировать все доступы из раздела в деталь, как это можно сделать?

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

Тогда механизм прав Вам не поможет, он регулирует доступность вне зависимости от раздела, где на детали видна запись.

 И тогда вопрос - доступы раздела можно посмотреть в таблице "Sys + название схемы + Right", а вот где смотреть доступы для деталей?

Так же само. 

К примеру нужно скопировать все доступы из раздела в деталь, как это можно сделать?

Если разово, то проще всего написать SQL-запрос. Если постоянно, то выдавать можно БП. Но если хотите завязаться на событие именно выдачи прав в самом объекте, то такого события вроде бы нет, разве что SQL-триггером. 

Зверев Александр пишет:

Тогда механизм прав Вам не поможет, он регулирует доступность вне зависимости от раздела, где на детали видна запись.

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

Спасибо за предложенные варианты. Решил сделать привязку к одному разделу и через бизнеспроцес отбирать права на изменение записи в детали. Благо такая деталь сейчас в доработке только одна. А вообще вопрос думаю интересный и нужно будет подумать. Всем Спасибо

Владимир Соколов пишет:   сделал похоже, но не много по другом. Использовал механизм блокировки всех полей на странице редактирования по условию - запрос в базу данных про этап текущий продажи (а в самих этапах добавил булевую строку с отметкой нужно ли блокировать поля на этапе)

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

Добрый день!

Подскажите как активировать процесс по созданию Базы знаний после решения обращения.

Удалила его из справочника Деактивированных процессов, процесс Активный. Но при переводе обращения в стадию "Решено" процесс не запускается, меняла язык в системе на английский, ситуация не изменилась. 

 

Нравится

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

Яна, проверьте в самом процессе условия его запуска по сигналу. Возможно, кроме стадии там проверяют ещё какие-то поля и в Вашем случае условие не выполняется.

Систему не обновляли перед этим? Процесс не пробовали опубликовать? Возможно, там есть элементы, требующие публикации.

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

Подскажите как динамически делать пункт меню в "Действие" карточки в совмещенном режиме.

В обычном режиме все работает нормально.

attributes: {
	"IsCanVisaStatus": {
		dataValueType: Terrasoft.DataValueType.BOOLEAN,
		value: true,  // Значение по умолчанию которое передаеться при загрузке страницы на нашу кнопку
		dependencies: [{
			columns: ["KtState"], // Отслеживаем изменение поля состояния 
			methodName: "setCanVisaStatusContract" // и запускаем нашу функция если состояние изменчется
		}]
	}
},
methods: {
	onEntityInitialized: function() {
		this.callParent(arguments);
		this.setCanVisaStatusContract(); // Запускаем функцию при входе на страницу когда поля уже заполненны
	},
	getActions: function() {
		var actionMenuItems = this.callParent(arguments);
		actionMenuItems.addItem(this.getButtonMenuItem({
			Type: "Terrasoft.MenuSeparator",
			Caption: ""
		}));
		actionMenuItems.addItem(this.getButtonMenuItem({
			"Caption": VisaHelper.resources.localizableStrings.SendToVisaCaption,
			"Tag": VisaHelper.SendToVisaMenuItem.methodName,
			"Enabled": {"bindTo": "IsCanVisaStatus"} // мониторим через привязку состояние значения атрибута
		}));
		return actionMenuItems;
	},
	setCanVisaStatusContract: function(){
		var stateId = this.get("KtState").value; // Текущая стадия
		var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {  // Запрос к базе данных о том нужна ли кнопка отправки на визирования
			rootSchemaName: "KtContractKarTelState"
		});
		esq.addColumn("KtCanVisa", "KtCanVisa"); // Сама колонка указывающая что нужна кнопка
		esq.getEntity(stateId, function(result) {
			if (result.success) {
				if (result.entity.get("KtCanVisa") && this.canEntityBeOperated()) {   // this.canEntityBeOperated() - стандартный класс отвечает за то что если карточка на в режиме редактирования то false.
					this.set("IsCanVisaStatus", true);
				} else {									// Присваивает атрибуту значение true или false в зависимости от результата запроса
					this.set("IsCanVisaStatus", false);
				}
 
			}
		}, this);
	}
}

В отоге весь код работает хорошо но только в обычном режиме карточки, а совмещенном кнопка не видет атрибут хоть по девагу все запускается так же и значения поля в атрибуте меняется по кнопка просто его не видит. Пробовал атрибут вписать в Section - не помогло, атрибут видит кнопка но изменить его не получается.

Нравится

2 комментария
Лучший ответ

Нужно использовать механизм сообщений. Вот пример. Моем случае бинд был на аттрибут (в странице редакирования) "Enabled": {"bindTo": "enabledPlanPaymentDate"}

В секции пишем

		messages: {
			"GetEnabledPlanPaymentDate": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.SUBSCRIBE
			}
		},
		attributes: {
			"enabledPlanPaymentDate": {
				"type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
				"dataValueType": this.Terrasoft.DataValueType.BOOLEAN,
				"value": false
			}
		},
		methods: {
			init:function() {
				this.callParent(arguments);
				this.sandbox.subscribe("GetEnabledPlanPaymentDate",  function(args){this.$enabledPlanPaymentDate = args}, this, ["SectionModuleV2_InvoiceSectionV2"]);
			},
		}

В странице реадактирования:

		messages: {
			"GetEnabledPlanPaymentDate": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.PUBLISH
			}
		},
 
		methods: {
			onEntityInitialized: function() {
				this.callParent(arguments);
				this.sandbox.publish("GetEnabledPlanPaymentDate", this.checkEnabledChangePlanPaymentDate(), ["SectionModuleV2_InvoiceSectionV2"]);
			},
			checkEnabledChangePlanPaymentDate: function() {
				return this.$enabledPlanPaymentDate;
			}
}

 

Нужно использовать механизм сообщений. Вот пример. Моем случае бинд был на аттрибут (в странице редакирования) "Enabled": {"bindTo": "enabledPlanPaymentDate"}

В секции пишем

		messages: {
			"GetEnabledPlanPaymentDate": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.SUBSCRIBE
			}
		},
		attributes: {
			"enabledPlanPaymentDate": {
				"type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
				"dataValueType": this.Terrasoft.DataValueType.BOOLEAN,
				"value": false
			}
		},
		methods: {
			init:function() {
				this.callParent(arguments);
				this.sandbox.subscribe("GetEnabledPlanPaymentDate",  function(args){this.$enabledPlanPaymentDate = args}, this, ["SectionModuleV2_InvoiceSectionV2"]);
			},
		}

В странице реадактирования:

		messages: {
			"GetEnabledPlanPaymentDate": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.PUBLISH
			}
		},
 
		methods: {
			onEntityInitialized: function() {
				this.callParent(arguments);
				this.sandbox.publish("GetEnabledPlanPaymentDate", this.checkEnabledChangePlanPaymentDate(), ["SectionModuleV2_InvoiceSectionV2"]);
			},
			checkEnabledChangePlanPaymentDate: function() {
				return this.$enabledPlanPaymentDate;
			}
}

 

Трефилов Павел Сергеевич,

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

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

Добрый день.

Установили приложение Yandex.Maps in Field sales for Creatio на DEV-среду заказчика, настроили в соответствии с инструкцией,  заключили лицензионный договор с Яндексом и активировали ключ.

Приложение не работает, карта в детали "Адреса" контактов и контрагентов пропала.

Прошу помочь в решении проблемы с данным приложением.

Нравится

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

Добрый день, Дмитрий!

 

Уточните, пожалуйста, продукт и версию дев среды. А также значение системной настройки с кодом YandexMapsApiUrl.

Ирина Лазоренко,

Добрый день!

Продукт: Sales Creatio enterprise

Версия: 7.15.4.3055

Текущее значение системной настройки с кодом YandexMapsApiUrl установили в соответствии с требованиями по установке и настройке приложения: https://enterprise.api-maps.yandex.ru/2.1/?lang=en_RU

Также, по совету коллег которые сталкивались с подобной проблемой, пробовали установить значение: https://enterprise.api-maps.yandex.ru/2.1/?lang=RU 

Не помогает.

Ирина Лазоренко, добрый день!

 

Сегодня провел эксперимент, и установил приложение Yandex.Maps in Field sales for Creatio на бесплатную 14-ти дневную версию продукта  Sales Creatio enterprise 7.15.4.3055.

Результат аналогичный, карта пропала.

Дмитрий, добрый день!

 

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

Ирина Лазоренко, добрый день!

 

Спасибо, очень ждем результата!

Дмитрий, добрый день,

 

для подтверждения, что ошибка из-за ключа, смените адрес на тестовый https://api-maps.yandex.ru/2.1/?lang=en_RU и обновите страницу (F5). Сообщите по результатам, отобразились карты?

Ирина, добрый день!

 

Провел тестирование с тестовым url https://api-maps.yandex.ru/2.1/?lang=en_RU на клиентской среде и на бесплатной 14-ти дневной версии. После смены url в системной настройке с кодом YandexMapsApiUrl на тестовый, чистки кэша и перелогинивания, карта по прежнему не отображается на обоих сайтах.

Дмитрий, добрый день,



Проверьте, пожалуйста, два кейса:

1. Тестовое подключение. Установите тестовый api https://api-maps.yandex.ru/2.1/?lang=en_RU в системной настройке "Yandex maps api url" и очистите значение системной настройки "Yandex maps api key". Обновите страницу приложения Creatio. Если карты не отображаются, проверьте, что устранены ошибки сертификата безопасности (https://yandex.ru/support/mail/web/problems/certificate-errors.html).

2. Коммерческое подключение. Установите основной api https://enterprise.api-maps.yandex.ru/2.1/?lang=en_RU в системной настройке "Yandex maps api url" и укажите ключ в системной настройке "Yandex maps api key". Обновите страницу приложения Creatio. Если карты не отображаются, проверьте валидность API ключа. В консоли может возникать ошибка "ERR_ABORTED 403 (Forbidden)". Эта ошибка означает, что Яндекс отклоняет запрос с указанным API ключом. Сообщите результаты выполнения по каждому из кейсов.

Ирина, добрый день!

 

1. В первом кейсе карта отобразилась. Хотя карта на английском языке, и большинство адресов не находятся на карте  http://prntscr.com/rvw93z 



2. Во втором кейсе карта опять пропала, хотя API ключ активен  http://prntscr.com/rvwe2e

 

Ниже копирую текст ошибки в консоли + скрин консоли.

 

 

Failed to load resource: the server responded with a status of 403 (Forbidden)

require.js:143 Uncaught Error: Script error for "YandexMap"

http://requirejs.org/docs/errors.html#scripterror

    at makeError (require.js:168)

    at HTMLScriptElement.onScriptError (require.js:1744)

/core/8f096d9f92ff7b7dc4531de528673b5d/Terrasoft/amd/core-base.js:707 user: Дмитрий/756ef43a-766e-4b1d-95f6-e99be382fe0d

 file: https://035572-sales-enterprise.terrasoft.ru/core/057665f97324038f6c7c3…

 line: 143

 column: 9

 message: Uncaught Error: Script error for "YandexMap"

http://requirejs.org/docs/errors.html#scripterror 

 date: Thu Apr 09 2020 09:28:23 GMT+0300 (Москва, стандартное время)

 stack: Error: Script error for "YandexMap"

http://requirejs.org/docs/errors.html#scripterror

    at makeError (https://035572-sales-enterprise.terrasoft.ru/core/057665f97324038f6c7c3…)

    at HTMLScriptElement.onScriptError (https://035572-sales-enterprise.terrasoft.ru/core/057665f97324038f6c7c3…)

Дмитрий, добрый день,

 

в первом кейсе попробуйте использовать url с таким параметром lang - https://api-maps.yandex.ru/2.1/?lang=ru_RU.

 

Во втором кейсе вы используете неверный ключ, нужен JavaScriptApi. Ранее таких кейсов не возникало, уточню этот пункт на маркетплейс.

Ирина,

 

Первый кейс с таким url https://api-maps.yandex.ru/2.1/?lang=ru_RU выдал карту на русском языке.

Но, проблема поиска адресов на карте остается актуальной.

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

Прошу помощи в решении этой проблемы.

 

По второму кейсу, я правильно понимаю, что нам нужно сменить ключ на JavaScript API и HTTP Геокодер вместо используемого Static API Яндекс.Карт?

Дмитрий,

 

в первом кейсе адреса и не будут работать, потому что ключа нет. Этот шаг нужен был для проверки отображения карты как таковой.

 

Относительно второго вопроса "По второму кейсу, я правильно понимаю, что нам нужно сменить ключ на JavaScript API и HTTP Геокодер вместо используемого Static API Яндекс.Карт?" ответ - Да.

 

Ирина, дело в том, что адреса не работают даже с ключем. Я зарегистрировал тестовый ключ  JavaScript API и HTTP Геокодер, и провел тестирование второго кейса с тестовым ключем и соответствующими системными настройками.

Поведение карты аналогично первому кейсу. Сама карта отображается, но адреса на карте не определяются.

Дмитрий,

 

от Артема Пивоварова ожидаем ключ JavaScriptApi в личку, чтобы воспроизвести ошибку.

Ирина, добрый день!

Ключ заказчика JavaScript API активировали.

Я провел тестирование на тестовом демо стенде v. 7.15.4.3055 sales enterprise, и на клиентском сервере https://dev-simplebuild.terrasoft.ru/  v. 7.16.0.4449

Определение адресов на карте по прежнему не работает.

Активный ключ отправил вам в личку.

Дмитрий, добрый день!

 

опубликовала пакет с обновлениями на маркетплейсе. Установите с маркептлейса повторно пакет и проверяйте обновления.

Ирина Лазоренко добрый день!

После переустановки пакета все заработало. Спасибо!

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

Добрый день.

 

Мы используем OData для интеграции с другими системами. В последнее время наблюдается странное поведение системы, на одни и те же запросы Creatio может отвечать как штатно, так и с ошибкой 401. 

{
"Message":"There was an error processing the request.",
"StackTrace":"",
"ExceptionType":""
}

 

Подскажите, кто-нибудь сталкивался с подобным?

Нравится

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

401 — это Unauthorized:

для доступа к запрашиваемому ресурсу требуется аутентификация. В заголовке ответ должен содержать поле WWW-Authenticate с перечнем условий аутентификации. Иными словами, для доступа к запрашиваемому ресурсу клиент должен представиться, послав запрос, включив при этом в заголовок сообщения поле Authorization с требуемыми для аутентификации данными. Если запрос уже включает данные для авторизации, ответ 401 означает, что в авторизации с ними отказано.

Значит, перед работой с OData не обратились к AuthService.svc, либо обратились, но в дальнейших запросах не передали все полученные куки, либо отвалилось по давности.

Также см. более подробную статью, как правильно производить аутентификацию. Возможно, забыли о заголовке ForceUseSession: true.

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

Коллеги, привет!

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

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

Спасибо!

Нравится

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

В 7.16.1 будет мобильное визирование с приходом push-уведомлений тому, кто визирует. Но только в онлайн-режиме.

Подскажите, пожалуйста, когда ожидать функциональность визирования записи в МП в открытом доступе?

Irina, добрый день!

 

Данный функционал реализован в версии 7.16.1.

Более подробно о визировании в мобильном приложении в релизе: https://academy.terrasoft.ru/docs/release/opisanie-relizov/opisanie-rel…

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

Добрый день! 

В окне дизайна шаблона письма рассылки нажимаю "сохранить", на вопрос "Все изменения будут сохранены. Продолжить?" отвечаю "Да".

Ожидаемо, что редактирование будет продолжено в том же окне редактирования.

Но система закрывает текущее окно редактирования и приходится заново открывать окно для продолжения редактирования шаблона. Это неудобно. Можно ли избежать этого неудобства?

Нравится

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

А что за версия у Вас используется?

В 7.15.3 после нажатия подтверждения не спрашивает, но и не закрывает редактор, только показывает уведомление:

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

Добрый день! Как в шаблон письма добавить ссылку просмотра веб-версии письма, аналог {{WebLetterUrl}}?

Не имеется в виду просмотр веб-версии при верстке шаблона, имеется в виду  просмотр веб-версии письма на стороне получателя письма.

Нравится

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