Mostrando entradas con la etiqueta wss3. Mostrar todas las entradas
Mostrando entradas con la etiqueta wss3. Mostrar todas las entradas

miércoles, 28 de enero de 2009

OwnerEventHandler 1.0.0

Recientemente he publicado en codeplex el proyecto “OwnerEventHandler”. Consiste en una solución sharepoint que despliega un eventhandler para controlar las modifiocaciones de los elementos o documentos.

OwnerEventHandler permite que los usuarios tenga permisos de colaborador en las listas o librerías pero solo puedan modificar o editar los documentos de los que son propietarios.

La ventaja de este proyecto es que tiene múltiples utilidades con ciertos cambios en el código. Por ejemplo: podríamos utilizarlo para cambiar los permisos de los elementos, de manera que cada usuario pudiera ver los elementos que haya subido, o incluso podrías hacer que solo los pudieran editar un grupo de usuarios encargados de la supervisión.

El proyecto está compuesto de una solución WSP “OwnerEventReceiver”, que contiene una feature a nivel de sitio “OwnerItemEventReceiver”. El eventHandler está alojado en la librería OwnerEventHandler.dll.

Para registrarlo en una librería o biblioteca podemos utilizar "Event handler explorer”.

El código es bastante sencillo, consiste en un EventHandler que captura el evento ItemAdded para modificar los permisos de manera que todos los miembros excepto el propietario tengan permisos de lectura.

 

public class OwnerEventItemEventReceiver : SPItemEventReceiver
    { 
         public override void ItemAdded(SPItemEventProperties properties)
        {
            try
            {
                SPUser currentUser = properties.ListItem.ParentList.ParentWeb.CurrentUser;

                using (SPWeb webOrigUser = properties.OpenWeb())
                {
                    SPUserToken token = webOrigUser.AllUsers["SHAREPOINT\\system"].UserToken;
                    using (SPSite site = new SPSite(properties.SiteId, token))
                    {
                        using (SPWeb currentWeb = site.OpenWeb(properties.RelativeWebUrl))
                        {

                            try
                            {
                                DisableEventFiring();

                                SPList sourceList = currentWeb.Lists[properties.ListId];
                                SPListItem itemAdded = sourceList.GetItemById(properties.ListItem.ID);
                                if (!itemAdded.HasUniqueRoleAssignments)
                                {
                                    itemAdded.BreakRoleInheritance(true);
                                    itemAdded.ParentList.ParentWeb.Dispose();
                                }

                                SPRoleAssignmentCollection roleAssignmentCollection = itemAdded.RoleAssignments;
                                foreach (SPRoleAssignment roleAssignment in roleAssignmentCollection)
                                {
                                    roleAssignment.RoleDefinitionBindings.RemoveAll();
                                    roleAssignment.RoleDefinitionBindings.Add(currentWeb.RoleDefinitions.GetByType(SPRoleType.Reader));
                                    roleAssignment.Update();
                                }

                                SPRoleDefinition reviserRoleDefinition = currentWeb.RoleDefinitions.GetByType(SPRoleType.Administrator);
                                SPRoleAssignment reviserRolePropietario = new SPRoleAssignment(currentUser);
                                reviserRolePropietario.RoleDefinitionBindings.Add(reviserRoleDefinition);
                                itemAdded.RoleAssignments.Add(reviserRolePropietario);

                                itemAdded.Update();
                            }
                            catch (Exception ex1)
                            {
                                properties.ErrorMessage = ex1.Message;
                                properties.Status = SPEventReceiverStatus.CancelWithError;
                                System.Diagnostics.Trace.Write("Exception OwnerEventHandler.OwnerEventItemEventReceiver.ItemAdded.1: {0}", ex1.Message);
                            }
                            finally
                            {
                                EnableEventFiring();
                            }

                        }
                    }
                }
            }
            catch (Exception ex)
            {
                properties.ErrorMessage = ex.Message;
                properties.Status = SPEventReceiverStatus.CancelWithError;
                System.Diagnostics.Trace.Write("Exception OwnerEventHandler.OwnerEventItemEventReceiver.ItemAdded: {0}", ex.Message);
            }
        }

    }

 

