• Авторизация


1 шаг работы с Microsoft CRM. Часть1 26-08-2008 08:54 к комментариям - к полной версии - понравилось!


День добрый!
Сегодня мы попробуем создать первое приложение для MS CRM.
За основу взял следующую задачу.

Задание
В CRM практически все операции осуществляются через открытие формы для создания или изменения объекта.
Это неудобно при массовых операциях.
Например, нам нужно добавить к заказу несколько позиций - товаров и услуг. Делать это каждый раз заново долго, если у нас все настроено по умолчанию, и не нужно менять ничего в карточке продукта для заказа, то мы можем упросить задачу пользователя. Для этого мы создадим форму - массовое добавление продуктов к заказу.
Цель формы - она запускается из карточки заказа, получив код заказа запрашивает прайс лист который для него указан и выводит все продукты из прайс листа, с указанием количества доступного на складе.


Сама задача не самая сложная но и не самая простая. Чтобы ее выполнить нужно
-подключиться к веб сервису системы
-знать требуемые объекты для выполнения задачи
-знать как работать с запросами в CRM.
-знать как интегрировать полученное решение в систему.
Пока мы выполним первую задачу, но чтобы был виден хоть какой то результат посмотрим вкратце суть 2 и 3.

1 сложность. Нам нужно работающее решение не только для заказа но и например коммерческого предложения. Поэтому нужно сразу учесть возможность этого.
2 сложность. Цены содержатся в таблице позиции по прайс листу, а количество в другой таблице - продукты.
Либо будем делать сложный запрос либо придется использовать SQL.

Поэтому на первом этапе мы сделаем следующее:
Зайдем в систему,
По коду заказа узнаем его прайс лист
Загрузим все позиции прайс листа.

Итак,
1.
создаем новый проект в Visual Studio.  Тип - веб сайт.
2.
Добавляем веб службу
На закладке Solution, добавляем ссылку на веб службу:
http://<servername>:<port>/mscrmservices/2007/crmservice.asmx, где servername и порт - название вашей машины с серверной частью Crm, и порт на котором стоит Crm.
У меня почему то возникло сообщение что нужно запрашивать http://<servername>:<port>/mscrmservices/2007/crmservicewsdl.aspx, что я и сделал.
Укажите псевдоним веб службы, советую CrmSdk, и нажмите кнопку добавить веб службу.
3. Создайте класс - адаптер к веб службе, это удобно чтобы каждый раз не писать код.

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using CrmSdk;
/// <summary>
/// Summary description for WsAdapter
/// </summary>
public class WsAdapter
{
        public CrmService Service;
        public void Init()
        {
       
            //аутентификация
            CrmAuthenticationToken token = new CrmAuthenticationToken();
            //тип аутентификации и - Active Directory authentication
            token.AuthenticationType = 0;
            //т.к. у нас несколько организаций на сервере, то нужно указать нужную. добавляем в web.config
            //название организации и считываем его здесь
            token.OrganizationName =  System.Configuration.ConfigurationManager.AppSettings["OrgName"];

            //создаем веб службу црм
            Service = new CrmService();
            //указываем ссылку на веб службу
            Service.Url = System.Configuration.ConfigurationManager.AppSettings["CrmSdk.CrmServiceWsdl"];
            //указываем аутентификацию
            Service.CrmAuthenticationTokenValue = token;
            //явно определяем учетную запись под которой заходим, если нужно использовать текущую то написали бы
            //System.Net.CredentialCache.DefaultCredentials;
            Service.Credentials =  new System.Net.NetworkCredential("CRMGuest","2675832145","crmdev1");


        }
        public WsAdapter()
        {
            Init();
        }
       
}

Теперь вам достаточно создавать объект класса WsAdapter, и использовать его поле - Service.
Рассмотрим простейший пример. Мы получили код заказа, и нам нужно узнать какой прайс лист в нем указан.
Для этого мы используем метод Retrieve, аргументами будут код заказа, название типа объекта заказ, а также столбцы которые мы должны получить. С учетом этого получим следующий код:

//грузим продукты для заказа\компредложения по прайс листу
    void LoadProductsForPrice(Guid objectid, string objecttypename)
    {
        if (objectid != Guid.Empty)
        {
            //по идее лучше добавить такой вызов в каждую ветку -
            //меньше вероятности что возникнет ошибка, напрмер если указано несуществующий тип сущности
            //создаем веб службу
            WsAdapter ws = new WsAdapter();
            //делаем запрос объекта - указываем название типа объекта его код а также требуемые столбцы
            BusinessEntity be = ws.Service.Retrieve(objecttypename, objectid, new AllColumns());
           
            //код прайс листа который нам нужно получить
            Guid pricelevelid = Guid.Empty;
            //полученный объект be - нужно привести к нужному типу, чтобы мы могли обратиться к полю где хранится прайс лист
            switch (objecttypename)
            {
                //если заказ
                case "salesorder":
                    salesorder so = (salesorder)be;
                    if (so.pricelevelid != null)
                        pricelevelid = so.pricelevelid.Value;
                    break;
                //если коммерческое предложение
                case "quote":
                    quote quote = (quote)be;
                    if (quote.pricelevelid!= null)
                        pricelevelid = quote.pricelevelid.Value;
                    break;
                default:
                    LabelInfo.Text = "Неизвестен тип объекта к которому нужно добавлять товары\\услуги";
                    break;
            }
            if (pricelevelid != Guid.Empty)
            {
                //запрашиваем все возможные продукты из прайс листа для данного ком предложения
                GVProducts.DataSource = GetProductsForPrice(pricelevelid);
                //обновляем сетку
                GVProducts.DataBind();
            }
        }
        else
        {
            LabelInfo.Text = "Неизвестен объект к которому нужно добавлять товары\\услуги";
        }
    }

Функция GetProductsForPrice - это запрос по прайс листу. Ее мы рассмотрим в следующий раз. А пока результат запроса:
(названия продуктов странные - тестовая база)



[698x158]
вверх^ к полной версии понравилось! в evernote
Комментарии (3):
14-07-2009-18:53 удалить
Привет, полезный пример, больше с MS CRM 4 не работаешь? Было бы здорово еще пару примерчиков разобрать
Ответ на комментарий # в данный момент нет, в наших краях мс црм успех так и не приобрел, поэтому щас занят другим. Если спросишь что нить и слету смогу ответить - напишу.
16-07-2009-10:38 удалить
Ответ на комментарий Чарубаэль # Меня интересовало программирование плагинов, т.к. с этим стал возиться сам и не у кого спросить совета :) И за этот примерчик спасибо!


Комментарии (3): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник 1 шаг работы с Microsoft CRM. Часть1 | Чарубаэль - Дневник | Лента друзей Чарубаэль / Полная версия Добавить в друзья Страницы: раньше»