Suite

Utilisation de la fonction REPLACE dans ArcGIS Server Query - Est-elle prise en charge ?

Utilisation de la fonction REPLACE dans ArcGIS Server Query - Est-elle prise en charge ?


Je travaille sur une application Flex pour un client qui remplacera une application héritée écrite en .net/adf. Dans leur base de code actuelle, ils utilisent une requête ADF avec une fonction Replace à l'intérieur de la clause where.

adfQueryFilter.WhereClause = "REPLACE(TMS,'-',") comme '%" + ColValue + "%'" ;

La raison en est qu'ils ont plusieurs tables de parcelles et que chaque table a une colonne TMS sur laquelle ils interrogent. Les valeurs TMS pour chaque table ont des groupements de nombres uniques tels que ###-##-##-### ou ####-##-##-## etc. La cohérence est qu'elles contiennent toutes 10 chiffres . La variable ColValue ci-dessus contiendra une séquence de nombres SANS tiret (exemple : ##########). ColValue n'existe que dans leurs données de cette manière et ne peut pas être converti en un format à trait d'union sans règles de configuration et codage. Cette configuration et ce codage supplémentaires sont ce que j'essaie d'éviter si possible, et la fonction Remplacer semble être capable de faire exactement cela - dans ADF de toute façon.

La question est donc de savoir si REPLACE peut être utilisé dans une requête ArcGIS Server ou est-il uniquement pris en charge par ADF ?

La requête suivante générera une sélection dans ArcMap : Select * from ParcelTable où : REMPLACER(TMS,'-',") COMME '%63%'

Cependant, lorsque j'essaie cette même requête sur le point de terminaison de repos d'ArcGIS Server, elle échoue.

Il s'agit d'un service de carte ArcGIS 10.2.1 pour l'instant.

Merci pour toute contribution à ce sujet!


Bien sûr, juste après avoir posté ceci, je trouve la réponse. Dans la version 10.2, ESRI a automatiquement activé les requêtes standardisées, ce qui supprime la possibilité d'utiliser des fonctions spécifiques à la base de données dans les requêtes sur les services de carte ArcGIS Server. Les instructions pour désactiver ce paramètre sont disponibles sur la page À propos des requêtes standardisées :

Il convient de noter à partir de cette page (sous la rubrique « Désactivation des requêtes standardisées ») que :

En désactivant cette option de sécurité, votre site devient plus vulnérable aux attaques par injection SQL.

alors gardez cela à l'esprit si vous êtes confronté à un problème similaire.

J'ai également trouvé une solution de contournement qui a fonctionné dans ma situation. Cette solution de contournement m'a permis de laisser l'interrogation standardisée activée (ce qui signifie aucune fonctionnalité de remplacement et plus sécurisée). J'ai simplement ajouté des caractères génériques entre chaque caractère de la valeur de recherche, ce qui m'a permis de changer la requête en un simple Where TMS = '%6%3%x%%x%…'

Ajouter simplement ceci dans l'espoir que cela aide quelqu'un qui ne peut pas désactiver la requête standardisée en raison de l'implication de la sécurité.


Pour couper des deux côtés, utilisez :

Je suppose qu'il s'agit d'un exercice de nettoyage de données ponctuel. Une fois cela fait, assurez-vous d'ajouter des contraintes de base de données pour éviter de mauvaises données à l'avenir, par ex.

Pensez également à interdire d'autres caractères (tabulation, retour chariot, saut de ligne, etc.) qui peuvent causer des problèmes.

C'est peut-être aussi le bon moment pour diviser ces noms en family_name , first_name , etc :)

dans SQL Server 2008 r2 avec l'expression ssis, nous avons la fonction trim.

SQL Server Integration Services (SSIS) est un composant du logiciel de base de données Microsoft SQL Server qui peut être utilisé pour effectuer un large éventail de tâches de migration de données.

vous pouvez trouver la description complète sur ce lien

mais cette fonction a en elle-même certaines limitations qui sont également mentionnées par msdn sur cette page. mais c'est dans serveur SQL 2008 r2

Version étendue de "REPLACE":

Pour couper n'importe quel ensemble de caractères du début et de la fin d'une chaîne, vous pouvez effectuer le code suivant où @TrimPattern définit les caractères à couper. Dans cet exemple, les caractères Espace, tabulation, LF et CR sont coupés :

Declare @Test nvarchar(50) = Concat (' ', char(9), char(13), char(10), ' ', 'TEST', ' ', char(9), char(10), char( 13),' ', 'Test', ' ', car(9), ' ', car(9), car(13), ' ')

DÉCLARER @TrimPattern nvarchar(max) = '%[^ ' + char(9) + char(13) + char(10) +']%'

SELECT SUBSTRING(@Test, PATINDEX(@TrimPattern, @Test), LEN(@Test) - PATINDEX(@TrimPattern, @Test) - PATINDEX(@TrimPattern, LTRIM(REVERSE(@Test))) + 2)


7 réponses 7

Mise à jour 2020 :

Appelez simplement foffa.x.pivot() , comme détaillé dans cet article :

Pour l'exemple 2019, par exemple :

Mise à jour 2019 :

Puisqu'il s'agit d'une question populaire, permettez-moi de passer à #standardSQL et à un cas plus général de pivotement. Dans ce cas, nous avons plusieurs lignes et chaque capteur examine un type de propriété différent. Pour le faire pivoter, nous ferions quelque chose comme:

Comme alternative à AVG(), vous pouvez essayer MAX() , ANY_VALUE() , etc.

Je ne sais pas ce que vous essayez de faire, mais :

MISE À JOUR : Mêmes résultats, requête plus simple :

Également inspiré de Comment simuler un tableau croisé dynamique avec BigQuery ? , la requête suivante utilisant la sous-sélection donne exactement le résultat souhaité :

L'astuce est que MAX(NULL, 'ATTENDED', NULL, . ) est égal à 'ATTENDED' .

L'utilisation d'instructions case/if pour créer des colonnes pivotées est une façon de procéder. Mais cela devient très ennuyeux si le nombre de colonnes pivotées commence à augmenter. Pour faire face à cela, j'ai créé un module Python à l'aide de python pandas qui génère automatiquement la requête SQL qui peut ensuite être exécutée dans BigQuery. Voici une petite présentation :

Code github pertinent en cas de panne de github :

Mise à jour 2021 :

Un nouvel opérateur PIVOT a été introduit dans BigQuery.

Avant que PIVOT ne soit utilisé pour faire pivoter les ventes et le trimestre dans les colonnes Q1, Q2, Q3, Q4 :

produit Ventes trimestre
chou frisé 51 T1
chou frisé 23 T2
chou frisé 45 T3
chou frisé 3 T4
Pomme 77 T1
Pomme 0 T2
Pomme 25 T3
Pomme 2 T4

Une fois que PIVOT est utilisé pour faire pivoter les ventes et le trimestre dans les colonnes Q1, Q2, Q3, Q4 :

Pour construire une liste de colonnes dynamiquement, utilisez execute immediate :

Tout le monde ne peut pas utiliser python ni pandas (pensez aux dataAnalysts et aux mecs BI :) ) voici une procédure de pivot dynamique en standard [email protected] il ne s'agrège pas encore. dans un premier temps, vous devez fournir un tableau avec des valeurs agrégées déjà pe-KPI (si nécessaire) . mais il crée automatiquement une table et génère toutes les colonnes pivotées.

l'hypothèse de départ est que vous avez en entrée une table myDataset.myTable comme ceci :
LONG,LAT,KPI,US,EUR
A,1,temp, 78,45
A,1,pression, 120 114
B,1,temp,12,8
B,1,pression, 85,52

si vous appelez ci-dessous la procédure comme ceci :

vous obtiendrez une nouvelle table appelée myDataset.myTable_pivot comme ceci :

LONG,LAT,temp_US,temp_EUR,pressure_US, pressure_EUR
A, 1, 78, 45, 120, 114
B,1,12,8, 85, 52

Choses étranges : les boucles while imbriquées ne fonctionnent pas dans BQ. seule la dernière boucle while est exécutée. C'est pourquoi dans le code de procédure vous avez un mélange de WHILE et LOOP


Les instructions préparées sont prises en charge dans SQL Server, mais vous avez probablement du mal à trouver des exemples d'utilisation car elles ne sont pas vraiment nécessaires.

Vous pouvez appeler sp_prepare pour obtenir un manipuler puis transmettez-le à sp_execute. Vous pouvez également appeler sp_prepexec ou sp_prepexecrpc, qui combinent tous deux les étapes « prepare » et « exec ». Dans tous les cas, vous finirez par appeler (éventuellement) sp_unprepare, en passant le manipuler renvoyé par sp_prepare , sp_prepexec et sp_prepexecrpc .

Cependant, comme indiqué précédemment, ce modèle est obsolète / inutile dans Microsoft SQL Server car les requêtes et les plans d'exécution sont naturellement mis en cache. Les requêtes sont mises en cache et recherchées en fonction d'un hachage du texte de la requête. Les requêtes ad hoc sont mises en cache en fonction du exact, le texte intégral de la requête (comparaison binaire), y compris les valeurs concaténées dans la requête à utiliser pour le filtrage, etc. Ces plans sont moins susceptibles d'être réutilisés, à moins que le exact la même requête (en ce qui concerne les espaces blancs et tout le reste) est à nouveau exécutée. Les requêtes paramétrées sont mises en cache en fonction du texte de la requête qui n'inclut pas les valeurs des paramètres, et peuvent être réutilisées pour différentes valeurs des paramètres, tout comme lors d'une "préparation". Par conséquent, pas besoin d'appeler prepare / exec / unprepare.


Impossible d'interroger le serveur LDAP sur le port 389 sur le contrôleur de domaine Win2K à partir d'un autre sous-réseau

J'ai un problème assez déroutant avec l'accès LDAP à Active Directory dans un domaine Windows. La configuration est la suivante :

  • Il existe deux réseaux principaux : 192.168.0.0/24 et 192.168.100.0/24
  • Ces réseaux sont connectés avec un lien OpenVPN (le réseau de transfert est 192.168.201.0/30)
  • Un contrôleur de domaine exécutant Windows 2000 SP3 Server et Exchange 2000 dans le réseau 192.168.0.0/24
  • Routage approprié
  • Les deux sous-réseaux enregistrés avec le site dans le composant logiciel enfichable Sites et services

Presque tout fonctionne : les utilisateurs des machines des deux réseaux peuvent se connecter, accéder aux partages SMB sur les serveurs de fichiers du réseau 192.168.0.0/24, utiliser Outlook avec leur compte Exchange, etc. De plus, toutes les requêtes DNS, y compris les enregistrements SRV spécifiques à AD (par exemple, _ldap._tcp.dc._msdcs.$DOMAINNAME), pointent vers les bons endroits

Il n'y a pas de pare-feu sur le lien OpenVPN.

Maintenant, le problème : je ne peux pas interroger le serveur LDAP DC (NTDS, port 389) depuis n'importe quel ordinateur du réseau 192.168.100.0/24. Fait intéressant, les requêtes LDAP sur le catalogue global (port 3268 sur le même serveur) fonctionnent parfaitement. J'obtiens même une connexion au port 389, mais il est immédiatement réinitialisé par le serveur.

Il n'y a aucune entrée suspecte dans le journal des événements du service d'annuaire (interface LDAP), même avec le niveau de journalisation maximal possible.

Voici l'exemple de sortie de l'outil LDP essayant de se connecter au DC à 192.168.0.1 :

Tout ce que j'ai trouvé sur le Web dit les mêmes deux choses, en gros : "vérifier le DNS" et "vérifier le pare-feu". Eh bien, j'ai vérifié deux fois et trois fois le routage/filtrage DNS et IP, et cela semble bien aller.

Avez-vous d'autres idées où chercher et quoi vérifier? J'apprécierais toute réponse. Si vous avez besoin d'autres résultats de diagnostic, je serais heureux de vous les fournir.

Mettre à jour

Grâce à la réponse d'adamo, j'ai pu affiner le problème. Le problème est que tout le trafic vers le réseau 192.168.0.0/24 sur le port 389 est en quelque sorte mutilé par la machine sur laquelle OpenVPN s'exécute. Cela se produit quelle que soit la machine cible à laquelle j'essaie de me connecter sur le port 389/tcp, et même indépendamment du fait que la machine cible écoute ou non sur le port 389. Tout autre port (par exemple, 390) fonctionne correctement, et j'obtiens soit une connexion ou un message "connexion refusée" si aucun processus n'écoute sur ce port.

Le port 389/udp fonctionne bien non plus.

Qu'est-ce qui peut amener un serveur Windows 2000 à déformer le trafic de cette manière très sélective ?

Mise à jour 2

Pour minimiser les interactions entre les services DC/NTDS et OpenVPN, j'ai déplacé le serveur OpenVPN sur une autre machine (et modifié le routage IP en conséquence). Maintenant, je peux me connecter à n'importe quelle machine sauf le DC sur le port 389/tcp. Néanmoins, si j'essaye de me connecter au serveur LDAP sur le DC sur le port 389/tcp depuis le réseau 192.168.100.0/24, le serveur LDAP ferme la connexion immédiatement, donc en gros je reviens à la case départ.

Des idées comment persuader le NTDS de parler à un autre réseau ? Ou peut-être une solution de contournement?


Fonctions.php

Et puis .. il suffit d'ajouter quelque chose comme ça :

Que pensez-vous de cette solution de contournement ?

J'ai optimisé un peu la réponse de @Stabir Kira

Vous pouvez maintenant rechercher par (titre, contenu, extrait) ou (champ méta) ou (les deux).

Selon la suggestion de Nick Perkins, j'ai dû fusionner deux requêtes comme suit :

Eh bien, c'est un peu un hack mais ça marche. Vous devez ajouter un filtre posts_clauses. Cette fonction de filtrage vérifie que l'un des mots de la requête existe dans le champ personnalisé « épeler » et la requête restante reste intacte.

Je n'ai pas trouvé de solution pour rechercher plusieurs mots-clés pouvant être mélangés dans le titre de l'article, la description ET/OU une ou plusieurs métas, j'ai donc fait mon propre ajout à la fonction de recherche.

Tout ce dont vous avez besoin est d'ajouter le code suivant dans fonction.php, et chaque fois que vous utilisez l'argument 's' dans un WP_Requête() fonction et que vous souhaitez qu'elle recherche également dans un ou plusieurs champs méta, vous ajoutez simplement un argument 's_meta_keys' qui est un tableau de la ou des clés méta que vous souhaitez rechercher :

Cet exemple recherchera les mots-clés "kewords à rechercher" dans les titres des articles, les descriptions et les méta-clés 'short_desc' et 'tags'.

Les mots-clés peuvent être trouvés dans un ou plusieurs des champs, dans n'importe quel ordre, il renverra tout message qui a tous les mots-clés dans l'un des champs désignés.

Vous pouvez évidemment forcer la recherche dans une liste de méta-clés que vous incluez dans la fonction et vous débarrasser des agruments supplémentaires si vous voulez que TOUTES les requêtes de recherche incluent ces méta-clés :)


