Archives Catégorie: Développement SharePoint

Explication simple: “Valeur ne relève pas de la plage attendue.”

MISE À JOUR: Une affiche anonyme a laissé un grand commentaire sur les noms internes. N'oubliez pas de le lire.

Lorsque vous travaillez avec les récepteurs d'événements et autre code qui fait référence à des éléments de liste SharePoint via le modèle objet, Je fais souvent des erreurs qui génèrent cette erreur lors de l'exécution:

Erreur lors du chargement et l'exécution de récepteur d'événements Conchango.xyzzyEventReceiver dans xyzzy, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 0dc50a750396c3ac. Des renseignements supplémentaires sont ci-dessous. : Valeur ne relève pas de la plage.

Je pense qu'il s'agit d'une erreur générique qui est potentiellement causée de différentes manières. Cependant, une explication simple, c'est que je suis référençant un champ mal. Si le nom du champ est « Échéance », Je dois le référencer comme ceci dans un récepteur d'événements:

propriétés.ListItem[« Date d'échéance »]

Quand je mal orthographié ou utiliser le mauvais cas lorsque vous référencez le champ, SharePoint génère le ci-dessus mentionné erreur d'exécution. Par exemple, Cela est erroné:

propriétés.ListItem[« Date d'échéance »]

</fin>

S'abonner à mon blog.

Tags Technorati:

Rapide & Facile: Créez un dossier et d'affecter un Type de contenu (Ou, A vos indicateurs de performance clés et les manger trop)

Afin de contourner un problème d'indicateur de performance clé J'ai écrit ici, J'ai fait quelques essais et découvert le travail de cet indicateur de performance clé contre les dossiers avec des métadonnées de la même manière qu'ils travaillent contre les documents ou les éléments de la liste. J'ai prouvé en créant un nouveau type de contenu basé sur le type de contenu de dossier et ensuite ajouté quelques champs. J'ai créé quelques indicateurs et prouvé à moi-même que les indicateurs de performance clés fonctionnent comme prévu. C'était la bonne nouvelle. Il n'est pas parfait, parce que l'exploration, vous obtenez de l'indicateur de performance clé contre les dossiers n'est pas exactement ce que vous voulez. Ce n'est pas trop un inconvénient dans mon cas, parce que 1) les utilisateurs finaux ne savent pas mieux et 2) l'exploration va vers un dossier. Il clique sur le nom du dossier et qu'ils sont à l'ordre du jour. C'est deux clics au lieu d'un, qui n'est pas la fin du monde.

Cela découle bien avec le travail que je faisais. Je crée un dossier pour chaque document qui obtient téléchargée. Cela se fait via un récepteur d'événements. Comme un résultat, C'est un morceau de gâteau pour garder le du dossier parent meta-données en synchronisation avec les métadonnées axée sur l'indicateur de performance clé dans le fichier lui-même car la plomberie est déjà en place. Cela me permet d’avoir mes KPI’s et de les manger aussi 🙂

