private IEnumerable<string> GetViewFields() { List<string> viewFields = new List<string>(); bool includeMetaInfo = IncludeProperties; foreach (string columnName in this.DataColumns) { if (columnName != null) { if (IsMetaInfoProperty(columnName)) { includeMetaInfo = true; } viewFields.Add(columnName); } } if (includeMetaInfo) { viewFields.Add("MetaInfo"); } return viewFields; }
/// <summary> /// Fills the schema of the table consulting the schema of the sharepoint list. /// </summary> /// <param name="table">the DataTable object to change</param> /// <param name="connection">an open Sharepoint connection</param> protected void FillSchemaFromSharepoint(DataTable table, SpConnection connection) { if (table == null) throw new ArgumentNullException("table"); ViewDef viewDef = null; ListDef listDef = null; if (this.ViewName != null) { viewDef = connection.GetViewSchema(this.ListName, this.ViewName); listDef = viewDef.ListDef; } else { listDef = connection.GetListSchema(this.ListName); } IList<DataColumn> primaryColumns = new List<DataColumn>(); foreach (Field field in listDef.Fields) { DataColumn column; if (viewDef != null && viewDef.ViewFields.Count > 0 && !ContainsFieldRefWithName(viewDef.ViewFields, field.Name)) continue; if (!table.Columns.Contains(field.Name)) { column = new DataColumn(); table.Columns.Add(column); } else { column = table.Columns[field.Name]; } MapFromFieldToColumn(column, field); // sharepoint returns as primary key the ID // which is relevant to sharepoint list. if (field.IsPrimaryKey) primaryColumns.Add(column); } bool primaryRemoved = false; if (DataColumns.Count > 0) { List<string> columnsToRemove = new List<string>(); foreach (DataColumn tableColumn in table.Columns) { if (!DataColumns.Contains(tableColumn.ColumnName)) { columnsToRemove.Add(tableColumn.ColumnName); if (primaryColumns.Contains(tableColumn)) primaryRemoved = true; } } foreach (string tableColumn2 in columnsToRemove) table.Columns.Remove(tableColumn2); } if (primaryColumns.Count > 0 && !primaryRemoved) { DataColumn[] primaryKey = new DataColumn[primaryColumns.Count]; primaryColumns.CopyTo(primaryKey, 0); table.PrimaryKey = primaryKey; } table.TableName = this.TableName; }