Base de données

Étant donné que chaque requête API peut générer un objet de réponse JSON qui varie selon les noms de champ, c'est-à-dire dont le schéma varie, un choix naturel serait d'utiliser une solution NoSQL basée sur un document. De plus, étant donné que nous ne prévoyons pas de connaître complètement la structure de ces objets de réponse avant de les demander, il nous appartient d'utiliser une solution sans schéma afin de pouvoir vider tous les objets de réponse, puis d'analyser et de nettoyer tous les arrangements d'attributs inattendus ou réponses dégénérées. (Remarque : il s'agit d'un choix de commodité, trouver toutes les variations d'attributs théoriques a priori prend du temps et n'est pas très gratifiant car le coût de la non-utilisation de certaines données est minime) En raison de sa facilité d'utilisation, de son large support communautaire et de sa forte intégration avec Node, MongoDB semble être le bon choix.

Sources de données ✔Outil d'automatisation ✔ Base de données ✔

Configurons notre environnement pour utiliser ces outils.


Les opérations d'affectation de jq peuvent effectuer une mise à jour sur autant d'emplacements à la fois que vous pouvez nommer et sont conçues pour ce genre de situation. Vous pouvez utiliser

à trouver chaque champ appelé "name" n'importe où et remplacer la valeur dans chacun à la fois avec "XXXX", et afficher l'objet résultant.

