Нет слов.
Ребята, у которых сайты on-cloud версий от 7.17.0.
Проверьте журналы процессов на наличие и отработку процессов "Application update notification" и "Marketplace Creatio WebService". Они пришли с пакетом "MkpNotifications" автоматически, без его установки вручную.

Данный пакет предлагается юзерам на маркетплейсе: https://marketplace.terrasoft.ru/app/marketplace-notification-applicati…

 

Обнаружили пакет сегодня, и уже за пол дня текущей даты накопилось 300 экземпляров процесса, 150 из которых висят в состоянии "Выполняется" и не доходят до конца: https://prnt.sc/wszuyl

 

Какие продукты затронуты - точно не известно. Наблюдаем пока на Sales Enterprise + Servise Enterprise.

Проверяйте, т.к. база засоряется на раз-два-три.

Нравится

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

Версия какая? Данную проблему замечал на 7.17.0 не только с этим процессом, на 7.16.4 такого нет

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

Добрый день.

При компиляции возникла ошибка, связанная с дополнениями Marketplace 
https://marketplace.terrasoft.ru/app/advanced-excel-reports-creatio
https://marketplace.terrasoft.ru/app/excel-reports-builder-creatio 

Появилось после обновления на версию 7.17.1

Скрин ошибки: https://prnt.sc/woldew

 

Нравится

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

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

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

Добрый день, какое свойство отвечает за сохранение с игнорированием обязательных полей на js
я знаю что есть такое на c# entity.save(false)
Мне надо нечто подобное

Нравится

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

Попробуйте 

this.save({isSilent: true});

 

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

Мне с удаленного сервера  приходит файл, который я хочу сохранить в creatio, каким образом это реализовать и куда сохранять, когда получу его?

Нравится

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

Дмитрий, где именно Вы хотите это выполнять?

Если извне, то есть стандартный FileApiService, примеры работы с ним см. тут. Перед этим нужно ещё выполнить авторизацию.

 

Если же Вы хотите это делать это в серверной логике 7.Х, то нужно делать примерно то, что делается внутри этого сервиса, писать данные в поле Data записи о файле в таблице ...File от нужного раздела. См. пояснение в комментарии тут

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

Каким образом можно динамически устанавливать интервалы для виджета "Шкала" на странице? 
Например, в зависимости от клиента (его предыдущей истории покупок) должны рассчитываться его интервалы (красный, желтый, зелёный)

Нравится

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

Владимир, существующая реализация компонента Gauge отображает изменения только цифры в центре, а 4 других параметра, означающие границы цветов, задаются в настройках и хранятся в json-конфиге в SysDashboard:

   "Gauge":{
      "parameters":{
         "caption":"Closed cases",
         "entitySchemaName":"Case",
         "filterData":"{\"className\":\"Terrasoft.FilterGroup\",\"items\":{\"12f77c73-1263-4d79-b397-8f55e2f8653e\":{\"className\":\"Terrasoft.CompareFilter\",\"filterType\":1,\"comparisonType\":3,\"isEnabled\":true,\"trimDateTimeParameterToDate\":false,\"leftExpression\":{\"className\":\"Terrasoft.ColumnExpression\",\"expressionType\":0,\"columnPath\":\"Status.IsFinal\"},\"isAggregative\":false,\"key\":\"12f77c73-1263-4d79-b397-8f55e2f8653e\",\"dataValueType\":12,\"leftExpressionCaption\":\"Status.Status is final\",\"rightExpression\":{\"className\":\"Terrasoft.ParameterExpression\",\"expressionType\":2,\"parameter\":{\"className\":\"Terrasoft.Parameter\",\"dataValueType\":12,\"value\":true}}}},\"logicalOperation\":0,\"isEnabled\":true,\"filterType\":6,\"rootSchemaName\":\"Case\",\"key\":\"\"}",
         "aggregationType":1,
         "style":"widget-navy",
         "orderDirection":1,
         "min":0,
         "middleFrom":5,
         "middleTo":8,
         "max":10
      },
      "widgetType":"Gauge"
   }

