protected override void ExecuteLogic()
        {
            var inputParams  = codeActivity.InputParam.Get(ExecutionContext)?.Split(';').Select(param => param.Trim());
            var autoNumberId = codeActivity.AutoNumberRef.Get(ExecutionContext).Id;

            // get it once to check for generator field update below
            Log.Log("Getting auto-numbering config ...");
            var autoNumberTest =
                (from autoNumberQ in new XrmServiceContext(Service).AutoNumberingSet
                 where autoNumberQ.AutoNumberingId == autoNumberId &&
                 autoNumberQ.Status == AutoNumbering.StatusEnum.Active
                 select autoNumberQ).FirstOrDefault();

            Log.Log("Getting target ...");
            var target = Context.PostEntityImages.FirstOrDefault().Value
                         ?? Service.Retrieve(Context.PrimaryEntityName, Context.PrimaryEntityId, new ColumnSet(true));

            var autoNumberConfig = Helper.PreValidation(Service, target, autoNumberTest, Log, false, false);

            if (autoNumberConfig == null)
            {
                Log.Log("Couldn't find auto-numbering record.", LogLevel.Warning);
                return;
            }

            var autoNumbering = new AutoNumberingEngine(Service, Log, autoNumberConfig, target, target,
                                                        Context.OrganizationId.ToString(), inputParams);
            var result = autoNumbering.GenerateAndUpdateRecord(isUpdate: Context.MessageName == "Update");

            codeActivity.Index.Set(ExecutionContext, result.Index);
            codeActivity.IndexString.Set(ExecutionContext, result.IndexString);
            codeActivity.GeneratedString.Set(ExecutionContext, result.GeneratedString);
        }
예제 #2
0
        protected override void ExecuteLogic()
        {
            xrmContext = new XrmServiceContext(Service)
            {
                MergeOption = MergeOption.NoTracking
            };

            Log.Log("Getting target ...");
            var target = (Entity)Context.InputParameters["Target"];


            var autoNumberConfig = Helper.GetAutoNumberingConfig(target, config,
                                                                 Context as IPluginExecutionContext, Service, Log, out var isBackLogged);

            if (autoNumberConfig == null)
            {
                Log.Log($"Exiting.", LogLevel.Warning);
                return;
            }

            if (autoNumberConfig.FieldLogicalName == null)
            {
                throw new InvalidPluginExecutionException(
                          "Target field must be specified in the config record for plugin execution.");
            }

            var image = target;

            var autoNumbering = new AutoNumberingEngine(Service, Log, autoNumberConfig, target, image,
                                                        Context.OrganizationId.ToString());

            autoNumbering.GenerateAndUpdateRecord(true, false, isBackLogged);
        }
        protected override void ExecuteLogic()
        {
            xrmContext = new XrmServiceContext(Service)
            {
                MergeOption = MergeOption.NoTracking
            };

            Log.Log("Getting target ...");
            var target = (Entity)Context.InputParameters["Target"];


            var autoNumberConfig = Helper.GetAutoNumberingConfig(target, config,
                                                                 Context as IPluginExecutionContext, Service, Log, out var isBackLogged);

            if (autoNumberConfig == null)
            {
                Log.Log($"Exiting.", LogLevel.Warning);
                return;
            }

            if (autoNumberConfig.FieldLogicalName == null)
            {
                throw new InvalidPluginExecutionException(
                          "Target field must be specified in the config record for plugin execution.");
            }

            var image = target;

            // to avoid problems with missing fields that are needed by the parser, fetch the whole record
            // if the format string doesn't contain an attribute reference, then skip
            if (Regex.IsMatch(autoNumberConfig.FormatString, @"{\$.*?}"))
            {
                var columns = Regex.Matches(autoNumberConfig.FormatString, @"{\$.*?}").Cast <Match>()
                              .Select(match => match.Value.Replace("{", "").Replace("}", "").TrimStart('$').Split('$')[0]).ToArray();
                image = Service.Retrieve(target.LogicalName, target.Id, new ColumnSet(columns));

                // update with new values in the pipeline
                foreach (var keyValuePair in target.Attributes)
                {
                    image[keyValuePair.Key] = keyValuePair.Value;
                }
            }

            var autoNumbering = new AutoNumberingEngine(Service, Log, autoNumberConfig, target, image,
                                                        Context.OrganizationId.ToString());

            autoNumbering.GenerateAndUpdateRecord(false, true, isBackLogged);
        }
예제 #4
0
        protected override void ExecuteLogic()
        {
            xrmContext = new XrmServiceContext(service)
            {
                MergeOption = MergeOption.NoTracking
            };

            log.Log("Getting target ...");
            var target = (Entity)context.InputParameters["Target"];


            var autoNumberConfig = Helper.GetAutoNumberingConfig(target, config, context, service, log, out var isBackLogged);

            if (autoNumberConfig == null)
            {
                log.Log($"Exiting.", LogLevel.Warning);
                return;
            }

            if (autoNumberConfig.FieldLogicalName == null)
            {
                throw new InvalidPluginExecutionException(
                          "Target field must be specified in the config record for plugin execution.");
            }

            if (!context.PostEntityImages.Any())
            {
                throw new InvalidPluginExecutionException("Couldn't find post-image for record.");
            }

            var image = context.PostEntityImages.First().Value;

            var autoNumbering = new AutoNumberingEngine(service, log, autoNumberConfig, target, image,
                                                        context.OrganizationId.ToString());

            autoNumbering.GenerateAndUpdateRecord(true, true, isBackLogged);
        }