Показать сообщение отдельно
Старый 19.11.2009, 12:34   #62  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
Воспользовался данным примером, но поле 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);
        }