Lo primero que hacemos es obtener el token del usuario system, esto es parecido a ejecutar “SPSecurity.RunWithElevatedPrivileges”.

A continuación abrimos una referencia a la colección y al sitio, hacemos esto en lugar de utilizar el del SPItemEventProperties debido a que las referencias que mantiene el elemento añadido referencian al usuario que añadió el elemento, por lo que a la hora de modificar los permisos puede que no tenga permisos de Adminsitrador.

Después recorremos todas las configuraciones de permisos del elemento añadido y las editamos de manera que los miembros solo puedan leer.

Por último añadimos al usuario propietario el control total sobre el elemento.

miércoles, 2 de julio de 2008

Errores al instalar Employee Portal de Dynamics NAV

Recientemente he ayudado a montar el Employee Portal sobre un wss2 contra un Microsoft Dynamics Nav 4 y me he encontrado algunos “problemillas” que parecen ser bastante comunes en este mundo.

Por lo que he podido comprobar la documentación de Microsoft sobre este producto es muy escasa, y los manuales de instalación son demasiado ligeros.

El primer error que me encontré al entrar al portal fue el siguiente: “No se pueden obtener los permisos necesarios”. Por supuesto este no era un error de wss2, sino del portal.

Motivo: Al parecer este error se produce cuando hemos instalado el wss2 antes que el módulo de Employee portal.

Solución: Desinstalar el paquete del employee portal, después desinstalar el wss2, y después volver a instalar el paquete del employee portal y por último el wss2.

Una vez conseguí que funcionara el wss2 sin problemas e instalar el NAS conseguí construir un sitio con la plantilla NEP y me encontré con el siguiente problema: “Communication error (10114): No reply received from Back End System (Time Out)

Motivo: Este error puede producirse por varias causas. El problema es se produce un Timeout en la página porque los WebParts de NEP no conseguían comunicar con el NAS.

Solución: Como puede producirse por muchos motivos, os aconsejo los siguientes pasos:

· Comprobar el log de aplicaciones del servidor y buscar errores o advertencias producidas por el Employee Portal

· Revisar los usuarios utilizados en la ejecución del wss y del NAS.

· Revisar que el NAS esté iniciado correctamente. Cuando el NAS arranca correctamente deja una marca en el log de aplicaciones de Windows.

· Revisar la configuración de seguridad de las colas MSMQ y los nombres de las colas en la configuración del NEP en Navision.

· Revisar la configuración del NEP en el Web.Config del sitio. Revisar los nombres de las colas MSMQ y la configuración del timeout.

· Revisar que hayais generado el par de claves de intercambio necesarias, y que esté arrancado el servicio de intercambio.

· En mi caso el problema estaba en era que no encontraba la dll xp_ndo.dll.

Algunos enlaces sobre el error:

http://www.mibuso.com/forum/viewtopic.php?p=39228

http://www.msdynamics.de/viewtopic.php?t=4690

Error "The extended stored procedure xp_ndo_enumusergroups in the library file xp_ndo.dll, is not available on the <Servername> server”.

Motivo: Navision no encuentra la dll xp_ndo.dll que necesita el cuando conecta en modo integración de Windws contra una bbdd SqlServer.

Solución: Copiar la dll al directorio bin del SqlServer. La dll la podeis encontrar en el cd de instlación en el directorio $\Sql_esp\xp_ndo.exe

Algunos enlaces sobre el error:

http://blog.configmaker.net/?p=27

Pero al instalarla me daba otro error más: “Error al carga xp_ndo.dll no se ha podido encontrar alguna de sus dependencias

Motivo; los procedimientos almacenados estaban registrados referenciando a la dll en un path erróneo.

Solución: Borrar los procedimientos y volver a crearlos con el path adecuado.

Algunos enlaces sobre el error y el anterior:

http://dynamicsuser.net/forums/p/11027/33937.aspx

http://www.binaryrefinery.com/main/CommentView,guid,8fbfd400-c032-4107-8ad6-4335f1714b06.aspx

