03.12.2008, 13:25 | #1 |
Заноза в заднице
|
Личная разработка - средство импорта данных в базу CRM из файла Excel
Предыстория:
потребовалось влить много данных, которые раньше систематизировались токмо в табличках Excel и немножко - Access. Собсна, добавил нужные сущности, обратился к процедуре импорта. Проковырялся со стандартной импортовой процедурой пару рабочих дней, так и не залив ни строчки. Почесал малось репу и за четыре с половиной дня сговнякал собственный стафф для импорта. Имеем: 1. Такую себе aspx-страничку, которая нормально сайзится вширь и при открытии выглядит так как в скриншоте BaseForm/ 2. Дальше начинаем действовать: - browse'им файл для загрузки - обязательно файл Excel, форматов: *.xls; *.xlsx (можно буит и другие форматы попробовать как-нить); - задаем название вкладки, с которой будет зачитана таблица с данными, хотя и не обязательно, если вкладка в Вашем файле всего одна; - задаем количество заполненых строк. Здесь задавать нужно явно, поскольку, если использовать значения по умолчанию, либо же сначала вычислять количество заполненых строк - то алгоритм нереально тупит. Ну и потом: для пробы, и если источник очень большой - вы вполне можете попробовать, как загрузятся три-четыре строки, прежде чем загружать все строки; - задаем количество столбцов. Тут как со строками: лучше задать один раз, чем полениться и ждать, пока тубые службы Excel обработают весь документ целиком; После того, как ввели данные в поля - жмем кнопку "Загрузить", которая загружает в кэш ячейки таблицы Excel и сигнализирует об этом, формируя нередактируемый грид в ниэней части формы, а также добавляя имя загруженного файла в соответствующее поле, как на рисунке LoadedForm. 3. После того, как таблица загружена - необходимо выбрать, какую же сущность системы нужно заполнить записями. Для этого, выбираем сущность из выпадающего списка в поле "Сущность CRM" и жмем кнопку "Сопоставить". После нажатия кнопки "Сопоставить", система пытается сопоставить название колонок таблицы Excel, с именами (label) полей выбранной сущности. Если сопоставление происходит удачно, то в последствии вам придется меньше работать вручную, чтобы задать поля, в которые нужно загружать данные из столбцов. На рисунке MergingForm можно увидеть выпадающий список сущностей и поля для сопоставления полей. 4. Далее следует самая геморная часть работы: нужно сопоставить вручную поля сущности, с колонками таблицы, которые не были сопоставлены автоматически. Для этого, после выбора сущности и автосопоставления возникает ряд полей по числу, равный количеству столбцов загруженной таблицы. В каждом из полей, необходимо выбрать из выпадающего списка наименование атрибута сущности, в который будут записаны данные. Эту часть смотрите на картинке CompareForm. 5. Ну и после сопоставления колонок с атрибутами, можете нажимать кнопку "Загрузить в CRM" после нажатия которой элементы выбранной сущности появятся в системе. Итоги: - записи создаются, совершенно точно и весьма быстро. У меня была таблица из где-то тысячи строк, которая загрузилась за одно моргание глаза. Более точно производительность я не подсчитывал; - алгоритм не предназначен (пока) для апдейта существующих записей, хотя дубликаты создавать не позволяет; - весьма четко и внятно по названию, определяются значения lookup и picklist полей. То есть: у вас есть поле, которое связано отношением N:1 с элементом организации. Вы пишете в ячейке таблицы имя организации, загружаете, а остальное уже (поиск элемента организации по имени, подстановка данных в лукап-поле текущей сущности) форма делает сама. Не имеет значения, какой тип связанного лукап-поля,- форма сама определит этот тип, отыщет нужный элемент и выполнит связку. То же с пиклистами: если такое название значения пиклиста есть - оно будет подставлено. В этом смысле есть недостаток: названия в ячейках исходной таблицы и названия элементов связанных сущностей должны совпадать точно; - к данной форме имеется форма настроек, в которой Вы указываете параметры: сервера CRM, организации, имени пользователя и пароль для входа на сервер CRM (под анонимом, к сожалению, войти невозможно); - очевидно, что можно улучшить представления списков сущностей и полей в выпадающих списках, как минимум, установив сортировку по имени, а как максимум - отображая не системное имя, а принятое имя сущности/поля на локальном язые; - очевидно, что нужно сделать возможность апдейта существующих записей из таблицы эксель; - очевидно, что можно поиграться с алгоритмом сопоставления полей, а также связанных сущностей; - весьма очевидно, что дизигн сделан на коленке и реально убог; - ещё можно добавить возможность редактирования значений в уже загруженной таблице прямо в гриде. Короче, стафф работает, но его ещё можно улучшить. И галвное: кому нужны исходники - могу предоставить абсолютно безвозмездно (даже благодарить в форуме необязательно).
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
|
За это сообщение автора поблагодарили: GLU (1), Bondonello (1), riv76 (1), echo_igor (1), absurdperson (1). |
|
|