Question

J'ai un problème avec la définition du champ dans l'élément Mise à jour de l'élément dans la bibliothèque de documents avec SharePoint 2007.

J'ai la situation suivante, j'ai une bibliothèque de documents, et lorsque j'ajoute un document basé sur un lookeuplield, je souhaite ajouter des valeurs à un autre champ de recherche avec sélecteur, mais elle échoue.

Mais si j'ai déjà un document dans la bibliothèque de documents et dans les propriétés Modifier, je modifie l'élément et je l'ai mis à jour, il met à jour le champ.

J'ai remarqué une certaine incohérence dans ce domaine, à savoir quand je me refuse, je passe je passe à un champ de ce type de données: 58; #somevalue; # 59; # quelqueévalue2; # 60; # quelqueévalue3 ...

Mais quand j'ajoute un document dans le modèle, je remplis dans le champ de recherche, je reçois les trucs suivants pour passer à un autre champ de recherche avec le cueilleur: 58; #; 59; #; # 60; #

Cela signifie qu'il passe d'identité, mais les valeurs sont vides, mais il semble que je dois aussi avoir des valeurs aussi, pour le faire fonctionner.

i h Ave le code suivant:

public override void ItemUpdating(SPItemEventProperties properties)
        {
            base.DisableEventFiring();
            base.ItemUpdating(properties);

            string nameLookUp = "LookUpField";
            string namePickUp = "LookUpFieldWithPicker";


            string opp = properties.BeforeProperties[namePickUp]==null ? string.Empty : properties.BeforeProperties[namePickUp].ToString();
            string npp = properties.AfterProperties[namePickUp] == null ? string.Empty : properties.AfterProperties[namePickUp].ToString();

            string op = properties.BeforeProperties[nameLookUp] == null ? string.Empty : properties.BeforeProperties[nameLookUp].ToString();
            string np = properties.AfterProperties[nameLookUp] == null ? string.Empty : properties.AfterProperties[nameLookUp].ToString();

            if (!string.IsNullOrEmpty(npp) && opp != npp)
            {
                SPFieldLookupValueCollection value = new SPFieldLookupValueCollection(properties.AfterProperties[namePickUp].ToString());
                properties.AfterProperties[nameLookUp] = properties.AfterProperties[namePickUp];
            }
            else if (!string.IsNullOrEmpty(np) && op != np)
            {
                 properties.AfterProperties[namePickUp] = properties.AfterProperties[nameLookUp];
            }

            base.EnableEventFiring();
        }

J'espère que quiconque peut me conseiller quelque chose ... merci

Était-ce utile?

La solution

Take reference to lookup list and use List.GetItemById(Id) to get the item and take the column value and construct the lookup collection. Example: SPList lookupList=properties.web.lists["lookupListName"]; SPListItem lookuplistitem=lookupList.GetItemById(4); //Here Id is 4 string filedvalue=lookuplistitem["lookupfieldname"];//Which field you are taking as lookup now construct the fieldlookup and do the same for all id's and construct fieldlookupvaluecollection.

List.GetItemById(Id) query is faster so you will not get much performance issues.

Autres conseils

As per my understanding there are two lookups from same list/library. SPFieldLookupValueCollection for each field is different. The format is ID;#Value here ID is listitem ID and Value is what you stored for respective fields in lookup list.

For "LookUpField" "ID;#LookUpFieldValue"

For "LookUpFieldWithPicker" "ID;#LookUpFieldWithPickerValue"

Before updating the listitem you have to construct the lookup collection like this

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top