http://www.binaryrefinery.com/main/CommentView,guid,8fbfd400-c032-4107-8ad6-4335f1714b06.aspx

En unos días os contaré mis experiencias con este producto. En breve también montaremos el Employee portal sobre un wss3 contra un Dynamics Nav 4 y después sobre un wss3 contra un Dynamics Nav 5. Ya os contaré que tal.

miércoles, 11 de junio de 2008

ActiveDirectoryMembershipProvider contra un ADAM en WSS3

La mayoría de los ejemplos de un provider de seguridad contra un ADAM en sharepoint son en MOSS, por lo que cuando tenemos que implementarlo con WSS3 tenemos el problema que no podemos utilizar los providers de los ejemplos porque son solo para MOSS.

En este post he publicado un ejemplo de como configurar un provider de seguridad contra un ADAM en un WSS3.

viernes, 30 de mayo de 2008

Edición rápida desde Sharepoint Designer

El otro día un compañero a través de nuestra herramienta de consulta de conocimiento técnico en Renacimiento nos preguntaba como realizar cambios en las páginas de sharepoint de manera que no saliera la típica distribución.

Os pongo lo que le propuse en un post rápido:

Vista de datos personalizada

Wss3 nos permite visualizar elementos de nuestro sitio con un estilo y una distribución personalizada mediante xsl.

Para ello podemos utilizar el DataFormWebPart.

Seleccionamos Inserta->Controles de Sharepoint->Vista de datos, a continuación nos aparecerá la librería de orígenes de datos configuradas en el sitio actual.

Seleccionamos la lista que queremos mostrar, botón derecho y seleccionamos "Mostrar datos".

A continuación nos aparecen los campos de la lista. Seleccionamos los que deseemos y en la parte superior pulsamos "Insertar campos seleccionados como.."

Ahí podremos insertar una vista de un elemento o varios.

Una vez configurado el origen de datos del webpart, podremos editar el xsl, añadiendo, moviendo lo que queramos.

Con Xsl podremos aplicar sobre el contenido condiciones if, bucles y fórmulas.

El DataFormWebPart además nos permite aplicar filtros, parámetros, conexiones, orden, nº de elementos visibles, paginación.

Formulario de edición personalizado

Si queremos que en nuestra lista al editar/visualizar un elemento aparezca un formulario con la distribución propia podemos utilizar los formularios de lista personalizada de Shrapoint.

Para ello iremos a la opción Insertar-> Controles de sharepoint ->Formulario de Lista personalizada.

A continuación nos preguntará la lista para la que queremos el formulario, y el tipo de formulario.

Una vez seleccionado, nos construirá un formulario con los campos de la lista, donde podremos cambiarlos, modificarlos, añadir, borrar, etc.

Incluso podemos hacer que un campo solo sea lectura.

Una vez terminado el formulario tendremos que configurar la lista para que cuando entre a editar/visualizar un elemento nos redirija a nuestro formulario de forma automática.

En el árbol de elementos del sitio, seleccionaremos la lista, botón derecho, propiedades.

Seleccionamos "Archivos auxiliares" y "elemento" (en caso de haber seleccionado anteriormente "elemento" en el formulario), y buscaremos el fichero para la acción que hayamos creado (edición, nuevo, visualización).

De esta manera por ejemplo, cada vez que se edite un elemento o se acceda a la dirección "Lists/MiLista/EditForm.aspx" nos redireccionará a nuestra página automáticamente.



Si vais a modificar el DispForm de una lista directamente con este mecanismo OJO!!!!, hay un bug o error o algún tipo de problema que hace que si modificas la página estándar DispForm se estropea la referencia de la lista y ya no puedes visualizar los elementos desde el formulario AllItems.aspx.

Para solucionarlo, teneis que hacer una copia de DispForm, modificar la copia y después asignar el nuevo fichero a la acción DispForm de la lista.

También tener en cuenta que cuando cambias un fichero con Designer lo estáis poniendo unghosted, por lo que esto solo vale para pequeños portales o demos. No os aconsejo hacer un proyecto serio solo utilizando Designer.

