Come impostare il valore ListItem campo di ricerca
-
16-10-2019 - |
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?
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 />";
}
}
}