Importar objetos a Listas con C#

28/10/2008 - 18:21 por Txarlie | Informe spam
Hola:

Tengo que importar items a una lista de mi Sharepoint desde un
repositorio de datos. Y lo estoy haciendo en C#.

Tengo que decir que estaba intentando añadir los items
programaticamente como he visto en tantos foros, pero resulta que
necesito utilizar la clase SPFile porque mis items están basados en
archivos XML de InfoPath (en vez de SPListItems).

Primero miro cuantos archivos tengo en mi repositorio de datos y por
cada uno de ellos, tengo que generar un SPFile desde una plantilla.
Esta plantilla no es más que un archivo InfoPath con todos los campos
vacíos.

La idea es recorrerme todo mi repositorio y editar la plantilla de
InfoPath tantas veces como necesito, editándola para añadirle los
datos que obtenga de mi repositorio. Después de editarla y añadirle
los datos, guardo la plantilla con un nombre único de tipo. Todos los
archivos van a la carpeta correspondiente a mi lista. Después de eso,
añado el archivo recién creado usando esta instrucción:

ColeccionDeFicheros.Add(sNombreFic.ToString(), sr.BaseStream, oMember,
oMember, dateTime, dateTime);

Pero no funciona.

En resumen, el problema es que no consigo editar correctamente la
plantilla y guardarla en su sitio para que sea accesible desde la
lista. Necesito abrir una plantilla, editarla, modificarla y salvarla
con un nombre único. ¿O hay otra manera?

Hasta ahora, estoy dando palos de ciego. A ver si alguno me puede
ayudar, por favor. Estoy muy perdido.

Un saludo.

Preguntas similare

Leer las respuestas

