Workspace y codigo MSDN

17/04/2008 - 15:34 por Jorge | Informe spam
Hola muchachos,

Tengo el siguiente Problema, al crear un nuevo evento en la lista "Calendar"
de mi sitio Sharepoint, puedo asociarle a este evento un "Workspace", cuando
termino de hacer esta asociacion efectivamente el evento me aparece en el
"Workspace" deseado. Hasta el momento todo marcha bien. El problema Surge
cuando desde el calendario borro el evento, al eliminar este evento el
desaparece de mi lista "Calendar", pero al ir a ver en el "Workspace",
todavia aparece el link que me comunicaba con el contenido de mi evento, pero
ahora aparece un signo de admiracion rojo y este mensaje de error:

"This meeting date was canceled from your calendar and scheduling program.
To specify what you want to do with the associated information in the
workspace, do the following: In the Meeting Series pane, point to the meeting
date, and in the drop-down list, click Keep, Delete, or Move.".

Yo puedo eliminar este link desde el mismo Sharepoint, dando clic en el menu
que aparece al posicionar el mouse encima del link y escogiendo la opcion
"Delete". Lo que yo necesito hacer es que al borrar el evento desde la lista
"Calendar" cuando doy clic en la opcion "Delete Item" se borre al mismo
tiempo el evento del "Workspace".

Para esto decidi documentarme e indagar, en este proceso me encontre con el
siguiente codigo en MSDN:

http://msdn2.microsoft.com/en-us/li...65611.aspx




Code Snippet/*Create necessary objects and set credentials.*/
Web_Reference.Meetings meetObj =
new Web_Reference_Folder_Name.Meetings();
meetObj.Credentials = System.Net.CredentialCache.DefaultCredentials;

Web_Reference.Lists listObj =
new Web_Reference.Lists();
listObj.Credentials = System.Net.CredentialCache.DefaultCredentials;

/*Get Meeting Workspace URL.*/
Console.Write("Enter the URL of the Meeting Workspace: ");
string baseURL = Console.ReadLine();

/*Set URL properties for both objects.*/
listObj.Url = baseURL + "/_vti_bin/lists.asmx";
meetObj.Url = baseURL + "/_vti_bin/meetings.asmx";

/*Get meeting InstanceID.*/
Console.Write("Enter the InstanceID of the meeting: ");
string InstanceID = Console.ReadLine();

XmlDocument xmlDoc = new XmlDocument();

XmlNode ndQuery =
xmlDoc.CreateNode(XmlNodeType.Element,"Query", "");
XmlNode ndViewFields =
xmlDoc.CreateNode(XmlNodeType.Element,"ViewFields","");
XmlNode ndQueryOptions =
xmlDoc.CreateNode(XmlNodeType.Element,"QueryOptions","");

// Create query to filter based on the InstanceID provided.
ndQuery.InnerXml =
@"" +
InstanceID + "";

try
{
/*Call GetListItems Web service to get meeting UID.*/
XmlNode ndResult =
listObj.GetListItems("Meeting Series", "", ndQuery,
ndViewFields, "0", ndQueryOptions);
XmlNode MainNode = ndResult.ChildNodes.Item(1);
MainNode = MainNode.ChildNodes.Item(1);
XmlNode eventUID =
MainNode.Attributes.GetNamedItem("ows_EventUID");
string UID = eventUID.InnerText;

/*Call RemoveMeeting Web service to cancel meeting.
NOTE: You might need to increase the sequence number depending
on how many updates have already been made to the meeting.*/
meetObj.RemoveMeeting(0, UID, 0, DateTime.Now, true);

Console.WriteLine("Meeting canceled successfully.");
}

catch (System.Web.Services.Protocols.SoapException ex)
{
Console.WriteLine("Message:" + ex.Message + "Detail:" +
ex.Detail.InnerText + "StackTrace:" + ex.StackTrace);
}







