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

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

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

Нравится

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

Артем, добрый день! Рекомендуем вам добавить свой пользовательский модуль с необходимыми полями, а при нажатии на действие делать переход в него с помощью PushHistoryState. Пример подобной реализации - метод openDuplicatesModule в AccountSectionV2.

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

 Всем пример

Делаю быстрый фильтр по примеру из документации.

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

Кейс простой при клике на элементе "Контрагенты"- отобразить уже отфильтрованный реестр. 

Подскажите где моя ошибка или чего я не понимаю

define("AccountSectionV2", ["BaseFiltersGenerateModule","jQuery"], function(BaseFiltersGenerateModule) {
 
 
 
 
	return {
		entitySchemaName: "Account",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		attributes: {
 
        },
		methods: {
			initFilters: function() {
				  console.log("initFilters");
					this.initFilterActions();
					this.initFixedFiltersConfig();
					this.subscribeFiltersChanged();
					this.subscribeFilterGetConfigMessages();
					this.loadFiltersModule();
				},
			initQueryFilters: function(esq) {
				//this.callParent(arguments);
				console.log("initQueryFilters");
					var filters = this.getFilters();
					if (filters) {
						console.log(filters);
						esq.filters.addItem(filters);
                 	}
 
	          },
 
			// Инициализирует фиксированные фильтры.
            initFixedFiltersConfig: function() {
            	console.log("initFixedFiltersConfig");
                // Создание конфигурационного объекта.
                var fixedFilterConfig = {
                    // В качестве схемы объекта для фиксированных фильтров указывается схема объекта раздела.
                    entitySchema: this.entitySchema,
                    // Массив фильтров.
                    filters: [
                                   // Фильтр периода.
                        {
                            // Название фильтра.
                            name: "PeriodFilter",
                            // Заголовок фильтра.
                            caption: this.get("Resources.Strings.PeriodFilterCaption"),
                            // Тип данных — дата.
                            dataValueType: this.Terrasoft.DataValueType.DATE,
                            // Дата начала периода фильтрации.
                            startDate: {
                                // Фильтруются данные из колонки [Date].
                                columnName: "StartDate",
                                // Значение по умолчанию.
                                defValue: this.Terrasoft.startOfWeek(new Date())
                            },
                            // Дата завершения периода фильтрации.
                            dueDate: {
                                columnName: "StartDate",
                                defValue: this.Terrasoft.endOfWeek(new Date())
                            }
                        },
                        // Фильтр ответственного.
                        {
                            // Название фильтра.
                            name: "Owner",
                            // Заголовок фильтра.
                            caption: this.get("Resources.Strings.OwnerFilterCaption"),
                            // Фильтрация данных из колонки [Owner].
                            columnName: "Owner",
                            // В качестве значения по умолчанию указывается контакт текущего пользователя.
                            // Значение берется из системной настройки.
                            defValue: this.Terrasoft.SysValue.CURRENT_USER_CONTACT,
                            // Тип данных — справочник.
                            dataValueType: this.Terrasoft.DataValueType.LOOKUP,
                            // Фильтр.
                            filter: BaseFiltersGenerateModule.OwnerFilter
                        }
                    ]
                };
                // Колонке [FixedFilterConfig] присваивается ссылка на созданный конфигурационный объект.
                this.set("FixedFilterConfig", fixedFilterConfig);
            }
 
 
		}
	};
});

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

Нравится

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

1) Сложно без кода страницы что-то конкретное сказать.

2) У вас точно колонка Owner в объекте есть? И точно ли она ссылается на Контактов.

3) " ...при клике на элементе "Контрагенты"..." — При чём тут контрагенты?

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

1. Код щас приложу

2. Owner - точно есть

3. Мне надо показать пользователю в реестре только созданных им контрагентов

1) Resources.Strings.OwnerFilterCaption не определён в localizableStrings, поэтому на скрине пустота

2) Пусто внутри выборки контрагентов потому, что срабатывает фильтр 

filter: BaseFiltersGenerateModule.OwnerFilter

Подробнее - посмотрите в BaseFiltersGenerateModule, если не нужна фильтрация - закомментируйте эту строчку

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

Добрый день!

В дашборде при выборе даты (например, даты создания) в список подтягивается время ЧЧ:ММ, которое не нужно, но при этом занимает много полезного пространства (многие задачи занимали бы 1 строчку отображения, а занимают 2 из-за времени).

Можно ли убрать отображение времени в дашборде?

Нравится

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

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

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

Я передал Ваше пожелание аналитикам продукта. Они рассмотрят возможность реализации в будущих версиях приложения.

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