C'est juste le ..|.a? exemple de la documentation de la descente récursive combinée avec l'affectation de mise à jour.

Il utilise l'opérateur de descente récursive .. pour trouver chaque valeur de l'arbre, puis extrait le champ "name" de chacune d'elles avec .name , supprime toutes les erreurs des valeurs non correspondantes avec ? , puis met à jour l'objet à tous ces endroits à la fois avec "XXXX" à l'aide de l'opérateur d'affectation de mise à jour |= , et génère le nouvel objet.

Cela fonctionnera quelle que soit la structure du fichier et mettra à jour chaque champ de nom partout.

Alternativement, si le fichier a toujours cette structure, et qu'il est ces champs "name" particuliers que vous souhaitez modifier, pas n'importe quel ancien nom, vous pouvez également les lister et les attribuer également en tant que groupe :

Cela fait la même tâche à

  1. le champ "name" de l'objet de niveau supérieur
  2. le champ "name" de tous objet dans le tableau "contact" et
  3. le champ "name" de chaque objet du tableau "group".

tout d'un coup. Ceci est particulièrement utile si le fichier peut avoir autre champs de nom là-dedans quelque part sans rapport que vous ne voulez pas changer. Il ne trouve que les trois ensembles d'emplacements qui y sont nommés et les met tous à jour simultanément.