La verdad la primera vez que vi el codigo lo vi como complicado, pero pues
MSDN lo recomienda, me puese en la tarea de hacer funcionar este codigo y fue
casi imposible, tuve que modificarlo para completarlo, y le agrege mas codigo
para que funcionara y el programa me quedo de la siguiente manera:


Code Snippet

using System;

using System.Collections.Generic;

using System.Linq;

using Microsoft.SharePoint;

using System.Xml;

namespace Console_12

{

class Program

{

static void Main(string[] args)

{

try

{

// Console.ReadLine();

SPSecurity.RunWithElevatedPrivileges(delegate()

{

//Guid gu = new Guid("{3AA5007E-71A0-441F-AD55-2526684E7607}");

using (SPSite siteLocal = new SPSite("http://pb11dev01:12384"))

{

siteLocal.AllowUnsafeUpdates = true;

using (SPWeb webLocal = siteLocal.OpenWeb())

{

webLocal.AllowUnsafeUpdates = true;

// Get the custom list

Guid id = new Guid("8e51942a-da23-4bd1-bbf2-cda123274e39");

SPList list = webLocal.Lists[id];

SPListItemCollection item = list.Items;

string[] split = null;

string[] serv = null;

SPListItem nro1 = null;

foreach (SPListItem nro in item)

{

string a = nro["Workspace"].ToString();

split = a.Split(new Char[] {','});

nro1=nro;

}

localhost_01.Meetings meetObj = new localhost_01.Meetings();

meetObj.Credentials = System.Net.CredentialCache.DefaultCredentials;

localhost_02.Lists listObj = new localhost_02.Lists();

listObj.Credentials = System.Net.CredentialCache.DefaultCredentials;

serv = split[0].ToString().Split(new Char[] { '?' });

string baseURL = serv[0];

listObj.Url = baseURL + "/_vti_bin/lists.asmx";

meetObj.Url = baseURL + "/_vti_bin/meetings.asmx";

Uri dir = new Uri(split[0].ToString());

string[] spl= dir.Query.ToString().Split(new Char[] { '=' });

string InstanceID = nro1.ID.ToString();//spl[1].ToString();

XmlDocument xmlDoc = new XmlDocument();

XmlNode ndQuery
xmlDoc.CreateNode(XmlNodeType.Element, "Query", "");

XmlNode ndViewFields
xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", "");

XmlNode ndQueryOptions
xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "");

ndQuery.InnerXml = @"" +

InstanceID + "";

localhost.SiteData siteDataWS = new localhost.SiteData();

siteDataWS.UseDefaultCredentials = true;

localhost._sWebMetadata webMetaData;

localhost._sWebWithTime[] arrWebWithTime;

localhost._sListWithTime[] arrListWithTime;

localhost._sFPUrl[] arrUrls;

string roles;

string[] roleUsers;

string[] roleGroups;

Uri uc = new Uri(baseURL);

siteDataWS.Url = baseURL + "/_vti_bin/sitedata.asmx";

uint i = siteDataWS.GetWeb(out webMetaData, out arrWebWithTime, out
arrListWithTime, out arrUrls, out roles, out roleUsers, out roleGroups);

Guid g = new Guid(webMetaData.WebID);

string web = webMetaData.Title;

SPSite siteLocal1 = new SPSite(baseURL);

SPWeb webLocal1 = siteLocal1.OpenWeb();

SPWeb meet = siteLocal1.AllWebs["Meeting_Space"];

SPListItem spli = meet.Lists["Meeting Series"].Items[5];

spli.Delete();


try

{

XmlNode ndResult = listObj.GetListItems(webLocal1.Lists["Meeting
Series"].ID.ToString(), "", ndQuery, ndViewFields, "0", ndQueryOptions,
webLocal1.Lists["Meeting Series"].ID.ToString());

XmlNode MainNode = ndResult.ChildNodes.Item(1);

MainNode = MainNode.ChildNodes.Item(1);

XmlNode eventUID = MainNode.Attributes.GetNamedItem("ows_EventUID");

string UID = eventUID.InnerText;

meetObj.RemoveMeeting(0, UID, 0, DateTime.Now, true);

}

catch (System.Web.Services.Protocols.SoapException ex)

{

// properties.Cancel = true;

//properties.ErrorMessage = properties.ListItem["Workspace"].ToString() + "
" + properties.WebUrl + " " + properties.ListId.ToString() + " " +
"Message:" + ex.Message + "Detail:" +

//ex.Detail.InnerText + "StackTrace:" + ex.StackTrace;

}

catch(Exception ex)

{

}

}

}

});

}

catch (Exception ex)

{

}

}

}

}





