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

На новые обращения работает, но на эти 30 обращений не отбираются права. (Вижу обращения с контрагентом "Контрагент №2" через портал под пользователем с контрагентом "Контрагент №1" ) 

Вопрос, что может устанавливать права, кроме этого бизнес процесса? Техподдержка не помогла.

Нравится

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

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



Так мы исключим вариант, что процесс некорректный.



У наших клиентов тоже перераспределяются права на обращения после изменения SLA или Контакта, и всё срабатывает. Правда, там в условии я по старой привычке пишу, что Id должно быть заполнено, но возможно, сейчас такое и не требуется

Если процесс даже не запускается на редактирование полей, то покажите стартовые сигналы

Владимир Соколов, запускается, на каждое изменение, но не отрабатывает, как будто права, кто-то свыше меняет.

 

Rinat,

Для того, чтобы права доступа изменились для уже созданных записей, Вам нужно создать другой процесс, чтобы он стартовал по обычному сигналу и добавить элемент, который вносит изменения в права доступа для этих записей по какому-то фильтру (например, по дате создания).

Этот бизнес-процесс нужно запустить одноразово вручную либо из дизайнера, либо из пункта меню запуска бизнес-процессов.

Также, возможно, отрабатывает еще какая-то дополнительная логика. Чтобы понять, что это может быть, посмотрите SQL Profiler, какие запросы идут в этот момент в базу данных.

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



Так мы исключим вариант, что процесс некорректный.



У наших клиентов тоже перераспределяются права на обращения после изменения SLA или Контакта, и всё срабатывает. Правда, там в условии я по старой привычке пишу, что Id должно быть заполнено, но возможно, сейчас такое и не требуется

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

При установке пакета через интерфейс системы установка приложений возникла ошибка (из-за вручную внесённых изменений в таблицы в БД - хулигану уже настучали по рукам) и система предложила откатиться до состояния пакетов из бэкапа.

При откатывании тоже возникла ошибка и система сообщила, что восстановление из бэкапа невозможно.

При этом в интерфейсе системы и в БД пропали некоторые поля и такое ощущение, что система откатилась примерно на месяц назад.

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

Нравится

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

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

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

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

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

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

 

 

Задача состоит в том чтобы добавить еще быстрый фильтр по дате загрузки товара (поле существует в объекте)

При добавлении быстрого фильтра по статьи в академии выскакивает ошибка 

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

также добавляю скрин исходного кодаИзображение удалено.

 

Нравится

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

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

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

Если Вам необходимо реализовать несколько быстрых фильтров по дате, следует заместить логику BaseDataView (пакет NUI), предусмотреть возможность работы еще с одним фильтром - добавить строки, аналогичные всем тем, где упоминается PeriodFilter.  

Опишите более детально, если можно то из примерами.

См. в коде BaseDataView, QuickFilterModule,  ReportFilterModule и других схем, где упоминается PeriodFilter, как там работают с этим фильтром.

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

Всем доброго времени суток!

Кто нибудь сталкивался с такой проблемой:

Сайт развернут локально. Создаем деталь мобильного приложения через мастер, схемы создались - https://prnt.sc/n6surw

Фиксирую в СВН  - http://prntscr.com/n6svs3

Фиксация проходит успешно - http://prntscr.com/n6svyk

Результат в Svn зафиксировались только метаданные - http://prntscr.com/n6swjg 

http://prntscr.com/n6sx1x 

http://prntscr.com/n6sx6r

 

Нравится

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

Попробуйте так. Фиксируйте в свн 2 раза подряд. Перый раз уедут метаданные, второй раз - все остальное. Мы с этим сталкиваемся регулярно, но решения пока нет...

Попробуйте так. Фиксируйте в свн 2 раза подряд. Перый раз уедут метаданные, второй раз - все остальное. Мы с этим сталкиваемся регулярно, но решения пока нет...

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

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

Компания пользователь bpmonline запускает новое направление. Возникла потребность дать доступ на работу в системе аутсорсному сотруднику, работа только в новом направлении. По этой причине нужно настроить отображение разделов и активностей для этого сотрудника таким образом что бы он видел только те продажи, лиды, заказы которые имеют привязку к этому новому направлению. А те что не не имеют и давно живущие в системе - не видеть.

Пока не могу придумать логику как это сделать оптимально.

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

Если раздел продажи - то к "типу продажи" или "поставщику".

Если заказы то к продаже соответсвующей заказу.

