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;
        }
    }
}
Старый 10.08.2010, 15:31   #2  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,081 / 836 (34) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Сталкивался с такой проблемой. Зарегистрируйте шаг плагина на Child Pipeline + Async.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Читайте мой блог
За это сообщение автора поблагодарили: Krom (1).
Старый 10.08.2010, 16:02   #3  
Krom is offline
Krom
Участник
 
28 / 10 (1) +
Регистрация: 10.02.2010
Спасибо большое!
Помогло
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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, время: 10:49.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.