Y efectivamente tampoco funciono, nunca me acepto el Guid del "Worksapace",
totalmente desilucionado me dedique a llorar un rato y luego hice el
siguiente programa para que volviera la risa a mi rostro:




Code Snippetusing System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Microsoft.SharePoint;

namespace Meeting_EventHandler

{

public class MeetingEventHandler : SPItemEventReceiver

{

public override void ItemDeleting(SPItemEventProperties properties)

{

base.ItemDeleting(properties);

string url = properties.ListItem["Workspace"].ToString();

string[] split = url.Split(new Char[] { ',' });

string[] serv = null;

serv = split[0].ToString().Split(new Char[] { '?' });

string baseURL = serv[0].ToString();


Uri dir = new Uri(split[0].ToString());

string[] spl = dir.Query.ToString().Split(new Char[] { '=' });

int InstanceID = Convert.ToInt16(spl[1].ToString());

try

{

SPSecurity.RunWithElevatedPrivileges(delegate()

{

using (SPSite siteLocal = new SPSite(baseURL))

{

siteLocal.AllowUnsafeUpdates = true;

using (SPWeb webLocal = siteLocal.OpenWeb())

{

webLocal.AllowUnsafeUpdates = true;

SPWeb meet = siteLocal.AllWebs[split[1].ToString()];

if (meet.Lists["Meeting Series"].Items.Count != 0)

{

SPListItem spli = meet.Lists["Meeting Series"].GetItemById(InstanceID);

spli.Delete();

}

}

}

}

);

}

catch (Exception ex)

{

properties.Cancel = true;

properties.ErrorMessage = "Message:" + ex.Message + "Detail:" +

ex.InnerException + "StackTrace:" + ex.StackTrace;

}

}

}

}