С активностями вообще не понятно, желательно что бы этот внештатный сотрудник не видел активностей имеющих отношение к "закрытым" вышеуказанным объектам разделов.

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

Нравится

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

Денис Королев,

Проще всего это сделать с помощью элемента раздачи прав через бизнес-процесс (выше в комментарии Александра есть ссылка с описанием, как работать с данным элементом).

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

Всё вышеупомянутое можно регулировать правами доступа на записи в разделах. Включить нового пользователя в специальную группу (вдруг появится второй такой же), а этой группе выдать права на одни записи раздела и не выдать на остальные. При этом нужно учитывать, что новый пользователь тоже входит во «Все пользователи» и этой группе не надо давать права на те записи, которые Вы не хотите, чтобы он видел.

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

Более гибко можно в БП с элементом раздачи прав, стартующим при вставке записи.

А раздачу прав на старые записи в зависимости от значения поля в этом или связанном объекте можно сделать SQL-запросом в базе или тоже запущенным один раз БП.

Зверев Александр,

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

Денис Королев,

Проще всего это сделать с помощью элемента раздачи прав через бизнес-процесс (выше в комментарии Александра есть ссылка с описанием, как работать с данным элементом).

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

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

На прод среде имеется бизнес-процесс в пакете Custom. Я хочу изменить этот процесс, внести его в свой пакет разработки. Что собственно уже сделал на среде разработки. Однако при импорте на тестовую заметил, что этот БП не импортируется, так как такой уже есть в пакете Custom. Есть какие нибудь методы решения такой проблемы? только удаление из Custom на прод перед импортом? Или лучше всё таки новый бп создать?

Нравится

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

Добрый день!

Можно у себя на стенде перетащить БП в свой пакет (сменить пакет у БП), а при установке в прод ставить архивом изменяемые пакеты (включая Custom) через установку приложения (не импорт схемы)

Добрый день!

Можно у себя на стенде перетащить БП в свой пакет (сменить пакет у БП), а при установке в прод ставить архивом изменяемые пакеты (включая Custom) через установку приложения (не импорт схемы)

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

Добрый день!



Почему-то не получается прочитать данные из объекта view:

1) создал view

2) создал объект в системе

3) в БП выбрал "Читать данные" и выбрал созданный объект (видны все колонки)

4) выдается ошибка:



System.InvalidCastException: Specified cast is not valid.

   at Terrasoft.DB.MSSql.MSSqlTypeConverter.DBValueToGuid(Object value)

   at Terrasoft.Core.GuidDataValueType.GetValueForLoad(UserConnection userConnection, Object value)

   at Terrasoft.Core.Entities.EntityColumnValue.LoadValue(Object value)

   at Terrasoft.Core.Entities.EntityColumnValueCollection.ForceLoadColumnValue(String name, Object value)

   at Terrasoft.Core.Entities.Entity.LoadShallow(IDataReader dataReader, Dictionary`2 columnMap)

   at Terrasoft.Core.Entities.EntityCollection.LoadShallow(IDataReader dataReader, Dictionary`2 columnMap, Boolean needClear)

   at Terrasoft.Core.Entities.EntitySchemaQuery.GetEntitySchemaEntityCollection(UserConnection userConnection, IDataReader dataReader)

   at Terrasoft.Core.Entities.EntitySchemaQuery.GetEntityCollection(UserConnection userConnection)

   at Terrasoft.Core.Process.Configuration.ReadDataUserTask.InternalExecute(ProcessExecutingContext context)

   at Terrasoft.Core.Process.ProcessActivity.Execute(ProcessExecutingContext context)



В чем может быть проблема?

Нравится

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

Обычно такое встречается когда в View null попадает в колонку описанную как Guid (уникальный идентификатор), помогает преобразование

CAST(NULL AS UNIQUEIDENTIFIER) AS MIParentId

или

CAST(d.ContactId AS UNIQUEIDENTIFIER) AS MIParentId

 

Добрый день

Тип колонки в объекте View не совпадает с типом колонки представления базы данных.

Проверьте типы, конкретно Guid.

Обычно такое встречается когда в View null попадает в колонку описанную как Guid (уникальный идентификатор), помогает преобразование

CAST(NULL AS UNIQUEIDENTIFIER) AS MIParentId

или

CAST(d.ContactId AS UNIQUEIDENTIFIER) AS MIParentId

 

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

Здравствуйте! Подскажите как можно реализовать обновление карточки мобильного приложения? Кейс следующий делаю апдейт заказа и после обновления полей в success обновлять страницу.