Si la valeur n'est qu'un littéral comme ici, alors l'affectation simple avec = fonctionne aussi et vous permet d'économiser un caractère : (..|.name?)="XXXX" - vous voudriez également ceci si votre valeur est calculée sur la base de l'ensemble objet de premier niveau. Si à la place vous voulez calculer le nouveau nom basé sur l'ancien, vous besoin utiliser |= . Si je ne sais pas quoi utiliser, |= a généralement un comportement légèrement plus agréable dans les cas de coin.

Si tu as plusieurs remplacements à faire, vous pouvez les assembler :

mettra à jour les champs "name" et "lname" partout, et affichera l'intégralité de l'objet mis à jour une fois.

Quelques autres approches qui peuvent fonctionner :

Vous pouvez également être très explicite sur ce que vous sélectionnez avec

qui trouve tout, puis uniquement les objets, puis uniquement les objets qui ont un "name", puis le champ name sur ces objets, et effectue la même mise à jour qu'auparavant.

Si vous exécutez la version de développement de jq (peu probable), la fonction walk peut également faire le travail : walk(.name?="XXXX") . Toutes les autres versions fonctionneront sur la dernière version publiée, 1.5.

Une multi-mise à jour alternative pourrait être

qui trouve tout avec un nom, puis définit à la fois "name" et "lname" sur chaque objet en utilisant l'affectation de mise à jour arithmétique *= et le comportement de fusion que + a pour les objets.


