получить календарьru от servicenameid - PullRequest
0 голосов
/ 07 декабря 2018

В Dynamics 365 (в помещении) мне нужно удалить ограничения служб, связанные с конкретной службой.Похоже, они хранятся в "calendarrules", но когда я пытаюсь найти некоторую информацию в своей коллекции calendarrule, я не вижу никаких атрибутов, похожих на "ServiceNameId".Я нашел информацию, что это можно сделать, просто изменив записи в правиле календаря и обновив исходный календарь, поэтому я пытаюсь сделать это следующим образом, но не вижу атрибутов, ссылающихся на сервисы.

Я получаю коллекцию следующим образом:

SystemUser user = service.Retrieve(SystemUser.EntityLogicalName, UserId, new ColumnSet("calendarid")).ToEntity<SystemUser>();
            Calendar userCalendar = service.Retrieve(Calendar.EntityLogicalName, user.CalendarId.Id, new ColumnSet(true)).ToEntity<Calendar>();

            EntityCollection entityCollection = (EntityCollection)userCalendar.Attributes["calendarrules"];

1 Ответ

0 голосов
/ 10 декабря 2018

Хорошо, его можно найти во внутренних календарях и обновить таким образом:

SystemUser user = service.Retrieve(SystemUser.EntityLogicalName, serviceappointment.OwnerId.Id, new ColumnSet("calendarid")).ToEntity<SystemUser>();
                    Calendar userCalendar = service.Retrieve(Calendar.EntityLogicalName, user.CalendarId.Id, new ColumnSet(true)).ToEntity<Calendar>();

                    EntityCollection entityCollection = (EntityCollection)userCalendar.Attributes["calendarrules"];
                    foreach (Entity ent in entityCollection.Entities)
                    {
                        int num = 0;
                        Entity newEntity = service.Retrieve("calendar", ((EntityReference)ent.Attributes["innercalendarid"]).Id, new ColumnSet(true));

                        EntityCollection calendarRules = (EntityCollection)newEntity.Attributes["calendarrules"];

                        List<int> list = new List<int>();

                        foreach (CalendarRule cr in calendarRules.Entities)
                        {
                            if (cr.ServiceId != null)
                            {
                                list.Add(num);
                            }
                            num++;
                        }

                        for (int i = 0; i < list.Count; i++)
                        {
                            calendarRules.Entities.Remove(calendarRules.Entities[list[i]]);
                        }
                        newEntity.Attributes["calendarrules"] = calendarRules;
                        service.Update(newEntity);

                    }

Возможно, есть более простой способ, но пока этого достаточно

...