Код примерно следующий:

 

setDiscount: function(config){
		var orderProductRecord = Ext.clone(config.model);
		if(config.discountType==="legal"){
			var discountByContract = config.contract.data.Discount;
			var totalAmount = config.model.data.TotalAmount;
			var discountPrice = this.calculateAmountWithDiscount(totalAmount, discountByContract);
			var totalDiscount = totalAmount-discountPrice;
			orderProductRecord.set("WaDiscountAccount", discountByContract, true);
			orderProductRecord.set("WaTotalDiscount", totalDiscount, true);
			orderProductRecord.save({
				success: function(){
					window.console.log("Update was success");
					Terrasoft.Router.back();
				},
				failure: function(exception) {
					Terrasoft.MessageBox.showMessage(Ext.String.format(Terrasoft.LS.WaErrorExecutionMessage, exception));
				},
				queryConfig: Ext.create('Terrasoft.QueryConfig', {
					modelName: orderProductRecord.self.modelName,
					columns: ["WaDiscountAccount", "WaTotalDiscount"]
				})
			}, this);
		} else if (config.discountType ==="personal") {
			//orderProductRecord.set("WaDiscountContact", config.DiscountContact, true);
		}
	},

 

Нравится

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

См. тут. Возможно, подойдут функции:

markPreviousPagesAsDirty(operationConfig)

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

refreshPreviousPages(operationConfig, currentPageHistoryItem)

Метод выполняет для всех предыдущих страниц повторную загрузку данных или актуализирует данные на основании operationConfig. Если установлено значение для параметра currentPageHistoryItem, метод выполняет те же действия для предшествующих страниц.

refreshAllPages(operationConfig, excludedPageHistoryItems)

Метод выполняет для всех страниц повторную загрузку данных или актуализирует данные на основании operationConfig. Если установлен параметр excludedPageHistoryItems, метод исключает из актуализации указанные страницы.

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

Добрый день! 

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

 

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

В БД ничего похожего найти не смог 

Есть какие-нибудь идеи по удалению процесса?



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

Нравится

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

Здравствуйте, если я добавлю к контакту некоторое булево поле, как при выборе его из обращения произвести отбор по этому полю?

 

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

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

Нравится

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

Rinat,

Добрый день!

Данную фильтрацию можно сделать

1. либо через бизнес правила:

1) через код https://academy.terrasoft.ru/documents/technic-sdk/7-13/primer-primenen…

2) через мастер страницы (https://monosnap.com/file/ooYS71HNPA5gozrb204C1N5gCvCNeU)

2. либо в коде через параметр фильтрации атрибута

пример:

attributes: {
			"Contact": {
				lookupListConfig: {
					"filters": [
                        function() {
                            var filterGroup = Ext.create("Terrasoft.FilterGroup");
                            var galochaFilter = Terrasoft.createColumnFilterWithParameter(
                            	Terrasoft.ComparisonType.NOT_EQUAL, "Galocka", true);
                            filterGroup.add("filter1", galochaFilter);
                            return filterGroup;
                        }
                    ]
				}
 
			}
		}

 

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

На вашем втором скриншоте есть выпадающий список (там где "ФИО") в этом списке должно будет появиться добавленное поле. 

Так же через, по второму скриншоту, нажав на "Вид" Вы сможете вывести колонку в реестр модального окна

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

Rinat,

Добрый день!

Данную фильтрацию можно сделать

1. либо через бизнес правила:

1) через код https://academy.terrasoft.ru/documents/technic-sdk/7-13/primer-primenen…

2) через мастер страницы (https://monosnap.com/file/ooYS71HNPA5gozrb204C1N5gCvCNeU)

2. либо в коде через параметр фильтрации атрибута

пример:

attributes: {
			"Contact": {
				lookupListConfig: {
					"filters": [
                        function() {
                            var filterGroup = Ext.create("Terrasoft.FilterGroup");
                            var galochaFilter = Terrasoft.createColumnFilterWithParameter(
                            	Terrasoft.ComparisonType.NOT_EQUAL, "Galocka", true);
                            filterGroup.add("filter1", galochaFilter);
                            return filterGroup;
                        }
                    ]
				}
 
			}
		}

 

Сидоров Александр В., не совсем понял как в мастер страницы попасть. Это не оно? 

Rinat,

Да, оно. Справа сверху есть кнопка перехода к бизнес правилам

Сидоров Александр В.,Спасибо.

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