Lancez Windows PowerShell et exécutez :

La sortie devrait ressembler à ceci,

La "manière LDAP" de le faire serait de récupérer l'objet de base avec le GUID (ou SID), qui récupérera uniquement l'objet de base et n'aura pas de données de classe supplémentaires attachées. Cependant, à partir de cet objet de base, vous pouvez récupérer le « DistinguishedName » réel de l'objet utilisateur. La récupération de l'objet utilisateur à l'aide de l'attribut "distinguishedName" renverra un objet DirectoryEntry (.Net/C#/PowerShell) ou un objet iadsUser (VBScript) avec des données de classe complètes et vous permettra d'obtenir toutes les autres données d'attribut dont vous avez besoin.

Le problème est de récupérer l'objet initial avec le GUID (ou SID). Certaines sources diront que vous devez convertir le GUID au format de chaîne (c'est-à-dire <28c67c50-9778-47a4-a77a-bf56f238a0c4>) en une représentation sous forme de chaîne du tableau d'octets (c'est-à-dire "507cc62878 97a4477aa7f56f238a0c4") à transmettre à LDAP. Selon la documentation de Microsoft, ce n'est pas le cas. Une simple représentation sous forme de chaîne du GUID/SID est suffisante.

Voici un exemple de la façon dont vous pouvez vous lier à l'objet via le GUID, puis récupérer l'objet utilisateur réel avec les données de classe complètes. Powershell extrait en fait l'objet complet si vous vous liez avec le GUID. Si vous utilisez VBScript, vous devrez suivre le processus en deux étapes.

Veuillez également noter que bien que la documentation de Microsoft indique que plusieurs formats de chaîne GUID sont acceptables, le seul que j'ai pu utiliser avec succès est de supprimer les caractères <>-. ÉGALEMENT, veuillez noter qu'il s'agit NE PAS une chaîne "byte-array" correcte, mais simplement la chaîne GUID dépourvue de caractères spéciaux.

Le même processus peut être utilisé pour une liaison SID. La page MSDN décrivant cela indique qu'il existe plusieurs formats fstring disponibles, mais le plus courant sera le s-1-5-. -. -. -. format.

Si vous allez effectuer une requête LDAP pour trouver l'objet (par exemple en comparant 'objectGUID' à un tableau d'octets ou 'objectSID' à un tableau d'octets), c'est à ce moment-là que vous devrez faire le "correct" octet- conversion de tableau. Il est important de noter que le tableau d'octets a un ordre différent de la représentation sous forme de chaîne, car il est stocké sous la forme DWORD-WORD-WORD-WORD-BYTES pour GUID et prend en compte l'ordre endian. La conversion du tableau d'octets pour un SID a des conditions similaires.

