Показать сообщение отдельно
Старый 10.05.2009, 14:38   #1  
Андрей Фоменко is offline
Андрей Фоменко
Участник
 
3 / 10 (1) +
Регистрация: 10.05.2009
Адрес: Москва
Как изменить statuscode и statecode "настраиваемого объекта" (своей сущности)
Никак не получается изменить с помощью plug-in статус объектов.
В упрощенном варианте требуется при создании объекта ( скажем созданная мной сущность "dp_bonus licence" ) все остальные объекты сделать неактивными.

Пробовал два варианта:
1.Одновременно в запросе изменять statecode на "Inactive" и statuscode на 2 (сразу ошибка "недопустимый код состояния либо недопустимый код статуса для указанного кода состояния").
2. Сначала изменить statecode ( проходит), потом statuscode (дает ошибку "недопустимый код состояния либо недопустимый код статуса для указанного кода состояния" )

Вот фрагменты

Код:
//Формирую Запрос
                QueryExpression query = new QueryExpression();
                query.EntityName = "dp_bonus_licence";
                ColumnSet cols = new ColumnSet();
                cols.Attributes.Add("statuscode");
                cols.Attributes.Add("statecode");
                query.ColumnSet = cols;

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

                RetrieveMultipleResponse rmOut = (RetrieveMultipleResponse)сrmService.Execute(rm);
//запрос работает - все statecode имеют значение "Active", а statuscode значение 1(проверял)
//В неактивном состоянии объекты имеют значение "Inаctive", а statuscode значение 2(так же проверял запросом (деактивировал объекты вручную из CRM)
//Теперь пытаюсь изменить значения statuscode и statecode
//первый вариант дает ошибку сразу "недопустимый код состояния либо недопустимый код статуса для указанного кода состояния")

                BusinessEntityCollection CliObj = rmOut.BusinessEntityCollection;
                int i = CliObj.BusinessEntities.Count;
                if (i > 0)
                {
                    foreach (BusinessEntity be in CliObj.BusinessEntities)
                    {                       
                       ((DynamicEntity)be).Properties.Remove("statuscode");
                       ((DynamicEntity)be).Properties.Remove("statecode");
                       ((DynamicEntity)be).Properties.Add(new StateProperty("statecode", "Inactive"));
                       ((DynamicEntity)be).Properties.Add(new StatusProperty("statuscode", new Status(2)));
                       crmService.Update(be);//здесь ошибка лезет
                    }

//Второй вариант устанавливает statecode в Inactive,а при записи statuscode ошибка    "недопустимый код состояния либо недопустимый код статуса для указанного кода состояния".

                BusinessEntityCollection CliObj = rmOut.BusinessEntityCollection;
                int i = CliObj.BusinessEntities.Count;
                if (i > 0)
                {
                    foreach (BusinessEntity be in CliObj.BusinessEntities)
                    {                       
                       ((DynamicEntity)be).Properties.Remove("statuscode");
                       ((DynamicEntity)be).Properties.Remove("statecode");
                       ((DynamicEntity)be).Properties.Add(new StateProperty("statecode", "Inactive"));
                       crmService.Update(be);//это проходит
                    }
                    foreach (BusinessEntity be in CliObj.BusinessEntities)
                    {
                       ((DynamicEntity)be).Properties.Remove("statecode");
                        ((DynamicEntity)be).Properties.Add(new StatusProperty("statuscode",new Status(2)));
                         crmService.Update(be);//ошибка лезет
                    }
                }
Может кто подаст идею как это возможно сделать.
Инфу обыскался - нигде ничего на этот счет не нашел.
Пасиб

Последний раз редактировалось Андрей Фоменко; 10.05.2009 в 14:54.