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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.02.2011, 13:15   #1  
Omalinka is offline
Omalinka
Участник
 
16 / 10 (1) +
Регистрация: 25.02.2011
Адрес: Russia
? Некорректная работа плагина в Microsoft Dynamics CRM 2011 Online
Добрый день!

У меня возникла схожая проблема при работе плагина для CRM 2011 Online.

Плагин зарегистрирован для message = create, entity = salesorder, execution mode = synchronous, post-operation.

Когда вручную создается новый salesorder, то плагин успешно отрабатывает, но если salesorder создается из sales opportunity c помощью стандартного функционала, то возникает ошибка "Incorrect atribute value Type.Int32".

Путем отладки удалось установить, что ошибка возникает на последней строке кода
Код:
service.Update(updateAccount);
С чем это может быть связано?

Код плагина:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// Microsoft Dynamics CRM namespace(s)
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using System.ServiceModel;
//using Microsoft.Xrm.Sdk.Client;
 
namespace Microsoft.Crm.Sdk.Samples
{
    public class AccountAmounts : IPlugin
    {
        //<snippetAccountNumberPlugin2>
        public void Execute(IServiceProvider serviceProvider)
        {
 
            //IPluginExecutionContext context2 = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            ITracingService tracer = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
 
            if (tracer == null)
                throw new InvalidPluginExecutionException("Failed to retrieve the tracing service.");
            
            try
            {
                // Obtain the execution context from the service provider.
                Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext)
                    serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));
 
