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

Задача: изменить механизм копирования записи сущности – не копировать (или очищать после копирования) справочные поля, ссылающиеся на деактивированные записи справочников.

Желательна реализация без прямого указания (или с минимальным указанием)  имён полей в коде.

Такой подход приводит к полному копированию, включая значения полей, для которых установлен запрет копирования при копировании записи:

var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Lead");
esq.AddAllSchemaColumns();
var entity = esq.GetEntity(UserConnection,id);
Entity newEntity = (Entity)entity.Clone();

Буду благодарен за «наводки».

Нравится

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

Добрый день!

Рекомендую вам ознакомится с этим обсуждением. Не совсем понимаю, что вы подразумеваете под деактивированными записями, однако в приведённом обсуждении есть пример, на котором должно действовать свойство "Копировать данные при копировании записи". Если же не поможет, то стоит смотреть на реализацию кнопки "Копировать" в записи раздела.

Добрый день.

Спасибо за информацию. Помогла.

Под декативированными записями я понимаю записи, у которых поле RecordInactive=true (описание).

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

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

 

У нас открывается вакансия ИТ бизнес-партнера по платформе.

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

 

Пишите мне, если есть интерес!

 

С уважением,

Александр

a.pivovar@nt-ls.ru

Нравится

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

На среде разработки без ошибок генерируется отчет Fast report. Но после переноса пакета на другие среды, там в логах видим ошибку:



ERROR NT AUTHORITY\SYSTEM Terrasoft.Web.Common.ServiceModel.ErrorHandler HandleError - Internal Server Error

