/// <summary> /// Queues the generated values in the Batch using the settings. Returns the most current Setting Value /// </summary> /// <returns></returns> public static dlab_AutoNumbering EnqueueNextBatch(IOrganizationService service, dlab_AutoNumbering setting, Queue <string> queue, ITracingService log) { int currentNumber; if (string.IsNullOrWhiteSpace(setting.RowVersion)) { log.Trace("No Row Version found. Performing Non-Thread Safe Update."); // CRM 7.1.1.4210 currently has a bug where the row version is not being returned from within a plugin. // This should get fixed in the near future. This will serve as a stop gap until then setting = service.GetEntity <dlab_AutoNumbering>(setting.Id); currentNumber = setting.IncrementNextNumber(); log.Trace("Grabbing values {0} to {1} and updating setting.", currentNumber, setting.dlab_NextNumber - 1); service.Update(setting.CreateUpdateNextNumberEntity()); setting.EnqueueBatchValues(queue, currentNumber); return(setting); } log.Trace("Row Version found. Performing Thread Safe Update."); currentNumber = setting.IncrementNextNumber(); log.Trace("Grabbing values {0} to {1} and updating setting.", currentNumber, setting.dlab_NextNumber - 1); service.OptimisticUpdate( setting.CreateUpdateNextNumberEntity(), s => { setting = s; currentNumber = s.IncrementNextNumber(); return(s.CreateUpdateNextNumberEntity()); }); setting.EnqueueBatchValues(queue, currentNumber); return(setting); }
/// <summary> /// Queues the generated values in the Batch using the settings. Returns the most current Setting Value /// </summary> /// <returns></returns> public static dlab_AutoNumbering EnqueueNextBatch(IOrganizationService service, dlab_AutoNumbering setting, Queue <string> queue) { int currentNumber; if (string.IsNullOrWhiteSpace(setting.RowVersion)) { // ***** Fixed in 7.1.1.4309 ***** // CRM 7.1.1.4210 currently has a bugg where the row version is not being returned from within a plugin. // This should get fixed in the near future. This will serve as a stop gap until then //setting = service.GetEntity<dlab_AutoNumbering>(setting.Id); //currentNumber = setting.IncrementNextNumber(); //service.Update(setting.CreateUpdateNextNumberEntity()); //setting.EnqueueBatchValues(queue, currentNumber); //return setting; throw new InvalidPluginExecutionException("Row Version returned from the server was null! Unable to guarantee Uniqueness! This was a bug in 7.1.1.4210 that was fixed in 7.1.1.4309"); } currentNumber = setting.IncrementNextNumber(); service.OptimisticUpdate( setting.CreateUpdateNextNumberEntity(), s => { setting = s; currentNumber = s.IncrementNextNumber(); return(s.CreateUpdateNextNumberEntity()); }); setting.EnqueueBatchValues(queue, currentNumber); return(setting); }