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); }
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); }
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); }