Définition de contraintes spécifiques sur un jeu de données

La fonction Ajouter une contrainte spécifique sur le jeu de données permet de créer une nouvelle contrainte avec une fonction python. Cela permet d’effectuer des calculs de valeurs sur l’ensemble d’un jeu de données. La fonction retourne un booléen en fonction du résultat du calcul.

==> Erreurs retournées : E0035 (Non-respect d’une contrainte spécifique Type (définie par code) sur l’entité).

==> Erreurs retournées : E0045 (Violation de la contrainte Python sur l’entité).

../../_images/contrainte_jeu_de_donnes.PNG

Dans l’exemple ci -dessus, l’utilisateur définit un nom de contrainte. Il sélectionne ensuite la fonction Python à utiliser. Les fonctions sont directement éditables en cliquant sur le bouton + qui vous redirige vers l’interface de code.

Par exemple, la fonction python CheckFeatureNumber ci-dessous permet le contrôle du nombre de bâtiments et retourne une erreur si le nombre total dépasse 50.

Trois arguments sont implémentés : le nom du type d’entité, le nombre minimal et le nombre maximal :

    # coding: utf-8
    import fmeobjects
     
    # CheckFeatureNumber([feature_type, min, max]).
    # Utiliser "None" pour l'absence de paramètre min ou max.
    # Exemple d'appel :  CheckFeatureNumber(['DPT',None ,50]), le nombre de DPT ne doit pas dépasser 50.
    # Le nombre d'enregistrements du type d'entité doit être compris entre les valeurs min et max, sinon une erreur est générée.
    class CheckFeatureNumber:
    	def __init__(self, arg):
    		#arg[0] = nom du type d'entité
    		#arg[1] = nombre minimal d'enregistrements
    		#arg[2] = nombre maximal d'enregistrements
    		self.logger = fmeobjects.FMELogFile()
    		self.logger.logMessageString('arguments = ' + arg[0] +':'+str(arg[1])+':'+str(arg[2]),1)
    		self.ft = arg[0]
    		self.min = arg[1]
    		self.max = arg[2]
    		self.count = 0
    
    	def input(self,feature):
    		if feature.getAttribute('fme_feature_type') == self.ft:
    			self.count +=1	
    			if self.count == 1:
    				self.feature=feature  
    
    
    	def process(self):
    		self.errorFeatureList = []
    		self.logger.logMessageString('self.count = ' + str(self.count),1)
    		if hasattr(self, "feature"):
    			if self.min != None:
    				if self.count < self.min :
    					self.feature.setAttribute('_message','Le nombre d\'enregistrements du type d\'entité ' + self.ft + ' est inférieur à ' + str(self.min)+' : '+str(self.count))
    					self.errorFeatureList.append(self.feature)
    			if self.max != None and self.errorFeatureList == []:       
    				if self.count > self.max :
    					self.feature.setAttribute('_message','Le nombre d\'enregistrements du type d\'entité ' + self.ft + ' est supérieur à ' + str(self.max)+' : '+str(self.count))
    					self.errorFeatureList.append(self.feature)
    		return self.errorFeatureList