Artículo original publicado el jueves, 3 de mayo de 2012

Un buen “amigo del blog”, Israel V., tuvo el detalle de hacerme ver hace poco que la mayoría de los códigos de ejemplo de los que disponemos para los proveedores de notificaciones personalizados contienen una pequeña y molesta brecha. Si sigue estos ejemplos, los correos electrónicos que se envían al agregar una nueva persona a un sitio dejarán de enviarse.  Por supuesto, yo soy tan culpable como cualquier otro, así que he estudiado la situación con detalle, además de revisar parte del código que Israel había desarrollado para solucionar el problema temporalmente.

En este mundo de locos, verá que este problema aparece cuando va a agregar un usuario a una colección de sitios por primera vez y, por lo tanto, no hay ninguna dirección de correo electrónico asociada a dicha persona, debido a que no se ha producido una sincronización de perfiles.  Por lo tanto, puede imaginar que la clave en este punto (estoy presentando el caso más sencillo) pasa por captar una dirección de correo electrónico para el usuario al añadirlos y, a continuación, conectarla a la propiedad adecuada en la clase PickerEntity.  Ahora, observemos algún caso concreto.

DÓNDE consiga la dirección de correo electrónico dependerá totalmente del proveedor de notificaciones.  Si está extrayendo los datos de Active Directory, puede pedir a AD que la consiga.  Si está usando SAML y la dirección de correo electrónico es la notificación de identidad, podrá reutilizarla.  Básicamente, "depende", por lo que tendrá que escoger.

CUÁNDO desee usarla será cuando se invoque el método FillResolve.  Como sabe, este método se puede invocar después de que alguien agregue una entrada mediante el Selector de personas o si se escribe un valor en el control de escritura y se hace clic en el botón de resolución.  Como he visto en muchos de mis códigos de ejemplo, durante el proceso se creará una instancia de la clase PickerEntity, de manera que podrá agregarla a la Lista <PickerEntity> que se pasará al método.

CÓMO agregarla es sencillo, solo tiene que definir la propiedad en la instancia PickerEntity, como se indica a continuación:

//necesario para que los correos electrónicos de bienvenida funcionen:

pe.EntityData[PeopleEditorEntityDataKeys.Email] = "steve@stevepeschka.com";

En este ejemplo, “pe” es la instancia de la clase PickerEntity que he creado y vuelvo a mi método FillResolve.

Esto es todo lo que se necesita saber al respecto.  El mejor truco quizás sea simplemente obtener el valor de la dirección de correo electrónico.  En cuanto lo tenga, le resultará bastante sencillo agregarlo a la PickerEntity para asegurarse de que sus correos electrónicos de bienvenida funcionen.  Lo he probado y he comprobado que a) los correos electrónicos de bienvenida no se estaban enviando con mi proveedor de notificaciones personalizado original y b) empezaban a enviarse después de incorporar este cambio.  Gracias de nuevo a Israel V. por el aviso y por el ejemplo de código de este problema.

Esta entrada de blog es una traducción. Puede encontrar el artículo original en Getting Welcome Emails to Work with a Custom Claims Provider in SharePoint 2010