2016-05-30 8 views
5

Ho il seguente problema:eliminare o rimuovere regola calendario "Time Off Regola" attraverso un plugin o un'applicazione console semplice in C# per il CRM 2015

ho bisogno di eliminare o rimuovere "Regola Tempo Off" dal Regole di un calendario particolare appartenente a un "Equipaggiamento". Questo deve essere fatto in modo che l'apparecchiatura sia disponibile per la pianificazione nel Calendario servizi.

In qualche modo non riesco a capire come farlo.

Sono in grado di recuperare l'oggetto della regola del calendario che deve essere eliminato ma il prossimo passo mi sfugge.

Si prega di essere così gentile da farmi sapere:

  1. può essere fatto tramite C# (SDK)

  2. Qualsiasi risorsa web o una porzione di codice che fa qualcosa di simile.

Il seguente codice mi dà l'errore

L'oggetto che si è tentato di eliminare è associato con un altro oggetto e non possono essere eliminate.

//equip is of Equipment type and is already initialized 
CrmEarlyBound.Calendar cal = (CrmEarlyBound.Calendar)svc.Retrieve("calendar", equip.CalendarId.Id, new ColumnSet(true)); 
Console.WriteLine("Got the user calendar"); 
List<CalendarRule> calendarRules = cal.CalendarRules.ToList(); 
Console.WriteLine("Got the calendar rules " + cal.CalendarRules.ToList().Count); 
foreach (CalendarRule cr in cal.CalendarRules) 
{ 
    if (cr.Description == "Time Off Rule" && cr.StartTime.Value>=DateTime.Now) 
    { 
     Console.WriteLine(cr.StartTime); 
     Calendar calI = (Calendar)svc.Retrieve(cr.InnerCalendarId.LogicalName, cr.InnerCalendarId.Id, new ColumnSet(true)); 
     //svc.Delete(cr.InnerCalendarId.LogicalName, cr.InnerCalendarId.Id); 
    } 
} 

risposta

0

siete quasi arrivati. È necessario rimuovere la raccolta calendarrules & aggiornare l'entità calendar.

public static void ClearCalenderRules(IOrganizationService service, Guid bookableResourceId, DateTime startDate, DateTime endDate) 
{ 
    using (var context = new CrmServiceContext(service)) 
    { 
     var bookableResource = context.BookableResourceSet.Where(b => b.Id == bookableResourceId).FirstOrDefault(); 

     if (bookableResource?.CalendarId != null) 
     { 

      Entity entity = service.Retrieve("calendar", bookableResource.CalendarId.Id, new ColumnSet(true)); 
      EntityCollection entityCollection = (EntityCollection)entity.Attributes["calendarrules"]; 

      int num = 0; 
      List<int> list = new List<int>(); 
      foreach (Entity current in entityCollection.Entities) 
      { 
       DateTime dateTime2 = Convert.ToDateTime(current["starttime"]); 
       if (dateTime2 >= startDate && dateTime2 <= endDate) 
       { 
        list.Add(num); 
       } 

       num++; 
      } 

      list.Sort(); 
      list.Reverse(); 

      for (int i = 0; i < list.Count; i++) 
      { 
       entityCollection.Entities.Remove(entityCollection.Entities[list[i]]); 
      } 

      entity.Attributes["calendarrules"] = entityCollection; 
      service.Update(entity); 
     } 
    } 
} 

source

Problemi correlati