jueves, 29 de noviembre de 2007

Error: No se puede establecer una relación de confianza para el canal seguro SSL/TLS

Hace unos dias, empezamos los trabajos de construccion para un proyecto en que estoy, basicamente, aplicaciones que correran en un entorno HTTPS, y tuvimos un problema al tratar de acceder a una lista del Sharepoint que se encuentra en ese Site que trabaja con certificados.
Basicamente el mensaje de error es el siguiente:

System.Net.WebException: Se ha terminado la conexión: No se puede establecer una relación de confianza para el canal seguro SSL/TLS. ---> System.Security.Authentication.AuthenticationException: El certificado remoto no es válido según el procedimiento de validación.

Pase todo un dia buscando informacion y no encontraba nada, pero luego tanto un amigo mio encontro la forma de lograrlo.
Pero antes de dar la solucion voy a tratar de explicar un poco que es lo que pasa.
Simplemente el error se debe a que por tratarse de un HTTPS, al tratar de acceder a algun contenido entonces me pide un certificado y como no tengo entonces me bota ese error.
Entonces por alli atacaremos el problema:

Este es el codigo que yo uso para acceder a una lista y sacar sus valores:

XmlDocument xmlDoc = new System.Xml.XmlDocument();
XmlElement viewFields = xmlDoc.CreateElement("ViewFields");
viewFields.InnerXml = "";
portal.Lists listService = null;
listService = new portal.Lists();
listService.Credentials = new System.Net.NetworkCredential("user", "password", "dominio");
listService.PreAuthenticate = true;
string listGuid = (string)"{AE348D4B-D88C-46B3-A809-B4663C4C7CB0}";
XmlNode itemCollection = listService.GetListItems(listGuid, string.Empty, null, viewFields, "0", null, string.Empty);
return itemCollection;


Para esto portal es un referencia Web al webservice del Sharepoint.
algo como esto: https://MyServer/_vti_bin/lists.asmx

Si esto es probado en test funciona de maravillas, pero cuando queremos consumir ese webservices nos da un error como el mostrado anteriormente.

Bueno sin mas vueltas que dar, agreguemos esta linea

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
CredentialCache cache = new CredentialCache();


Espero que esto soluciona sus problemas.
Saludos

miércoles, 28 de noviembre de 2007

VB.Net to C#.Net o C#.Net to VB.Net

A muchos de nosotros nos ha pasado que luego pasar varias horas en "San Google", encontramos un codigo que nos puede ser de utilidad, pero siempre esta en el lenguaje que menos dominamos (es la ley de morgan), a mi casi siempre me pasa, asi que por suerte existe esta herramienta que nos saca de apuros.
http://labs.developerfusion.co.uk/convert/vb-to-csharp.aspx
Es algo simple pero cumple su funcion.

sábado, 24 de noviembre de 2007

Problemas al personalizar el NewForm.aspx de una lista en Sharepoint

Muchas veces por necesidades, nos vemos obligados a personalizar este Formulario NewForm.aspx asi como el EdithForm.aspx, por ejemplo el caso donde tuve que personalizar este formulario.
Construimos una web con sharepoint y hay una parte de ingreso de datos directo a una lista, nosotros muy inocentes subimos la web a Produccion y esa lista se empezo a llenar muy sospechozamente, entonces pensamos que podiamos estar siendo atacados por un bot o algo parecido, asi que decidimos ponerle un captcha a este formulario.
Para editarlo hice lo que cualquier programador/diseñador haria, abri con Office Sharepoint Designer mi site y busque este formulario, por suerte para mi lo encontre rapido en: SITE/List/MiLista/NewForm.aspx
Por suerte para mi, no paso nada y le pudimos agregar el captcha al formulario, no kedo muy bonito pero almenos ta tenia una barrera para los bot.
Quedo algo como esto.
Captcha en NewForm.aspx


