Mon processus ArcGIS Data Interoperability ETL se déroulait bien mais soudainement son écrivain ArcGIS Online Feature Service a généré une erreur qui a interrompu mon espace de travail, le message d'erreur ressemblait à ceci :<\/P>
Le code d'erreur du serveur était '400' et le message était : ''. Détails : 'Le champ public_description contient un contenu html invalide.<\/FONT><\/P>Les données proviennent d'un site 311 d'un gouvernement local - le champ public_description est l'endroit où le public a saisi les détails de leur demande de service. Comment du HTML s'est-il retrouvé là ? Qu'est-ce qui était invalide à ce sujet ? Comment puis-je renforcer ma traduction pour détecter ce genre de chose ?<\/P>Après beaucoup d'investigations et en me promettant de reparler de la gestion du rejet par l'écrivain avec Safe encore, j'ai trouvé les données fautives. L'enquête m'a rappelé les cours de mathématiques quand nous avons travaillé la méthode regula falsi d'Isaac Newton, en activant la mise en cache et en utilisant deux transformateurs Sampler pour cerner le coupable jusqu'à ce que je le trouve. Ce n'était même pas du HTML, c'était un email entre crochets : <somebody@hotmail.com><\/STRONG>.<\/P>D'accord, ai-je pensé, il est raisonnable de mettre un email dans un champ texte libre. Pourquoi le service de fonctionnalités est-il si pointilleux à ce sujet ?<\/P>Il s'avère que les services de fonctionnalités ont un paramètre (activé par défaut) qui bloque les contenus potentiellement nuisibles. J'ai plusieurs choix. Si mes données contenaient vraiment du contenu HTML, je pourrais encoder en pourcentage le champ avec le TextEncoder en mode HTML, je pourrais encoder manuellement les crochets en < et >, je pourrais supprimer tout ce qui est dans des balises avec StringReplacer et une expression régulière <.*><\/STRONG>, ou je pourrais changer la propriété du service et laisser passer les données. Disons que je choisis cette dernière option.<\/P>Je dois utiliser un appel REST API admin. La propriété que je dois modifier est xssPreventionInfo.<\/P>Pour cela, dans votre navigateur connecté en tant que propriétaire du service, allez dans la section Contenu de l'application Home et naviguez jusqu'à l'élément du service de fonctionnalités. En bas à droite se trouve un contrôle qui vous permet de Voir l'API REST de l'élément :<\/P>
<\/span><\/P>Allez-y dans votre navigateur (votre URL sera bien sûr différente).<\/P>https:\/\/services.arcgis.com\/FQD0rKU8X5sAQfh8\/arcgis\/rest\/services\/Get_It_Done_311_Requests\/FeatureServer?token=<yourtoken><\/A><\/P>Pour accéder à l'API admin, insérez le mot 'admin' entre 'rest' et 'services' :<\/P>
https:\/\/services.arcgis.com\/FQD0rKU8X5sAQfh8\/ArcGIS\/rest\/admin\/services\/Get_It_Done_311_Requests\/FeatureServer?token=<yourtoken><\/A><\/P>Puis en bas de la page, allez au point de terminaison UpdateDefinition:<\/P>
https:\/\/services.arcgis.com\/FQD0rKU8X5sAQfh8\/ArcGIS\/rest\/admin\/services\/Get_It_Done_311_Requests\/FeatureServer\/updateDefinition?token=<yourtoken><\/A><\/P>Cherchez maintenant la propriété xssPreventionInfo, définissez la valeur pour xssInputRule sur sanitizeInvalid:<\/STRONG><\/P>
<\/span><\/P>Cliquez sur le bouton Update Service Definition et vérifiez que cela se termine correctement. Maintenant vous pouvez écrire du HTML et des choses comme <somebody@hotmail.com> dans votre service de fonctionnalités !<\/P>