А в GaugeDashboardItemData с ними работают:

 

		/// <summary>
		/// Returns data for indicator dashboard item.
		/// </summary>
		public override JObject GetJson() {
			JObject itemObject = base.GetJson();
			CopyProperties(itemObject);
			if (string.IsNullOrEmpty(GetSchemaName())) {
				return itemObject;
			}
			GaugeDashboardItemSelectBuilder selectBuilder = GetSelectBuilder();
			object value = GetData(selectBuilder);
			itemObject["dataValueType"] = selectBuilder.ColumnDataValueType;
			itemObject.Add(new JProperty("data", value));
			itemObject["min"] = Parameters.Value<int?>("min");
			itemObject["middleFrom"] = Parameters.Value<int?>("middleFrom");
			itemObject["middleTo"] = Parameters.Value<int?>("middleTo");
			itemObject["max"] = Parameters.Value<int?>("max");
			itemObject["orderDirection"] = Parameters.Value<int?>("orderDirection");
			return itemObject;
		}

То есть Вам надо будет делать свои аналоги GaugeDashboardItemData, GaugeModule (отображение в итогах), GaugeDesigner (окно настроек), где с ними работают, Возможно, понадобится ещё что-то изменить или просто скопировать с другим названием GaugeChartJsConfigBuilder.

node button icon

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

Приветы, PostgreSQL 7.17.0.2164, есть следующая ошибка. 

Error occurred when saving: 23503: insert or update on table "SysLocalizableValue" violates foreign key constraint "FKYru8eiQRBeFoEfawvRwKSlCy2o"

 

Случается при попытке сохранить чистый БП с одним элементом Читать/Добавить данные (кроме начального и конечного). При элементе типа скрипт - всё ок. Сохранение естественно не происходит.

Что интересно этот вторичный ключ относиться к Culture. 

 

Как быть? 

Нравится

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

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

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

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

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

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

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

Нравится

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

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

Можно развить дальше и сделать отдельную кнопку для запуска процесса.

Алексей Следь,

мне надо что бы все 100+ полей копировались одной коллекцией, добавлять вручную такое мне не особо по душе

Dima Avdoshin,

Не понял. Один раз настроить в БП элемент добавить данные и все. Все 100+ полей будут копировать автоматически при создании новой записи. Если сложно настроить элемент добавить данные, то можно все сделать добавление данных скриптом в том же процессе. Можно через InsertSelect

Алексей Следь,

InsertSelect не вызвет событийную модель, что не есть хорошо.

Dima Avdoshin,

Как вариант можно заместить логику нажатия по плюсу на детале.

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

А все колонки из родительской скопирует базовая логика системы:
В режиме копирования система сама копирует значения всех полей, которые на объекте отмечены признаком "Копировать".

Владислав Литвинчук пишет:
InsertSelect не вызвет событийную модель, что не есть хорошо.

Если проблема только в этом, можно создавать Entity, наполнять её поля и затем вызывать Save. Или, как изначально предложили, средствами стандартных элементов БП для работы с данными.

 

По изначальному вопросу темы:

Вы хотите копировать из одноимённых полей одного объекта в другой?

А то, если просто создать копию записи, то в реестре есть кнопка копирования записи, при нажатии на неё создаётся новая запись с заполненными полями, у которых в объекте включена галка «Копировать данные при копировании записи».

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

то в реестре есть кнопка копирования записи, при нажатии на неё создаётся новая запись с заполненными полями, у которых в объекте включена галка «Копировать данные при копировании записи».
Да именно это мне нужно, каким образом я могу вызвать ее программно?

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

можно пример пожалуйста

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