Возможно ли расположить кнопку напротив каждой строки детали? Например кнопку "Удалить".

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

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

Нравится

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

И "Редактировать"!

Не знаю как с кнопками в конце, но в схеме разделов можно подсмотреть код и реализовать такой вариант:

Чисто теоретически можно забиндаться к добавлению записи в грид и вставлять свой контейнер с кнопкой на то место что вам требуется. Ну и конечно придётся поиграться со стилями. Что-то подобное мы уже пытались делать. Одно могу сказать что к добавлению элемента в DOM мы уже имели опыт биндинга и выполнения своей логики, а так же создания произвольных HTML элементов на странице.

А то что посоветовал Данила можно подсмотреть в странице локального поиска дублей, например. Вот как то так: 

{
	id: "duplicateGrid",
	className: "Terrasoft.Grid",
	type: "tiled",
	primaryColumnName: "Id",
	activeRow: {bindTo: "activeRow"},
	columnsConfig: [columnsConfig],
	collection: {bindTo: "gridData"},
	activeRowAction: {bindTo: "onActiveRowAction"},
	activeRowActions: [
		{
			className: "Terrasoft.Button",
			style: Terrasoft.controls.ButtonEnums.style.BLUE,
			caption: resources.localizableStrings.IsNotDuplicateCaption,
			tag: "IsNotDuplicate",
			visible: {bindTo: "getGridButtonIsNotDuplicateVisible"}
		},
		{
			className: "Terrasoft.Button",
			style: Terrasoft.controls.ButtonEnums.style.BLUE,
			caption: resources.localizableStrings.IsDuplicateCaption,
			tag: "IsDuplicate",
			visible: {bindTo: "getGridButtonIsDuplicateVisible"}
		}
	]
}

 

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

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

Т.е нужно вывести всего две записи из списка

 //Создаем фильтр
var contactFiler = Terrasoft.createFilterGroup();
contactFiler.name = "contactFiler";
contactFiler.logicalComparisonTypes = Terrasoft.LogicalOperatorType.OR;
 
var filter1 = Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Name","Контрагент уже в системе");
var filter2 = Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Name","Некорректные данные");
                                                                 
                                                         
contactFiler.addItem(filter1);
contactFiler.addItem(filter2);

По отладчику видно , что в коллекцию добавляется два элемента, но список пуст

Нравится

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

Роман, а вы этот фильтр (contactFiler) где и как используете?

contactFiler.logicalComparisonTypes = Terrasoft.LogicalOperatorType.OR;

"Неправильно ты, дядя Фёдор, бутерброд ешь"...

Попробуйте 

contactFilter.setLogicalOperation(1);

 

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

После вставки этого метода,пишет contactFilter  - undefined

Толмачев Дмитрий Юрьевич,

 

var config = {
              entitySchemaName: "UsrLooseReason",
              multiSelect: false,
              columns: ["Name","Description"],
              hideActions: false,//Скрываем кнопку "Добавить"
              filters: contactFiler
             };
 this.openLookup(config, function (arg) {}, this);

 

Последовский Роман пишет:

После вставки этого метода,пишет contactFilter  - undefined

 Потому что у вас не contactFilter, а contactFiler. Исправляюсь:

contactFiler.setLogicalOperation(1);

 

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

Огромное спасибо!!! Все заработало

Роман, здравствуйте!

Согласно Вашему коду у Вас используется параметр logicalComparisonTypes.

Он сравнивает строковые значения («Контрагент уже в системе» = «Некорректные данные»). В результате фильтр возвращает 0.

Нужно вместо logicalComparisonTypes использовать logicalOperation, чтобы использовать условие И/ИЛИ.

 

Параметр logicalOperation описан на SDK - https://academy.terrasoft.ru/documents/technic-sdk/7-11/rabota-s-filtrami-entityschemaquery,

Также на https://academy.terrasoft.ru/documents/technic-sdk/7-11/primenenie-filtracii-k-spravochnym-polyam можете увидеть, что "По умолчанию фильтры в коллекции объединяются с использованием логической операции AND. Если необходимо применить операцию OR, ее нужно указать явно в свойстве logicalOperation объекта Terrasoft.FilterGroup.".

 

Параметр logicalComparisonTypes на SDK не описан.

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

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

 

Нравится

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

можно дополнительно в методе onEntityInitialized вызывать ваши функции на изменения полей (т.е. пересчитывать будет изначально при загрузке карточки). Ну и если прям при добавлении, то можно поставить фильтр

if (this.isAddMode()) {....вызов функций...}

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

 