Y efectivamente mi programita funciona, pero funciona mal :(, mi programa
es un eventhandler que utiliza el evento de borrado de la lista "Calendar" y
se extiende para borrar el link del "Workspace". Al probar mi programa en mi
sitio Sharepoint y luego de dar clic en el boton de la lista "Calendar",
"Delete Item" me genera el siguiente error:


Code Snippet

Changes to the event were saved, but they could not be communicated to the
Meeting Workspace associated with the event. For more information, contact
the server administrator.






Lo bueno de todo esto es que a pesar del error que me genera voy y reviso la
lista "Calendar", y efectivamente el evento ya no existe, viendo esto me
dirijo emocionado al "Workspace" y me doy cuenta que efectivamente tambien el
link de este evento ha sido borrado. Maravilla, sharepoint funciona, pero por
que ese mensaje de error.

Queridos compañeros Acudo a ustedes que son fuente de conocimiento para
lograr obtener alguna ayuda de su gran experiencia.



Muchisimas gracias, por su ayuda.



PDT.

Una preguntica adicional, en el ultimo programa que posteo para conseguir
los miembros de una lista utilizo la siguiente instruccion:




Code Snippetproperties.ListItem["Workspace"].ToString();






el nombre dela propiedad queda como una cadena, existe alguna manera de no
dejarlo como cadena, alguna constante o algo parecido, por que mi sitio
funciona en varios idiomas, y dependiendo del usuario el idioma varia, y esta
instruciion solo me serviria para los usuarios Norteamericanos, pero los
Suecos y Alemanes me demandan que les funcione igual.



Gracias de nuevo



Jorge.

Preguntas similare

Leer las respuestas

#1 Elecktrus
17/04/2008 - 21:13 | Informe spam
Hola, Jorge:
Viendo tu codigo, me surge una duda:
¿no deberias hacer un update de la lista despues de borrar el item?
Algo asi como: meet.Lists["Meeting Series"].update();
Igual no es lo que causa el mensaje, pero lo puedes probar.

En cuanto a lo de los idiomas, si tienes 3 sharepoint diferentes, uno en
cada idioma, la mejor solucion es que definas una propiedad en el xml de la
feature (instalas el manejador como una feature ¿no?), que sea el nombre del
workspace en cada idioma.
Luego en tu programa solo tienes que recuperarlo y acceder a la lista con
esa cadena.
Lo unico malo, es que con una feature, para que te coja cambios en el xml,
tienes que desisntalarla y volverla a instalar

En caso de tener un solo sps y paquetes multiidoma, el problema es saber que
idioma está aplicado en cada lista.
Lo unico que se me ocurre en ese caso es que recorras las propiedades de la
lista con un bucle foreach, y si encuentras uno que encaje con el idioma, te
quedes con el. Algo asi como esto (es un seudocodigo)

string palabra="";
foreach Item it in properties.Items
{
if it.Title=="Workspace" palabra=it.Title;
if it.Title=="Workspace en aleman" palabra=it.Title;
if it.Title=="Workspace en sueco" palabra=it.Title;
}

y luego ya uses
if palabra!=null
string url = properties.ListItem[palabra].ToString();
else


"Jorge" wrote:

Hola muchachos,

Tengo el siguiente Problema, al crear un nuevo evento en la lista "Calendar"
de mi sitio Sharepoint, puedo asociarle a este evento un "Workspace", cuando
termino de hacer esta asociacion efectivamente el evento me aparece en el
"Workspace" deseado. Hasta el momento todo marcha bien. El problema Surge
cuando desde el calendario borro el evento, al eliminar este evento el
desaparece de mi lista "Calendar", pero al ir a ver en el "Workspace",
todavia aparece el link que me comunicaba con el contenido de mi evento, pero
ahora aparece un signo de admiracion rojo y este mensaje de error:

"This meeting date was canceled from your calendar and scheduling program.
To specify what you want to do with the associated information in the
workspace, do the following: In the Meeting Series pane, point to the meeting
date, and in the drop-down list, click Keep, Delete, or Move.".

Yo puedo eliminar este link desde el mismo Sharepoint, dando clic en el menu
que aparece al posicionar el mouse encima del link y escogiendo la opcion
"Delete". Lo que yo necesito hacer es que al borrar el evento desde la lista
"Calendar" cuando doy clic en la opcion "Delete Item" se borre al mismo
tiempo el evento del "Workspace".

Para esto decidi documentarme e indagar, en este proceso me encontre con el
siguiente codigo en MSDN:

http://msdn2.microsoft.com/en-us/li...65611.aspx




Code Snippet/*Create necessary objects and set credentials.*/
Web_Reference.Meetings meetObj =
new Web_Reference_Folder_Name.Meetings();
meetObj.Credentials = System.Net.CredentialCache.DefaultCredentials;

Web_Reference.Lists listObj =
new Web_Reference.Lists();
listObj.Credentials = System.Net.CredentialCache.DefaultCredentials;

/*Get Meeting Workspace URL.*/
Console.Write("Enter the URL of the Meeting Workspace: ");
string baseURL = Console.ReadLine();

/*Set URL properties for both objects.*/
listObj.Url = baseURL + "/_vti_bin/lists.asmx";
meetObj.Url = baseURL + "/_vti_bin/meetings.asmx";

/*Get meeting InstanceID.*/
Console.Write("Enter the InstanceID of the meeting: ");
string InstanceID = Console.ReadLine();

XmlDocument xmlDoc = new XmlDocument();

XmlNode ndQuery =
xmlDoc.CreateNode(XmlNodeType.Element,"Query", "");
XmlNode ndViewFields =
xmlDoc.CreateNode(XmlNodeType.Element,"ViewFields","");
XmlNode ndQueryOptions =
xmlDoc.CreateNode(XmlNodeType.Element,"QueryOptions","");

// Create query to filter based on the InstanceID provided.
ndQuery.InnerXml =
@"" +
InstanceID + "";

try
{
/*Call GetListItems Web service to get meeting UID.*/
XmlNode ndResult =
listObj.GetListItems("Meeting Series", "", ndQuery,
ndViewFields, "0", ndQueryOptions);
XmlNode MainNode = ndResult.ChildNodes.Item(1);
MainNode = MainNode.ChildNodes.Item(1);
XmlNode eventUID =
MainNode.Attributes.GetNamedItem("ows_EventUID");
string UID = eventUID.InnerText;

/*Call RemoveMeeting Web service to cancel meeting.
NOTE: You might need to increase the sequence number depending
on how many updates have already been made to the meeting.*/
meetObj.RemoveMeeting(0, UID, 0, DateTime.Now, true);

Console.WriteLine("Meeting canceled successfully.");
}

catch (System.Web.Services.Protocols.SoapException ex)
{
Console.WriteLine("Message:" + ex.Message + "Detail:" +
ex.Detail.InnerText + "StackTrace:" + ex.StackTrace);
}







La verdad la primera vez que vi el codigo lo vi como complicado, pero pues
MSDN lo recomienda, me puese en la tarea de hacer funcionar este codigo y fue
casi imposible, tuve que modificarlo para completarlo, y le agrege mas codigo
para que funcionara y el programa me quedo de la siguiente manera:


Code Snippet

using System;

using System.Collections.Generic;

using System.Linq;

using Microsoft.SharePoint;

using System.Xml;

namespace Console_12

{

class Program

{

static void Main(string[] args)

{

try

{

// Console.ReadLine();

SPSecurity.RunWithElevatedPrivileges(delegate()

{

//Guid gu = new Guid("{3AA5007E-71A0-441F-AD55-2526684E7607}");

using (SPSite siteLocal = new SPSite("http://pb11dev01:12384"))

{

siteLocal.AllowUnsafeUpdates = true;

using (SPWeb webLocal = siteLocal.OpenWeb())

{

webLocal.AllowUnsafeUpdates = true;

// Get the custom list

Guid id = new Guid("8e51942a-da23-4bd1-bbf2-cda123274e39");

SPList list = webLocal.Lists[id];

SPListItemCollection item = list.Items;

string[] split = null;

string[] serv = null;

SPListItem nro1 = null;

foreach (SPListItem nro in item)

{

string a = nro["Workspace"].ToString();

split = a.Split(new Char[] {','});

nro1=nro;

}

localhost_01.Meetings meetObj = new localhost_01.Meetings();

meetObj.Credentials = System.Net.CredentialCache.DefaultCredentials;

localhost_02.Lists listObj = new localhost_02.Lists();

listObj.Credentials = System.Net.CredentialCache.DefaultCredentials;

serv = split[0].ToString().Split(new Char[] { '?' });

string baseURL = serv[0];

listObj.Url = baseURL + "/_vti_bin/lists.asmx";

meetObj.Url = baseURL + "/_vti_bin/meetings.asmx";

Uri dir = new Uri(split[0].ToString());

string[] spl= dir.Query.ToString().Split(new Char[] { '=' });

string InstanceID = nro1.ID.ToString();//spl[1].ToString();

XmlDocument xmlDoc = new XmlDocument();

XmlNode ndQuery >
xmlDoc.CreateNode(XmlNodeType.Element, "Query", "");

XmlNode ndViewFields >
xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", "");

XmlNode ndQueryOptions >
xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "");

ndQuery.InnerXml = @"" +

InstanceID + "";

localhost.SiteData siteDataWS = new localhost.SiteData();

siteDataWS.UseDefaultCredentials = true;

localhost._sWebMetadata webMetaData;

localhost._sWebWithTime[] arrWebWithTime;

localhost._sListWithTime[] arrListWithTime;

localhost._sFPUrl[] arrUrls;

string roles;

string[] roleUsers;

string[] roleGroups;

Uri uc = new Uri(baseURL);

siteDataWS.Url = baseURL + "/_vti_bin/sitedata.asmx";

uint i = siteDataWS.GetWeb(out webMetaData, out arrWebWithTime, out
arrListWithTime, out arrUrls, out roles, out roleUsers, out roleGroups);

Guid g = new Guid(webMetaData.WebID);

string web = webMetaData.Title;

SPSite siteLocal1 = new SPSite(baseURL);

SPWeb webLocal1 = siteLocal1.OpenWeb();

SPWeb meet = siteLocal1.AllWebs["Meeting_Space"];

SPListItem spli = meet.Lists["Meeting Series"].Items[5];

spli.Delete();


try

{

XmlNode ndResult = listObj.GetListItems(webLocal1.Lists["Meeting
Series"].ID.ToString(), "", ndQuery, ndViewFields, "0", ndQueryOptions,
webLocal1.Lists["Meeting Series"].ID.ToString());

XmlNode MainNode = ndResult.ChildNodes.Item(1);

MainNode = MainNode.ChildNodes.Item(1);

XmlNode eventUID = MainNode.Attributes.GetNamedItem("ows_EventUID");

string UID = eventUID.InnerText;

meetObj.RemoveMeeting(0, UID, 0, DateTime.Now, true);

}

catch (System.Web.Services.Protocols.SoapException ex)

{

// properties.Cancel = true;

//properties.ErrorMessage = properties.ListItem["Workspace"].ToString() + "
" + properties.WebUrl + " " + properties.ListId.ToString() + " " +
"Message:" + ex.Message + "Detail:" +

//ex.Detail.InnerText + "StackTrace:" + ex.StackTrace;

}

catch(Exception ex)

{

}

}

}
Respuesta Responder a este mensaje
#2 Jorge
17/04/2008 - 22:30 | Informe spam
Hola Elecktrus,
gracias por tu respuesta, te cuento que ya hice el update a la lista sigue
saliendo el error, tu no sabes de alguna forma en la que pueda evitar esta
pagina de error.
Elecktrus muchas gracias por tu ayuda y atencion.


"Elecktrus" wrote:

Hola, Jorge:
Viendo tu codigo, me surge una duda:
¿no deberias hacer un update de la lista despues de borrar el item?
Algo asi como: meet.Lists["Meeting Series"].update();
Igual no es lo que causa el mensaje, pero lo puedes probar.

En cuanto a lo de los idiomas, si tienes 3 sharepoint diferentes, uno en
cada idioma, la mejor solucion es que definas una propiedad en el xml de la
feature (instalas el manejador como una feature ¿no?), que sea el nombre del
workspace en cada idioma.
Luego en tu programa solo tienes que recuperarlo y acceder a la lista con
esa cadena.
Lo unico malo, es que con una feature, para que te coja cambios en el xml,
tienes que desisntalarla y volverla a instalar

En caso de tener un solo sps y paquetes multiidoma, el problema es saber que
idioma está aplicado en cada lista.
Lo unico que se me ocurre en ese caso es que recorras las propiedades de la
lista con un bucle foreach, y si encuentras uno que encaje con el idioma, te
quedes con el. Algo asi como esto (es un seudocodigo)

string palabra="";
foreach Item it in properties.Items
{
if it.Title=="Workspace" palabra=it.Title;
if it.Title=="Workspace en aleman" palabra=it.Title;
if it.Title=="Workspace en sueco" palabra=it.Title;
}

y luego ya uses
if palabra!=null
string url = properties.ListItem[palabra].ToString();
else


"Jorge" wrote:

> Hola muchachos,
>
> Tengo el siguiente Problema, al crear un nuevo evento en la lista "Calendar"
> de mi sitio Sharepoint, puedo asociarle a este evento un "Workspace", cuando
> termino de hacer esta asociacion efectivamente el evento me aparece en el
> "Workspace" deseado. Hasta el momento todo marcha bien. El problema Surge
> cuando desde el calendario borro el evento, al eliminar este evento el
> desaparece de mi lista "Calendar", pero al ir a ver en el "Workspace",
> todavia aparece el link que me comunicaba con el contenido de mi evento, pero
> ahora aparece un signo de admiracion rojo y este mensaje de error:
>
> "This meeting date was canceled from your calendar and scheduling program.
> To specify what you want to do with the associated information in the
> workspace, do the following: In the Meeting Series pane, point to the meeting
> date, and in the drop-down list, click Keep, Delete, or Move.".
>
> Yo puedo eliminar este link desde el mismo Sharepoint, dando clic en el menu
> que aparece al posicionar el mouse encima del link y escogiendo la opcion
> "Delete". Lo que yo necesito hacer es que al borrar el evento desde la lista
> "Calendar" cuando doy clic en la opcion "Delete Item" se borre al mismo
> tiempo el evento del "Workspace".
>
> Para esto decidi documentarme e indagar, en este proceso me encontre con el
> siguiente codigo en MSDN:
>
> http://msdn2.microsoft.com/en-us/li...65611.aspx
>
>
>
>
> Code Snippet/*Create necessary objects and set credentials.*/
> Web_Reference.Meetings meetObj =
> new Web_Reference_Folder_Name.Meetings();
> meetObj.Credentials = System.Net.CredentialCache.DefaultCredentials;
>
> Web_Reference.Lists listObj =
> new Web_Reference.Lists();
> listObj.Credentials = System.Net.CredentialCache.DefaultCredentials;
>
> /*Get Meeting Workspace URL.*/
> Console.Write("Enter the URL of the Meeting Workspace: ");
> string baseURL = Console.ReadLine();
>
> /*Set URL properties for both objects.*/
> listObj.Url = baseURL + "/_vti_bin/lists.asmx";
> meetObj.Url = baseURL + "/_vti_bin/meetings.asmx";
>
> /*Get meeting InstanceID.*/
> Console.Write("Enter the InstanceID of the meeting: ");
> string InstanceID = Console.ReadLine();
>
> XmlDocument xmlDoc = new XmlDocument();
>
> XmlNode ndQuery =
> xmlDoc.CreateNode(XmlNodeType.Element,"Query", "");
> XmlNode ndViewFields =
> xmlDoc.CreateNode(XmlNodeType.Element,"ViewFields","");
> XmlNode ndQueryOptions =
> xmlDoc.CreateNode(XmlNodeType.Element,"QueryOptions","");
>
> // Create query to filter based on the InstanceID provided.
> ndQuery.InnerXml =
> @"" +
> InstanceID + "";
>
> try
> {
> /*Call GetListItems Web service to get meeting UID.*/
> XmlNode ndResult =
> listObj.GetListItems("Meeting Series", "", ndQuery,
> ndViewFields, "0", ndQueryOptions);
> XmlNode MainNode = ndResult.ChildNodes.Item(1);
> MainNode = MainNode.ChildNodes.Item(1);
> XmlNode eventUID =
> MainNode.Attributes.GetNamedItem("ows_EventUID");
> string UID = eventUID.InnerText;
>
> /*Call RemoveMeeting Web service to cancel meeting.
> NOTE: You might need to increase the sequence number depending
> on how many updates have already been made to the meeting.*/
> meetObj.RemoveMeeting(0, UID, 0, DateTime.Now, true);
>
> Console.WriteLine("Meeting canceled successfully.");
> }
>
> catch (System.Web.Services.Protocols.SoapException ex)
> {
> Console.WriteLine("Message:" + ex.Message + "Detail:" +
> ex.Detail.InnerText + "StackTrace:" + ex.StackTrace);
> }
>
>
>
>
>
>
>
> La verdad la primera vez que vi el codigo lo vi como complicado, pero pues
> MSDN lo recomienda, me puese en la tarea de hacer funcionar este codigo y fue
> casi imposible, tuve que modificarlo para completarlo, y le agrege mas codigo
> para que funcionara y el programa me quedo de la siguiente manera:
>
>
> Code Snippet
>
> using System;
>
> using System.Collections.Generic;
>
> using System.Linq;
>
> using Microsoft.SharePoint;
>
> using System.Xml;
>
> namespace Console_12
>
> {
>
> class Program
>
> {
>
> static void Main(string[] args)
>
> {
>
> try
>
> {
>
> // Console.ReadLine();
>
> SPSecurity.RunWithElevatedPrivileges(delegate()
>
> {
>
> //Guid gu = new Guid("{3AA5007E-71A0-441F-AD55-2526684E7607}");
>
> using (SPSite siteLocal = new SPSite("http://pb11dev01:12384"))
>
> {
>
> siteLocal.AllowUnsafeUpdates = true;
>
> using (SPWeb webLocal = siteLocal.OpenWeb())
>
> {
>
> webLocal.AllowUnsafeUpdates = true;
>
> // Get the custom list
>
> Guid id = new Guid("8e51942a-da23-4bd1-bbf2-cda123274e39");
>
> SPList list = webLocal.Lists[id];
>
> SPListItemCollection item = list.Items;
>
> string[] split = null;
>
> string[] serv = null;
>
> SPListItem nro1 = null;
>
> foreach (SPListItem nro in item)
>
> {
>
> string a = nro["Workspace"].ToString();
>
> split = a.Split(new Char[] {','});
>
> nro1=nro;
>
> }
>
> localhost_01.Meetings meetObj = new localhost_01.Meetings();
>
> meetObj.Credentials = System.Net.CredentialCache.DefaultCredentials;
>
> localhost_02.Lists listObj = new localhost_02.Lists();
>
> listObj.Credentials = System.Net.CredentialCache.DefaultCredentials;
>
> serv = split[0].ToString().Split(new Char[] { '?' });
>
> string baseURL = serv[0];
>
> listObj.Url = baseURL + "/_vti_bin/lists.asmx";
>
> meetObj.Url = baseURL + "/_vti_bin/meetings.asmx";
>
> Uri dir = new Uri(split[0].ToString());
>
> string[] spl= dir.Query.ToString().Split(new Char[] { '=' });
>
> string InstanceID = nro1.ID.ToString();//spl[1].ToString();
>
> XmlDocument xmlDoc = new XmlDocument();
>
> XmlNode ndQuery > >
> xmlDoc.CreateNode(XmlNodeType.Element, "Query", "");
>
> XmlNode ndViewFields > >
> xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", "");
>
> XmlNode ndQueryOptions > >
> xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "");
>
> ndQuery.InnerXml = @"" +
>
> InstanceID + "";
>
> localhost.SiteData siteDataWS = new localhost.SiteData();
>
> siteDataWS.UseDefaultCredentials = true;
>
> localhost._sWebMetadata webMetaData;
>
> localhost._sWebWithTime[] arrWebWithTime;
>
> localhost._sListWithTime[] arrListWithTime;
>
> localhost._sFPUrl[] arrUrls;
>
> string roles;
>
> string[] roleUsers;
>
> string[] roleGroups;
>
> Uri uc = new Uri(baseURL);
>
> siteDataWS.Url = baseURL + "/_vti_bin/sitedata.asmx";
>
> uint i = siteDataWS.GetWeb(out webMetaData, out arrWebWithTime, out
> arrListWithTime, out arrUrls, out roles, out roleUsers, out roleGroups);
>
> Guid g = new Guid(webMetaData.WebID);
>
> string web = webMetaData.Title;
>
> SPSite siteLocal1 = new SPSite(baseURL);
>
> SPWeb webLocal1 = siteLocal1.OpenWeb();
>
> SPWeb meet = siteLocal1.AllWebs["Meeting_Space"];
>
> SPListItem spli = meet.Lists["Meeting Series"].Items[5];
>
> spli.Delete();
>
>
> try
>
> {
>
> XmlNode ndResult = listObj.GetListItems(webLocal1.Lists["Meeting
> Series"].ID.ToString(), "", ndQuery, ndViewFields, "0", ndQueryOptions,
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida