コード例 #1
0
 private IEnumerable <XrmPluginStepConfiguration> GetApplicableSteps(string entityName, string messageName,
                                                                     PluginStage stage)
 {
     return(_pluginSteps
            .Where(ps =>
                   (string.IsNullOrEmpty(ps.EntityName) || ps.EntityName == entityName) &&
                   (ps.MessageName == null || ps.MessageName.ToString() == messageName) &&
                   (ps.Stage == PluginStage.Any || ps.Stage == stage))
            .OrderBy(ps => ps.Order));
 }
        private bool IsFromStage(StepFullInfo s, PluginStage stage)
        {
            switch (stage)
            {
            case PluginStage.PreValidation:
                return(s.PluginStep.Stage == 10);

            case PluginStage.Pre:
                return(s.PluginStep.Stage == 20);

            case PluginStage.PostSynch:
                return(s.PluginStep.Stage == 40 && s.PluginStep.ExecutionMode == 0);

            case PluginStage.PostAsych:
                return(s.PluginStep.Stage == 40 && s.PluginStep.ExecutionMode == 1);

            default:
                break;
            }

            return(false);
        }
コード例 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="name">Name of the Sdk Message Processing Step to Create</param>
        /// <param name="configuration">Leave Empty</param>
        /// <param name="mode">Sync or Async (enumeration)</param>
        /// <param name="rank">Default to 10</param>
        /// <param name="stage">Prevalidation, Preoperation or Postoperation</param>
        /// <param name="invocationSource">Parent or Child</param>
        /// <param name="pluginTypeId"></param>
        /// <param name="messageId"></param>
        /// <param name="messageFilterId"></param>
        /// <returns></returns>
        private Guid CreateSdkMessageProcessingStep(string name, string entityName, string configuration, StepMode mode, int rank, PluginStage stage, StepInvocationSource invocationSource, Guid impersonatingUserId)
        {
            Entity step = new Entity("sdkmessageprocessingstep");

            step["name"]                = name;
            step["description"]         = name;
            step["configuration"]       = configuration;
            step["mode"]                = new OptionSetValue(mode.ToInt());
            step["rank"]                = rank;
            step["stage"]               = new OptionSetValue(stage.ToInt());
            step["supporteddeployment"] = new OptionSetValue(0); // Server Only
            step["invocationsource"]    = new OptionSetValue(invocationSource.ToInt());

            Guid sdkMessageId       = GetSdkMessageId("Create");
            Guid sdkMessageFilterId = GetSdkMessageFilterId(entityName, sdkMessageId);

            Guid assemblyId   = GetPluginAssemblyId(ASSEMBLY_NAME);
            Guid pluginTypeId = GetPluginTypeId(assemblyId, PLUGIN_TYPE_NAME);

            step["plugintypeid"]       = new EntityReference("plugintype", pluginTypeId);
            step["sdkmessageid"]       = new EntityReference("sdkmessage", sdkMessageId);
            step["sdkmessagefilterid"] = new EntityReference("sdkmessagefilter", sdkMessageFilterId);

            if (impersonatingUserId != Guid.Empty)
            {
                step["impersonatinguserid"] = new EntityReference("systemuser", impersonatingUserId);
            }

            try
            {
                Guid stepId = service.Create(step);
                return(stepId);
            }
            catch (InvalidPluginExecutionException invalidPluginExecutionException)
            {
                throw invalidPluginExecutionException;
            }
            catch (Exception exception)
            {
                throw exception;
            }
        }
 public Processor(IServiceProvider svcProvider, string logicalName, PluginStage pluginStage, string unsecureConfig = null, string secureConfig = null)
     : base(svcProvider, logicalName, pluginStage, unsecureConfig, secureConfig)
 {
 }
コード例 #5
0
 /// <summary>
 ///  Registers an event to be executed for a specific stage of a message execution for given primary entity.
 /// </summary>
 /// <param name="stage">Stage of execution.</param>
 /// <param name="message">Message, which will fire an event.</param>
 /// <param name="primaryEntity">Logical name of primary entity. Use null if for any entity.</param>
 /// <param name="func">Delegate function, which is invoked on matching registration.</param>
 protected void RegisterEvent(PluginStage stage, PluginMessage message, string primaryEntity, Action <LocalPluginContext> func)
 {
     RegisteredEvents.Add(new Tuple <int, string, string, Action <LocalPluginContext> >((int)stage, message.ToString(), primaryEntity, func));
 }
コード例 #6
0
 public PluginValidationAttribute(string entityName, string message, PluginStage stage)
 {
     EntityName = entityName;
     Message    = message;
     Stage      = stage;
 }
コード例 #7
0
 public IEnumerable <Action <LocalPluginContext> > GetStepEvents(string message, string entityName, PluginStage stage,
                                                                 IEnumerable <string> preImages,
                                                                 IEnumerable <string> postImages)
 {
     return(_pluginSteps
            .Where(s =>
     {
         return
         (s.Message == null || s.Message == message) &&
         (s.EntityName == null || s.EntityName == entityName) &&
         ((int)s.Stage == 0 || s.Stage == stage) &&
         (s.RequiredPreImages.Count == 0 ||
          (preImages != null && !s.RequiredPreImages.Except(preImages).Any())) &&
         (s.RequiredPostImages.Count == 0 ||
          (postImages != null && !s.RequiredPostImages.Except(postImages).Any()));
     }
                   )
            .Select(s => s.PluginAction));
 }
コード例 #8
0
            public PluginStepBuilder Stage(PluginStage stage)
            {
                _pluginStep.Stage = stage;

                return(this);
            }
 public RequireStageAttribute(PluginStage stage)
 {
     _stage = stage;
 }