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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.02.2011, 12:57   #1  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от Буденый Посмотреть сообщение
Заменил код, ошибка исчезла, но при создании из возможной сделки при шаге зарегистрированном на child pipeline плагин счетчика все равно не срабатывает (увеличение не происходит и номер не присваивается)
Код, покажите, пожалуйста. Только в этот раз полный (без троеточий, упущенных методов и т.п.).
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 10.02.2011, 15:46   #2  
Буденый is offline
Буденый
Участник
 
70 / 15 (1) ++
Регистрация: 07.06.2010
Адрес: Донецк
Код плагина:
Код:
using System;
using System.Collections.Generic;
using Microsoft.Win32;
using Microsoft.Crm.Sdk;
using Microsoft.Crm.SdkTypeProxy;
using Microsoft.Crm.SdkTypeProxy.Metadata;

using Microsoft.Crm.Sdk.Query;

namespace AKAutoNumber
{
    public class AKAutoNumber : IPlugin
    {
        private string _secureInformation;
        private string _unsecureInformation;

        private static object _sync = new object(); 
                
        public AKAutoNumber(string unsecureInfo, string secureInfo)
        {
            _secureInformation = secureInfo;
            _unsecureInformation = unsecureInfo;
        }

        // Related SDK topic: Writing a Plug-in
        public void Execute(IPluginExecutionContext context)
        {
            DynamicEntity entity = null;

            if (context.InputParameters.Properties.Contains(ParameterName.Target) &&
               context.InputParameters.Properties[ParameterName.Target] is DynamicEntity)
            {

                entity = (DynamicEntity)context.InputParameters.Properties[ParameterName.Target];
            }
            else
            {
                return;
            }

            try
            {
                lock (_sync)
                {
                    // simple query to get incremental settings for this entity
                    CrmAuthenticationToken token = new CrmAuthenticationToken();
                    token.AuthenticationType = AuthenticationType.AD;
                    token.OrganizationName = context.OrganizationName;

                    CrmService service = new CrmService();
                    service.UseDefaultCredentials = true;
                    service.Url = (string)(Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\MSCRM").GetValue("ServerUrl")) + "/2007/crmservice.asmx";
                    service.CrmAuthenticationTokenValue = token;
                                           
                    IncrementalNumbering setting = IncrementalNumbering.GetSettings(service, entity.Name);

                    if (setting != null && !entity.Properties.Contains(setting.PropertyName))
                    {
                        int next = setting.CurrentPosition + 1;
                        
                        StringProperty increment = new StringProperty(setting.PropertyName,setting.Prefix.ToString()+ next.ToString());
                        entity.Properties.Add(increment);
                    
                        // keep track of the latest id inside the custom entity
                        setting.Increment(service, next);
                    }
                }
            }
            catch (System.Web.Services.Protocols.SoapException ex)
            {
                throw new InvalidPluginExecutionException(
                    String.Format("An error occurred in the {0} plug-in.",
                       this.GetType().ToString()),
                    ex);
            }
        }
    }
}
Код вспомагательного класа
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Crm.Sdk;
using Microsoft.Crm.SdkTypeProxy;
using Microsoft.Crm.Sdk.Query;

namespace AKAutoNumber
{
    public class IncrementalNumbering
    {
        public const string SchemaName = "do_universalnumber";

        public class Fields
        {
            public const string Id = "do_universalnumberid";
            public const string EntityName = "do_name";
            public const string PropertyName = "do_attribute";
            public const string CurrentPosition = "do_count";
            public const string Prefix = "do_prefix";

        }

        public Guid Id { get; set; }
        public string EntityName { get; set; }
        public string PropertyName { get; set; }
        public string Prefix { get; set; }
        public int CurrentPosition { get; set; }

        public IncrementalNumbering() { }

        public IncrementalNumbering(DynamicEntity entity)
        {
            this.Id = (entity.Properties[Fields.Id] as Key).Value;
            this.EntityName = entity.Properties[Fields.EntityName].ToString();
            this.PropertyName = entity.Properties[Fields.PropertyName].ToString();
            this.Prefix = entity.Properties[Fields.Prefix].ToString();
            this.CurrentPosition = (entity.Properties[Fields.CurrentPosition] as CrmNumber).Value;
        }

        public void Increment(CrmService service, int next)
        {
            this.CurrentPosition = next; // set before calling ToDynamic

            TargetUpdateDynamic target = new TargetUpdateDynamic();
            target.Entity = this.ToDynamic();

            UpdateRequest request = new UpdateRequest();
            request.Target = target;

            service.Execute(request);
        }

        // see if there are any increment settings for this entity
        public static IncrementalNumbering GetSettings(CrmService service, string entityName)
        {
            IncrementalNumbering setting = null;

            QueryExpression query = new QueryExpression();

            query.EntityName = IncrementalNumbering.SchemaName;
            query.ColumnSet = new AllColumns();

            query.Criteria = new FilterExpression();
            query.Criteria.FilterOperator = LogicalOperator.And;

            ConditionExpression condition1 = new ConditionExpression();
            condition1.AttributeName = IncrementalNumbering.Fields.EntityName;
            condition1.Operator = ConditionOperator.Equal;
            condition1.Values = new object[] { entityName };

            query.Criteria.AddCondition(condition1);

            RetrieveMultipleRequest request = new RetrieveMultipleRequest();
            request.Query = query;
            request.ReturnDynamicEntities = true;

            RetrieveMultipleResponse response = service.Execute(request) as RetrieveMultipleResponse;
            BusinessEntityCollection results = response.BusinessEntityCollection;
            if (results.BusinessEntities.Count > 0) // no error checkig to see if there are 2 incrementors set for the same entity
            {
                setting = new IncrementalNumbering(results.BusinessEntities[0] as DynamicEntity);
            }

            return setting;
        }

        // should include rest of the fields, but leave it for now
        public DynamicEntity ToDynamic()
        {
            DynamicEntity entity = new DynamicEntity(IncrementalNumbering.SchemaName);
            PropertyCollection properties = new PropertyCollection();

            properties.Add(new KeyProperty(Fields.Id, new Key(this.Id)));
            properties.Add(new CrmNumberProperty(Fields.CurrentPosition, new CrmNumber(this.CurrentPosition)));

            entity.Properties = properties;

            return entity;
        }
    }
}
Вложения
Тип файла: rar AKAutoNumber.rar (2.2 Кб, 100 просмотров)
Старый 11.02.2011, 03:47   #3  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
На первый взгляд код - правильный, но есть какая то ошибочка. Проверил у себя точки входа в плагин - работает и для парен и для чайлд пайплайна. Так что совет вам - отладить плагин вооружившись Visual Studio...
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
За это сообщение автора поблагодарили: Буденый (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Плагин на изменение подразделения пользователя xmarina Dynamics CRM: Разработка 6 23.11.2010 15:04
не срабатывает плагин Shamasher Dynamics CRM: Разработка 5 13.10.2010 10:55
Плагин на создании Заказа Krom Dynamics CRM: Разработка 4 04.08.2010 14:48
Тип сущности, использующей плагин Казарин Александр Dynamics CRM: Разработка 2 02.04.2009 20:29
Как зарегить плагин на смену State? Alir Dynamics CRM: Разработка 8 24.11.2008 12:06

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

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

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