AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Blogs
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.01.2010, 03:23   #1  
Blog bot is offline
Blog bot
Участник
 
25,626 / 848 (80) +++++++
Регистрация: 28.10.2006
Все о Microsoft Dynamics CRM: Загрузка любого файла из SharePoint в заметки(note) MS CRM 4.0
Источник: http://ms-dynamics-crm.com.ua/2010/0...-ms-crm-notes/
==============

Задача: есть файл, который хранится в SharePoint, следовательно есть к нему url, необходимо перенести этот файл в заметки Microsoft Dynamics CRM 4.0 для определенного объекта. Файл может быть любим: архив, документ word, excel, pdf …

Примечание:
для учетной записи пользователя должны быть предоставлены необходимые права в SharePoint

Сам алгоритм плагина будет выглядеть так:

1. сначала я должен получить список всех url документов,
2. после чего создаю заметку в MS CRM
3. считываю документ из SharePoint в буферный файл (в моем случае c:\\bufferFile)
4. добавляю файл в аннотацию (note)
5. повторяю шаги 2-4

Ниже я предоставлю код функции для плагина

public static void CreateNote(Lookup regarding, string lookupfield, DynamicEntity entity, ICrmService crmService)Параметры которой следующие:

Lookup regarding – связанная запись, к которой привязаны записи документов из SharePoint с полем new_self – это url к документу и new_name – название документа
string lookupfield – поле по которому связана моя сущность с сущностью, содержащую карточки документов
DynamicEntity entity – исходная сущность
ICrmService crmService – IcrmService

//функция для создания примечания в листе согласования public static void CreateNote(Lookup regarding, string lookupfield, DynamicEntity entity, ICrmService crmService) { //вытягиваю все Карточки файлов, привязанных к данному договору ColumnSet cs = new ColumnSet(); cs.Attributes.AddRange(new string[] { "new_self", "new_name" }); QueryByAttribute qba = new QueryByAttribute(); qba.ColumnSet = cs; qba.EntityName = "new_isorgdoc"; qba.Attributes = new string[] { lookupfield }; qba.Values = new object[] { regarding.Value }; RetrieveMultipleRequest rmr = new RetrieveMultipleRequest(); rmr.Query = qba; rmr.ReturnDynamicEntities = true; //получаю ответ RetrieveMultipleResponse rmresponse = (RetrieveMultipleResponse)crmService.Execute(rmr); //создаю новые заметки в листе согласованя и загружаю файлы из Карточки файлов foreach (DynamicEntity _file in rmresponse.BusinessEntityCollection.BusinessEntities) {//получаю полный путь(url) к файлу string currentPath; Uri url = new Uri(_file["new_self"].ToString()); currentPath = url.ToString();//получаю только имя файла, в формате имя_файла.расширение string FileName = currentPath.Substring(currentPath.LastIndexOf("/") + 1, (currentPath.Length - currentPath.LastIndexOf("/") - 1)); // создаю заметку annotation note = new annotation(); note.notetext = FileName; // тело заметки note.subject = FileName; //тема заметки note.objectid = new Lookup(); note.objectid.type = "new_list_soglasovaniya"; // привязываю ее к листу согласования note.objectid.Value = ((Key)entity.Properties["new_list_soglasovaniyaid"]).Value; note.objecttypecode = new EntityNameReference(); note.objecttypecode.Value = "new_list_soglasovaniya";//создаю заметку Guid createdNoteId = crmService.Create(note); //отправляю запрос на чтение файла по полученному url HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(url.ToString()); myReq.Timeout = 7000; try {//авторизирую себя (пользователя) myReq.Credentials = CredentialCache.DefaultCredentials; HttpWebResponse MyResponse = (HttpWebResponse)myReq.GetResponse(); if (HttpStatusCode.OK == MyResponse.StatusCode) { // открываю поток using (Stream MyResponseStream = MyResponse.GetResponseStream()) { // открываю или создаю промежуточный файл using (FileStream MyFileStream = new FileStream("c:\\bufferFile", FileMode.OpenOrCreate, FileAccess.Write)) { byte[] MyBuffer = new byte[4096]; int BytesRead; //записываю в промежуточный файл while (0 < (BytesRead = MyResponseStream.Read(MyBuffer, 0, MyBuffer.Length))) { MyFileStream.Write(MyBuffer, 0, BytesRead); } } } } } catch (Exception err) { throw new Exception("Error saving file from URL:" + err.Message, err); } FileStream stream = File.OpenRead("c:\\bufferFile"); byte[] byteData = new byte[stream.Length]; stream.Read(byteData, 0, byteData.Length); stream.Close(); string encodedData = System.Convert.ToBase64String(byteData); // подгружаю файл к аннотации annotation updateNote = new annotation(); updateNote.annotationid = new Key(); updateNote.annotationid.Value = createdNoteId; updateNote.documentbody = encodedData; updateNote.filename = FileName; //updateNote.mimetype = @"application\ms-word"; crmService.Update(updateNote); }Пример вызова:

CreateNote(regardingLookup, "new_dogovor", entity, crmService);Вот вроде бы и все. Решение не претендует на единственное, есть множество способов для его улучшения, просто представлен пример, показывающий возможность реализации такой задачи. Кстати, таким способом можно приаттачивать документы не только из SharePoint, но и других веб-ресурсов, а так же с локального сервера (localhost) все будет упираться в политику безопасности. Кстати, я не проверил, но возможно если расширение запрещено для загрузки в MS CRM, то загрузить файл не получится. Так что имейте это в виду.

Спасибо Андрею Бутенко aka a33ik, который постоянно меня направляет в нужное русло Кстати, он получил статус MVP по Microsoft Dynamics CRM, так что еще раз мои поздравления!

Полезные ссылки:

Источник: http://ms-dynamics-crm.com.ua/2010/0...-ms-crm-notes/
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Все о Microsoft Dynamics CRM: Rollup 8 для Microsoft Dynamics CRM 4.0 Blog bot Dynamics CRM: Blogs 0 18.12.2009 12:05
CRM DE LA CREME! Configuring Microsoft Dynamics CRM 4.0 for Internet-facing deployment Blog bot Dynamics CRM: Blogs 0 18.08.2009 11:05
Все о Microsoft Dynamics CRM: Автонумератор для Microsoft Dynamics CRM 4.0. Plug-in Blog bot Dynamics CRM: Blogs 0 12.08.2009 15:05
Мир CRM: Академия для партнёров по Microsoft Dynamics CRM Blog bot Dynamics CRM: Blogs 0 02.02.2009 01:05
Microsoft Dynamics CRM Team Blog: Data Migration Manager Tips and Tricks Blog bot Dynamics CRM: Blogs 0 02.09.2008 22:05
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:16.