Сортировка
кеш
данные
сохранение
загрузка
схема
Studio_Creatio
7.17

Добрый день!

Хотелось бы узнать, возможно ли отключить кеширование данных для конкретного раздела(схемы)?

Например: мне нужно сбрасывать сортировку всех столбцов после перезагрузки раздела, однако, в данный момент вся сортировка сохраняется в кеше, возможно ли как-то решить данный вопрос?

Вот пример сортировки которая должна сбрасываться при обновлении страницы:

MyFunc: function() {
	return {
              "ModifiedOn": {path: "ModifiedOn", 
                  orderPosition: 0, 
                  orderDirection: Terrasoft.OrderDirection.DESC 
              }
	};
}

Нравится

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

Это сохраняется не в кеше, а в профиле пользователя.

Сохраняет метод setColumnsProfile в GridUtilitiesV2:

 

setColumnsProfile: function(viewColumnsSettingsProfile, notSaveToProfile) {
			const profile = this.get("Profile");
			if (notSaveToProfile !== true) {
				const gridName = this.getDataGridName();
				if (profile[gridName]) {
					const profileKey = profile[gridName].key;
					Terrasoft.utils.saveUserProfile(profileKey, viewColumnsSettingsProfile, false);
				}
			}
			this.set("Profile", viewColumnsSettingsProfile);
		},

Нужно просто на схеме раздела заместить данный метод, чтобы он ничего не делал:

setColumnsProfile: Terrasoft.emptyFn

 

Это сохраняется не в кеше, а в профиле пользователя.

Сохраняет метод setColumnsProfile в GridUtilitiesV2:

 

setColumnsProfile: function(viewColumnsSettingsProfile, notSaveToProfile) {
			const profile = this.get("Profile");
			if (notSaveToProfile !== true) {
				const gridName = this.getDataGridName();
				if (profile[gridName]) {
					const profileKey = profile[gridName].key;
					Terrasoft.utils.saveUserProfile(profileKey, viewColumnsSettingsProfile, false);
				}
			}
			this.set("Profile", viewColumnsSettingsProfile);
		},

Нужно просто на схеме раздела заместить данный метод, чтобы он ничего не делал:

setColumnsProfile: Terrasoft.emptyFn

 

Владислав Литвинчук,

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

Показать все комментарии
вызов
сохранение
save
js
javascript
Sales_Creatio_team_edition
7.17

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

я знаю что есть такое на c# entity.save(false)

Мне надо нечто подобное

Нравится

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

Попробуйте 

this.save({isSilent: true});

 

Александр Тыра

