jueves, 18 de septiembre de 2014

Listar en SharePoint ítems con versiones en formato XML y conectar a Excel

Requerimiento

Exportar a Excel los datos de una lista en MOSS 2007:
  • Incluyendo la información de versiones
  • Sólo registros en donde cambie el estado

Enfoque de desarrollo
  • Utilización de SPListItemVersion para leer la información de versiones
  • Generación de los datos en XML para poder conectar fácilmente Excel

Resultado


Forma de uso









El código

<%@ Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"%>
<%@ Page Language="C#" 
         Inherits="Microsoft.SharePoint.WebControls.LayoutsPageBase" EnableViewStateMac="false" EnableViewState="true" MaintainScrollPositionOnPostback="true"%>

<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.IO" %>

<script runat="server">

protected override void OnLoad(EventArgs e) {

string resultado;
string estado;
string estado_anterior;

using ( SPWeb mi_web = SPContext.Current.Web ) {
SPList mi_lista = mi_web.GetList("/sites/sitio1/lista1");

SPQuery mi_consulta = new SPQuery();

mi_consulta.ViewFields = "<FieldRef Name='ID'/>";
mi_consulta.ViewFields = "<FieldRef Name='Estado_x0020_del_x0020_requerimi'/>";

mi_consulta.ViewFields += "<FieldRef Name='PermMask'/>"; 

DataTable tabla = new DataTable();

tabla.TableName = "Requerimientos";
tabla.Columns.Add("ID", typeof(int));
tabla.Columns.Add("Version", typeof(string));
tabla.Columns.Add("Estado", typeof(string));
tabla.Columns.Add("Modificada", typeof(string));

SPListItemCollection mis_items = mi_lista.GetItems(mi_consulta);

foreach (SPListItem mi_item in mis_items) {

estado_anterior = "";

for ( int i =  mi_item.Versions.Count - 1 ; i >= 0; i-- ) {

SPListItemVersion mi_version = mi_item.Versions[i];

if ( mi_version["Estado_x0020_del_x0020_requerimi"] == null ) {
estado = "";
}
else {
string lkp_estado = mi_version["Estado_x0020_del_x0020_requerimi"].ToString();
      SPFieldLookupValue lkp_estado_valor = new SPFieldLookupValue(lkp_estado);
estado = lkp_estado_valor.LookupValue;
}
if ( estado != estado_anterior ) {
tabla.Rows.Add( mi_version["ID"], mi_version.VersionLabel, estado, mi_version.Created.Date.ToString("d") );
estado_anterior = estado;
}

}

}

using (StringWriter sw = new StringWriter()) {
tabla.WriteXml(sw);
resultado = sw.ToString();
}

}

Response.ContentType = "application/xml";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.Write(resultado);

}

</script>


Hasta la próxima!

0 comentarios:

Publicar un comentario