protected void ProcessStateChange(LocalPluginContext context) { var target = context.GetTarget<dlab_AutoNumbering>(); switch (target.statecode) { case dlab_AutoNumberingState.Active: // Register Plugin if it doesn't exist var settings = context.OrganizationService.GetEntity<dlab_AutoNumbering>(context.PrimaryEntity.Id); if (settings.dlab_PluginStepId == null || context.SystemOrganizationService.GetEntityOrDefault<SdkMessageProcessingStep>(Guid.Parse(settings.dlab_PluginStepId)) == null) { RegisterIncrementor(context); } break; case dlab_AutoNumberingState.Inactive: // Unregister Plugin UnregisterIncrementor(context); break; case null: break; default: throw new EnumCaseUndefinedException<dlab_AutoNumberingState>(target.statecode.GetValueOrDefault()); } }
protected override void ExecuteInternal(LocalPluginContext context) { var target = context.GetTarget <Entity>(); var autoNumberManagers = AutoNumberManagersByEntity.GetOrAddSafe(_settingLock, target.LogicalName, logicalName => context.SystemOrganizationService.GetEntities <dlab_AutoNumbering>(dlab_AutoNumbering.Fields.dlab_EntityName, logicalName). Select(s => new AutoNumberManager(s)).ToArray()); if (autoNumberManagers.Length == 0) { throw new InvalidPluginExecutionException("No Auto-Number Settings found for Entity " + target.LogicalName); } // ReSharper disable once ForCanBeConvertedToForeach - Not sure if a foreach enumeration is thread safe for (var i = 0; i < autoNumberManagers.Length; i++) { var manager = autoNumberManagers[i]; // Lock here so the settings entity won't be updated in the middle of processing the record lock (manager) { SetAutoNumber(context, target, manager); } } }
protected override void ExecuteInternal(LocalPluginContext context) { throw new NotImplementedException("Plugin is designed to only work for ProcessStateChange, RegisterIncrementor, and UnregisterIncrementor Methods"); }
private EntityReference GetMessageFilterId(LocalPluginContext context, string entityName, Guid sdkMessage) { var filter = context.SystemOrganizationService.GetFirst<SdkMessageFilter>(f => new { f.Id }, SdkMessageFilter.Fields.PrimaryObjectTypeCode, entityName, SdkMessageFilter.Fields.SdkMessageId, sdkMessage); return filter.ToEntityReference(); }
private EntityReference GetCreateMessageId(LocalPluginContext context) { var message = context.SystemOrganizationService.GetFirst<SdkMessage>(m => new { m.Id }, SdkMessage.Fields.Name, "Create"); return message.ToEntityReference(); }
/// <summary> /// Triggers the next number generation. Updates the Setting of the manager /// </summary> /// <param name="context">Plugin Context</param> public void EnqueueBatch(LocalPluginContext context) { Setting = dlab_AutoNumbering.EnqueueNextBatch(context.SystemOrganizationService, Setting, AutoNumberBatch); }