Форматировать значения LookUp, полученные из WebServices - PullRequest
0 голосов
/ 26 ноября 2011

Я работаю с Lists WebService и по извлечению XML-данных, мне нужно отформатировать их в удобном и чистом формате, чтобы отображать их на внешнем интерфейсе.Я получаю значения loopup, как показано ниже в формате

12;#Infor ERP Baan;#15;#Infor ERP LN;#31;#Infor PM;#32;#Infor SCM

, и мне нужно отобразить его в виде списка маркеров, и для этого мне нужно, чтобы значения были разделены символом ";"к этому я могу вставить цикл и добавить <li>, что-то вроде

 Infor ERP Baan;Infor ERP LN;Infor PM;Infor SCM

Ответы [ 3 ]

2 голосов
/ 08 марта 2013

Я использовал следующую функцию и регулярное выражение для разделения данных при возврате данных поиска из SharePoint.

    static private Dictionary<int,string> GetValues(string productsCellData)
    {
        // regular expression to split the data into an array, we need the ExplictCapture
        // to prevent c# capturing the ;#
        var regex = new Regex(@"((?<=\d);#|;#(?=\d))", RegexOptions.ExplicitCapture);

        // our array of data that has been processed.
        var productsCellsArray = regex.Split(productsCellData);

        Dictionary<int, string> productsDictionary = new Dictionary<int, string>();

        if (productsCellsArray.Length % 2 == 1)
        {
            // handle badly formatted string the array length should always be an even number.
        }

        // set local variables to hold the data in the loop.
        int productKey = -1;
        string productValue = string.Empty;

        // loop over the array and create our dictionary.
        for (var i = 0; i < productsCellsArray.Length; i++)
        {
            var item = productsCellsArray[i];
            // process odd/even
            switch (i % 2)
            { 
                case 0:
                    productKey = Int32.Parse(item);
                    break;
                case 1:
                    productValue = item;
                    if (productKey > 0)
                    {
                        productsDictionary.Add(productKey, productValue);
                        productKey = -1;
                        productValue = string.Empty;
                    }
                    break;
            }
        }

        return productsDictionary;
    }

Преимущество заключается в обработке разделителя, # если он появляется (маловероятно, как кажется) в разделе значений.

Он также имеет следующие преимущества

  1. Поиск значений из Id
  2. Получить массив слов из словаря
  3. Получить массив значений из словаря
  4. Проверить, существует ли значение в словаре
  5. Проверить, существует ли идентификатор в словаре

Надеюсь, это поможет.

1 голос
/ 26 ноября 2011

Значение поля поиска в SharePoint содержит две части информации - идентификатор искомого элемента и текстовое значение указанного поля. Они объединяются в одну строку, используя ;# в качестве разделителя. Здесь у вас есть значение SPFieldLookupMulti - поле, в котором вы можете выбрать несколько значений в данный момент. Следовательно, он содержит ID1; # value1; # ID2; # value2 ...

Самое простое решение - String.Split увеличить на ;# подстроку (посмотрите этот ответ, чтобы узнать, как: https://stackoverflow.com/q/1126933/239599) затем получите доступ только к четным индексам результирующего массива: 0-й элемент содержит ID1, 1-й элемент содержит значение1; второй элемент содержит идентификатор2; третий элемент содержит значение2.

Таким образом, вы можете использовать цикл for и увеличить счетчик на 2.

0 голосов
/ 29 ноября 2011

Лучший способ сделать это будет:

ProductsCellData = "12;#Infor ERP Baan;#15;#Infor ERP LN;#31;#Infor PM;#32;#Infor SCM"

      string[] nProductsCellData = Regex.Replace(ProductsCellData, @"\d", ";").Replace(";#", "").Replace(";;", ";").Split(';');
                        foreach (string product in nProductsCellData)
                        {
                            if (product != "")
                            {
                                e.Row.Cells[i].Text += "<li>" + product + "</li>";
                            }
                        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...