Annulation de création d'observation identique

Fermé
Manu - 3 sept. 2020 à 10:38
 cengiz - 3 sept. 2020 à 16:18
Bonjour,
Voilà dans mon code je voudrais pouvoir annuler la création de mon observation si mon tempDate se retrouve être identique à la celle déjà crée je ne trouve pas comment remplir la partie de mon code ou se situe le commentaire // Arrêter la création ?
Merci à vous !!

 using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;

namespace Plugins
{
    public class ObservationOnCreate : IPlugin
    {
        public object End { get; private set; }

        public void Execute(IServiceProvider serviceProvider)
        {
            // Obtain the organization service reference.
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
            // Check InputParameters
            if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
            {
                try
                {
                    // Obtain the target entity from the input parameters.
                    Entity entity = (Entity)context.InputParameters["Target"];

                    //Convert timestamp for datetime.
                    string tempDate = entity.GetAttributeValue<string>("mso_tempdate");
                    int ts = Int32.Parse(tempDate);
                    DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(ts).ToLocalTime();
                    string formattedDate = dt.ToString("dd-MM-yyyy");

                    entity["msemr_effectiveend"] = dt;

                    QueryExpression query = new QueryExpression(entity.LogicalName);
                    query.ColumnSet.AddColumn("mso_tempdate");
                    query.Criteria.AddCondition("mso_tempdate", ConditionOperator.Equal, "mso_tempdate");

                    EntityCollection variables = service.RetrieveMultiple(query);
                    if (variables != null && variables.Entities.Count > 0)

                    {
                        Entity observationExistante = variables.Entities.FirstOrDefault();
                    }

                    //Comparer le resultat (de la recherche) avec "tempdate"
                    if (entity.GetAttributeValue<string>("mso_tempdate") == tempDate)

                    {
                        //Arreter la creation
                        
                    }

                    // Get attributeValue to create decimal
                    int tempValue = entity.GetAttributeValue<int>("mso_tempvalue");
                    int unit = Math.Abs(entity.GetAttributeValue<int>("mso_tempunit"));

                    string baseValue = tempValue.ToString().Substring(0, unit-1);
                    string decimalValue = tempValue.ToString().Substring(unit - 1, 2);

                    string finalValue = baseValue + "." + decimalValue;

                    entity["msemr_valuetypequantityvalue"] = decimal.Parse(finalValue, CultureInfo.InvariantCulture);

                }
                catch (Exception ex)
                {
                    throw new InvalidPluginExecutionException("An error occured in the plugin:", ex);
                }
            }
            
        }
    }
}


A voir également:

1 réponse

Bonjour de cette façon tu c'est fonctionnel , avec la condition du poids et de la date
CORDIALEMENT ? CENGIZ


int tempValue = entity.GetAttributeValue<int>("mso_tempvalue");

QueryExpression query = new QueryExpression(entity.LogicalName);
query.ColumnSet.AddColumns("mso_tempdate", "mso_tempvalue");
query.Criteria.AddCondition("mso_tempdate", ConditionOperator.Equal, tempDate);
query.Criteria.AddCondition("mso_tempvalue", ConditionOperator.Equal, tempValue);
EntityCollection observations = service.RetrieveMultiple(query);

if (observations.Entities.Count > 0)
{
throw new Exception();
}



Tu peux retirer cette partie :

if (variables != null && variables.Entities.Count > 0)

{
Entity observationExistante = variables.Entities.FirstOrDefault();
}

//Comparer le resultat (de la recherche) avec "tempdate"
if (entity.GetAttributeValue<string>("mso_tempdate") == tempDate)

{
//Arreter la creation

0