martes, 13 de mayo de 2008

Sharepoint Services 3 es gratuito?

Una instalación con WSS3 No tiene porqué salirnos gratis.

WSS3 forma parte del paquete de Windows server 2003, la instalación y uso de WSS3 no necesita de licencias adicionales. Al menos eso pensaba yo!!. Ayer Jorge Diéguez nos planteó la duda "¿necesitamos la licencia Windows External connector?". Al parecer había estado navegando y encontró el siguiente enlace: http://www.sharepointblogs.com/mattg/archive/2008/05/12/sharepoint-licensing-a-common-question-i-get-asked.aspx


Como consecuencia de esto hemos hecho una serie de consultas al soporte preventa de Microsoft sobre este tema y hemos concluido lo siguiente:
si queremos montar un portal con WSS3 puede que haya que adquirir licencias adicionales.

Cuando se monta wss3 para que pueda ser utilizado por usuarios públicos existen dos opciones en temas de licenciamiento:
  • Usuarios anónimos: En este caso no se necesita ningún tipo de licencia para WSS3.
  • Usuarios que realizan login
    • Usuarios externos a la compañía que se loguean en WSS3: En este caso se necesita un "External Connector License"
    • Usuarios de la compañía: Necesitan una licencia CAL.
La explicación que nos daba Microsoft era que siempre se debe licenciar los usuarios que necesitan hacer un login sobre los sistemas o aplicativos. Como WSS3 es un componente (aplicativo) de WS2K3 estamos utilizando recursos propios de WS2k3, por lo que necesitaremos una licencia CAL para cada usuario que haga logon sobre WSS3. En este caso Microsoft separa los usuarios externos a la compañía de los internos. Para los usuarios internos necesitaremos de una licencia CAL, y para los externos podremos o bien adquirir una licecnia CAL por usuario o bien adquirir el parquete "External Connector License".

La forma de realizar el login sobre WSS3 no afecta a la forma de realizar el registro, para Microsoft lo que importa es identificar la persona física independientemente que la validación se haga por un AD, ADAM o provider a medida con nuestro repositorio.

Es importante que tengais en cuenta que el paquete "External Connector License" es solo para usuarios externos a la compañía, es decir, que no están en nómina.
Las licencias de extenal connector se deben adquirir por cada servidor de nuestra granja que lo necesite.

Una vez visto el tema de wss3, tenemos que revisar las liencias de SqlServer. SqlServer es un producto aparte, al considerar a los usuarios de WSS3 como usuarios de WS2k3, si nuestro portal sobre WSS3 utiliza bbdd de contenidos de SqlServer (que será en el 100% de los casos) tendremos que tener una licencia CAL de SqlServer por cada usuario interno o externo que haga login en wss3. En este caso os recomendaría licenciar SqlServer por procesador en lugar de por usuario.


Como resumen os expongo nuestro caso y las licencias que necesita adquirir el cliente:

Los portales WSS3 son públicos en Internet, accederán usuarios anónimos y usuarios alojados en un repositorio propietario del cliente mediante un provider de seguridad a medida. A los portales no accederán usuarios del dominio.
Los servicios de WSS3 estarían alojados en servidores WServer 2003 Enterprise edition y utilizarían como bbdd SqlServer 2005 Standard Edition.
Solo estarán público los portales wss3.
Los servidores
Win2k3 y el SqlServer solo serán accesible para los usuarios administradores y aplicaciones (WSS3) internas, no accederá directamente ningún tipo de usuario adicional.

Licencias:
  • 1 Licencia X servidor de Ws2k3.
  • 1 External connector X servidor Ws2k3 (no cpu) que tenga instalado el wss3.
  • 1 licencia SqlServer 2005 standar/Enterprise x procesador físico


Os aconsejo que reviseis vuestras instalaciones realizadas en clientes.

En el siguiente enlace podreis encontrar información más detallada sobre el external connector: http://www.microsoft.com/windowsserver2003/howtobuy/licensing/extconnector.mspx


Mario: "Lo difícil no es vender, sino conseguir que tengas la necesidad de comprar"