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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.08.2010, 15:25   #1  
Krom is offline
Krom
Участник
 
28 / 10 (1) +
Регистрация: 10.02.2010
? Create of salesorderdetail in ChildPipeline
Скажите пожалуйста в чем может быть проблема: плагин работает(как видно из темы) на создании Продукта для Заказа. Изначально плагин обсуждался в этой теме.
Я его тестировал на Update salesorderdetail все нормально.
Но при создании Заказа из КП выдает ошибку sql server. Если поставить parent Pipeline, то ошибок не будет, но и плагин не отработает.
На всякий случай вот код:
Код:
using System;
using System.Collections.Generic;
using Microsoft.Win32;
using System.Linq;
using System.Text;
using SDK = Microsoft.Crm.Sdk;
using UpdateSalesOrderDetail.CrmSdk;

namespace UpdateSalesOrderDetail
{
    public class onSalesOrderDetailCreate : SDK::IPlugin
    {
        public void Execute(SDK.IPluginExecutionContext context)
        {
            CrmService service = CreateCrmService(context, true);

            SDK::DynamicEntity currentSo = context.PostEntityImages["SoDe"] as SDK::DynamicEntity;
            try
            {
                #region вытаскиваем salesorder, BusinessEntity[] bussQ
                ColumnSet colsQ = new ColumnSet() 
                {
                    Attributes = new string[] { "quoteid" }
                };
                ConditionExpression condQ = new ConditionExpression() 
                {
                    AttributeName = "salesorderid",
                    Operator = ConditionOperator.Equal,
                    Values = new object[] { ((SDK::Lookup)currentSo.Properties["salesorderid"]).Value.ToString() }
                };
                FilterExpression filtQ = new FilterExpression() 
                {
                    Conditions = new ConditionExpression[] { condQ }
                };
                QueryExpression queryQ = new QueryExpression() 
                {
                    ColumnSet = colsQ,
                    EntityName = EntityName.salesorder.ToString(),
                    Criteria = filtQ
                };
                BusinessEntity[] bussQ = service.RetrieveMultiple(queryQ).BusinessEntities;

                #endregion
                #region вытаскиваем все quotedetail, BusinessEntity[] buss
                ColumnSet cols = new ColumnSet()
                {
                    Attributes = new string[] { "new_display", "new_wholeamount", "productid", "priceperunit", "new_namerus", "new_koef", "new_sum_koef" }
                };

                ConditionExpression cond = new ConditionExpression()
                {
                    AttributeName = "quoteid",
                    Operator = ConditionOperator.Equal,
                    Values = new object[] { ((salesorder)bussQ[0]).quoteid.Value }
                };

                FilterExpression filt = new FilterExpression()
                {
                    Conditions = new ConditionExpression[] { cond }
                };

                OrderExpression order = new OrderExpression()
                {
                    AttributeName = "productid",
                    OrderType = OrderType.Descending
                };

                QueryExpression query = new QueryExpression()
                {
                    ColumnSet = cols,
                    EntityName = EntityName.quotedetail.ToString(),
                    Criteria = filt,
                    Orders = new OrderExpression[] { order }
                };
                BusinessEntity[] buss = service.RetrieveMultiple(query).BusinessEntities;
                #endregion
                //-----------------------------------------------------------------------------//
                #region вытаскиваем все salesorderdetail, BusinessEntity[] bussSp
                ColumnSet colsSp = new ColumnSet()
                {
                    Attributes = new string[] { "productid", "quantity" }
                };

                ConditionExpression condSp = new ConditionExpression()
                {
                    AttributeName = "salesorderid",
                    Operator = ConditionOperator.Equal,
                    Values = new object[] { ((SDK::Lookup)currentSo.Properties["salesorderid"]).Value }
                };

                FilterExpression filtSp = new FilterExpression()
                {
                    Conditions = new ConditionExpression[] { condSp }
                };

                OrderExpression orderSp = new OrderExpression()
                {
                    AttributeName = "productid",
                    OrderType = OrderType.Descending
                };


                QueryExpression querySp = new QueryExpression()
                {
                    ColumnSet = colsSp,
                    EntityName = EntityName.salesorderdetail.ToString(),
                    Criteria = filtSp,
                    Orders = new OrderExpression[] { orderSp }
                };
                BusinessEntity[] bussSp = service.RetrieveMultiple(querySp).BusinessEntities;
                #endregion
                //----------------------------------------------------------------------------//
                #region вытаскиваем курс пересчета из quote, BusinessEntity[] bussKp  comment//
                ColumnSet colsKp = new ColumnSet()
                {
                    Attributes = new string[] { "new_kursperesheta" }
                };

                ConditionExpression condKp = new ConditionExpression()
                {
                    AttributeName = "quoteid",
                    Operator = ConditionOperator.Equal,
                    Values = new object[] { ((salesorder)bussQ[0]).quoteid.Value }
                };

                FilterExpression filtKp = new FilterExpression()
                {
                    Conditions = new ConditionExpression[] { condKp }
                };

                QueryExpression queryKp = new QueryExpression()
                {
                    ColumnSet = colsKp,
                    EntityName = EntityName.quote.ToString(),
                    Criteria = filtKp,
                };
                BusinessEntity[] bussKp = service.RetrieveMultiple(queryKp).BusinessEntities;
                #endregion
                var quoteKP = bussKp[0];
                //=====================================================================//
                #region обновляем salesorderdetail
                int numberSalesOrder = bussSp.Length - 1;
                salesorderdetail salesOrderNew = new salesorderdetail();

                salesOrderNew.salesorderdetailid = new Key();
                salesOrderNew.salesorderdetailid.Value = ((SDK::Key)currentSo.Properties["salesorderdetailid"]).Value;

                salesOrderNew.new_display = new CrmNumber()
                {
                    Value = ((quotedetail)buss[numberSalesOrder]).new_display.Value,
                };
                salesOrderNew.new_priceperunit = new CrmMoney()
                {
                    Value = ((quotedetail)buss[numberSalesOrder]).priceperunit.Value * Convert.ToDecimal(((quote)quoteKP).new_kursperesheta.Value)
                };
                salesOrderNew.new_namerus = ((quotedetail)buss[numberSalesOrder]).new_namerus;
                salesOrderNew.new_koef = new CrmFloat()
                {
                    Value = ((quotedetail)buss[numberSalesOrder]).new_koef.Value
                };
                salesOrderNew.new_sum_koef = new CrmMoney()
                {
                    Value = salesOrderNew.new_priceperunit.Value * Convert.ToDecimal(salesOrderNew.new_koef.Value)
                };                
                salesOrderNew.new_wholeamount = new CrmMoney()
                {
                    Value = salesOrderNew.new_sum_koef.Value * ((SDK::CrmDecimal)currentSo.Properties["quantity"]).Value
                };
                service.Update(salesOrderNew);                
                #endregion 
            }
            catch (System.Web.Services.Protocols.SoapException ex)
            {
                throw new SDK::InvalidPluginExecutionException(
                  String.Format("An error occurred in the {0} plug-in.", this.GetType().ToString()), ex);
            }
        }
        private CrmService CreateCrmService(SDK.IPluginExecutionContext context, Boolean flag)
        {
            CrmAuthenticationToken authToken = new CrmAuthenticationToken();
            authToken.AuthenticationType = 0;
            authToken.OrganizationName = context.OrganizationName;

            if (flag)
                authToken.CallerId = context.UserId;
            else
                authToken.CallerId = context.InitiatingUserId;

            CrmService service = new CrmService();
            service.CrmAuthenticationTokenValue = authToken;
            service.UseDefaultCredentials = true;

            RegistryKey regkey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\MSCRM");

            service.Url = String.Concat(regkey.GetValue("ServerUrl").ToString(), "/2007/crmservice.asmx");

            return service;
        }
    }
}
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics CRM Tools: How to create a relative URL in site map to static content under the ISV folder in CRM 4 Blog bot Dynamics CRM: Blogs 0 22.03.2010 16:05
Muhammad Ali Khan: Close Service Activity On Create Message In PlugIn Blog bot Dynamics CRM: Blogs 0 19.02.2010 23:05
Microsoft Dynamics CRM Team Blog: Option for a “Quick Create” of CRM Records Blog bot Dynamics CRM: Blogs 0 16.12.2009 05:36
gustafwesterlund: Create replacement entities Blog bot Dynamics CRM: Blogs 0 18.10.2009 20:05
Microsoft Dynamics CRM Team Blog: The CRM Configurator’s Dilemma: Repurpose or Create? Blog bot Dynamics CRM: Blogs 0 18.09.2009 03:13

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

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

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