c# sharepoint spfield splist

c# - Programativamente cambiando el orden de los campos en la lista Sharepoint 2007



spfield splist (3)

Eché un vistazo al origen de la página de pedidos de columnas (formEdt.aspx), parece que usan servicios web, no el modelo de objetos:

function DoBuildAndSubmit() { var numFound, currentSelect, selectValue; var form = document.forms.aspnetForm; var numFields = form["numSelects"].value; var xml = "<Fields>"; numFound = 0; while(numFound < numFields) { for(x = 0; x < numFields; x++) { currentSelect = form["FormPosition" + x]; if(currentSelect.selectedIndex == numFound) { selectValue = currentSelect.options[numFound].value; xml = xml + "<Field Name=/"" + selectValue + "/"/>" + "/n"; numFound++; } } } for(x = numFields ; x < 67; x++) xml = xml + "<Field Name=/"" + form["FormPosition" + x].value + "/"/>" + "/n"; xml = xml + "</Fields>"; document.frmLayoutSubmit["ReorderedFields"].value=xml; document.frmLayoutSubmit.action = "http://local/_vti_bin/owssvr.dll?CS=65001"; document.frmLayoutSubmit.submit(); }

Ahora, podría ser posible hacerlo a través del modelo de objetos, pero no tengo una buena sensación cuando la UI se pone en marcha.

Estoy agregando dos nuevos campos en una lista Sharepoint ya existente programáticamente a través de una función. Los campos se agregan con éxito pero no he podido ajustar el orden de las columnas.

Esta tarea se realiza simplemente a través de la IU yendo a Configuración de lista y luego a Ordenar columna, pero no he podido lograr la tarea mediante programación.

A través de algunas investigaciones, he visto que puede usar SPContentType del formulario para cambiar el orden de FieldLinks (como se muestra a continuación):

SPList list = web.Lists["Example List"]; if (list.ContentTypes.Count > 0) { SPContentType ct = list.ContentTypes[0]; string[] names = {"Example_x0020_One", "Example_x0020_Two", "Example_x0020_Three"}; ct.FieldLinks.Reorder(names); ct.Update(); }

En este ejemplo, la lista ya tendría las columnas "Ejemplo uno" y "Ejemplo tres", y agregaría el "Ejemplo dos" más adelante y luego trataré de ordenarlas.

Sin embargo, este enfoque no funcionó para mí, por lo que si alguien tiene comentarios sobre él, se lo agradecería.

El siguiente elemento que vi es cambiar manualmente el SchemaXml de la lista para tener el orden correcto de los campos, pero quería ver si este era el mejor método.

Cualquier comentario sería apreciado, gracias por su ayuda.


Aquí hay una versión de Powershell:

# Moves "FieldToBeMoved" after "Description" field $list = $web.Lists["Documents"] $ct = $list.ContentTypes[0] # Or find the desired CT $newOrder = @() foreach ($field in $ct.Fields) { if ($field.StaticName -ne "FieldToBeMoved") { $newOrder += $field.StaticName } if ($field.StaticName -eq "Description") { $newOrder += "FieldToBeMoved" } } $ct.FieldLinks.Reorder($newOrder) $ct.Update();


Utilicé el código de su respuesta, excepto que examiné programáticamente los tipos de contenido y los campos de la lista que quería reordenar.

// Paso 1 (opcional): enumere los tipos de contenido y los campos de su lista para ver lo que está en la lista

SPList list = web.Lists[strListName]; string strRet=""; foreach (SPContentType spct in list.ContentTypes) { strRet += "<strong>Content Type: </strong>" + spct.Name + ", <strong>Fields</strong>: <br />"; foreach (SPField field in spct.Fields) { if (strFieldInfo != "") { strFieldInfo += ", "; } strFieldInfo += "/"" + field.StaticName + "/""; } strRet += strFieldInfo + "<br />-----<br />"; } //Output the results lblOutput.Text = strRet;

Ahora, tendrá una idea de cuántos tipos de contenido tiene su lista y qué campos están en la lista.

De forma predeterminada, si la administración de tipo de contenido no está habilitada, tendrá un tipo de contenido que tenga todos los campos.

Muestra de salida del código anterior:

Tipo de contenido: evento, campos :

"ContentType", "Title", "Location", "EventDate", "EndDate", "Description", "fAllDayEvent", "fRecurrence", "WorkspaceLink", "EventType", "UID", "RecurrenceID", "EventCanceled" "," Duración "," RecurrenceData "," TimeZone "," XMLTZone "," MasterSeriesItemID "," Workspace "," Course "," CourseLocation "

El siguiente paso 2 es cambiar el orden del tipo de contenido. Puede cortar y pegar desde el resultado del paso 1, reordenarlo y agregar "{" y "};" a su alrededor para crear la matriz de cadenas para el orden que desee.

if (list.ContentTypes.Count > 0) { SPContentType ct = list.ContentTypes[0]; //Specify the content type here, if you have more than one content type in your list. string[] fieldnames = { "ContentType", "Title", "Course", "CourseLocation", "EventDate", "EndDate", "Description", "fAllDayEvent", "fRecurrence", "WorkspaceLink", "EventType", "UID", "RecurrenceID", "EventCanceled", "Duration", "RecurrenceData", "TimeZone", "XMLTZone", "MasterSeriesItemID", "Workspace", "Location"}; ct.FieldLinks.Reorder(fieldnames); web.AllowUnsafeUpdates = true; ct.Update(true); web.AllowUnsafeUpdates = false; }