public void Execute(IServiceProvider serviceProvider)
        {
            // Récupération des services liés aux plugins
            var ps = new PluginServices(serviceProvider);

            try
            {
                // Si ce plugin ne s'exécute pas dans le cadre de l'entité
                // attendue, on annule le traitement
                if (ps.Context.PrimaryEntityName != "mctools_parameter")
                {
                    return;
                }

                switch (ps.Context.Stage)
                {
                case PluginStage.PreOperation:
                {
                    switch (ps.Context.MessageName)
                    {
                    case PluginMessage.Create:
                    {
                        var inputData =
                            (Entity)ps.Context.InputParameters[PluginInputParameters.Target];

                        if (ParameterWithSameLogicalNameExists(
                                inputData["mctools_logicalname"].ToString(),
                                ps.GetIOrganizationService(true)))
                        {
                            throw new InvalidPluginExecutionException(
                                      "Un paramètre avec ce nom existe déjà!");
                        }

                        CopyLocalToGlobal(inputData, null, ps.GetIOrganizationService(true), ps);
                        CleanOtherAttributesValue(inputData);
                    }
                    break;

                    case PluginMessage.Update:
                    {
                        var inputData = (Entity)ps.Context.InputParameters[PluginInputParameters.Target];
                        var preImage  = ps.Context.PreEntityImages["Image"];

                        CopyLocalToGlobal(inputData, preImage, ps.GetIOrganizationService(true), ps);

                        if (inputData.Contains("mctools_valuetype"))
                        {
                            CleanOtherAttributesValue(inputData, preImage);
                        }
                    }
                    break;
                    }
                }
                break;
                }
            }
            catch (Exception error)
            {
                ps.Trace(error.ToString());
                throw new InvalidPluginExecutionException(error.Message);
            }
        }