Как проверить элемент списка поиска и добавить его, если он отсутствует, в SharePoint 2007 через C #? - PullRequest
0 голосов
/ 04 февраля 2012

Привет и спасибо за поиск!

Фон

У меня возникают проблемы , когда я пытаюсь добавить значение в столбец поиска .

Я использую SharePoint 2007, и приложение должно работать в .NET 2.0.Язык C #. В некоторых столбцах поиска допускается использование нескольких значений.

Вопрос

Используя C #, как выполнить # 2-4 из следующего:

  1. Попытка добавить элемент списка в список SP.
  2. Для любых столбцов поиска проверьте список SP, на который они ссылаются, чтобы увидеть, содержит ли этот список значение, которое я пытаюсь добавить.
  3. Если значение не существует в списке поиска, добавьте его.
  4. Свяжите вновь добавленное значение поиска с элементом списка, который я первоначально пытался добавить.

У меня естьгуглил это, конечно, но все еще застрял.Вот некоторый код от Microsoft, который является началом, но он все еще не заставляет меня двигаться (не прокомментированный и не интуитивный для меня):

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SPSite site = new SPSite("http://localhost"))
            {
                using (SPWeb web = site.RootWeb)
                {
                    SPList customerList = web.Lists.TryGetList("Contoso Customers");
                    SPList orderList = web.Lists.TryGetList("Contoso Orders");

                    if (customerList != null && orderList != null)
                    {
                        SPListItemCollection customers = customerList.Items;
                        SPListItemCollection orders = orderList.Items;

                        string fieldName = "CustIDLookup";
                        if (!orderList.Fields.ContainsField(fieldName))
                            return;

                        SPField lookupFld = orderList.Fields.GetField(fieldName);

                        foreach (SPListItem customer in customers)
                        {
                            SPListItem order = orders.Add();
                            order[SPBuiltInFieldId.Title] = "Thank you!";
                            order.Update();

                            SPFieldLookupValue value = new SPFieldLookupValue(customer.ID, customer.ID.ToString());
                            order[lookupFld.Id] = value.ToString();
                            order.Update();
                        }
                    }
                }
            }
        }
    }
}

Даже с примерами Microsoft, я не могу получить никакого реальноготяга в выяснении, как на самом деле это сделать.

Ваша помощь очень ценится.

1 Ответ

0 голосов
/ 04 февраля 2012
//untested pseudocode - hope this points you in the right direction

SPList lookupItems = ... // add code here
SPList list = ... // add code here
string lookupFieldName = "LookupValue"; // change to the appropriate value

foreach(SPListItem item in list.Items)
{ 
    string value = (string)item[lookupFieldName];
    if(value.Contains("#")) // value containing hash is most likely a lookup value already
    {
         // use SPFieldLookupValue to get actual value
         SPFieldLookupValue currentValue = new SPFieldLookupValue(value);
         value = currentValue.LookupValue;
    }

    // Get the list item (you will need this to find out its id value)
    SPListItem lookupItem = GetLookupListItem(lookupList, value);
    if(lookupItem == null)
    {
        //If it doesn't exist, create it
        lookupItem = AddNewLookupItem(lookupList, value);
        SPFieldLookupValue lookupValue = new      SPFieldLookupValue(lookupItem.ID,value));
        item["LookupValue"] = lookupValue.ToString();
        item.Update();
    }
}
SPListItem GetLookupListItem(SPList lookupList, string value)
{
    // iterate through list to find item
    // use a list query if the list is too big for this to perform well (see here: http://msdn.microsoft.com/en-us/library/ie/ms456030.aspx)
    foreach(SPListItem item in lookupList)
    {
        string itemValue = (string)item[0]; // assuming lookup list has one field of type string containing lookup value
        if(value == itemValue)
        {
            return item;
        }
    }
    return null;
}

SPListItem AddLookupListItem(SPList list, string value)
{
    SPListItem newItem = list.Add();
    newItem[0] = value;// assuming lookup list has one field of type string containing lookup value
    newItem.Update();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...