/// <summary> /// vérifie la configuration du service /// </summary> public static void CheckConfiguration() { _isConfigured = true; try { Log.Info("Vérification du paramètrage service ..."); if (!ConfigurationManager.AppSettings.HasKeys()) { throw new Exception("aucune clé de configuration déclarée"); } //construit la liste des params attendus List <string> cfgList = new List <string>(); //on a systématiquement pour "dataindex" la donnée "tagscan" cfgList.AddRange(("csBatch,inputfolder,outputfolder,tempfolder,model,modelpages,dataindex,overlayx,overlayy").Split(',')); //on verifie les params foreach (var p in cfgList) { var param = string.Empty; if (ConfigurationManager.AppSettings.AllKeys.Contains(p)) { param = ConfigurationManager.AppSettings[p]; } else { _isConfigured = false; param = $"Clé {p} attendue non déclarée"; } switch (p) { case "csBatch": if (IsConfigured) { _connectionString = param; } Log.Info($"Chaîne de connexion : {param}"); break; case "inputfolder": if (IsConfigured) { _inputFolderPath = param.Equals(string.Empty) ? Directory.GetCurrentDirectory() : param; } Log.Info($"Répertoire d'entrée : {param}"); break; case "outputfolder": if (IsConfigured) { _outputFolderPath = param.Equals(string.Empty) ? Directory.GetCurrentDirectory() : param; } Log.Info($"Répertoire de sortie : {param}"); break; case "tempfolder": if (IsConfigured) { //comme on respecte l'ordre de traitement de la liste cfgList //OutputFolderPath sera l'alternative par défaut pour le répertoire temporaire _tempFolder = param.Equals(string.Empty) ? Path.Combine(OutputFolderPath, "temp\\") : param; } Log.Info($"Répertoire temporaire : {param + (TempFolder.Equals(OutputFolderPath)? " (par défaut)" :string.Empty)}"); break; case "model": if (IsConfigured) { //ici le fichier model est obligatoire on lève une exception si ce dernier n'est pas déclaré if (param.Equals(string.Empty)) { throw new Exception("fichier modèle n'est pas déclaré dans le fichier de configuration"); } _pdfModel = param; } Log.Info($"Fichier modèle : {param}"); break; case "modelpages": if (IsConfigured) { //valeur 0 couvre toutes les pages du document modèle (par défaut) _modelPageNumber = param.Equals(string.Empty) ? "0" : param; } Log.Info($"Page(s) du modèle à fusionner : {param + (ModelPageNumber.Equals("0") ? " (par défaut)" : string.Empty)}"); break; case "dataindex": if (IsConfigured) { if (ConfigurationManager.AppSettings.AllKeys.Contains("tagscan")) { if (string.IsNullOrWhiteSpace(ConfigurationManager.AppSettings["tagscan"])) { throw new Exception("Valeur paramètre tagscan non définie"); } else { _tagBegin = "<" + ConfigurationManager.AppSettings["tagscan"] + ">"; _tagEnd = "</" + ConfigurationManager.AppSettings["tagscan"] + ">"; } } else { throw new Exception("Paramètre tagscan non défini"); } //si une définition des positions à trouver "donnée:indice" séparées par "," //sinon on scan le texte pour extraire l'info (par défaut) _dataIndex = param.Equals(string.Empty) ? "scan" : param; if (!param.Equals("scan")) { //controle des definitions var lst = param.Split(','); if (lst.Length > 0) { foreach (var x in lst) { if (x.Split(':').Length < 2) { throw new Exception("Paramètre DataIndex mal formaté : Format attendu [nom:valeur],[nom:valeur] ..."); } } } else { throw new Exception("Paramètre DataIndex non défini"); } } } Log.Info($"Positions des Données à extraire : {param}"); break; case "overlayx": if (IsConfigured) { //positionne à 0 par défaut _overlayX = param.Equals(string.Empty) ? 0 : int.Parse(param); } Log.Info($"Position x du pdf texte : {param}"); break; case "overlayy": if (IsConfigured) { //positionne à 0 par défaut _overlayY = param.Equals(string.Empty) ? 0 : int.Parse(param); } Log.Info($"Position y du pdf texte : {param}"); break; default: throw new Exception($"la valeur clé '{p}' ne possède pas de cas de traitement"); } } Log.Info(IsConfigured ? "Paramétrage OK" : "Paramétrage KO"); } catch (Exception e) { _isConfigured = false; Log.Error("ServiceCfg.CheckConfiguration : " + e.Message); } }