// see if there are any increment settings for this entity public static AutoNumberHelper GetSettings(IOrganizationService service, string entityName) { AutoNumberHelper setting = null; QueryByAttribute query = new QueryByAttribute(); query.Attributes.AddRange(new string[] { AutoNumberHelper.Fields.EntidadeDestino }); query.ColumnSet = new ColumnSet(new string[] { AutoNumberHelper.Fields.EntidadeDestino, AutoNumberHelper.Fields.AtributoDestino, AutoNumberHelper.Fields.Numero, AutoNumberHelper.Fields.Prefixo, AutoNumberHelper.Fields.Postfixo }); query.EntityName = AutoNumberHelper.entityLogicalName; query.Values.AddRange(new object[] { entityName }); //Execute using a request to test the OOB (XRM) message contracts RetrieveMultipleRequest request = new RetrieveMultipleRequest(); request.Query = query; Collection <Entity> entityList = ((RetrieveMultipleResponse)service.Execute(request)).EntityCollection.Entities; if (entityList.Count > 0) // no error checkig to see if there are 2 incrementors set for the same entity { setting = new AutoNumberHelper(entityList[0]); } return(setting); }
protected override void OnExecute() { if (Contexto.InputParameters.Contains("Target") && Contexto.InputParameters["Target"] is Entity && Contexto.Stage == (int)Stagio.PreEvento) { Entity entity = Contexto.InputParameters["Target"] as Entity; lock (SyncLock) { try { var setting = AutoNumberHelper.GetSettings(this.Service, entity.LogicalName); if (setting != null) { string valorAtual = entity.Contains(setting.AtributoDestino) ? entity[setting.AtributoDestino] as string : string.Empty; if (string.IsNullOrEmpty(valorAtual)) { int next = setting.Numero + 1; string nextAlternateClientNumber = $"{setting.Prefix}-{next}-{setting.Postfix}"; if (entity.Contains(setting.AtributoDestino)) { entity[setting.AtributoDestino] = nextAlternateClientNumber; } else { entity.Attributes.Add(setting.AtributoDestino, nextAlternateClientNumber); } setting.Increment(this.Service, next); } } } catch (Exception ex) { throw new InvalidPluginExecutionException(ex.ToString()); } } } }