row = dataSource.Rows[0].Clone() as Terrasoft.Core.Entities.Entity;
Guid currentUserContactId = Page.UserConnection.CurrentUser.ContactId;
EntityPrimaryColumnValue = Guid.NewGuid();
row.SetColumnValue(primaryColumnName, EntityPrimaryColumnValue);
row.SetColumnValue("CreatedOn", DateTime.Now);
row.SetColumnValue("CreatedById", currentUserContactId);
row.SetColumnValue("ModifiedOn", DateTime.Now);
row.SetColumnValue("ModifiedById", currentUserContactId);
var columnNames = new List<string>();
foreach (var column in row.Schema.Columns) {
	if (column.HasDefValue && 
		((column.IsLookupType || column.IsMultiLookupType) &&
		column.ReferenceSchema.PrimaryDisplayColumn != null) &&
		!columnNames.Contains(column.Name)) {
		columnNames.Add(column.Name);
	}
}
row.LoadLookupDisplayValues(columnNames);
dataSource.Insert(row);

У объекта Entity есть метод .Clone() (или вызываемый им же конструктор Entity(Entity source)). Запускаем его, получаем новый объект в памяти. При необходимости заполняем текущими датой и пользователем стандартные 4 поля, затем те поля, значения которых в Вашей логике нужно поменять относительно образца. Все остальные поля, у которых в дизайнере есть галочка, скопировались автоматически. Id, естественно, будет уже новый.

Цикл из примера не нужен, ведь поля для отображения справочников нас сейчас не интересуют. И в конце запускаем у своего Entity метод .Save(), чтобы эта запись из памяти попала в базу. Кажется, ничего не упустил.

 

Но это всё на уровне C#-скрипта в процессе. Если надо в JS-логике, подобно кнопке копирования, нужно смотреть, как она устроена.

 

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

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

При установке приложения Data binding tool for Creatio на 7.17.1 выходит ошибка:

2021-01-12 16:19:07,505 При компиляции конфигурационной библиотеки возникли ошибки и (или) предупреждения
2021-01-12 16:19:07,545 Autogenerated\Src\GlbDataBindingHelper.GlbDataBinding.cs(323,47) ошибка CS0246: The type or namespace name 'EntityDataSource' could not be found (are you missing a using directive or an assembly reference?)

 

Нравится

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

Ещё и при его использовании в 7.17 появляются ошибки, которые в итоге открывают старые формы привязки данных 

Алексей, Владимир,

 

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

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

Можно ли каким-то образом не создавать новые значения справочников при импорте данных?

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

Нравится

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

Доброе утро, Владимир!

 

Есть такой, не до конца протестированный, вариант:

- забрать права доступа на операцию "Создание" для юзеров/ролей в объекте "Справочник": https://prnt.sc/wljjrd. Это относится только к справочникам, т.е. тем объектам у кого родителем является "Базовый справочник". Ни поле "Контакт", ни "Контрагент" под эти правила уже не подойдут.

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

 

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

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

 

Также в стандартном механизме уже предусмотрено отсеивание некоторых случаев ошибочного добавления:

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

В файле импорта указан тип контакта “клиент”.
В справочнике [ Типы контактов ] содержится значение “Клиент”.

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

В файле импорта указан тип контакта “«Клиент»”.
В справочнике [ Типы контактов ] содержится значение “Клиент”.

В данном примере в результате импорта в справочник будет добавлена новая запись.

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

А как насчёт чистки данных перед импортом?) 

Или после, уже в базе. Или в момент, созданием своего специализированного механизма импорта, учитывающего все специальные случаи. До определённой версии была возможность запустить старое окно импорта с большим числом настроек, но в современных, где нет логики на основе 5.Х, такого, видимо, не выйдет.

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

надо сделать нормализацию телефонного номера в стандартный формат для

- текущей базы телефонов

- для новых добавляемых телефонов

как это грамотно сделать?

Нравится

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

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

Алексей - а как сделать для текущей БД без прямого исправления БД?

Например, написанием и единоразовым ручным запукском БП, который это делает в скрипте или ещё как-то.

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