System.ServiceModel.Web.WebFaultException`1[Terrasoft.Configuration.Reporting.FastReport.FastReportGenerationException]: Internal Server Error (Fault Detail is equal to Terrasoft.Configuration.Reporting.FastReport.FastReportGenerationException: Error during report generation).

2022-01-30 22:18:10,085 [71] ERROR NT AUTHORITY\SYSTEM Terrasoft.Nui.ServiceModel.Extensions.QueryExtension AddQueryColumns - Terrasoft.Common.ItemNotFoundException: Collection item with name  UsrRequest.UsrGroup not found.

 

При этом UsrRequestнигде в отчёте не использоваться, а поля UsrGroup в UsrRequest никогда не существовало. В FastReportDataSource тоже нет упоминаний таких полей и объектов.

 

Естественно, пробовали чистить Redis, cache, перекомпилировать всё, пересохранять отчёт - без результатов. Другие отчёты генерируются корректно.

 

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

Нравится

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

Владимир, добрый день!

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

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

Доброго времени суток.

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

 

Меняю доступность поля так:

 

generateActiveRowControlsConfig: function(id, columnsConfig, rowConfig) {
    this.columnsConfig = columnsConfig;
    var gridLayoutItems = [];
    var currentColumnIndex = 0;
    this.Terrasoft.each(columnsConfig, function(columnConfig) {
        var cellConfig = this.getActiveRowCellConfig(columnConfig, currentColumnIndex);
        var columnName = columnConfig.key[0].name.bindTo;
        if (columnName === "UsrOwner") {
            cellConfig.enabled = this.$IsOwner && this.$IsNewStage; // Это атрибуты, проставляются с помощью сообщения с карточки
        }
        if (!cellConfig.hasOwnProperty("isNotFound")) {
            gridLayoutItems.push(cellConfig);
        }
        currentColumnIndex += cellConfig.layout.colSpan;
    }, this);
    this.applyBusinessRulesForActiveRow(id, gridLayoutItems);
    var viewGenerator = this.Ext.create(this.getRowViewGeneratorClassName());
    viewGenerator.viewModelClass = this;
    var gridLayoutConfig = viewGenerator.generateGridLayout({
        name: this.name,
        items: gridLayoutItems
    });
    rowConfig.push(gridLayoutConfig);
}

В строку "cellConfig.enabled = ..." нужно дописать условие, для этого нужно взять информация с записи детали. Как это можно сделать?

Нравится

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

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

 

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

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

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

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

 

Коллеги из террасофт обещали с этим разобраться, но воз и ныне там. Если что обращение SR-0978724

Кажется я нашел, как боролся с данным багом.

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

 

            getGridDataColumns: function() {
                var baseGridDataColumns = this.callParent(arguments);
                var gridDataColumns = {
                    "UsrParent.Owner": {path: "UsrParent.Owner"},
                };
                return Ext.apply(baseGridDataColumns, gridDataColumns);
            },

 

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

а что значит "UsrParent"? Я вернулся к задаче, не могу понять, почему не работает? Возможно, вопросы глупые, учусь)

Vladimir,

UsrParent - это название колонки родителя, т.к если это продукт в счете, то UsrParent - будет колонка Invoice.

 

После этого бизнес правила начнут работать. И можно написать правило, что если Ответственный в счете равен текущему контакту, то сделать поле редактируемым.  Но возможно это не то, что вам требуется.

Тогда получить ответственный со страницы можно через код, обратившись в var parent = item.get("UsrParent"), а затем parent.Owner;

 

Но опять предварительно "добавить" эту колонку в таблицу, через метод getGridDataColumns

 

Но вот только куда встроить эту проверку не подскажу.

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

Cпасибо за пояснение, но у меня всё равно не работает, что колонку  связи с родителем указывал, что название схемы родителя. 



Получается, надо из детали вызвать метод getGridDataColumns в нём указать колонку: "<колонка связи с родителем>.<Необходимая колонка>": {path: "<колонка связи с родителем>.<Необходимая колонка>"}, правильно? или как-то подругому?

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

Vladimir пишет:

getGridDataColumns в нём указать колонку: "<колонка связи с родителем>.<Необходимая колонка>": {path: "<колонка связи с родителем>.<Необходимая колонка>"},

На версии 7.16.1 не работает, общались с тех. поддержкой.

Такой кейс реализовать не возможно в этой версии

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

Добрый день!

Подскажите, как можно удалить запись из GridData? Если можно с примером.

И правильно ли я понимаю, что удаление элемента из GridData не повлияет на удаление? Если влияет на БД, то как можно менять данные, которые приходят из БД, не меняя их в самой БД? Либо как можно изменить запрос, который Creatio отправляет в БД?

 

			onGridDataLoaded: function(response) {
				this.callParent(arguments);
 
				let items = response.collection.collection.items;				
 
				items.forEach(item => {
					let itemOwnerValue = item.values.Owner.value;
 
					if (itemOwnerValue !== Terrasoft.SysValue.CURRENT_USER_CONTACT.value) {		
						this.console.log(" VALUES NOT EQUAL");
					}
				});

Вместо "this.console.log(" VALUES NOT EQUAL");" хочу вставить удаление нужного элемента из DataGrid, чтобы он не отображался. 

И правильно использую метод onGridDataLoaded? Или нужно другой?

Нравится

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

Или как можно заменить набор данных в dataGrid?

 

			onGridDataLoaded: function(response) {
				this.callParent(arguments);
 
				let items = response.collection.collection.items;	
				let newItems = [];
				let newIndex = 0;
 
				items.forEach((item, index) =&gt; {
					let itemOwnerValue = item.values.Owner.value;
 
					if (itemOwnerValue === Terrasoft.SysValue.CURRENT_USER_CONTACT.value) {		
						newItems[newIndex] = items[index];
						newIndex++;
					}
				});
 
				response.collection.collection.items = newItems;
 
 
			},

 

Удалить из GridData, но не удалять из БД - т.е. скрыть от пользователя запись. По мне самый простой способ скрыть от пользователей запись раздела - настроить полномочия и отобрать у пользователей право на чтение этой записи.

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

Подскажите, какая именно стоит бизнес-задача и правильно ли ее понял Алексей и его решение вам подходит?

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

Добрый день!

Спасибо за отличное расширение Email address validation connector for Creatio.

 

Есть одно замечание - в документации указано, что нужно заполнить системную настройку [Апи-ключ для валидации email] и добавить туда именно ключ API (XXXYYYAAA...). Но так работать не будет, нужно этот ключ добавить в формате:

 

Bearer XXXYYYAAA...

 

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

 

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

Спасибо!

Нравится

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

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

Пересмотрел документацию.

Там не указано, что необходимо вписать АПИ-ключ в формате (XXXYYYAAA...).



Правильный вариант через Bearer, как Вы указали.

Подскажите, пожалуйста, где Вы нашли информацию про неправильный формат ключа?



Касательно доработки.

Тут есть два пути. Вы можете завязаться на этот пакет и унаследовать часть логики в своем пакете.

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

 

Или же Вы можете с нуля создать свою интеграцию.

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

Добрый день!

Где можно ознакомиться со списком доступных методов, их описанием?

Нравится

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

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

 

Найти информацию по разработке в Creatio можно на Академии (раздел 'Для разработчика'), также много полезной информации и ответов на разного рода вопросов по разработке можно найти здесь на community.

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

Добрый день!

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

Думал сделать через фильтр, но фильтр пользователь может убрать и увидеть все записи.

Нравится

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

Доброе утро.

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

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

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

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

Алла Савельева,

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

Роман, думаю на ваш вопрос уже ответили в посте https://community.terrasoft.ua/questions/filtr-v-metode-loadgriddata-mn…

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

Как можно обойти ограничение в 5000 записей при чтении коллекции в процессе?



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

Может, можно вообще без лимита реализовать как-то?Изображение удалено.

Нравится

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

Kalymbet Anastasia,

а как действовать в таких случаях, когда надо обработать более 5000 записей?

Владимир, добрый день!

 

 

Описанное вами поведение является корректным для базовой логики. Дело в том, что вычитка коллекции записей больше 5000 чрезмерно влияет на производительности, по этому на уровне приложения установлено ограничения по количеству одновременной обработки записей в элементе "Читать данные" в размере 5000. Больше указанного значение в настройки установить нет возможности и об этом говорит уведомление в ходе настройки процесса. 

Можно же придумать в базовой логике обрабатывать "пачками" по 5000. И быстродействие не пострадает, и лимит искусственный будет не нужен

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

В данный момент это выполнить невозможно по указанным причинам. 

Существует пожелание на увеличение данного значения. Я добавлю Ваше обращение для повышения приоритета и реализации в будущих версиях.

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

Добрый день

 

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

Нравится

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

Мы банально восстанавливали удалённые записи с помощью Insert into ... from select ...



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

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