                // The InputParameters collection contains all the data passed in the message request.
                if (context.InputParameters.Contains("Target") &&
                    context.InputParameters["Target"] is Entity)
                {
                    IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                    IOrganizationService service = factory.CreateOrganizationService(context.UserId);
 
                    // Obtain the target entity from the input parmameters.
                    Entity entity = (Entity)context.InputParameters["Target"];
                    //</snippetAccountNumberPlugin2>
 
                    // Verify that the target entity represents an account.
                    // If not, this plug-in was not registered correctly.                   
 
                    if (entity.LogicalName == "salesorder")
                    {
                        ColumnSet cols = new ColumnSet();
                        cols.AddColumns(new string[] { "salesorderid", "customerid", "steer_completed", "statuscode", "totalamount", "steer_budgetsum" });
                        Entity _order = service.Retrieve(entity.LogicalName, entity.Id, cols);
 
                        if (_order.Contains("totalamount") || _order.Contains("steer_budgetsum"))
                        {
 
                            EntityReference _customer_ref = (EntityReference)_order.Attributes["customerid"];
 
                            //  Query using ConditionExpression
                            ConditionExpression condition1 = new ConditionExpression();
                            condition1.AttributeName = "customerid";
                            condition1.Operator = ConditionOperator.Equal;
                            condition1.Values.Add(_customer_ref.Id);
 
                            ConditionExpression condition2 = new ConditionExpression();
                            condition2.AttributeName = "statuscode";
                            condition2.Operator = ConditionOperator.Equal;
                            condition2.Values.Add(100001); //fullført
                            ConditionExpression condition3 = new ConditionExpression();
                            condition3.AttributeName = "statuscode";
                            condition3.Operator = ConditionOperator.Equal;
                            condition3.Values.Add(100002); //fullført
 
                            ConditionExpression condition4 = new ConditionExpression();
                            condition4.AttributeName = "steer_startdato";
                            condition4.Operator = ConditionOperator.LessEqual;
                            condition4.Values.Add(DateTime.Now);
 
                            ConditionExpression condition5 = new ConditionExpression();
                            condition5.AttributeName = "steer_forfalsdato";
                            condition5.Operator = ConditionOperator.GreaterEqual;
                            condition5.Values.Add(DateTime.Now);
 
                            FilterExpression filter1 = new FilterExpression();
                            filter1.Conditions.Add(condition1);
                            FilterExpression filter2 = new FilterExpression();
                            filter2.Conditions.Add(condition2);
                            //filter2.Conditions.Add(condition3);
 
                            FilterExpression filter3 = new FilterExpression();
                            filter3.Conditions.Add(condition4);
                            FilterExpression filter4 = new FilterExpression();
                            filter4.Conditions.Add(condition5);
 
                            QueryExpression query = new QueryExpression("salesorder");
                            query.ColumnSet.AddColumns(new string[] { "salesorderid", "totalamount", "steer_budgetsum" });
                            query.Criteria.AddFilter(filter1);
                            query.Criteria.AddFilter(filter2);
                            query.Criteria.AddFilter(filter3);
                            query.Criteria.AddFilter(filter4);
                            
                            EntityCollection result1 = service.RetrieveMultiple(query);
 
                            decimal totalamount = 0;
                            decimal totalbudgetamount = 0;
                            foreach (Entity a in result1.Entities)
                            {
                                if (a.Contains("totalamount"))
                                {
                                    totalamount += ((Money)a.Attributes["totalamount"]).Value;
                                }
                                if (a.Contains("steer_budgetsum"))
                                {
                                    totalbudgetamount += ((Money)a.Attributes["steer_budgetsum"]).Value;
                                }
                            }                            
                            
                            //Записываем полученные значения в поля таблицы Account                                         
                            Entity updateAccount = new Entity("account");                            
                            EntityReference _customer_ref2 = (EntityReference)_order.Attributes["customerid"];
                            
                            updateAccount.Attributes.Add("accountid", _customer_ref2.Id);
                            
                            if (totalamount != 0)
                            {
                                updateAccount.Attributes.Add("steer_totalpurchase", new Money(totalamount));
 
                                if (totalamount >= 10000000)
                                {
                                    updateAccount.Attributes.Add("steer_customertype", 548850000);
                                }
                                if (totalamount < 1000000 && totalamount >= 2500000)
                                {
                                    updateAccount.Attributes.Add("steer_customertype", 548850001);
                                }
                                if (totalamount <= 1000001 && totalamount >= 2500000)
                                {
                                    updateAccount.Attributes.Add("steer_customertype", 548850002);
                                }
                                if (totalamount <= 500001 && totalamount >= 1000000)
                                {
                                    updateAccount.Attributes.Add("steer_customertype", 548850003);
                                }
                                if (totalamount <= 50001 && totalamount >= 500000)
                                {
                                    updateAccount.Attributes.Add("steer_customertype", 548850004);
                                }
                                if (totalamount <= 50000)
                                {
                                    updateAccount.Attributes.Add("steer_customertype", 548850005);
                                }
                                }
                            if (totalbudgetamount != 0)
                            {                                
                                updateAccount.Attributes.Add("steer_totalbudgetamount", new Money(totalbudgetamount));
                            }
                            service.Update(updateAccount);
                        }
 
                        
                    }
                }
            }
            catch (Exception e)
            {
                tracer.Trace("Received exception: {0}", e);
                throw new InvalidPluginExecutionException(e.Message);
            }
        }
    }
}
Старый 25.02.2011, 16:34   #2  
Omalinka is offline
Omalinka
Участник
 
16 / 10 (1) +
Регистрация: 25.02.2011
Адрес: Russia
Причина ошибки выявлена
Дело было в некорректном коде
Код:
updateAccount.Attributes.Add("steer_customertype", 548850001);
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dynamics-community.at: Linksammlung CRM 2011 Blog bot Dynamics CRM: Blogs 0 19.01.2011 21:11
Microsoft Dynamics CRM Team Blog: CRM Online: Reporting Options Blog bot Dynamics CRM: Blogs 0 18.06.2009 06:14
Microsoft Dynamics CRM Team Blog: Microsoft Dynamics CRM Online Data Import tool Blog bot Dynamics CRM: Blogs 0 05.06.2009 05:10
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: Microsoft Dynamics CRM Interviews and Screencasts Blog bot Dynamics CRM: Blogs 0 23.07.2008 03:18

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

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

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