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). |
03.12.2008, 13:52 | #2 |
Moderator
|
Ничего-так. Даже в фирменном стиле!
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
03.12.2008, 14:01 | #3 |
Заноза в заднице
|
2 Артем Enot Грунин: только вот грид не в фирменном совсем. Заморачиваться было лень с ним.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
03.12.2008, 14:26 | #4 |
Moderator
|
Да, жаль что с нами не поделились классами интерфейса и стилями. Было бы куда более удобно дорабатывать систему... Вы не пробовали отнаследоваться от каких-нибудь серверных библиотек, например Microsoft.Crm.Application.Pages.dll? Мне интересно, можно ли воспользоваться готовыми решениями или в них делается некая проверка на вшивость?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
03.12.2008, 17:24 | #5 |
Kostya Afendikov
|
Смотрится многообещающе, а продукты залить получится?
Можно взглянуть на сорцы? k.afendikov[at]gmail.com И еще: с 3кой работает? |
|
03.12.2008, 17:56 | #6 |
Заноза в заднице
|
Работает только с 4-кой. Но ежели, взглянете на сорцы, которыя я облизательно выложу - то думаю, ничего нет стремного в том, чтобы переложить это дело на третьи веб-службы.
По-чеснаку: продукты заливать просто не приходилось, но логика вроде не отличает особо объекты друг от друга, просто тянет из метаданных параметры и соответствующим образом их обрабатывает.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
03.12.2008, 17:59 | #7 |
Заноза в заднице
|
2 Артем Enot Грунин: поделюсь, поделюсь, не переживайте. Тока там я классы и стили использую прям в коде aspx-странички. Реально говорю: такое наколенное что-то сделал, которому до нормального решения ещё плыть и плыть.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
03.12.2008, 21:02 | #8 |
Moderator
|
Да я не про вас, я про Microsoft. Обидно, что с нами не поделились классами - компонентами интерфейса. Было бы очень удобно "без швов" встраивать свои приложения в систему.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
04.12.2008, 11:11 | #9 |
CRM
|
Работу с Excel я иногда провожу с помощью OleDB. Во-1, не надо установки офиса. Во-2, глюков на больших объемах записей не замечено. Решается проблема с количеством строк и столбцов
__________________
MS CRM 3.0/4.0 Sharepoint 2003, MOSS 2007/2010 |
|
05.12.2008, 13:39 | #10 |
Участник
|
Очень хочется взглянуть на исходники ибо мне тоже предстоит как то решать задачу импорта. Буду очень благодарен если пришлете на мыло.
|
|
10.12.2008, 12:20 | #11 |
Kostya Afendikov
|
Дело застопорилось как-то...
|
|
10.12.2008, 15:33 | #12 |
Заноза в заднице
|
Сорри, народ... Нет времени всё...
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
|
За это сообщение автора поблагодарили: Bakai Madybaev (1). |
10.12.2008, 17:27 | #13 |
Чайный пьяница
|
Я в теме. Держите в курсе. Загрузка на работе, конечно, солидная, но такой тул сделать - великое дело.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
11.12.2008, 23:24 | #14 |
Заноза в заднице
|
Там блин, не только тул, но и форма настроек. Да и ещё плюс масса всего уже прицеплено - время нужно, чтобы всё выцедить. Занимаюсь вопросом.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
12.12.2008, 17:19 | #15 |
Участник
|
я тоже в теме, хочю исходники, автору респект!
|
|
12.12.2008, 17:32 | #16 |
Участник
|
под каждым сообщением есть ссылка "Поблагодарить автора сообщения".
Поблагодарив вы получаете двойной эффект: 1. у автора действительно повышается респекты 2. поиск сможет отдавать предпочтения сообщениям, которые отблагодарили другие и сможет показывать полезные в начале списка. |
|
15.12.2008, 22:06 | #17 |
Участник
|
Цитата:
Сообщение от Likefire
Предыстория:
потребовалось влить много данных, которые раньше систематизировались токмо в табличках 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 (под анонимом, к сожалению, войти невозможно); - очевидно, что можно улучшить представления списков сущностей и полей в выпадающих списках, как минимум, установив сортировку по имени, а как максимум - отображая не системное имя, а принятое имя сущности/поля на локальном язые; - очевидно, что нужно сделать возможность апдейта существующих записей из таблицы эксель; - очевидно, что можно поиграться с алгоритмом сопоставления полей, а также связанных сущностей; - весьма очевидно, что дизигн сделан на коленке и реально убог; - ещё можно добавить возможность редактирования значений в уже загруженной таблице прямо в гриде. Короче, стафф работает, но его ещё можно улучшить. И галвное: кому нужны исходники - могу предоставить абсолютно безвозмездно (даже благодарить в форуме необязательно). |
|
|
За это сообщение автора поблагодарили: Likefire (1). |
16.12.2008, 11:27 | #18 |
Учаснег
|
Цитата:
Сори за флуд
__________________
http://about.me/fedorovigor |
|
16.12.2008, 12:17 | #19 |
Участник
|
А чем Data Migration Framework не устроил? зачем было огород городить?)
|
|
16.12.2008, 12:42 | #20 |
Заноза в заднице
|
2 Aleck: огород надо было городить, чтобы Ваше любопытство вызвать. Вы пробовали пользоваться стандартными утилитами импорта? Я имею в виду не тестовые и демо-импорты для учебных групп, а реальный импорт такой некислой таблицы Excel с данными в такую некислую сущность как организаии, например? Ну вот как-нибудь испробуйте! Только пупок не надорвите. А людей не обманешь тупыми увещеваниями: интерес к такой тулзине очень высокий, поэтому жалкие потуги выцедить улыбку, выглядят жалко.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
|
|