J'ai modifié le récepteur d'événements pour ajouter le dossier et puis définissez type de contenu de ce nouveau dossier sur mon type de contenu personnalisé respectueux de l'indicateur de performance clé. Ce morceau de code a fait le tour:

 SPFolderCollection srcFolders = targetWeb.GetFolder(« Documents").Sous-dossiers;
  SPFolder addedFolder = srcFolders.Add(Propriétés.ListItem.ID.ToString());
  SPContentTypeId kpiCT = Nouveau SPContentTypeId("0x0120002A666CAA9176DC4AA8CBAA9DC6B4039F");
  addedFolder.Item["ID de Type de contenu"] = kpiCT;
  addedFolder.Item.Update();

Pour localiser l'ID de Type de contenu actuel, J'ai consulté ce type de contenu via les paramètres de site et copie/collé de l'URL comme indiqué:

image

</fin>

S'abonner à mon blog!

Facile et rapide: Obtenir le SPFolder d'un SPListItem dans un récepteur d'événements

Je déteste l'admettre, mais j'ai eu du mal avec celui-ci tous les jours. Mon récepteur d'événements doit mettre à jour un champ de son dossier parent. Cela peu montre comment le faire:

privé VOID UpdateParentFolder(SPItemEventProperties propriétés)
{

SPFolder thisItemFolder = propriétés.ListItem.File.ParentFolder;
thisItemFolder.Item[« Statut d'approbation ZZ"] = "De bonnes nouvelles, tout le monde!";
thisItemFolder.Item.Update();


} // UpdateParentFolder

Dans ce cas, Je travaille avec une bibliothèque de documents et les propriétés proviennent d'un événement ItemAdded.

L'astuce est que vous ne pouvez pas le SPFolder de l'élément directement à partir de l'élément lui-même (i.e. Propriétés.ListItem.Folder est null). Au lieu de cela, aller à fichier associé de l'élément de liste et obtenir le dossier de.

</fin>

S'abonner à mon blog!

Tags Technorati:

Encore un autre récepteur d'événements de débogage Trick

Je ne sais pas que je ne suis pas la première personne pour arriver à cela. Cependant, Je n'ai pas remarqué quelqu'un publie un truc comme ça que j'ai commencé très attentif à la communauté en juillet dernier. Si, J'ai pensé à qu'elle après cette astuce de débogage rapide et facile.

Je travaille sur un récepteur d'événements qui a commencé à générer cette erreur dans le 12 ruche:

Erreur lors du chargement et l'exécution de récepteur d'événements Conchango.xyzzyEventReceiver dans xyzzy, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = blahbalhbalh. Des renseignements supplémentaires sont ci-dessous. : Référence d'objet non définie à une instance d'un objet.

Je ne savais pas où j'avais présenté ce bug parce que j'avais fait trop de choses dans l'un de mes cycles de code/déploiement/test.

J'ai essayé Cette solution pour obtenir mon APB là-dedans avec l'espoir de que SharePoint 12 ruche montrerait la trace de la pile, mais pas de chance. Je ne sais pas si c'est possible et si quelqu'un le fait, Please let me know 🙂

Je sais que c'est possible de écrire vos propres messages de log à la 12 ruche. Franchement, Je voulais quelque chose un peu moins effrayante et plus rapides à mettre en œuvre.

Il m'est apparu que je pouvais au moins obtenir quelques informations de base trace en attrapant et re-levée d'exceptions génériques comme ceci:

  Essayez {
    UpdateEditionDate(propriétés);
  }
  captures (Exception e)
  {
    jeter Nouveau Exception("Dispatcher, UpdateEditionDate(): Exception: [" + e.ToString() + "].");
  }

Cela est apparu dans le 12 ainsi la ruche:

Erreur lors du chargement et l'exécution de récepteur d'événements Conchango.xyzzyEventReceiver dans xyzzy, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = bonnefin. Des renseignements supplémentaires sont ci-dessous. : Répartiteur, UpdateEditionDate(): Exception: [Système NullReferenceException.: Référence d'objet non définie à une instance d'un objet. à Conchango.xyzzyManagementEventReceiver.UpdateEditionDate(Propriétés de SPItemEventProperties) à Conchango.xyzzyManagementEventReceiver.Dispatcher(Propriétés de SPItemEventProperties, Chaîne eventDescription)].

Cela m'a donné tous les détails que j'avais besoin pour traquer ce problème particulier et je m'attends à l'utiliser beaucoup aller de l'avant.

</fin>

S'abonner à mon blog!

Solution: SPQuery ne recherche pas de dossiers

La dernière semaine, j'ai été mise en œuvre une « évolution" solution pour un client qui utilise les BDC et SPQuery et s'est heurtée à quelques difficultés à utiliser SPQuery contre une bibliothèque de documents contenant des dossiers. Ligne de fond: attribuer "récursif" à l'attribut de point de vue de la requête.

Mon scénario:

  • Lundi, Télécharger un document et de fournir certaines données meta.
  • La semaine suivante, J'ai télécharger un nouveau document. Une grande partie des métadonnées de ce nouveau document se fonde sur le document que j'ai téléchargé le lundi (que nous appelons le « document maître »).
  • Nous avons créé une façade de service web qui fournit une interface facile à BDC à la liste afin que les utilisateurs peuvent facilement trouver ce document lundi par une recherche de titre.
  • Une colonne de données BDC fournit une interface utilisateur conviviale. (Cela fait partie de ma tentative à l'aide de la BDC pour une colonne de recherche plus conviviale).

La fonction finale de façade BDC utilise une requête comme celle-ci pour faire de la recherche:

 // Utilisé U2U outil pour aider à générer cette requête CAML.
      oQuery.Query =
        "<Où>";

      Si (titleFilter.Length > 0)
        oQuery.Query  =
          "  <Et>";

      oQuery.Query  =
        "    <Et>" +
        "      <GEQ>" +
        "        <FieldRef nom =  "DocumentId" />" +
        "        <Valeur de Type =  « Text »>" + minId + "</Valeur>" +
        "      </GEQ>" +
        "      <Leq>" +
        "        <FieldRef nom =  "DocumentId" />" +
        "        <Valeur de Type =  « Text »>" + maxId + "</Valeur>" +
        "      </Leq>" +
        "    </Et>";

      Si (titleFilter.Length > 0)
        oQuery.Query  =
          "    <Contient>" +
          "      <FieldRef nom =  "Title" />" +
          "      <Valeur de Type =  « Text »>" + titleFilter + "</Valeur>" +
          "    </Contient>" +
          "  </Et>";
      oQuery.Query  =
        "</Où>";

Au cours de la phase initiale de développement, cela fonctionnait très bien. Cependant, Nous avons présenté des dossiers dans le répertoire de résoudre certains problèmes et soudain, mon sélecteur de BDC ne renvoie aucun résultat. J'ai suivi cela au fait que le SPQuery ne reviendrait jamais aucun résultat. Nous avons utilisé les dossiers principalement pour permettre plusieurs fichiers portant le même nom d'être téléchargés, mais avec des données différentes de meta. Lorsque le fichier est téléchargé, Nous créons un dossier basé sur l'ID de l'élément de la liste et puis déplacez le fichier, il (J'ai écrit à ce sujet ici; Nous avons eu résultats mitigés avec cette approche, mais dans l'ensemble, Il fonctionne bien). L'utilisateur ne se soucient pas sur les dossiers et en fait, ne comprends pas vraiment qu'il y a tous les dossiers. Nous avons configuré toutes les vues de la bibliothèque pour afficher les éléments sans tenir compte des dossiers.

J'ai frappé ce problème elle deux fois plus que la réalisation technique a évolué et résolus différemment chaque fois. La première fois, Je n'étais pas en utilisant l'opérateur CONTAINS dans la requête. Sans un opérateur CONTAINS, J'ai été en mesure de résoudre le problème en spécifiant l'affichage sur le constructeur de la SPQuery. Au lieu d'utiliser le constructeur par défaut:

SPList oList = web.Listes[« Documents"];

SPQuery oQuery = Nouveau SPQuery();

J'ai utilisé à la place un constructeur spécifié d'un point de vue:

SPList oList = web.Listes[« Documents"];

SPQuery oQuery = Nouveau SPQuery(oList.Views[« Tous les Documents"]);

Qui a résolu le problème et j'ai commencé à obtenir mes résultats.

J'ai ensuite ajouté l'opérateur CONTAINS dans le mélange et qu'il est tombé à nouveau. Il s'avère que l'opérateur CONTAINS, pour autant que je peux dire, ne fonctionne pas avec le point de vue de la même façon que l'un GEQ plus simple / Opérateurs LEQ. J'ai fait quelques recherches et appris que ViewAttributes de la requête doit être défini sur « Récursive », comme dans:

oQuery.ViewAttributes = « Portée = "Recursive"";

Qui a résolu le problème pour CONTAINS. En fait, Cela a également résolu mon problème de recherche originale et si j'avais spécifié le récursif attribuent la première fois, Je n'aurait pas couru une fois de plus la question.

Le fait qu'une opinion fondée SPQuery fonctionne pour certains opérateurs (GEQ/LEQ) et pas d'autres (CONTIENT), couplé avec le fait que les IRC ne semblent pas travailler du tout avec conduit de bibliothèques de document contenant du dossier me faire croire que SPQuery a quelques problèmes d'orthogonalité.

Merci spécial:

</fin>

S'abonner à mon blog!

Bug de mousse PIR? Indicateur de liste liée à la bibliothèque de documents avec les dossiers

MISE À JOUR 02/29/08: J'ai résolu ce problème en créant un dossier et en assignant un type de contenu dans le dossier qui inclut les données méta que j'ai besoin pour les indicateurs de performance clés. Je qui décrit un peu plus en détail ici.

Nous avons mis en place une solution technique où les utilisateurs de téléchargement des documents vers une bibliothèque de documents. Un récepteur d'événements crée un répertoire et déplace le fichier dans ce répertoire (en utilisant une technique semblable à ce que j'ai écrit sur ici). Nous avons navigué avec succès autour des questions potentielles causées par les récepteurs d'événements que renommer les fichiers téléchargés (principalement parce que les utilisateurs commencent jamais leur document en cliquant sur « New" mais au lieu de cela créer localement les docs et puis télécharger les).

Les métadonnées pour ces documents comprennent un Oui/aucune colonne de site n'appelée "Urgent" et une autre colonne de site appelée « Status ». Nous devons répondre à une exigence de l'entreprise qui indique le pourcentage de "Urgent" documents dont le statut est « En attente ».

Cela est généralement simple à faire et j'ai décrit quelque chose de très semblable à cela sur le Beagle de SharePoint avec beaucoup de captures d'écran si vous êtes intéressé.

En bref, J'ai fait ce qui suit:

  • Créer un point de vue sur la doc library appelée « En attente ».
  • Configurer l'affichage pour ne pas tenir compte de la structure de dossier.
  • Créer une liste KPI.
  • Créer un indicateur dans la liste de points à la lib doc et que "en attente" point de vue.

Cela ne fonctionne pas. L'indicateur de performance clé montre ma cible (e.g. cinq documents urgents) mais affiche toujours le nombre réel de documents urgents comme zéro. Paradoxalement, Si vous accéder aux détails, Il montre les cinq documents urgents dans la liste. J'ai créé un scénario très simple avec deux documents, un à un dossier et non. Voici la capture d'écran:

image

La capture d'écran ci-dessus montre clairement il y a deux documents à la vue, mais la valeur"" est l'un. Le CamlSchema"" avec un document vierge Id se trouve dans le dossier racine et l'autre est dans un dossier nommé « 84 ».

Il me semble que même si vous spécifiez un point de vue, l'indicateur de performance clé n'est pas honorer les "afficher tous les éléments sans dossiers" définition et place, se limite au dossier racine.

Si je me trompe, Veuillez me drop a line ou laisser un commentaire.

</fin>

S'abonner à mon blog!

Solution au problème: “FileNotFoundException” Avec mon récepteur de fonctionnalité.

Je travaillais sur une fonctionnalité la semaine dernière qui ajouterait des récepteurs d'événements à une instance de liste spécifique. (J'ai expliqué dans un blog un peu sur ce récepteur liste ici).

À l'aide de la ligne de commande, Je pourrais installer la fonctionnalité sans erreur (mais pour l'erreur cachée, voir ci-dessous). Quand j'ai essayé de déployer la fonctionnalité sur le site, MOUSSE s'est plaint d'une FileNotFoundException »" erreur. Ce blog décrit comment je l'ai résolu.

C'est l'erreur qui mousse qui m'a été montré dans le navigateur web:

Fonctionnalité ' b2cb42e3-4f0a-4380-boulette-1ef9cd526f20’ ne pourrait pas être installé car le chargement de l'assemblage de récepteur événement « xyzzyFeatureReceiver_0" n'a pas: System.IO.FileNotFoundException: N'a pas pu charger fichier ou l'assembly ' xyzzyFeatureReceiver_0’ ou une de ses dépendances. Le système ne peut pas trouver le fichier spécifié.
Nom de fichier: ' xyzzyFeatureReceiver_0’
à System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Preuve assemblySecurity, Assemblée locationHint, StackCrawlMark& stackMark, ThrowOnFileNotFound booléenne, ForIntrospection booléenne)
à System.Reflection.Assembly.InternalLoad(AssemblyRef AssemblyName, Preuve assemblySecurity, StackCrawlMark& stackMark, ForIntrospection booléenne)
à System.Reflection.Assembly.InternalLoad(String assemblyString, Preuve assemblySecurity, StackCrawlMark& stackMark, ForIntrospection booléenne)
à System.Reflection.Assembly.Load(String assemblyString)
à Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
AVT: Assemblage liaison journalisation est activée OFF.
Pour activer l'Assemblée lier échec enregistrement, Définissez la valeur de Registre [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) À 1.
Note: Il y a quelque peine de performance associé avec un enregistrement d'échec lier l'Assemblée.
Pour désactiver cette caractéristique, Supprimez la valeur de Registre [HKLMSoftwareMicrosoftFusion!EnableLog].

Résoudre les problèmes avec Windows SharePoint Services.

Je sais pas comment pour délibérément provoquer cette erreur: ne pas installer l'assembly dans le GAC. Mais, C'est dans le GAC. J'ai normalement installer des assemblys dans le global assembly cache en les faisant glisser dans le c:\dossier de WINDOWSassembly à l'aide de l'Explorateur windows. Je n'ai jamais senti 100% confortable de faire cela parce que j'ai toujours pensé que gacutil existait pour une raison … alors j'ai essayé qui. Il ne faisait aucune différence.

J'ai cherché les Internets et trouvé ce post: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1

L'affiche est arrivé d'utiliser la même racine bit du code (extrait du livre à l'intérieur de WSS dans cette liste) donc ça a été un signe d'espoir. Cependant, la suggestion de décorer l'ensemble avec une [Assemblée: ] directive n'a pas de sens pour moi. J'ai essayé quand même et j'avais raison. Il ne faisait aucune différence.

Puis j'ai remarqué que ma définition de la classe n'était pas publique. J'ai rendue publique et qui ne faisait aucune différence.

Prochaine, Je suis allé à la peine de permettre à le "Assemblée lier échec Journal" (en suivant les instructions utiles et exactes fournies) et c'est où les choses ont commencé à devenir intéressant. Ce journal me montre que le runtime recherche dans le monde sur ce serveur pour mon montage. Il semble même être recherchant dans mon armoire à pharmacie. Mais … il ne sera pas chercher dans le GAC.

J'ai mis sur ma veste hiver et aller chercher les Internets à nouveau et de trouver que quelqu'un a eu ce problème aussi. La longue discussion dans cette signalisation peters au large en rien et je ne peux pas trouver une solution.

Je propose mon Assemblée dans un des endroits que le journal prétend c'est à la recherche et j'ai progresser un peu plus. Je suis récompensé avec une nouvelle erreur dans le navigateur lorsque j'essaie d'activer la fonction:

Impossible de créer l'objet récepteur feature d'assembly « xyzzyFeatureReceiver_0 », tapez "Conchango.xyzzyFeatureReceiver" pour la fonction b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: System.ArgumentNullException: Valeur ne peut pas être null.
Nom du paramètre: type
à System.Activator.CreateInstance(Type de type, NonPublic booléenne)
à System.Activator.CreateInstance(Type de type)
à Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()

Résoudre les problèmes avec Windows SharePoint Services.

Temps pour un dernier voyage à l'Internets!

Cette fois j'ai trouver, assez prévisible, que MOSS publie cette erreur parce que l'assembly n'est pas dans le GAC.

Je veux obtenir quelque chose de positif de cela et essayer de se sentir un peu fière que j'ai créé le Fugitif des assemblys MSIL, mais il ne fonctionne pas. Je suis tout simplement agacé. Je me surprends murmurant « œuf ou la poule" sous mon souffle.

Je décide finalement de botté de dégagement. Je crée un projet entièrement nouveau et copier/coller le code du projet de non-travail incredible-cloaked-from-the-GAC-assembly plus à ce nouveau projet. (Je cherche un drapeau de génération appelé quelque chose comme "cacher de si installé dans le GAC de liaison d'assembly" mais n'y parvient).

J'ai installer la fonctionnalité et l'activer et … Il fonctionne! Si, Après tout ça, J'ai dû fondamentalement ' redémarrer’ mon projet. Il s'agit d'une autre raison pourquoi je déteste les ordinateurs.

J'ai appris quelque chose d'utile de ce. J'avais été l'installation en utilisant la ligne de commande stsadm tout au long de la journée et utilise le «-force" option par habitude. Pour une raison quelconque, Je n'ai pas utilisé le - option de force quand j'ai installé le nouveau projet. Cette heure, Je l'ai fait en fait, vraiment oublier de copier l'assembly du projet de cette nouvelle dans le global assembly cache. Comme un résultat, J'ai reçu cette FielNotFoundException"" erreur. Cette heure, J'ai obtenu à partir de stsadm, pas quand j'ai essayé d'activer la fonctionnalité via le navigateur web. Si, -Force joue deux rôles. Il vous permet de ré-installer une fonctionnalité existante. Il vous permet également d'installer une fonctionnalité de buggy qui ne peuvent pas travailler à l'exécution par la suppression de l'erreur. Il dit probablement autant dans l'aide quelque part, mais j'ai jamais remarqué.

</fin>

Rapide & Facile: Renommez le fichier téléchargé à l'aide du modèle objet de SharePoint Via un récepteur d'événements

MISE À JOUR: Cela fonctionne mais il y a des limites importantes qui sont décrites dans les commentaires. Cela peut toujours être utile dans certaines circonstances.

MISE À JOUR 2: Dans mon projet actuel, les utilisateurs toujours téléchargement les documents. Comme un résultat, Je ne cours pas dans un problème où MS Word est en cours d'exécution et pense que le fichier a été renommé à ce sujet. J'ai couru dans un problème, « le fichier a été modifié par quelqu'un d'autre" et résolu ce problème par un indicateur de type simple sémaphore. Besoin de l'utilisateur de modifier un champ de données méta de sa valeur par défaut à autre chose. L'itemupdated() récepteur examine une valeur valide il avant d'effectuer réellement la renommer et depuis, Je n'ai eu aucun problème. Votre kilométrage peut varier.

J'ai une exigence client de changer le nom des fichiers téléchargés vers une bibliothèque de documents spécifique conforme à une convention de nommage particulière. L'API ne prévoit pas un changement de nom"()" méthode. Au lieu de cela, Nous utilisons "MoveTo(…)". Ici est un peu un minimum de code pour y parvenir:

 public Substituez VOID ItemAdded(SPItemEventProperties propriétés)
        {
            SPFile f = propriétés.ListItem.File;

            f.MoveTo(propriétés.ListItem.ParentList.RootFolder.Url + « /xyzzy.doc");
            f.Update();

        }

Le bit seulement délicat est les "Propriétés. ListItem.ParentList.RootFolder.Url". Le MoveTo() méthode requiert une URL. Que purée points chaîne me dans le dossier racine de ma bibliothèque de document actuel. Cela me permet d'éviter n'importe quel codage dur dans mon récepteur d'événements.

Il s'agit d'une version plus utile qui fait la même chose, mais affecte le nom du fichier à « Titre »:

 public Substituez VOID ItemAdded(SPItemEventProperties propriétés)
        {
            DisableEventFiring();

            // Attribuer le titre de ce point le nom du fichier lui-même.
 // NOTE: Cette cession doit avoir lieu avant que nous modifions le fichier lui-même.
 // Mise à jour de l'appel() sur le SPFile semble invalider les propriétés dans
 // certains sens.  Mises à jour au titre de »" échoué jusqu'à ce que cela change (mise à jour et() appel)
 // ont été déplacés de la modification du nom de fichier.
            propriétés.ListItem[« Titre"] = propriétés.ListItem.File.Name;

            propriétés.ListItem.Update();

            SPFile f = propriétés.ListItem.File;

            // Obtenir l'extension du fichier.  Nous avons besoin que plus tard.
 chaîne spfileExt = Nouveau FileInfo(d.nom).Extension;

            // Renommez le fichier d'ID de l'élément de liste et utilisent l'extension de fichier pour garder
 // Cette partie intacte.
            f.MoveTo(propriétés.ListItem.ParentList.RootFolder.Url +
                "/" + propriétés.ListItem[« CARTE D'IDENTITÉ"] + spfileExt);

            // Commettre le déménagement.
            f.Update();

            EnableEventFiring();
        }

Astuce rapide: WebPart requête de contenu, XSL et la valeur de la colonne lookup

J'ai un nom de colonne dans un type de contenu nommé « Location de biens immobiliers ».

Cette colonne est de type « recherche ».

J'ai modifié <CommonViewFields> et ItemStyle.xsl pour afficher la colonne.

Un simple <XSL:valeur de choisir =…> renvoie à une valeur interne qui comprend les données de position ordinale, comme:

1;#Miami

Pour obtenir la valeur conviviale, utiliser xsl sous-chaîne après, comme le montre:

<XSL:valuXSLf select = "substring-after(@ Real_x005F_x0020_Estate_x005F_x0020_Location,’#’)"></XSL:de la valeur>

Utilisez cette technique chaque fois que vous travaillez avec des valeurs de recherche dans les fichiers de transformation XSL et nécessaire obtenir la valeur conviviale.

<fin />

Tags Technorati: , ,

Facile et rapide: Déterminer le nom de la colonne interne d'une colonne de Site

MISE À JOUR: Jeremy Thake a blog à ce sujet et certains sont conditionnés code pour une application console qui montre les noms internes.

J'essayais d'obtenir un composant WebPart requête de contenu pour afficher une date d'échéance d'une tâche et que l'étiquette de l'écran est « Due Date », Je suppose que le nom de la colonne à utiliser dans <CommonViewFields> est « Due_x0020_Date ».

Mauvais!

Le nom de colonne réelle dans la présente affaire était « DueDate ».

Comment le trouver? J'ai relu Heather Entrée de blog de Salomon sur la modification de la CQWP pour afficher des colonnes supplémentaires de données. Elle décrit ce processus à l'étape #13. Lui faire confiance. C'est correct. Au moins, C'était bon pour moi. J'ai il ne faisait pas confiance au début d'une autre colonne ayant un nom beaucoup plus de temps.

Je dis « confiance en elle" parce que je ne faisait pas confiance il et probablement perdu près de deux heures, ma tête contre le mur en butée. Après que j'ai résolu « DueDate" nom, Je voulais ajouter un autre champ de <CommonViewFields>. En utilisant la technique de Solomon, Je devenais un nom de colonne comme « XYZ_x0020_Project_x0020_Due_x00 ».

Je me suis dit, C'est clairement un nom tronqué. Je suis allé à suivre et non tronqué il sans succès. J'ai finalement utilisé le nom apparemment tronqué et cela a fonctionné.

Astuce Bonus: Quand je travaillais avec la CQWP, Si j'ai ajouté un mauvais nom interne à <CommonViewFields>, la CQWP me disait que la requête n'a retourné aucun résultat. Mais, Si j'ai ajouté un type de données le nom de domaine, elle retourne un résultat. Ajout de données type masqué en fait un problème puisque j'étais faisant référence à un champ inexistant. Je pourrais ajouter, mais quand j'ai essayé d'afficher sa valeur, Je voudrais obtenir toujours un blanc.

Cela ne pas masquer l'erreur:

<CommonViewFields>Due_x0020_Date;</CommonViewfields>

Cela masquer l'erreur:

<CommonViewFields>Due_x0020_Date,DateTime;</CommonViewfields>

</fin>