J'ai écrit une classe d'extension de données et une extension de l'éditeur qui affiche correctement quelques colonnes supplémentaires pour les éléments lorsque vous parcourez des listes dans la CME (dossiers et groupes de structure). Je devais enregistrer ma classe pour gérer les commandes telles que GetList, GetListListSearch, GetListuserFavorites et GetListCetcheckeDouToutems. P>
Ce que j'ai remarqué, c'est que le code est exécuté même lorsqu'une liste de disait, Schemas est chargée pour une liste déroulante dans la CME (comme lors de la création d'un nouveau composant et que vous obtenez la liste des schémas dans une goutte -vers le bas). Ainsi, même si mes colonnes de données supplémentaires ne sont pas nécessaires dans cette situation, le code est toujours en cours d'exécution et ralentit les choses. P>
Il semble que c'est le commandement GetList appelé dans ces situations. Donc, je ne peux pas simplement sauter le traitement en fonction de la commande. Ainsi, j'ai commencé à regarder le XML que la classe reçoit la liste et que j'ai remarqué lorsque le code est exécuté pour les dérivations, il y a un Alors, puis-je simplement utiliser ce fichier géré = "0" comme un drapeau pour indiquer que la liste étant traitée ne va pas montrer mes colonnes supplémentaires et je ne peux que quitter le traitement? P> géré = "0" code> dans le XML. Par exemple: p>
4 Réponses :
de l'expérience précédente et de ce que User978511 dit que l'attribut code> géré code> est une indication des types d'éléments pouvant être créés à partir du contexte de cette liste.
Malheureusement, cela signifie que l'attribut code> géré code> peut bien être 0 pour tout utilisateur qui n'a pas suffisamment de droits pour créer des articles. Par exemple. Vérifiez ce que update str> p> p> P > Vous pourrez peut-être mieux atteindre votre objectif en regardant le paramètre code> colonnes code>: p> dans quelques tests que j'ai couru Je reçois des valeurs différentes, selon que je reçois une liste pour la liste principale de la liste, l'arborescence ou la liste déroulante. P> Ces valeurs sont un masque de ces constantes (à partir de donc de mes tests limités, il semble que la demande de dépose géré code> est dans un groupe de structure pour un utilisateur qui n'est pas autorisé à créer des pages ou des groupes de structure. Il peut bien être
0 code> dans ce cas aussi, ce qui signifie qu'il est inutile pour votre situation. P>
constantes.js code>): p>
par défaut code> Colonnes, Alors que la liste principale de la liste et l'arborescence ont les deux
autorisés_actions code> là-bas. Cela a du sens pour moi, puisque l'utilisateur obtient peut interagir avec les éléments de la liste dans la vue d'arborescence et de liste, alors qu'ils ne peuvent les sélectionner que dans la liste déroulante. Vérification de la présence de
autorisée_actions code> dans le paramètre code> Colonnes code> peut être un moyen de réduire le nombre d'endroits où votre extension de données ajoute des informations. P> P>
Je vais essayer d'expérimenter avec cela et de voir si je désactive les autorisations d'un utilisateur si cela change de valeur. Question différente. Y a-t-il autre chose que je peux utiliser dans une extension de données (peut-être le pipelinecontext) pour détecter ce que "type" de la commande getlist est en cours d'exécution? Ce serait pratique s'il y avait d'autres commandes pour ces cas afin de pouvoir distinguer quel type de liste était en cours de traitement.
Il existe un bon équilibre entre permettre à votre code de détecter l'endroit exact où il s'appelle et optimise la mise en cache du fait que de nombreux endroits de ce type récupèrent les mêmes données. Je ne suis même pas sûr que si une getlist appeler pour une liste déroulante doit être différente d'une pour une vue de liste. Ou à tout le moins: une fois que vous avez montré les mots-clés de la liste, il n'est pas nécessaire d'appeler le serveur pour obtenir les données d'une liste déroulante; C'est juste un sous-ensemble de ce qui était déjà récupéré.
Vous voudrez peut-être examiner les filtres qui sont passés dans votre Dataextender dans pipelinecontext.paramètres ["filtre"] code>. Le
itemstypes code> dans le filtre semble également donner une indication du contexte de la demande.
J'ai regardé le filtre de la pipelinecontext et c'était NULL. J'ai essayé d'inspecter ce que l'autre pipelinecontext donne. Je vois une clé de "commande: type" qui semble être de type "tridion.web.ui.models.tcm54.Listes" toute idée de ce que c'est et ce que cela me dirait?
Je pense que vous auriez une solution plus robuste si vous lisez l'ID de la liste et n'exécute votre code que pour les listes de types 2 et 4 (dossiers et groupes de structure respectivement). Mais cela ne vous aidera pas avec les vues de recherche, etc. P>
Il semble que l'une des approches les plus courantes que j'ai vues: trouver des moyens d'identifier les listes que vous ne souhaitez pas traiter et si code> celles-ci. Même si vous ne pouvez pas les avoir toutes en une fois, vous ferez lentement des choses plus rapidement avec une quantité de risque gérable par itération. Entre cela et une stratégie de mise en cache agressive pour les informations que vous ajoutez, vous pouvez généralement obtenir des choses raisonnablement performantes. Bien sûr, rien ne bat la performance de pas i> b> Ajout de colonnes personnalisées à la liste. Donc, vous devriez toujours considérer cette option d'abord ... et la dernière fois.
@Frankvanpuffelen: Complètement d'accord. Cependant, la bataille s'est battue et perdue (pour l'instant). Ces nombreuses colonnes supplémentaires sont considérées comme essentielles à des fins commerciales.
La valeur est 0 pour les articles non organisationnels. P>
La valeur dépend de l'élément lui-même (vous ne pouvez pas créer de pages dans le dossier, par exemple), ainsi que sur les paramètres de sécurité que vous avez sur la publication et l'élément organisationnel P> La valeur code> gérée est la représentation de ce que les éléments peuvent être créés dans
organisationItem code>: p>
Merci pour cette explication Andrey. Mais la catégorie dans le cas de Warner ne devrait-elle pas dire qu'il peut créer des mots-clés (en supposant qu'il a suffisamment de droits)?
Je pense que cela ne se produirait que si la vue qui l'appelait est la catégorie elle-même, je pense que c'est le XML renvoyé lorsque vous recevez une liste de mots-clés pour créer un composant. Dans ce cas, vous ne seriez pas en mesure de faire des mots-clés
Merci a tous. C'est très éducatif. Clairement cela n'aide pas dans ce que j'essayais d'accomplir. Mais il est bon de savoir ce qu'il peut être utilisé pour devrais-je en avoir besoin.
Malheureusement, la CME ne peut pas offrir maintenant ce type de niveau de granularité pour vous permettre de dire dans une extension de données dans laquelle un appel de l'API de WCF apparaît. Notre API WCF n'est pas encore consciée de son contexte. Cela peut changer à l'avenir. P>
Confiance gérée = "0" n'est pas une bonne idée. La raison en est que les listes de modèle sont mises en cache client par filtre. Dans la conception actuelle, le filtre a des données liées au cm et rien ne correspond au contexte que la demande est tirée. Typiquement, l'interface utilisateur du client réutilise des données de modèle mis en cache lorsque cela est possible. Par exemple, la même liste de modèle pourrait être utilisée dans le tableau de bord CME et une commande déroulante placée dans une vue d'élément, mais avec différentes définitions de liste XML: le premier aura plus de colonnes définies dans la définition de la liste que celle-ci. Ils sont fondamentalement des vues différentes sur les mêmes données. P>
Par conséquent, vous voudrez peut-être penser à différentes solutions pour votre problème. Maintenant ... D'où vient les données de ces colonnes supplémentaires? Est-ce Tridion CM ou un fournisseur de tiers? Parfois, la mise en cache de serveur Web peut fournir un moyen acceptable d'améliorer les temps de réponse. Mais c'est le genre de conception que vous devriez évaluer et décider. P>
Merci! J'ai soumis une demande d'amélioration pour permettre de raconter l'origine de la commande getlist. Pour notre implémentation spécifique, toutes les données proviennent de Tridion CM afin que la mise en cache n'est pas vraiment appropriée. Les colonnes que nous avons ajoutées sont les suivantes: modifié par, version, statut d'approbation, verrouillé par la date de publication. Ce que j'adore un jour, l'amour d'être capable de faire est de donner aux auteurs de contenu la possibilité de définir une préférence pour activer ou désactiver les colonnes supplémentaires au besoin. Les éteignez-les évidemment accélérerait leur navigation dans la CME, la transformant lui permettrait de voir ces autres informations dont ils ont besoin.
Merci pour le nettoyage Frank!