Question

Je souhaite utiliser le contrôle MultipleLookupField dans une page Web qui s'exécutera dans le contexte de SharePoint.Je me demandais si quelqu'un pourrait m'aider avec un exemple, qui montre étape par étape comment utiliser le contrôle deux pour afficher deux collections SPField.

Était-ce utile?

La solution

Je ne suis pas entièrement sûr de comprendre votre question, en particulier celle concernant l'affichage de deux collections SPField.Désolé si cela s’avère être la réponse à une question complètement différente !

Quoi qu'il en soit, voici une démonstration rapide de l'utilisation de MultipleLookupField dans un composant WebPart.

Créez un site d'équipe.Ajoutez quelques tâches à la liste des tâches.Mettez également un document dans la bibliothèque de documents partagés.Créez une nouvelle colonne dans la bibliothèque de documents partagés ;appelez-le « Associé », faites en sorte qu'il s'agisse d'une recherche dans le champ Titre de la liste des tâches et autorisez plusieurs valeurs.

Créez maintenant un composant WebPart, effectuez tout le passe-partout habituel, puis ajoutez ceci :

Label l;
MultipleLookupField mlf;

protected override void CreateChildControls()
{
    base.CreateChildControls();
    SPList list = SPContext.Current.Web.Lists["Shared Documents"];
    if (list != null && list.Items.Count > 0)
    {
        LiteralControl lit = new LiteralControl("Associate tasks to " + 
                             list.Items[0].Name);
        this.Controls.Add(lit);

        mlf = new MultipleLookupField();
        mlf.ControlMode = SPControlMode.Edit;
        mlf.FieldName = "Related";
        mlf.ItemId = list.Items[0].ID;
        mlf.ListId = list.ID;
        mlf.ID = "Related";
        this.Controls.Add(mlf);

        Button b = new Button();
        b.Text = "Change";
        b.Click += new EventHandler(bClick);
        this.Controls.Add(b);

        l = new Label();
        this.Controls.Add(l);
    }

}

void bClick(object sender, EventArgs e)
{
    l.Text = "";
    foreach (SPFieldLookupValue val in (SPFieldLookupValueCollection)mlf.Value)
    {
        l.Text += val.LookupValue.ToString() + " ";
    }
    SPListItem listitem = mlf.List.Items[0];
    listitem["Related"] = mlf.Value;
    listitem.Update();
    mlf.Value = listitem["Related"];
}

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    EnsureChildControls();
}

Certes, c'est à la limite du ridicule - tout est codé en dur, il n'y a aucune gestion des erreurs et cela ne sert à rien - mais il s'agit uniquement d'une démonstration rapide.Maintenant, créez et déployez ce composant WebPart et ajoutez-en une instance à la page d'accueil de votre site d'équipe ;il devrait vous permettre d'obtenir et de définir les tâches associées au premier document de la bibliothèque.

Le bit étrange vers la fin du bouton Click handler, où nous lisons une valeur de mlf.Value puis la réécrivons, semble être nécessaire si vous souhaitez que l'interface utilisateur reste synchronisée avec les valeurs réelles de la liste.Essayez d'omettre la dernière ligne de bClick pour voir ce que je veux dire.Cela me rend fou depuis environ une heure, et j'espère qu'un autre commentateur pourra proposer une meilleure approche...

Autres conseils

Hum.Fonctionne bien sur le mien, alors voyons si nous pouvons comprendre en quoi votre configuration est différente...

Il semble qu'il ait du mal à remplir le contrôle ;ma première hypothèse serait que cela soit dû au fait que le code fait de nombreuses hypothèses sur les listes auxquelles il s'adresse.Pouvez-vous vérifier que vous disposez d'un site d'équipe simple, avec (en supposant que ces noms sont sensibles à la casse) :

  1. Une liste appelée Tâches, contenant plusieurs éléments
  2. Une bibliothèque appelée Documents partagés avec au moins un document
  3. Une colonne intitulée Related dans la bibliothèque Documents partagés
  4. La colonne Associé est un champ de recherche dans la colonne Titre des tâches et autorise plusieurs valeurs.
  5. Le premier document dans Documents partagés a une valeur pour Related

Ajoutez ensuite le composant WebPart.Doigts croisés...

Hum.OK, j'essaie toujours de casser le mien...je suis donc allé dans le répertoire des mises en page et j'ai créé un fichier foo.aspx.C'est ici:

<%@ Page Language="C#" Inherits="System.Web.UI.Page" MasterPageFile="~/_layouts/simple.master" %> 
<%@ Register Tagprefix="foo" Namespace="Foople" Assembly="Foople, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5"%>
<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server">
<foo:WebPart1 id="fred" runat="server" />
<foo:WebPart1a id="barney" runat="server" />
</asp:Content>

WebPart1 est le composant WebPart d'avant.WebPart1a est exactement le même code, mais dans une classe qui hérite directement de WebControl plutôt que de WebPart.

Cela fonctionne bien, mis à part un problème de validation de sécurité lors de la publication que je n'arrive pas à déboguer.

En changeant la page maître en ~masterurl/default.master, j'ai téléchargé foo.aspx dans la bibliothèque de documents partagés, et cela fonctionne également très bien à partir de là - WebControl et WebPart se comportent correctement et le problème de sécurité a également disparu.

Je suis donc perdu.Bien que j'aie remarqué cette page avec un éventuel bug obscur qui se trouve également dans SPFolder.get_ContentTypeOrder() : http://forums.msdn.microsoft.com/en-US/sharepointdevelopment/thread/63baf273-7f36-453e-8293-26417759e2e1/

Avez-vous une chance de poster votre code ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top