Здравствуйте, подскажите  есть ли возможность из CRM отправлять сетевые запросы, к сторонним сервисам?

"Задание сценарий" в бизнес процессах - это оно? 

Если это оно: то в MS Visual Studio я пишу некий код для отправки, а потом вставляю его в "Задание сценарий".

Собственно интересует общая последовательность действий.

Буду признателен за ответ.

 

Нравится

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

Да, есть. В "Задание сценарий" вставляете любой C# код (однако имейте ввиду, что выполняться всё будет в iis-е на сервере). Плюс, если надо подключить using - это в параметрах процесса (сбросить фокус с элементов бп, справа синяя полоса, 3 вкладка)

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

Спасибо вроде все получилось

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

Нужно создать обычную страницу с 9 полями.

В дизайнере системы сделаю кнопку и посылку на новую страницу(по примеру)

Обычная страница редактирования строки из таблицы, что бы выбирало только одну запись уже добавил фильтрацию в процессе страницы(ясли я по правильному пути пошел)

Теперь нужно отобразить эту страницу и я что то не могу это сделать, инфы я не нашел нигде!

Нравится

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

Кто-нибудь создавал обычную страницу с формой обратной связи?

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

Добрый день!

Вы же можете настроить преднастроенную страницу и вызвать ее при нажатии в рамках БП (https://academy.terrasoft.ru/documents/technic-sdk/7-11/zapusk-processa-iz-klientskogo-modulya)

Вам только необходимо создать свою клиентскую схему с необходимой логикой (https://academy.terrasoft.ru/documents/technic-sdk/7-11/sozdanie-klientskoy-shemy).

Vladimir Kov пишет:

Кто-нибудь создавал обычную страницу с формой обратной связи?

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

Владимир, здравствуйте!

Для примера можете воспользоваться функционалом выставление оценки по обращению (CaseRatingManagementService). 

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

Добрый день!

Можно ли устанавливать обновления новой версии на копию базы и сайта с целью предотвращения потенциальных ошибок при установке обновлений на рабочую версию?

Часто возникают ситуации, когда обновление прошло успешно, НО в процессе работы возникают ошибки, критически влияющие на работу менеджера в bpm.

Нравится

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

Александр, добрый вечер!

Вы используете систему on-site, т.е. развернута она на серверах Вашей компании, следовательно, обновление выполняет Ваш администратор, поэтому Вам необходимо адресовать данную просьбу именно ему.

Если я неверно понял Ваш вопрос, уточните, пожалуйста. Спасибо.

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

Добрый день.

Заместил схемку LeadAccountProfileSchema - вызываю метод FindSimilar при получение сообщения от карточки лида. В методе реализован Terrasoft.chain, чтобы убрать ассинхронность запроса в initSimilarEntityRecordsCollection. Но в chain почему-отрабатывает только первая функция, а onSimilarButtonClick не работает. Почему?

 

 

 

define("LeadAccountProfileSchema", ["LeadAccountProfileSchemaResources", "LeadSimilarEntitiesProfileSchemaUtilities"],
	function(resources) {
		return {
			entitySchemaName: "Account",
			mixins: {},
			attributes: {},
			messages: {
			"FindSimilarAccount": {
			mode: this.Terrasoft.MessageMode.PTP,
			direction: this.Terrasoft.MessageDirectionType.SUBSCRIBE
			}
			},
			methods: {
				initEntity: function() {
					this.callParent(arguments);
					this.sandbox.subscribe("FindSimilarAccount", this.FindSimilar, this, ["123"]);
				},
				FindSimilar: function() {
					this.Terrasoft.chain(
					this.initSimilarEntityRecordsCollection,
					this.onSimilarButtonClick,
					this)
				}
			},
			};
	});

 

Нравится

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

Метод, находящийся в chain должен принимать и вызывать после выполнения логики callback:

 

initSimilarEntityRecordsCollection: function(callback, scope) {
    // Logic
	if (callback) {
		callback.call(scope || this);
	}
},

 

Толмачев Дмитрий Юрьевич,

Пробовал, но в этом случае опять же ассинхронность в initSimilarEntityRecordsCollection остаётся и следующая функция в chain запускается вне зависимости от работы первой функции.

СД,

попробуйте примерно вот так через next:

Terrasoft.chain(
	function (next) {
		// какие-то действия
		next();
	},
	function(next) {
		// либо в callback
		var config = {
			isSilent: true,
			callback: next
		};
		this.save(config, false);
	}
}

 

СД,

Это просто пример. Вы же спросили почему у вас не выполняет вторая функция. Не выполняется, т.к. не вызывается. Вызвать можно через callback или next.

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

  

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