Domanda

Come faccio a impostare campo di ricerca di un ListItem utilizzando il codice?

SPFile file = list.RootFolder.Files.Add(destUrl, iStream, true);
SPListItem item = file.Item;

item["DocumentID"] = DocID.ToString();
item["Priority"] = "2";
item["StatusLookup"] = "Draft";
 item.Update();

Questo codice genera un'eccezione:

dati non valido è stato utilizzato per aggiornare la voce di elenco. Il campo si è cercando di aggiornamento può essere letto solo

Qual è la corretta sintassi per campi di ricerca impostati?

È stato utile?

Soluzione

Utilizzare l'ID del target di ricerca:

        using(SPSite site = new SPSite("http://test.dev.com"))
        using (SPWeb web = site.OpenWeb())
        {
            SPList list = web.Lists["Suppliers"];
            SPListItem item = list.AddItem();

            item[SPBuiltInFieldId.Title] = "Test";
            item["Product"] = 1; // Use the ID; get it from the list

            item.Update();
        }

In questo caso, ho una lista denominata Fornitori che ha un campo chiamato prodotto che è una ricerca in un elenco denominato prodotti. È possibile utilizzare l'ID del target di ricerca sia in forma intero o in forma di stringa ( "1").

ho codificato solo per fornire un esempio. Avrai bisogno di fare una ricerca separata alla lista degli obiettivi per ottenere il valore.

Altri suggerimenti

Un modo migliore per farlo è il SPFieldLookupValue classe. MSDN ha un buon esempio.

In breve, qualcosa di simile a:

SPListItem lookedUpItem =  GetItemSomeHow();
newItem[lookupField] = new SPFieldLookupValue( lookedUpItem.ID, lookedUpItem.Title);
newItem.Update();

Ecco una funzione per trovare l'ID di ricerca dalla tabella di ricerca:

public static int GetLookupIDFromList(SPWeb web, string strListName, string strLookupColumnName, string strLookupValue)
    {
        try
        {
            SPList list = web.Lists[strListName];

            string strCAMLQuery = "<Where><Eq><FieldRef Name='"+strLookupColumnName+"' /><Value Type='Text'>"+ System.Web.HttpContext.Current.Server.HtmlEncode(strLookupValue)+"</Value></Eq></Where>";
             //If you are developing console application, use  
            // System.Web.HttpUtility.HtmlEncode(strLookupValue) instead of 
            //System.Web.HttpContext.Current.Server.HtmlEncode(strLookupValue)

            SPQuery query = new SPQuery();
            query.Query = strCAMLQuery;
            query.ViewFields = string.Concat(
                                    "<FieldRef Name='ID' />",
                                    "<FieldRef Name='"+strLookupColumnName+"' />");


            SPListItemCollection items=list.GetItems(query);

            if (items.Count > 0)
            {
                int iRet = items[0].ID;
                return iRet;
            }
            else
            {
                return 0;
            }
        }
        catch (Exception ex)
        {
            return 0;
        }
    }

Ecco un esempio di come utilizzare la funzione:

using (SPSite site = new SPSite("http://yoursite/web"))
 {
   using (SPWeb web=site.OpenWeb())
   {
     SPList list=web.Lists["ListToUpdate"];

     SPListItem item =list.AddItem();


     string strLookupValue = "Lookup Value";

                    int LookupID= GetLookupIDFromList(web, "LookupListName", "Title", strLookupValue);

                    if (LookupID> 0)
                    {
                        SPFieldLookupValue spflv = new SPFieldLookupValue(LookupID,strLookupValue);
                        //spflv.LookupId = LookupID;

                        item["LookupFieldName"] = spflv;
                        item.Update();


                    }
                    else
                    {
                        strRet += "Lookup value [" + strLookupValue+ "] not found.<br />";

                    }

  }

}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top