#1 Gustavo
29/10/2008 - 23:13 | Informe spam
Hola,
De pronto utilizando el Modelo de Objetos de InfoPath?
(http://msdn.microsoft.com/en-us/lib...79620.aspx)... es solo una idea,
no tengo ni idea si te funcionaria...
Suerte,
Gustavo
http://www.gavd.net/servers/default.aspx
http://geeks.ms/blogs/gvelez/


"Txarlie" wrote:

Hola:

Tengo que importar items a una lista de mi Sharepoint desde un
repositorio de datos. Y lo estoy haciendo en C#.

Tengo que decir que estaba intentando añadir los items
programaticamente como he visto en tantos foros, pero resulta que
necesito utilizar la clase SPFile porque mis items están basados en
archivos XML de InfoPath (en vez de SPListItems).

Primero miro cuantos archivos tengo en mi repositorio de datos y por
cada uno de ellos, tengo que generar un SPFile desde una plantilla.
Esta plantilla no es más que un archivo InfoPath con todos los campos
vacíos.

La idea es recorrerme todo mi repositorio y editar la plantilla de
InfoPath tantas veces como necesito, editándola para añadirle los
datos que obtenga de mi repositorio. Después de editarla y añadirle
los datos, guardo la plantilla con un nombre único de tipo. Todos los
archivos van a la carpeta correspondiente a mi lista. Después de eso,
añado el archivo recién creado usando esta instrucción:

ColeccionDeFicheros.Add(sNombreFic.ToString(), sr.BaseStream, oMember,
oMember, dateTime, dateTime);

Pero no funciona.

En resumen, el problema es que no consigo editar correctamente la
plantilla y guardarla en su sitio para que sea accesible desde la
lista. Necesito abrir una plantilla, editarla, modificarla y salvarla
con un nombre único. ¿O hay otra manera?

Hasta ahora, estoy dando palos de ciego. A ver si alguno me puede
ayudar, por favor. Estoy muy perdido.

Un saludo.

Respuesta Responder a este mensaje
#2 Carlos Rodriguez
31/10/2008 - 15:56 | Informe spam
No se si comprendo bien lo que quieres hacer


- Tu formulario InfoPath (plantilla) esta publicado como "Content-Type" en
la lista sherepoint en donde quieres guardar tus .xml o esta simplemente
guardada como fichero .xsn ?

- Si tu plantilla esta publicada como "Content-Type" en tu sitio sharepoint
y que tu en tu lista puedes crear nuevos items de este "Content-type" puedes
simplemente editar el .xml de tu plantilla y guardarlos como .xml en tu
lista.. de regreso tu plantilla que es el Content-Type de tu lista llama el
fichero .xml cuando clicas en el.




aqui tienes una manera de hacer el copia del fichero a tu lista sp.. no lo
probe pero deve functionar


abrir tu SPWeb -> tuspweb

// Destinasion (document library)
SPFolder destFolder;
destFolder = tuspweb.GetFolder("Nombre interno de tu lista");

// Colleccion
SPFileCollection destFiles;
destFiles = destFolder.Files;

tuspweb.AllowUnsafeUpdates = true;

SPFile copyFile;
copyFile = destFiles.Add(destinacion_URL, fichero_xml_binario, true);

// editar/anadir metadata adisional
if (copyFile.Item != null)
{
copyFile.Item["Title"] = "tu titulo";
copyFile.Item.Update();
}

tuspweb.AllowUnsafeUpdates = false;


no olvides de visitar mi nuevo (muy pero muy reciente sitio
...http://www.aprendaMOSS.com)

Carlitos







"Txarlie" wrote in message
news:
Hola:

Tengo que importar items a una lista de mi Sharepoint desde un
repositorio de datos. Y lo estoy haciendo en C#.

Tengo que decir que estaba intentando añadir los items
programaticamente como he visto en tantos foros, pero resulta que
necesito utilizar la clase SPFile porque mis items están basados en
archivos XML de InfoPath (en vez de SPListItems).

Primero miro cuantos archivos tengo en mi repositorio de datos y por
cada uno de ellos, tengo que generar un SPFile desde una plantilla.
Esta plantilla no es más que un archivo InfoPath con todos los campos
vacíos.

La idea es recorrerme todo mi repositorio y editar la plantilla de
InfoPath tantas veces como necesito, editándola para añadirle los
datos que obtenga de mi repositorio. Después de editarla y añadirle
los datos, guardo la plantilla con un nombre único de tipo. Todos los
archivos van a la carpeta correspondiente a mi lista. Después de eso,
añado el archivo recién creado usando esta instrucción:

ColeccionDeFicheros.Add(sNombreFic.ToString(), sr.BaseStream, oMember,
oMember, dateTime, dateTime);

Pero no funciona.

En resumen, el problema es que no consigo editar correctamente la
plantilla y guardarla en su sitio para que sea accesible desde la
lista. Necesito abrir una plantilla, editarla, modificarla y salvarla
con un nombre único. ¿O hay otra manera?

Hasta ahora, estoy dando palos de ciego. A ver si alguno me puede
ayudar, por favor. Estoy muy perdido.

Un saludo.
Respuesta Responder a este mensaje
#3 Txarlie
06/11/2008 - 16:52 | Informe spam
¡Muchas gracias! La verdad es que he empezado con ese código y he
acabado haciendo algo parecido que por fin me ha funcionado.

El código es larguísimo para publicarlo aquí pero puedo decir que
efectivamente hago algo así:


using (SPSite miSitio = new SPSite("http://moss"))
{
using (SPWeb miWeb = miSitio.OpenWeb())
{
//
SPList miLista = miWeb.Lists[sTipoItem];

SPFileCollection ColeccionDeFicheros miLista.RootFolder.Files;
SPWeb oWebsite = miSitio.RootWeb;
SPUser oMember = miembro;
//
//Establece el nombre del fichero resultante
StringBuilder sRutaItem = new StringBuilder("");
sRutaItem = sRutaItem.Remove(0, sRutaItem.Length);
sRutaItem = sRutaItem.Append("http://moss/
listado/" + sNombreItem.Trim() + ".xml");
//
//Abre la plantilla XML asignandole un nombre
temporal
XmlDocument xd = new XmlDocument();
xd.Load("PlantillaListado" + ".xml");
XmlNamespaceManager nsMgr = new
XmlNamespaceManager(xd.NameTable);
nsMgr.AddNamespace("my", "http://
schemas.microsoft.com/office/infopath/2003/myXSD/
2008-04-14T15:26:14");
//
//Extraigo el código exacto para generar el nombre con una L por
delante
string sNumDocXML = "L" + sNombreItem.Substring(1,
5).Trim();
try
{
xd["my:misCamposXML"]["my:FechaMod"].InnerXml
= DateTime.Parse(sFechaMod).ToString("yyyy-MM-dd");
[y aquí se ponen todos los campos que quieras editar poniendo su ruta
XPath]
//
StreamReader sr = new
StreamReader(sNombreItem.Trim() + ".sup");
//
//
ColeccionDeFicheros.Add(sNombreItem.ToString() + ".xml",
sr.BaseStream, oMember, oMember, dateTime, dateTime);
}
catch (Exception ex)
{
throw ex;
}
} //End of using de SPWeb
} //End of using de SPSite


El código no es exacto porque es muy largo: no puedo postearlo entero
pero espero que a alguien le sirva al menos de idea... Las críticas
son bienvenidas, pero que conste que la migracion me funciona.

¡Por fin!

Muchas gracias por las indicaciones anteriores.


On 31 oct, 15:56, "Carlos Rodriguez"
wrote:
No se si comprendo bien lo que quieres hacer

- Tu formulario InfoPath (plantilla) esta publicado como "Content-Type" en
la lista sherepoint en donde quieres guardar tus .xml o esta simplemente
guardada como fichero .xsn ?

- Si tu plantilla esta publicada como "Content-Type" en tu sitio sharepoint
y que tu en tu lista puedes crear nuevos items de este "Content-type" puedes
simplemente editar el .xml de tu plantilla y guardarlos como .xml en tu
lista.. de regreso tu plantilla que es el Content-Type de tu lista llama el
fichero .xml cuando clicas en el.

aqui tienes una manera de hacer el copia del fichero a tu lista sp.. no lo
probe pero deve functionar

abrir tu SPWeb -> tuspweb

// Destinasion (document library)
SPFolder destFolder;
destFolder = tuspweb.GetFolder("Nombre interno de tu lista");

// Colleccion
SPFileCollection destFiles;
destFiles = destFolder.Files;

tuspweb.AllowUnsafeUpdates = true;

SPFile copyFile;
copyFile = destFiles.Add(destinacion_URL, fichero_xml_binario, true);

// editar/anadir metadata adisional
if (copyFile.Item != null)
{
        copyFile.Item["Title"] = "tu titulo";
        copyFile.Item.Update();

}

tuspweb.AllowUnsafeUpdates = false;

no olvides de visitar mi nuevo (muy pero muy reciente sitio
...http://www.aprendaMOSS.com)

Carlitos

"Txarlie" wrote in message

news:

> Hola:

> Tengo que importar items a una lista de mi Sharepoint desde un
> repositorio de datos. Y lo estoy haciendo en C#.

> Tengo que decir que estaba intentando añadir los items
> programaticamente como he visto en tantos foros, pero resulta que
> necesito utilizar la clase SPFile porque mis items están basados en
> archivos XML de InfoPath (en vez de SPListItems).

> Primero miro cuantos archivos tengo en mi repositorio de datos y por
> cada uno de ellos, tengo que generar un SPFile desde una plantilla.
> Esta plantilla no es más que un archivo InfoPath con todos los campos
> vacíos.

> La idea es recorrerme todo mi repositorio y editar la plantilla de
> InfoPath tantas veces como necesito, editándola para añadirle los
> datos que obtenga de mi repositorio. Después de editarla y añadirle
> los datos, guardo la plantilla con un nombre único de tipo. Todos los
> archivos van a la carpeta correspondiente a mi lista. Después de eso,
> añado el archivo recién creado usando esta instrucción:

> ColeccionDeFicheros.Add(sNombreFic.ToString(), sr.BaseStream, oMember,
> oMember, dateTime, dateTime);

> Pero no funciona.

> En resumen, el problema es que no consigo editar correctamente la
> plantilla y guardarla en su sitio para que sea accesible desde la
> lista. Necesito abrir una plantilla, editarla, modificarla y salvarla
> con un nombre único. ¿O hay otra manera?

> Hasta ahora, estoy dando palos de ciego. A ver si alguno me puede
> ayudar, por favor. Estoy muy perdido.

> Un saludo.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida