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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.01.2012, 13:58   #1  
Смирнов Денис is offline
Смирнов Денис
Участник
 
14 / 11 (1) +
Регистрация: 18.11.2008
? Оптимальность загрузки данных в CRM (через SSIS)
Загружаю данные используя Integration Services из внешнего источника данных (база Access) в MS CRM 2011
код добавляет новых контрагентов в CRM, а в случае, если контрагент уже такой есть, то обновляет его

пока нарисовался следующий код:
X++:
/* Microsoft SQL Server Integration Services Script Component
*  Write scripts using Microsoft Visual C# 2008.
*  ScriptMain is the entry point class of the script.*/

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
using SC_09d18353d43c4f97ba6222b40aa3ff97.csproj.CRMSDK1;


[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
    // Объяляем Crm Service
    public CrmService myservice = null;

    public override void PreExecute()
    {
        base.PreExecute();
        // Настраиваем Crm Service
        CrmAuthenticationToken token = new CrmAuthenticationToken();
        token.AuthenticationType = 0;
        token.OrganizationName = "formula-t";

        myservice = new CrmService();
        myservice.Url = "http://localhost:5555/mscrmservices/2007/crmservice.asmx";
        myservice.CrmAuthenticationTokenValue = token;
        myservice.Credentials = System.Net.CredentialCache.DefaultCredentials;
    }

    public override void PostExecute()
    {
        base.PostExecute();
        /*
          Add your code here for postprocessing or remove if not needed
          You can set read/write variables here, for example:
          Variables.MyIntVar = 100
        */
    }

    public override void 0_ProcessInputRow(0Buffer Row)
    {
        // Create the ColumnSet that indicates the properties to be retrieved.
        ColumnSet cols = new ColumnSet();

        // Set the properties of the ColumnSet.
        cols.Attributes = new string[] { "accountid"}; //выходной столбец

        // Create the ConditionExpression.
        ConditionExpression condition = new ConditionExpression();

        // Set the condition for the retrieval to be when the contact's address' city is Sammamish.
        condition.AttributeName = "accountnumber"; //искать будем по коду справочника
        condition.Operator = ConditionOperator.Like;
        condition.Values = new string[] { Row. };

        // Create the FilterExpression.
        FilterExpression filter = new FilterExpression();

        // Set the properties of the filter.
        filter.FilterOperator = LogicalOperator.And;
        filter.Conditions = new ConditionExpression[] { condition };

        // Create the QueryExpression object.
        QueryExpression query = new QueryExpression();

        // Set the properties of the QueryExpression object.
        query.EntityName = EntityName.account.ToString();
        query.ColumnSet = cols;
        query.Criteria = filter;

        // Retrieve the contacts.
        BusinessEntityCollection FilterAccounts = myservice.RetrieveMultiple(query);
        if (FilterAccounts.BusinessEntities.Length == 0) //если записи не найдены
        {
            account account1 = new account();
            account1.accountnumber = Row.;
            if (!Row._IsNull) {account1.name = Row.;}
            myservice.Create(account1);
        }
        else
        {
            
            foreach (account Acount1 in FilterAccounts.BusinessEntities)//Если запись с таким кодом уже существует, то посмотрим - а может ее надо обновить ?
            {
                account account2 = new account();
                account2.accountid = Acount1.accountid;
                int Upd = 0; //будем апдейтить только если есть что изменять//хотя наверняка есть более лучшие способы узнать о изменениях
                if (account2.name == Row.) { account2.name = Row.; Upd = 1; }// ура есть что изменять
                if (Upd == 1)
                {
                    myservice.Update(account2);
                }
            }

        }


    }

}
но этот код мне кажется крайне неоптимальным
как его улучшить ?
__________________
Работать
Старый 07.01.2012, 00:27   #2  
Савран Роман is offline
Савран Роман
Участник
 
58 / 17 (1) ++
Регистрация: 19.02.2009
Адрес: Киев, Украина
Для поиска существующих компаний в базе используйте элемент Lookup в SSIS а не код, это будет существенно быстрее и поддерживается

Я делаю CrmService статическим, чтобы он не инициализиорвался каждый раз.
Старый 07.01.2012, 15:08   #3  
Смирнов Денис is offline
Смирнов Денис
Участник
 
14 / 11 (1) +
Регистрация: 18.11.2008
Цитата:
Сообщение от Савран Роман Посмотреть сообщение
Для поиска существующих компаний в базе используйте элемент Lookup в SSIS а не код, это будет существенно быстрее и поддерживается

Я делаю CrmService статическим, чтобы он не инициализиорвался каждый раз.
А можно привести кусочек кода (для примера) ?
__________________
Работать
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Microsoft Dynamics CRM Team Blog: Windows Azure AppFabric Integration with Microsoft Dynamics CRM - Step By Step Blog bot Dynamics CRM: Blogs 0 18.02.2011 23:12
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: Импорт данных из CardScan в MS CRM 4.0 Blog bot Dynamics CRM: Blogs 0 29.07.2009 12:05
Microsoft Dynamics CRM Team Blog: Managing a telemarketing campaign Blog bot Dynamics CRM: Blogs 0 04.09.2008 00: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, время: 00:23.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.