Siguiendo un poco, solo un poco nada mas, con la línea de ayer aquí viene otro post acerca de las áreas de reuniones.

El tema es el siguiente, si por ejemplo creas un área de reuniones o una reunión en concreto dentro de una serie de reuniones desde el Outlook (con el boton crear o vincular) y no envías la invitación puede darse el caso que luego desde el SharePoint no te muestre la exclamación roja que te indica que ya no se tiene control de la misma y pregunta que deseas hacer (mantener, quitar, remover vínculo(esta última igual me la he inventado)).

Bueno el tema es que no hay manera alguna de quitar este vínculo sino es a través del API. Para ello en la MSDN hay un código precioso tanto en VB .NET como en C# .NET… tan tan bonito que no funciona.

Lo que se debe hacer es primero, crear un proyecto de C# y añadir referencias web a:

  • http://ServidorMOSS2007/_vti_bin/lists.asmx
  • http://ServidorMOSS2007/_vti_bin/meetings.asmx

Una vez hecho esto en la clase principal pegar este código, que es el de la MSDN pero cambiado un par de cosillas para que funcionara.

Para eliminar el área de reuniones pedirá la URL hasta el área de reuniones y el ID.

El ID se trata del identificador del área de reuniones, esto lo podemos saber fácilmente, colocando el ratón encima del link de la izquierda del área de reuniones y viendo el enlace que tiene, al final de la URL indicará un id=?Nº, pues ese Nº es el ID.

static void Main(string[] args)
{

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

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

ClaseLISTSWEB.Lists listObj = new ClaseLISTSWEB.Lists();
listObj.Credentials =System.Net.CredentialCache.DefaultCredentials;
Console.Write("URL del espacio de reuniones?: ");string baseURL = Console.ReadLine();
listObj.Url = baseURL + "/_vti_bin/lists.asmx";
meetObj.Url = baseURL + "/_vti_bin/meetings.asmx";
Console.Write("ID de la reunión a eliminar?: ");
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", "");
ndQuery.InnerXml = @"<Where><Eq><FieldRefName=""ID""/><ValueType=""Counter"">"+
InstanceID + "</Value></Eq></Where>";
SiteData.SiteData siteDataWS = new SiteData.SiteData();
siteDataWS.UseDefaultCredentials = true;
SiteData._sWebMetadata webMetaData;
SiteData._sWebWithTime[] arrWebWithTime;
SiteData._sListWithTime[] arrListWithTime;
SiteData._sFPUrl[] arrUrls;
string roles;
string[] roleUsers;
string[] roleGroups;
siteDataWS.Url = "http://SERVIDORMOSS2007/_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.WebID;
try
{
XmlNode ndResult = listObj.GetListItems("Meeting Series", "",ndQuery, ndViewFields, "0", ndQueryOptions, web);
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);
Console.WriteLine("Meeting canceled successfully.");
}
catch (System.Web.Services.Protocols.SoapException ex)
{
Console.WriteLine("Message:\n" + ex.Message + "\nDetail:\n" + ex.Detail.InnerText +"\nStackTrace:\n" + ex.StackTrace);
}
}

Subscribe