Il existe plusieurs manières différentes d'effectuer la conversion, Technet a un algorithme vbScript simple. Vous pouvez également faire quelque chose de plus sophistiqué avec C#/VB.Net en utilisant System.Guid, ou via un simple script dans PowerShell (je dois aimer PowerShell !) :

Vous devriez alors pouvoir interroger l'objet à l'aide d'un filtre LDAP standard :

. ou quoi que ce soit d'autre que vous pourriez demander. Cela devrait également fonctionner pour un SID.


Comment stocker et recevoir des variables dans les sessions WP ?

J'ai un formulaire avec des cases à cocher et des cases de sélection et il montre ce que l'utilisateur veut via un appel ajax. Le problème est que lorsque l'utilisateur clique sur l'élément et que la page de détail s'affiche, puis décide de revenir à la page précédente, il doit cliquer et sélectionner à nouveau son choix précédent.

Je voudrais faire en sorte que WP stocke toutes les options de la session lorsque le bouton de la page de détail est cliqué et enregistre les informations réelles dans la session, puis lorsqu'il visite à nouveau la page, les valeurs seront vérifiées dans les sessions et définies le cas échéant. trouvé.

Simplifions à l'excès et disons que nous avons quelque chose comme ceci dans notre formulaire :

Je n'utilise pas le bouton de soumission dans mon formulaire, il est géré via AJAX lors du changement d'entrée.

Et dans mes résultats obtenus via ajax, j'ai un lien vers la page de détail :

Avez-vous une idée de la façon dont puis-je stocker mes valeurs dans Session et les appeler lorsque je revisite/recharge/recule le bouton du navigateur ?

J'ai besoin de pouvoir lire les éléments stockés dans la session et de les utiliser via ?Javascript? et déclencher ma fonction de recherche via ajax qui fonctionne déjà bien.

J'ai juste besoin de stocker (probablement avant d'aller à $link in href du bouton de détail et de lire et d'envoyer des variables de session (si elles existent).


11 réponses 11

Non, il n'est pas possible de classer par taxonomie, car d'un certain type de point de vue, cela n'a pas vraiment de sens.

Les taxonomies sont des moyens de regrouper des choses. Donc, l'intérêt d'avoir une taxonomie sur les messages serait vraiment d'avoir des termes dans cette taxonomie qui sont partagés entre les messages. Si une taxonomie avait des termes qui n'étaient utilisés que sur un seul message chacun, cela rendrait la taxonomie inutile. Et si les termes étaient partagés comme ils devraient l'être, alors la commande par elle ne produirait rien de particulièrement utile.

Ce que vous devriez utiliser dans une telle situation est la méta post. Vous pouvez commander par méta de poste, et c'est unique à chaque poste.

Edit : Cela dit, vous pouvez trier par taxonomie en créant une requête SQL personnalisée à l'aide d'un filtre, vous ne pouvez tout simplement pas le faire à partir d'une WP_Query non modifiée : http://scribu.net/wordpress/sortable-taxonomy-columns.html

Cependant, si vous devez recourir à ce genre de chose, votre structure de conception de données est erronée en premier lieu. Les « termes » dans la taxonomie ne sont pas de véritables « données ». Les termes eux-mêmes n'ont aucune signification inhérente, ce ne sont que des étiquettes pour le groupe particulier qu'ils décrivent. Si vous les traitez comme des données significatives, vous avez alors un défaut de conception sous-jacent.

Les taxonomies regroupent les choses en leur attribuant des termes. Ce regroupement est tout l'intérêt des taxonomies, les termes ne sont que de jolis visages sur le regroupement. Si vous avez des métadonnées significatives à attribuer à une publication, vous devriez utiliser la méta de la publication à la place. Et que tu pouvez trier par, car post meta utilise à la fois des clés et des valeurs pour stocker des informations. Avec une taxonomie, vous ne stockez en réalité que des clés, leurs valeurs étant les publications regroupées par ce terme.

Les choses sont plus faciles à long terme si vous utilisez la bonne approche pour cela. Bien que je ne dis pas que vous ne pouvez pas faire quelque chose d'étrange avec la taxonomie, vous vous compliquez simplement les choses à long terme en l'utilisant mal.


Voir la vidéo: Authentication Options for ArcGIS OnlinePortal