Bueno la historia de como hicismos ese captcha y como lo pusimos es otra, luego posteo como hacerlo.
La cosa que funciono, pero por algun motivo tuve que volver a editar ese formulario y hice lo que nunca repito nunca, debemos hacer, borrarme el webpart que viene por defecto.
Si por algun motivo ya lo hicieron, entonces ya se habran dado cuenta de los problemas que eso significa.
  • Problema 1: "Invalid page URL:" cuando tratamos de agregar un crear un nuevo item a la lista.
  • Problema 2: Es lo mismo que el anterior pero la pagina de NewForm.aspx o se muestra vacia o muestra un error.
Como solucionarlo: si has llegado hasta aqui pensando que existe una forma dejame decirte que no, yo tuve esa misma descepcion, la solucion para que vuelva a funcionar ese NewForm.aspx es volviendo a crear la lista (si borrarla y crearla con el mismo nombre), pero antes de hacer esto, si tienen data improtante alli dentro con adjuntos y todo, les recomiendo que primero lo guarden en access y luego en access exporten la data a una lista, sera mas rapido, menos problemantico y mas transparente a ustedes.

Opcion para abrir con Access



Luego que ya tienen la data guardada en access, si han puesto un codigo script en la pagina cuando hagan este proceso se perdera, asi que mejor guardarlos en otro lado, lo mismo con estilos personalizados.
Ya creo estan listos para borrar la lista, asi que procedan.
Ahora en elAccess, existe una opcion que dice: Exportar a Lista de Sharepoint (Gracias a dios que existe esta opcion)
Opcion para Exportar a Lista de SharePoint




Sigan el Wizard y todo estara bien, si por algun motivo no borraron la lista y primero kisieron hacer esto entonces se debe haber creado otra lista con el mismo nombre mas un numero.
De esta manera tendra operativo nuevamente el NewForm.aspx de una lista, lo mismo para el EditForm.aspx
Pero si por algun motivo no quieren usar el webpart que tiene ese formulario, entonces borrenlo, (mentira, mentira), la mejor opcion es ocultarla doble click sobre el webpart y... mejor vean la imagen.

Ocultar el WebPart de NewItem
Ahora si, agregen todo que desen, pero no olviden el consejo, cuando personalicen uno de estos formulario: NewForm.aspx o EditForm.aspx nunca nunca borren.
Saludos.

miércoles, 21 de noviembre de 2007

Error al tratar de Publicar Infopath con Codigo a Sharepoint (Browser-Enabled)

El problema.
Luego de terminar de diseñar y "programar" nuestro archivo de infopath para ser usado como plantilla, llega la hora de publicar, entonces realizamos los pasos acostumbrados:
Publish
le decimos que publicaremos a Sharepoint.
y como nuestra intencion es poder usar ese formulario infopath en web (Browser-Enabled)
entonces nos damos cuenta que el wizard de publishing nos da un mensaje como esto.


Si hacemos un acercamiento podremos leer algo como: que el administrador debe de aprobar el templade antes de ser usado en web. Como buenos programadores, nada se pierde con interar, asi que seguimos adelante y nos damos con la sorpresa de que llegado el final y al tratar de crear un documento con este template no funciona, o simplemente no lo encuentra por ningun lado.

Solucion.

Bueno ya han leido mucho de lo que ya saben asi que la respuesta sera rapida.

  1. Ir al sitio de la Administración Central para su explotación (o en el servidor web si existe sólo una)
  2. Click en el tab "Application Management", luego buscar la seccion "InfoPath Forms Services " y elegir: "Manage Form Templates"
    Estamos en "Form Template library", es aqui donde se almacena los templade que requiere aprobacion.
  3. Haga clic en Upload Form Template y busca tu template(formulario infopath, en la ruta donde la publicaste, seguro que la publicaste en alguna carpeta de tu PC, has memoria donde, si no recuerdas vuelve a publicar en una carpeta de facil acceso), una vez subido tu templade debes de hacerle una verificacion, esperemos que no exista errores solo advertencias, si es asi entonces continua, si sale errores, pues regresemos al infopath y probemos la compatibilidad de nuestro formulario infopath con sharepoint.

