Exemplo n.º 1
0
        // 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);
        }
Exemplo n.º 2
0
 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());
             }
         }
     }
 }