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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.05.2009, 19:50   #1  
BioGenez is offline
BioGenez
Участник
 
4 / 10 (1) +
Регистрация: 05.05.2009
COM + CRM
Подскажите пожалуйста, как лучше реализовать след. задачу:
Нужно создать com-dll (пишу на c#), с помощью которой я буду создавать сущности в CRM. com будет использоваться другой программой, которая не работает c dotnet.
Собственно вопрос как лучше создать новую сущность? Я сделал функцию которая принимает название сущности (например lead) и принимает список параметров "название_поля", "значение".
Функция создаёт динамическую сущность (DynamicEntity). Вот только как добавить Properties нужного типа? Есть вариант узнавать через MetadataService тип поля.. но описывать так все варианты полей не хочется.. громоздко получается...Или я вообще не в те дебри залез и всё нужно по другому реализовывать? (в crm я новичок, в принципе как и в com)
Старый 06.05.2009, 09:30   #2  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
К сожалению, вы на верном пути. MS помешаны на строгой типизации вплоть до апсурда: нужно создавать Property нужного типа, чтобы его потом серелизовать в строку, чтобы потом платформа все равно преобразовывала его в объект. Когда я решал задачу интеграции 2 систем, то использовал следующий подход:
1. Системы обмениваются через шину неким стандартным xml, который содержит тип сообщения, данные о объекте и метаданные... Например:
Код:
<?xml version="1.0" encoding="utf-8" ?>
<Message xmlns="http://tempuri.org/EntitySchema.xsd">
    <Entity type="contact">
        <Attributes>
            <Attribute name="crm_id" type="Key">
                <Value>{19F7FABE-6530-DD11-9D00-001B7895C8E2}</Value>
            </Attribute>
            <Attribute name="altair_id" type="String">
                <Value>12345677</Value>
            </Attribute>
        </Attributes>
    </Entity>
    <Metadata>
        <Event type="CreateResponse" errorcode="0" errormessage="Карасавчег" />
        <Sourcedata source="Altair" user="AtrairUser" />
    </Metadata>
</Message>
2. CRM коннектор шины преобразует вышеуказанное сообщение в DE понятное CRM используя данные атрибута type (metadata service в этом случае не затрагивается)
3. Для приведения типов полей используется еще одна XML следующего вида:
Код:
<?xml version="1.0" encoding="utf-8" ?>
<Entitys xmlns="http://tempuri.org/AttributeMap.xsd">
    <Entity Name="account" TypeCode="1">
        <Attribute internalName="ics_synch" externalName="ics_synch" Type="bool" />
        <Attribute internalName="ics_altair" externalName="altair_id" Type="String"/>
        <Attribute internalName="accountid" externalName="crm_id" Type="Key" />
        <Attribute internalName="name" externalName="name" Type="String" />
        <Attribute internalName="ics_fullname" externalName="fullname" Type="String" />
        <Attribute internalName="telephone1" externalName="telephone" Type="String" />
        <Attribute internalName="fax" externalName="fax" Type="String" />
        <Attribute internalName="emailaddress1" externalName="email" Type="String" />
        <Attribute internalName="statecode" externalName="statecode" Type="State" />
        <Attribute internalName="ics_industry" externalName="industry" Type="String" />
        <Attribute internalName="ics_governmentid" externalName="governmentid" Type="String" />
        <Attribute internalName="sic" externalName="firmid" Type="String" />
        <Attribute internalName="ics_fulladdress" externalName="address" Type="String" />
        <Attribute internalName="ics_fulladdressfact" externalName="address2" Type="String" />
    </Entity>
    <Entity Name="contact" TypeCode="2">
        <Attribute internalName="ics_synch" externalName="ics_synch" Type="bool"/>
        <Attribute internalName="ics_altair" externalName="altair_id" Type="String"/>
        <Attribute internalName="contactid" externalName="crm_id" Type="Key"/>
        <Attribute internalName="firstname" externalName="firstname" Type="String"/>
        <Attribute internalName="lastname" externalName="lastname" Type="String"/>
        <Attribute internalName="middlename" externalName="middlename" Type="String"/>
        <Attribute internalName="jobtitle" externalName="jobtitle" Type="String"/>
        <Attribute internalName="department" externalName="department" Type="String"/>
        <Attribute internalName="telephone1" externalName="telephone" Type="String"/>
        <Attribute internalName="emailaddress1" externalName="email" Type="String"/>
        <Attribute internalName="fax" externalName="fax" Type="String"/>
        <Attribute internalName="birthdate" externalName="birthday" Type="DateTime"/>
        <Attribute internalName="parentcustomerid" externalName="parentcustomerid" Type="GUID"/>
        <Attribute internalName="ics_documenttype" externalName="documenttype" Type="String"/>
        <Attribute internalName="ics_documentnumber" externalName="documentnumber" Type="String"/>
        <Attribute internalName="ics_documentseries" externalName="documentseries" Type="String"/>
        <Attribute internalName="ics_issuedate" externalName="issuedate" Type="DateTime"/>
        <Attribute internalName="ics_issueplace" externalName="issueplace" Type="String"/>
    </Entity>
</Entitys>
p.s. Знаю что type перегружен, но уже не помню который из них используется и где.
p.p.s.Для преобразования XML возможно использовать XSLT, возможно удатся сократить количество строк кода.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 06.05.2009, 11:45   #3  
BioGenez is offline
BioGenez
Участник
 
4 / 10 (1) +
Регистрация: 05.05.2009
Спасибо за ответ.
Допустим хочу создать универсальную функцию, которая будет создавать любую сущность.
Если одним из параметров является тип поля (в текстовом виде ParamType), то по всей видимости придётся делать switch (ParamType). И в зависимости от значения уже создавать свойство нужного типа?
Например:
switch (ParamType)
{
case "string":
Prop.Add(CreateStringProperty(Name, Value));
break;
case "picklist":
PicklistProperty p = new PicklistProperty();
p.Name = FieldName; //FieldName "имя поля"
p.Value = new Picklist();
p.Value.Value = FieldValue; //FieldValue "значение поля"
Prop.Add(p);
break;
}
Или есть стандартная функция добавление Property, которая примет название типа поля (в формате string) и значение (тоже string) и сама добавит Property нужного типа?
Старый 06.05.2009, 15:03   #4  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Совершенно. Кажется в комплекте с SDK есть такой хелпер: SDK\server\helpers\cs\crmhelpers. Была еще мысль в коде прописать строки XML для каждого Property и через String.Format, например, заменять в нужном месте его значение, но было лениво экспериментировать, так что сделал как написал выше.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Теги
com connector, интеграция, сущность

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Microsoft Dynamics CRM Team Blog: Building Rich-Client Dashboards for Microsoft Dynamics CRM with Windows Presentation Foundation Blog bot Dynamics CRM: Blogs 1 31.03.2009 13:24
Microsoft Dynamics CRM Team Blog: List Web Part for Microsoft Dynamics CRM 4.0 Deployment Scenarios Blog bot Dynamics CRM: Blogs 0 30.01.2009 22:05
Microsoft Dynamics CRM Team Blog: Troubleshooting the Microsoft Dynamics CRM E-mail Router Blog bot Dynamics CRM: Blogs 0 09.01.2009 06:03
Microsoft Dynamics CRM Team Blog: Reports for CRM 4.0 using SQL Server 2008 and Report Builder 2.0 Blog bot Dynamics CRM: Blogs 0 11.11.2008 08:05
Microsoft Dynamics CRM Team Blog: Managing a telemarketing campaign Blog bot Dynamics CRM: Blogs 0 04.09.2008 00:05

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:21.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.