jueves, 31 de enero de 2008

Iniciar Automaticamente un WORKFLOW

Hola a todos los visitantes, ya llevo mas de un mes sin postear nada.
Pero mas vale tarde que nunca.
Ahora vamos a ver como podemos por medio de programacion arrancar un WorkFlow.
Esto nos serviria en escenarios que el WorkFlow no requera un formulario de inicializacion, o donde de alguna manera se pueda tener acceso a data para el formulario de inicializacion.
Bueno para lo que ya han leido algunos de mis post, se habran dado cuenta que yo uso los webservices propios del Sharepoint, es decir: los famosos: _vti_bin/list.asmx en este caso usaremos el _vti_bin/worklows.asmx.
Y muchos se preguntaran porque usar esto que es un poco mas dificil, menos documentado y mas laborioso, el problema es que para poder hacer el testing o debug, puesto que otros componentes como sharepoint.dll no se puede hacer debug desde otra pc que no sea el servidor, asi que mientras no encuentre una solucion a este problema, seguire usando estos webservices propios del sharepoint.
Ahora si manos a la obra:
Para poder iniciar un workflow, necesitamos cierta informacion.
Tal como:
la url del documento a que vamos a aplicar el workflow.
la estructura del formulario de inicializacion del workflow(dejemos esto como opcional)
el nombre del workFlow o su Template ID(para este ejemplo asumamos que ya conocemos este valor de no se asi, tendremos que buscar la manera de obtenerlo, cosa que lo haremos en otro post)


Hacer una referencia web al webservices _vti_bin/Workflow.asmx, de manera visual.
en codigo hacer ..... mejor vean el codigo:

SiteRaizWF.Workflow WF = null;
WF = new SiteRaizWF.Workflow();
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
CredentialCache cache = new CredentialCache();
WF.Credentials = new System.Net.NetworkCredential("user_admin", "pwd_admin", "Dominio");
WF.PreAuthenticate = true;
XmlNode _ = WF.StartWorkflow(urlNewForm, new Guid(TemplateID), xmlFormInit);


bueno esto en el general todo el codigo necesario para iniciar un work flow por medio de programacion.
Antes que me llenen la bandeja con mail preguntando que son esos paremetros
urlNewForm: es el documento del archivo que desean aplicar el workflow
TemplateID: es el ID del template del workflow asociado, asociado a un documento.
xmlFormInit: es el formulario infopath de inicializacion en XML el tipo de dato es XmlNode.
Y como demonios obtendo este famoso xmlFormInit, hay varias opciones, podemos serializar previamente nuestro formulario a clases y luego pasarlos a XML,esto permitiria llenar los datos tambien por programacion (ojo que esto es una funcionalidad muy importante y que va a sacarlos de apuros como me saco a mi :D)
La otra es tener una string con una cadena representando este esquema XML luego llenar un xmldocument con esta cadena y listo.
Bueno por la premura del caso, dejaremos este post en este punto, si tienen dudas por favor no duden en escribirme:
marcodiazjr@gmail.com
Saludos y buena programacion.
PD: este codigo es parte de un webservice, es decir podemos invocar este metodo desde cualquier lugar, tambien podria ser parte de si documento infopath o simulares.

No hay comentarios: