Показать сообщение отдельно
Старый 19.11.2009, 12:53   #63  
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
Цитата:
Сообщение от Tarasov E Посмотреть сообщение
Воспользовался данным примером, но поле new_scandate не обновилось. Возможно ошибка в настройках CRM сервиса?
Вот код:
Код:
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
        {
            //Настройка CRM сервиса
            CrmAuthenticationToken myToken = new CrmAuthenticationToken();
            myToken.OrganizationName = "Keysystems";
            myToken.AuthenticationType = 0;
            CrmService myService = new CrmService();
            myService.Credentials = System.Net.CredentialCache.DefaultCredentials;
            myService.Url = "http://vms:5555/MSCrmServices/2007/CrmService.asmx";
            myService.CrmAuthenticationTokenValue = myToken;
            //получение контекста
            IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService));
            IWorkflowContext workflowContext = contextService.Context;
            ICrmService service = contextService.Context.CreateCrmService(false);
            //Получаем идентификатор записи, породившей запуск бизнес-процесса
            Guid _entityid = workflowContext.PrimaryEntityId;
            string _entitytype = workflowContext.PrimaryEntityName;
            //указываем, какие атрибуты надо получить из CRM
            //ColumnSet cols = new ColumnSet();
            //cols.AddColumns(new string[] {"new_url"});
            //Указываем ID записи, у которой надо получить атрибуты
            TargetRetrieveDynamic targetRetrieve = new TargetRetrieveDynamic();
            targetRetrieve.EntityName = _entitytype;
            targetRetrieve.EntityId = _entityid;
            //устанавливаем свойства метода RetrieveResponse
            RetrieveRequest retrieve = new RetrieveRequest();
            retrieve.Target = targetRetrieve;//из какой записи берем
            retrieve.ColumnSet = new AllColumns();//что берем
            retrieve.ReturnDynamicEntities = true;//о_О
            RetrieveResponse retrieved = (RetrieveResponse)service.Execute(retrieve);
            //Получили саму запись
            DynamicEntity retrievedEntity = (DynamicEntity)retrieved.BusinessEntity;
            //Получили необходимые атрибуты записи
            CrmDateTime sdt = retrievedEntity.Properties.Contains("new_scandate") ? (CrmDateTime)retrievedEntity["new_scandate"] : CrmDateTime.Now;
            string period = retrievedEntity.Properties.Contains("new_periodical") ? (string)retrievedEntity["new_periodical"]: string.Empty;
            double hours = Convert.ToDouble(period);
            DateTime time = Convert.ToDateTime(sdt.Value);
            CrmDateTime dateTime = new CrmDateTime();
            dateTime.Value = time.AddHours(hours).ToString("yyyy-MM-ddTHH:mm:ss")+"+03:00";
           
 //Обновление записи в CRM
            DynamicEntity myDEUpdate = new DynamicEntity();
            myDEUpdate.Name = "new_web";
            KeyProperty myContactGuid = new KeyProperty();
            myContactGuid.Name = "new_webid";
            Key myContactKey=new Key();
            myContactKey.Value=_entityid; //идентификатор записи породившей бизнес-процесс
            myContactGuid.Value = myContactKey;
            myDEUpdate.Properties.Add(myContactGuid);
            // Create a StringProperty with the new updated value
            StringProperty myDateU = new StringProperty();
            myDateU.Name = "new_scandate";
            myDateU.Value = dateTime.Value; ;
            myDEUpdate.Properties.Add(myDateU);
            try
                {
                myService.Update(myDEUpdate);
                }
            catch (SoapException ex)
                {
                    MessageBox.Show(ex.Detail.InnerXml);
                }
                        
             return base.Execute(executionContext);
        }
Тяжело чтото сказать вразумительное. Отлаживайте.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit