Список SharePoint => Таблица данных с именами заголовков

Я получаю доступ к списку SharePoint следующим образом:

#region Accessing share point
        Microsoft.SharePoint.Client.ClientContext cC = new Microsoft.SharePoint.Client.ClientContext(Link);
        cC.Credentials = System.Net.CredentialCache.DefaultCredentials;
        Microsoft.SharePoint.Client.List SPList = cC.Web.Lists.GetByTitle(ListName);
        cC.Load(SPList.Fields);
        Microsoft.SharePoint.Client.FieldCollection Fields = SPList.Fields;
        #endregion


Зацикливание полей, у меня есть вся информация об имени для различных полей. Я могу сделать это так:

            int i = 0;
        foreach(Microsoft.SharePoint.Client.Field FL in Fields)
        {
            WriteLine("Index: " + i++ + "; Internal name: " + FL.InternalName + "; Static name: " + FL.StaticName + "; Title: " + FL.Title);
        }


Экспорт выглядит так:

Индекс 5; Внутреннее имя: Lieferant_x0020__x0028_Nummer_x0; Статическое имя: Lieferant_x0020__x0028_Nummer_x0; Название: Lieferant (Nummer)

Как видите, sharepoint сохраняет внутреннее имя, используя юникод для дополнительных символов. Только в "FL.Title" имя сохраняется, так как пользователь может видеть его в списке sharepoint.
Теперь я хочу поместить эти данные в таблицу данных и отфильтровать их. Я могу сделать это так:

        Microsoft.SharePoint.Client.CamlQuery cQuery = new Microsoft.SharePoint.Client.CamlQuery();
        cQuery = Microsoft.SharePoint.Client.CamlQuery.CreateAllItemsQuery();
        Microsoft.SharePoint.Client.ListItemCollection LIC = SPList.GetItems(cQuery);
        cC.Load(LIC);
        cC.ExecuteQuery();
        dt = new DataTable();

        #region Create columns
        foreach (var Field in LIC[0].FieldValues)
        {
            dt.Columns.Add(Field.Key);
        }
        #endregion

        #region Reading data
        foreach (Microsoft.SharePoint.Client.ListItem It in LIC)
        {
            System.Data.DataRow row = dt.NewRow();

            foreach(var Field in It.FieldValues)
            {
                row[Field.Key] = Field.Value;
            }
            dt.Rows.Add(row);
        }
        #endregion

проблема в том, что в коллекции ListItemCollection доступно только внутреннее имя с дополнительными символами в качестве Unicode. Я также не могу закодировать его, потому что в SharePoint 2010 для внутренних имен есть только 32 символа, что приводит к сокращенным именам, которые больше не являются полными.

Есть ли возможность получить заголовок из столбцов списка в KeyValuePair из ListItem.FieldValues? На самом деле, KeyValuePairs построены так:

<br>
It.FieldValues.Key = //Column as Internal Name
It.FieldValues.Value = //Value

Я нуждаюсь:

It.FieldValues.Key = //Column as Title
It.FieldValues.Value = //Value

Заранее спасибо, Ян

2 ответа

Хорошо, я нашел решение для загрузки списка sharepoint в DataTable с полем. Заголовок, используемый в качестве заголовка столбца.

Пожалуйста, найдите код:

        private System.Data.DataTable GetDataFromSharePointWithFilter(System.Uri Link, string ListName)
    {
        #region GetDataFromSharePoint
        string connectionString = GenerateConnectionString(Link, ListName);
        System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(connectionString);
        conn.Open();

        string strSQL = "SELECT * FROM LIST";
        System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(strSQL, conn);
        DataSet ds = new DataSet();

        ds.Locale = System.Globalization.CultureInfo.InstalledUICulture;
        System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(cmd);
        da.Fill(ds);
        #endregion

        #region Transfer data to DataTable
        return ds.Tables[0];
        #endregion
        }

Если я зациклю все столбцы, их заголовок будет правильным. Но содержимое списка хранится неправильно. В столбце Listcolumn такие значения, как 000, 001, 008 или 0028, сохраняются в текстовом формате. И приведенный ниже код читает, например, 008 как 45. В другом столбце вводится имя, например, Schneider, Markus, и моя программа возвращает 24.

У кого-нибудь есть идея, почему?

РЕДАКТИРОВАТЬ: нашел ошибку, вы не могли видеть. В строке подключения у меня был параметр RetrieveIds=Yes;, Это было причиной того, что мой код повторял содержимое неправильно.

Для тех, кто дошел до этого и не знает, что означает "цикл по столбцам", вы можете использовать этот код:

                //Name of your field
                if (field.Title == "YourFieldDisplayName" && oListItem[field.StaticName] != null)
                {
                    dr["Title"] = oListItem[field.StaticName].ToString();

                }

Это проверит ваше отображаемое имя, но будет использовать staticname для получения значения.

Ура!

Замените строку кода следующим образом: вы получите коллекцию полей, и там вы можете получить поля по внутреннему имени, статическому имени и отображаемому имени.

 Microsoft.SharePoint.Client.ListItemCollection LIC = SPList.GetItems(cQuery).Fields;
Другие вопросы по тегам