Здравствуйте.
Есть базовый функционал импорта из Excel который при каждом импорте запрашивает связку полей Excel документа и полей таблицы куда идет импорт.
Можно ли сделать преднастройку связывания данных при импорте из Excel, что бы каждый раз не приходилось делать одни и те же настройки?
Нравится
Посмотри пример добавления вложений в письмо 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 }