Здравствуйте.
Есть базовый функционал импорта из 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
}