не подходит(


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

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

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

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

Нравится

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

            save: function(config) {

                config = config || {};

                config.isSilent = true;

                this.callParent([config]);

            }

            save: function(config) {

                config = config || {};

                config.isSilent = true;

                this.callParent([config]);

            }

Показать все комментарии
хранилище
данные
сохранение
7.13_()
sales_enterprise

Добрый день!

Подскажите, пожалуйста, возможно ли внутри CRM создать хранилище данных (сродни сетевому диску) с общим доступом (возможность добавлять и редактировать файлы) для каждого из сотрудников?

Нравится

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

Конечно можно вам нужно переопределить механизм доступа для нужного протокола (ftp http nfs и тд) и дать права на чтение/запись, собственно ничего особо сложного нет.

Те поднять тот же ftp сервер, реализовать или подключить ftp клиента. Реализовать механизм записи получения файлов у клиентов.

Конечно можно вам нужно переопределить механизм доступа для нужного протокола (ftp http nfs и тд) и дать права на чтение/запись, собственно ничего особо сложного нет.

Те поднять тот же ftp сервер, реализовать или подключить ftp клиента. Реализовать механизм записи получения файлов у клиентов.

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

Также в маркете есть ряд дополнений, расширяющих возможности работы с файлами в разных аспектах:

Возможно, подойдёт функциональность одного из этих решений. 

 Спасибо за информацию. Расширения посмотрел, но хотелось бы обойтись "малой кровью" без существенных трат. Возможно вы знаете, можно ли создать раздел в CRM, который будет связан с хранилищем, например FTP-сервер? Как это сделать? И самое главное, каким образом туда скопировать или переместить всю необходимую информацию из вложений? 

Очевидно, возможно, раз по ссылкам подобное уже сделали. Первая реализует выгрузку, третья — работу с хранилищем по FTP. Цены там указаны, одна стоит $150 в год, вторая — $43 в год на пользователя или $64 единоразово.

Доброго дня.

Из расширений маркетплейс наиболее приглянулся по функционалу пакет от SamaraSoft (https://marketplace.terrasoft.ru/app/external-file-storage-bpmonline?_g…) - у них и с файловой системой есть работа, и с ФТП и google.disk  - пока тестируем, нашел им парочку недочетов/глюков, продолжаю тестировать дальше:) из минусов - нельзя выносить свои колонки, только преднастроенные (имя, версия, картинка хранилища).

Еще небольшой минус - массовой выгрузки в "Файловую систему" нет, но это легко лечится:) и платеж тоже только разовый...

Владислав, спасибо за оценку. Благодаря вам наш продукт становится лучше!

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

Коллеги, приветствую.

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

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

Никто не сталкивался? Также не понятно, где в логах найти подробную информацию об этой ошибке.

Нравится

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

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

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

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

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

Arthur Matyukov,

А на сервере базы данных память проверяли?

Показать все комментарии
Ревью
excel
импорт
сохранение

Часто возникает задача загрузки данных определенной структуры в таблицы bpm'online.Решить эту задачу можно с помощью функциональности импорта из MS Excel, однако, в системе нет возможности настроить этот импорт единоразово и предоставить пользователям нужный доступ . Возможность сохранения настроек импорта в определенном разделе решила бы эту проблему. Сейчас, к сожалению, приходится извращаться

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

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

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

Показать все комментарии
7.4
карточка
сохранение
сохранить
Технические вопросы
7.x

Здравствуйте!
Стоит задача сохранить карточку детали без выхода из неё. Также обязательным условием является выполнение событий обработки обновления записи, описанной в объекте. (Событие SxMyObjUpdating)

this.save(), this.saveEntity(function () {}); - Событие Udpating отрабатывает, но сразу закрывается карточка

this.saveEntity() - В Событие Updating не попадает + результат:

 Uncaught TypeError: Cannot read property 'call' of undefined
core.js:466 user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647
 file: http://pashchenko:7400/0/core/5bd338b22650c32496b5ec4322b7b2eb/combined/... line: 618
 message: Uncaught TypeError: Cannot read property 'call' of undefined
 date: Mon Feb 02 2015 18:19:25 GMT+0300 (Саудовское время (зима))

Как можно решить данную проблему?

Нравится

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

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

Здравствуйте, Александр!
Чтобы понимать, что происходит при вызове методов всегда смотрите исходники. Например, метод save() определен в "BasePageV2", выглядит следующим образом:

save: function(config) {
		this.showBodyMask();
		Terrasoft.chain(
			this.saveCheckCanEditRight,
			this.saveAsyncValidate,
			this.saveEntityInChain,
			function(next) {
				this.saveDetails(function(response) {
					if (this.validateResponse(response)) {
						next();
					}
				}, this);
			},
			function() {
				this.onSaved(this.cardSaveResponse, config);
				this.cardSaveResponse = null;
				delete this.cardSaveResponse;
			},
			this);
	},

Здесь нет переходов в другие разделы, значит нужно смотреть в методы, вызываемые внутри save(). Смотрим метод onSaved() и видим, что карточку можно сохранит в "тихом" режиме, тогда она закрываться не будет и не будет публиковаться сообщение "UpdateDetail", если в объекте config свойство isSilent имеет значение true:

				onSaved: function(response, config) {
					this.hideBodyMask();
					if (!this.get("NextPrcElReady")) {
						this.set("NextPrcElReady", response.nextPrcElReady);
					}
					if (config && config.isSilent) {
						this.onSilentSaved(response, config);
					} else {
........

А config, соответсвенно, берется из save(config).
Итого, нужно сохранять запись следующим образом:

this.save({isSilent:true});

Андрей, спасибо за подсказку.
Действительно так работает. Я так тоже пробовал, но оказалось, что из-за открытого дебаггера не скрывалась кнопка "Сохранить", что ввело в заблуждение.

Показать все комментарии
7.3
сохранение
Технические вопросы
7.x

Здравствуйте.
Нужно в коде JS при первом сохранении записи выполнить определенные действия.
Как можно реализовать подобную задачу?

Нравится

2 комментария
          var cardState = this.sandbox.publish("GetCardState", null, [this.sandbox.id]);
          var isNewRecord = (cardState.state === ConfigurationEnums.CardStateV2.ADD ||
                        cardState.state === ConfigurationEnums.CardStateV2.COPY);

или

var isNewRecord = this.cardAction === 'add' || this.cardAction === 'copy';

Спасибо, работает.

Показать все комментарии
восстановление
десериализация
сериализация
сохранение
Технические вопросы
Разработка

Здравствуйте.
У меня два вопроса.
1. Где можно посмотреть внятную помощь по вопросу Сериализации/десериализации данных в террасофте? На форуме не нашел. В файле с SDK - только пара слов: "Serialize/deserialize() - метод сохранения/восстановления объекта". А как пользоваться - не описано.

2. Как следствие, у меня возникает ошибка при попытке десериализации:

var XMLStorage = GetNewXMLStorage();
XMLStorage.InitRootNode('FiltersBuilderRootNode');
fbcFilters.FiltersBuilder.RootItems.Serialize(XMLStorage.RootNode);
FilterText = XMLStorage.Text; // тут все нормально

// теперь десериализуем. Пишем всё тоже, что и выше только теперь:
// А вот тут вдруг ни с того ни с сего ошибка "parse Error!":
XMLStorage.Text = FilterText;

Почему? Как это исправить?

Нравится

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

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

Хороший пример реализации хранения данных в профиле можно посмотреть в скрипте wnd_PlanningViewPeriodTreeScript в функциях SavePeriodTreeToProfile() и LoadPeriodTreeFromProfile().

Спасибо, Дмитрий, но у меня, к сожалению, такого скрипта нету. Версия софта - 3.2.0.87

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

Скопирую сюда:

function SavePeriodTreeToProfile() {
	if (!PlanningViewPeriodTree.Planning) {
		return;
	}
 
	var XMLStorage = GetNewXMLStorage();
	var Node;
	var Today = new Date;
	var Data;
 
	XMLStorage.Clear();
	XMLStorage.InitRootNode('PeriodTree');
	Node = XMLStorage.RootNode;
	Node.SetAttributeAsInt('BeginYear', PlanningViewPeriodTree.BeginYear, 
		Today.getFullYear());
	Node.SetAttributeAsInt('EndYear', PlanningViewPeriodTree.EndYear, 
		Today.getFullYear());
	Node.SetAttributeAsStr('Period', PlanningViewPeriodTree.Planning.Period, 
		'');
	Node.SetAttributeAsBool('IsRefreshManually', cbRefreshManually.IsChecked, 
		false);
 
	Data = DatasetToMime(dlData.Dataset);
	Node.SetAttributeAsStr('Dataset', Data, '');
 
	var Key = PlanningViewPeriodTree.Planning.ID;
	Key = '_PeriodTree_' + Key.replace(/[{}-]/g, '');
	Services.SaveItemProfileStorage(Self.USI, Key, XMLStorage);
}
function LoadPeriodTreeFromProfile() {
	if (!PlanningViewPeriodTree.Planning) {
		return false;
	}
 
	var XMLStorage;
	var Node;
	var Today = new Date;
	var Data;
 
	var Key = PlanningViewPeriodTree.Planning.ID;
	Key = '_PeriodTree_' + Key.replace(/[{}-]/g, '');
	XMLStorage = Services.GetItemProfileStorage(Self.USI, Key);
	if (!XMLStorage) {
		return false;
	}
	XMLStorage.InitRootNode('PeriodTree');
	Node = XMLStorage.RootNode;
	PlanningViewPeriodTree.BeginYear = Node.GetAttributeAsInt('BeginYear', 
		Today.getYear());
	PlanningViewPeriodTree.EndYear = Node.GetAttributeAsInt('EndYear', 
		Today.getYear());
	edtFromYear.Value = PlanningViewPeriodTree.BeginYear;
	edtToYear.Value = PlanningViewPeriodTree.EndYear;
	cbRefreshManually.IsChecked = Node.GetAttributeAsBool('IsRefreshManually', 
		false);
 
	var Period = Node.GetAttributeAsStr('Period', '');
	if (IsEmptyGUID(Period) || 
		(Period != PlanningViewPeriodTree.Planning.Period)) {
		return false;
	}
	Data = Node.GetAttributeAsStr('Dataset', '');
	if (Data == '') {
		return false;
	}
 
	var Dataset = dlData.Dataset;
	if (!MimeToDataset(Dataset, Data)) {
		return false;
	}
	Dataset.Attributes('Filled') = true;
	ExpandTree();
	return true;
}

Спасибо ещё раз. Посмотрел. Не всё, конечно, понятно, но разобрался с тем, что хотел :)

Показать все комментарии
задачи
ответственным
сохранение
только
Скрипты
Разработка

Подскажите как доработать приведенный ниже пример, из темы https://community.terrasoft.ua/forum/topic/3864:

Например, чтобы задачу по БП мог выполнить ответсвенный, можете добавить следующую проверку (на кнопку ОК):
if (WorkflowItemID != null)
     {
     if (Connector.CurrentUser.ContactID != OwnerID)
          {
                ShowInformationDialog('Вы не можете изменить состояние задачи!');
          return;
    }
     }

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

Нравится

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

Можно сделать поле объекта TaskEdit, на OnPrepare в него записывать false, а на DataChange - true. А при сохранении карточки проверять это поле. Если false - ничего не менялось, проверку не делаем.

Благодарю Александр!
Ваш совет опробовал, все работает. Но хотелось бы все таки другого результата:
В данной ситуации получается, если пользователь сделал изменения (н/п: пользователь не заметил что не он ответственный) и вернул все обратно, то система не дает сохранить задачу, т.к. произведены изменения и системе все равно что по факту изменений в данных не произошло.
Подскажите как избежать такую ситуацию?

В таком случае стоит на OnPrepare сохранить старые значения полей карточки в поля объекта, а в обработчике OK сравнить каждое поле объекта с карточкой. Для оптимизации полную проверку полей можно делать только в тех случаях, если на DataChange установили значение true.

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