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

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

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

 

Нравится

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

Посмотри пример добавления вложений в письмо EmailMessagePublisherPage

define("EmailMessagePublisherPage", ["EmailMessagePublisherPageResources", "LookupUtilities", "EmailImageMixin",
		 "ConfigurationConstants", "MaskHelper", "ExchangeNUIConstants", "EmailActionsMixin", "MacrosUtilities",
		"ExtendedHtmlEditModuleUtilities", "ExtendedHtmlEditModule", "MessagePublisherAttachmentUtilities",
		"MacrosHelperServiceRequest", "EntityResponseValidationMixin", "css!HtmlEditModule",
		"css!EmailMessagePublisherModule"],
		function(resources, LookupUtilities, EmailImageMixin, ConfigurationConstants, MaskHelper, ExchangeNUIConstants) {
			return {
				entitySchemaName: "Activity",
 
{
	"operation": "insert",
	"name": "AttachFileButton",
	"propertyName": "items",
	"parentName": "PublisherBottomContainer",
	"values": {
		"itemType": this.Terrasoft.ViewItemType.BUTTON,
		"style": this.Terrasoft.controls.ButtonEnums.style.DEFAULT,
		"iconAlign": this.Terrasoft.controls.ButtonEnums.iconAlign.LEFT,
		"imageConfig": {
			"bindTo": "getAttachFileButtonImageConfig"
		},
		"tag": "attachFileButton",
		"fileUpload": true,
		"filesSelected": {"bindTo": "onAttachFileSelected"},
		"enabled": {
			"bindTo": "IsPublishButtonEnabled"
		},
		"click": {
			"bindTo": "onAttachFileButtonClick"
		},
 

В MessagePublisherAttachmentUtilities в методе onAttachFileSelected выполняется загрузка файла а метод onComplete вызывается после окончания загрузки вот туда можно вставить вызов твоего сервиса по импорту данных и передать ему fileId загруженного файла.

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

 

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

Почти 2 года назад озвучивала здесь это пожелание Возможность сохранения настроек импорта из Microsoft Excel. Но из-за того, что потребность в данной функциональности у пользователей bpm'online crm низкая, она до сих пор не реализована.

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

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

Если вы часто выполняете импорт может стоить подумать о других механизмах а не Экселе. Импорт из экселя задумывался для разового переноса/наполнения системы. Использование его оправадано если данных сравнительно немного и их вручную нужно просматривать/фильтровать менять.

Если вы постоянно выполняете обновления то можно использовать интеграции с вэб сервисами или инструменты интеграции на уровне БД (Например на основе мастера экспорта импорта MSSQL Managment Studio можно создать свой пакет сохранив туда все настройки и использовать его для автоматизации процесса переноса записей)

 

Григорий Чех,

Импорт с Экселя оправдан т.к. данные вносятся туда вручную и их не так уж и много. 

Что было бы лучше? 1. Копаться в базовом импорте с Эксель и пробовать через этот способ сделать. 2. Сделать программу которая импортировала данны прямо в БД, но тогда мне неизвестно будет ли отрабатываться процессы на уровне Entity. 3. Сделать все как в 2 пункте только в БД специально созданной для этого случая и потом как-то синхронизировать её(эту БД) с bpmonline.

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

Идею поддержал.

По поводу своего преднастроенного импорта. Если делать его через отдельную программу на C# , то будет ли срабатывать событийные процессы на уровне Entity?

Андреев Андрей Сергеевич,

Я бы написал свой БП или лучше сервис для импорта данных в bpm. Чтобы срабатывали событийные процессы для вставки данных используй esq

Как то так

var _caseFile = new Terrasoft.Configuration.CaseFile(UserConnection);
    _caseFile.SetDefColumnValues();
    _caseFile.SetColumnValue("Name", url);
    _caseFile.SetColumnValue("TypeId", FileConsts.LinkTypeUId);
    _caseFile.Save();

 

Григорий Чех,

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

ServiceHelper.callService(config);

Что-бы там его получить и уже как-то занести в БД?

Посмотри пример добавления вложений в письмо EmailMessagePublisherPage

define("EmailMessagePublisherPage", ["EmailMessagePublisherPageResources", "LookupUtilities", "EmailImageMixin",
		 "ConfigurationConstants", "MaskHelper", "ExchangeNUIConstants", "EmailActionsMixin", "MacrosUtilities",
		"ExtendedHtmlEditModuleUtilities", "ExtendedHtmlEditModule", "MessagePublisherAttachmentUtilities",
		"MacrosHelperServiceRequest", "EntityResponseValidationMixin", "css!HtmlEditModule",
		"css!EmailMessagePublisherModule"],
		function(resources, LookupUtilities, EmailImageMixin, ConfigurationConstants, MaskHelper, ExchangeNUIConstants) {
			return {
				entitySchemaName: "Activity",
 
{
	"operation": "insert",
	"name": "AttachFileButton",
	"propertyName": "items",
	"parentName": "PublisherBottomContainer",
	"values": {
		"itemType": this.Terrasoft.ViewItemType.BUTTON,
		"style": this.Terrasoft.controls.ButtonEnums.style.DEFAULT,
		"iconAlign": this.Terrasoft.controls.ButtonEnums.iconAlign.LEFT,
		"imageConfig": {
			"bindTo": "getAttachFileButtonImageConfig"
		},
		"tag": "attachFileButton",
		"fileUpload": true,
		"filesSelected": {"bindTo": "onAttachFileSelected"},
		"enabled": {
			"bindTo": "IsPublishButtonEnabled"
		},
		"click": {
			"bindTo": "onAttachFileButtonClick"
		},
 

В MessagePublisherAttachmentUtilities в методе onAttachFileSelected выполняется загрузка файла а метод onComplete вызывается после окончания загрузки вот туда можно вставить вызов твоего сервиса по импорту данных и передать ему fileId загруженного файла.

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

 

Еще проще по нажатию кнопки вызвать

selectFile(event) {
    event.preventDefault();
 
    file_input = document.createElement('input');
    file_input.addEventListener("change", uploadFile, false);
    file_input.type = 'file';
    file_input.click();
},
 
uploadFile() {
    //отправка file_input.files[0]) например используя  XMLHttpRequest post
}

 

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