Realizado esto, el template esta disponible para poder activarlo, eso lo encontraremos en "Feature".

Y listo ahora podremos agregarlo a una libreria.

Crear a libreria, entrar a las opciones y agregar un template existente, bueno eso ya es otra cosa, no hagamos mas largo este post.

Saludos a todos

Preguntas?? dejarlas en comentarios o al correo personal marcodiazjr@gmail.com

sábado, 10 de noviembre de 2007

INFOPATH: Ejecutar webservice desde codigo (C#.net)

Este es mi segundo post en este caso trataremos de algo muy intersante, como ejecutar un webservice por codigo dentro del infopath, las razones de hacer esto son muchas, pero las resumiremos diciendo que necesitamos manupilar la data que este webservice nos devielve.
Requisitos:
INFOPATH: Conectar a webservice
Para este caso en el paso 8 del
post anterior, debemos quitar el check.
Antes que nada, por lo general cuando queremos ejecutar un webservice tambien queremos mandarle paremetros para esto el webservice debe tener parametros de entrada (obvio!!!)

Bueno haber plantienmos un caso:
Un combo de Departamentos que Filtre las provincias.
Entonces el primer combo de departamentos lo debemos enlazar a un webservice que se ejecute apenas arranca la aplicacion(el formulario de infopath).
Espero no tengamos problemas con este punto, sino ya actualizare un post sobre esto.
Ahora si.
Para entrar al codigo del infopath, debemos hacer algo primero, decirle que lenguaje tiramos mas (es la forma de decir en mi pais, cual lenguaje de programacion dominamos mas), en este caso usaremos c#.net, no es que domine mas c#.net solo que encontre mas ejemplos en este lenguaje que en otro.
¿como hacemos esto?, rapidamente Tools/Form Options/Programming y alli elijan el lenguaje en nuestro caso C#, si por algun motivo ya han escrito codigo en otro lenguaje y desean cambiar a otro, pues primero remueben el existente y luego eligen el nuevo (remover=borrar todo el codigo anterior).
Ahora si.

Para entrar en el codigo damos click derecho sobre el combo (dropdownlist de departamentos) y elegimos la opcion Programming y luego el evento: Changed Event y bueno ya lo estaran viendo se abrio el Net.

Ahora si. un codigo mejor que mil palabras.

Falta Poner el codigo , sorry por el codigo faltante, lo saque porque se veia mal en firefox :(

Ahora a explicar un poco el codigo.
Pendiente....

INFOPATH: Conectar a webservice

Para poder utilizar un webservice en el infopath, primero debemos agregarla como fuente de datos secuendaria, ¿como? sigan los pasos, las imagenes indican la forma.
Paso 1:


Paso 2:


Paso 3


Paso 4


Paso 5: Aca tenemos que ingresar la ruta absoluta de nuestro webservice, ojo que si es para produccion debemos escribir con el nombre propio de la maquina donde esta el webservice, como se dan cuenta si estan poniendo bien la ruta, pues por lo general esta mal cuando aparece:
(http://localhost/....). Es necesario aclarar que previamente tenemos que tener operativo 100% si webservice, sino tendremos problemas posteriores.


Paso 6



Paso 7: Por lo general no se marca esta opcion, pues puede traer problemas de sincronizacion, mejor dejarla siempre sin check, ojo que se podria marcar si es data que por lo general no cambia.




Paso 8 : En este paso hay que tener cuidado en algo: si esta fuente de datos secundaria sera utilizado para llenar un combo(dropdownlist) por ejemplo al iniciar la aplicacion entonces dejemos marcada esta opcion, si por el contrario va depender de otro valor previamente seleccionado entonces quitemos el check, no olvidar detalle.


Finalmente FINALIZAR.
Hasta aqui temos agregado nuestro webservice al infopath.

Mas informacion(Ingles)