コード例 #1
0
 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());
     }
 }
コード例 #2
0
        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);
                }
            }
        }
コード例 #3
0
 protected override void ExecuteInternal(LocalPluginContext context)
 {
     throw new NotImplementedException("Plugin is designed to only work for ProcessStateChange, RegisterIncrementor, and UnregisterIncrementor Methods");
 }
コード例 #4
0
 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();
 }
コード例 #5
0
 private EntityReference GetCreateMessageId(LocalPluginContext context)
 {
     var message = context.SystemOrganizationService.GetFirst<SdkMessage>(m => new { m.Id }, SdkMessage.Fields.Name, "Create");
     return message.ToEntityReference();
 }
コード例 #6
0
 /// <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);
 }