private void UpdateRule( IPluginContext context, AutoNumberingRule rule, Int32 number, DateTime date) { var update = new Entity(rule.TypeName, rule.Id); context.TracingService.Trace($"Set {rule.TypeName}.{AutoNumberingRuleEntity.LastNumberFieldName}='{number}'"); update.AddOrUpdateAttribute(AutoNumberingRuleEntity.LastNumberFieldName(_prefix), number); if (rule.IsYearly()) { context.TracingService.Trace($"Set {rule.TypeName}.{AutoNumberingRuleEntity.LastYearFieldName}='{date.Year}'"); update.AddOrUpdateAttribute(AutoNumberingRuleEntity.LastYearFieldName(_prefix), date.Year); } else if (rule.IsDaily()) { context.TracingService.Trace($"Set {rule.TypeName}.{AutoNumberingRuleEntity.LastDayFieldName}='{date}'"); update.AddOrUpdateAttribute(AutoNumberingRuleEntity.LastDayFieldName(_prefix), date); } context.OrganizationService.Update(update); }
private Int32 GetLastNumber(IPluginContext context, AutoNumberingRule rule, Entity parent, DateTime today) { var entityReference = default(EntityReference); var lastNumberAttribute = default(String); var lastYearAttribute = default(String); var lastDayAttribute = default(String); if (rule.IsParented()) { entityReference = parent.ToEntityReference(); lastNumberAttribute = rule.LastNumberAttributeName; lastYearAttribute = rule.LastYearAttributeName; lastDayAttribute = rule.LastDayAttributeName; } else { entityReference = rule.ToEntityReference(); lastNumberAttribute = AutoNumberingRuleEntity.LastNumberFieldName(_prefix); lastYearAttribute = AutoNumberingRuleEntity.LastYearFieldName(_prefix); lastDayAttribute = AutoNumberingRuleEntity.LastDayFieldName(_prefix); } if (lastNumberAttribute.IsNullOrEmpty()) { throw new InvalidPluginExecutionException("Invalid auto-numbering configuration. Missing last number attribute name."); } if (rule.IsYearly() && lastYearAttribute.IsNullOrEmpty()) { throw new InvalidPluginExecutionException("Invalid auto-numbering configuration. Missing last year attribute name."); } if (rule.IsDaily() && lastDayAttribute.IsNullOrEmpty()) { throw new InvalidPluginExecutionException("Invalid auto-numbering configuration. Missing last day attribute name."); } var attributes = new[] { lastNumberAttribute, lastYearAttribute, lastDayAttribute }; var entity = context.OrganizationService.Retrieve( entityReference.LogicalName, entityReference.Id, attributes.Where(o => !o.IsNullOrEmpty()).ToArray()); var number = entity.GetAttributeValue <Int32?>(lastNumberAttribute); if (rule.IsYearly() && today.Year != entity.GetAttributeValue <Int32?>(lastYearAttribute)) { return(0); } else if (rule.IsDaily() && today != entity.GetAttributeValue <DateTime?>(lastDayAttribute)) { return(0); } return(number ?? 0); }