Показать сообщение отдельно
Старый 03.12.2008, 13:25   #1  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 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 (под анонимом, к сожалению, войти невозможно);
- очевидно, что можно улучшить представления списков сущностей и полей в выпадающих списках, как минимум, установив сортировку по имени, а как максимум - отображая не системное имя, а принятое имя сущности/поля на локальном язые;
- очевидно, что нужно сделать возможность апдейта существующих записей из таблицы эксель;
- очевидно, что можно поиграться с алгоритмом сопоставления полей, а также связанных сущностей;
- весьма очевидно, что дизигн сделан на коленке и реально убог;
- ещё можно добавить возможность редактирования значений в уже загруженной таблице прямо в гриде.
Короче, стафф работает, но его ещё можно улучшить.
И галвное: кому нужны исходники - могу предоставить абсолютно безвозмездно (даже благодарить в форуме необязательно).
Миниатюры
Нажмите на изображение для увеличения
Название: BaseForm.JPG
Просмотров: 575
Размер:	77.9 Кб
ID:	4018   Нажмите на изображение для увеличения
Название: LoadedForm.JPG
Просмотров: 567
Размер:	80.0 Кб
ID:	4019  

Нажмите на изображение для увеличения
Название: MergingForm.JPG
Просмотров: 437
Размер:	80.8 Кб
ID:	4020   Нажмите на изображение для увеличения
Название: CompareForm.JPG
Просмотров: 570
Размер:	69.8 Кб
ID:	4021  

__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков!
За это сообщение автора поблагодарили: GLU (1), Bondonello (1), riv76 (1), echo_igor (1), absurdperson (1).