viernes, 11 de octubre de 2013

Informe de permisos por objetos

0 comentarios
 
A veces nos encontramos con la nesidad de analizar detalladamente todos los permisos establecidos en cada objeto

Para facilitarlo podemos ejecutar este script por zopectl debug, y obtener un archivo en formato csv con todos los perfiles por objeto:

site = app.kmkey
from AccessControl.SecurityManagement import newSecurityManager
from Testing.makerequest import makerequest
user = site.acl_users.getUser('manager').__of__(site.acl_users)
newSecurityManager({}, user)
app = makerequest(app)
site = app.kmkey
from Acquisition import aq_base, aq_acquire
context = site.workspaces.kmkey
cat = site.portal_catalog
km = site.workspaces.kmkey
db=site.db
catalog = km.portal_catalog

#Filtrar los objetos que nos  interese
brains = cat(path='/kmkey/workspaces/kmkey/etccc...', meta_type='KM Task',sort_on='relative_path')
len(brains)
obs=[]
i=0
for brain in brains:
  i=i+1
  obs.append(brain.getObject())
  if not i%10:
      i
      site._p_jar.sync()
      site._p_jar.cacheGC()

f=open('/tmp/informe.csv','w')
for ob in obs:
   dm = ob.getContent().getDataModel()
   txt =""""%s";"%s";"%s";"""%(len(ob.getPhysicalPath()),dm['Title'],dm['wbs'])
   roles = ob.get_local_roles()
   #Adaptar para incluir los permisos por grupo
   #groles = ob.get_local_group_roles()
   for item in roles:
       txt = txt + """"%s";"%s";"""%(item[0],' / '.join(item[1]))
   print txt
   f.write(txt+'\n')
f.close()
Leer más...
martes, 8 de octubre de 2013

Copias de seguridad en KMKey

0 comentarios
 
Mantener copias de seguridad es algo importante no sólo en entornos profesionales como servidores en los que esté instalado KMKey sino también una práctica muy prudente a título doméstico, pero a la que habitualmente damos poca prioridad, puesto que mientras no son necesarias resultan una carga algo molesta... pero si un día resultan necesarias y no disponemos de ellas, lamentaremos no haberlas realizado.

Antes de hablar de cómo realizarlas, es preciso indicar qué debe ser resguardado. En KMKey hay dos ubicaciones en las que se almacenan los datos de usuario: por un lado está la base de datos Postgres, en la que hay todos los patrones, expedientes, píldoras y demás, mientras que los documentos se almacenan en un diretorio física, por defecto bajo /var/zope/storages pero podría variar según la instalación.

En la instalación por defecto de KMKey hay un simple script auxiliar (KMKeyCore/utils/rsbackup.sh) que realiza una copia completa en cada ejecución de ambas ubicaciones, realizando un bolcado completo de la base de datos y un archivo contenedor de todos los documentos. Se recomienda encarecidamente su uso.

Sin embargo, con la popularización del KMKey Quality hemos detectado en algunas de las instalaciones que gestionamos un aumento muy significativo del volumen de documentos, debido a la propia vida de los ciclos documentales, lo que a su vez ha repercutido en un crecimiento muy significativo del volumen de las copias de seguridad. Si mantenemos varias copias de seguridad simultáneamente, algo por su parte recomendable, las necesidades de espacio aumentan exponencialmente, lo cual puede resultar inconveniente tanto por el coste de almacenamiento como el de transmisión externa. Además nos hemos percatado que en la mayoría de los casos la proporción de documentos modificados en relación al total de los existentes es reducida, siendo la operación más habitual la de inclusión de nuevo material.

Es por ello que para estos casos sugerimos una aproximación distinta a la estrategia de copias completas cada vez, usando para ello copias incrementales: en ellas realizamos una primera copia completa y seguidamente sólo registramos las diferencias. De este modo nos evitamos almacenar múltiples copias de documentos completamente idénticos.

Para ello usaremos una característica del comando `tar': --listed-incremental. Con ella crearemos dos ficheros: el almacén de documentación similar al habitual más un fichero índice que registra el estado de los ficheros archivados. Mientras usemos este fichero índice especial, las posteriores copias de seguridad incluirán únicamente las diferencias respecto la anterior. La contrapartida importante a tener en cuenta es que para restaurar una copia hasta el estado de una fecha en particular, serán necesarias todos los archivos desde la primera completa hasta la última parcial, incluyendo todas las intermedias.

Pongamos ejemplos: un proceso de copia de seguridad habitual consiste en:

$ tar --create --gzip --file /mnt/backup/kmkey_files.tar.gz /var/zope/storages/kmkey/files
$ tar -czf /mnt/backup/kmkey_files.tar.gz /var/zope/storages/kmkey/files

(los dos comandos son idénticos)

Para convertirlo a un proceso incremental, basta con añadir la opción --listed-incremental (o su versión abreviada, -g) y la ruta al fichero de índice:

$ tar --create --gzip --file /mnt/backup/kmkey_files.tar.gz --listed-incremental /mnt/backup/kmkey_files.tar.incr /var/zope/storages/kmkey/files
$ tar -czf /mnt/backup/kmkey_files.tar.gz -g /mnt/backup/kmkey_files.tar.incr /var/zope/storages/kmkey/files


Si el fichero /mnt/backup/kmkey_files.tar.incr no existe, se creará mientras se realiza una copia completa, mientras que si existe de una ejecución anterior, lo actualizará y el tar que creará contendrá únicamente las diferencias desde la última ejecución. Debemos también tener la precaución de dar un nombre adecuado a cada fichero tar y sobretodo que sean distintos para evitar sobreescribir una copia anterior.


Para la restauración, simplemente sustituiremos --create por --extract (o -c por -x en su forma abreviada), ejecutándolo sobre cada fichero .tar por orden, empezando por la copia completa. Esto además nos permite ir avanzando copia por copia en caso que deseemos restaurar en un punto intermedio: mientras respetemos el orden, podemos detenernos en cualquier momento que la copia será fiel al instante en que se creó la última incremental que hayamos extraído.


Es recomendable generar de vez en cuando una copia completa para reducir el número de incrementales que hay que mantener controlados. Una posibilidad puede ser generar una completa durante el fin de semana, asumiendo una menor carga del servidor ese día, y diarias incrementales. Bastará con eliminar o renombrar el fichero de índice, al que le hemos puesto la extensión .incr, justo antes de lanzar el proceso que deba realizar la copia para que la realize completa en lugar de incremental.

Por lo que se refiere a la base de datos, realizar una copia incremental es algo más complejo si hay que analizar las diferencias entre volcados. Es por ello que, en caso de considerarse necesarias, remitimos al lector a la documentación oficial de Postgres.

En una próxima versión de KMKey modificaremos el script para que sea compatible con el método incremental de copia de seguridad de documentos.
Leer más...
lunes, 7 de octubre de 2013

Ventajas del enfoque a procesos

2 comentarios
 
Respondemos la pregunta de Oliver: Buenas noches, He estado haciendo una investigación acerca de la herramienta de KMKey Quality, y he visto que se le da seguimiento a los procesos de la cadena de valor de una organización. Quisiera saber su punto de vista de este aspecto de la herramienta, ¿Cuales son los aspectos más relevantes de la herramienta, en el aporte a la gestión de la calidad de la cadena de valor? ¿Qué ofrece diferente con respecto a otras herramientas en la misma área? Agradecería mucho la respuesta a este correo. Muchas gracias,

Hola Oliver: El aspecto mas relevante de KMKey Quality es que permite automatizar en un entorno colaborativo de trabajo vía Internet el Sistema de Gestión de Calidad de una empresa u organización. El diseño de éste es responsabilidad del departamento de Calidad. KMKey principalmente facilta el trabajo diario para mantenerlo. El hecho que esté enfocado a procesos, permite aislar y localizar la información relativa a cada uno de ellos de forma sencilla, facilitando así la gestión. Este mapa, obviamente, es configurable de forma automática y cada empresa puede disponer del suyo propio. A partir del mapa podemos filtrar el proceso con el que queremos trabajar. Espero que la respuesta satisfazca tus expectativas. Salut Joan


Leer más...
viernes, 4 de octubre de 2013

Versión de inicio en ciclo de documentación ISO

0 comentarios
 
Por motivos de gestión, algunas veces nos puede interesar en empezar el ciclo de documentación en versión 0

Para configurarlo , solamente tenemos que ir ,desde zmi, al schema kmkey_document y modificar los valores por defecto de los campos

initial_revision
effective_revison

y poner en la default_expression el valor de inicio de versión
Leer más...
martes, 13 de agosto de 2013

Instalación de KMKey con chroot

0 comentarios
 
En los casos que nuestro SO sea antiguo, nos de problemas con algunos paquetes, o queramos realizar una instalación rápida y aislada, podemos instalar de forma totalmente funcional un KMKey a través de chroot de una forma realmente sencilla, a grandes rasgos indicamos la guía para hacerlo (Dependerá todo de qué sistema base tengamos y qué distribución querramos instalar, hay amplia información en la web sobre el uso de chroot)

- Para CentOS. Descargar e instalar debootstrap.
(wget ftp://ftp.muug.mb.ca/mirror/fedora/epel/5/i386/debootstrap-1.0.7-3.el5.noarch.rpm
yum install gettext
rpm -Uvh debootstrap-1.0.7-3.el5.noarch.rpm)

- Ejemplo de instalación debian lenny:

debootstrap --arch i386 lenny /srv/chroot/lenny/ http://archive.debian.org/debian/

Una vez instalada la distribución, pasamos a revisar algunas configuraciones:

vi /etc/fstab
/dev /srv/chroot/lenny/dev auto bind 0 0
/dev/pts /srv/chroot/lenny/dev/pts auto bind 0 0
/proc /srv/chroot/lenny/proc auto bind 0 0


sudo mount -o bind /proc /srv/chroot/lenny/proc
sudo mount -o bind /dev /srv/chroot/lenny/dev
sudo mount -o bind /dev/pts /srv/chroot/lenny/dev/pts
sudo mount -o bind /sys /srv/chroot/lenny/sys



En el sistema chroot:

*** editar sources list

deb http://archive.debian.org/debian/ lenny main non-free contrib
deb-src http://archive.debian.org/debian/ lenny main non-free contrib
deb http://archive.debian.org/debian-security/ lenny/updates main contrib non-free
deb http://archive.debian.org/debian-backports lenny-backports main
deb http://archive.debian.org/debian-volatile lenny/volatile main contrib non-free
deb http://archive.debian.org/debian-backports lenny-backports-sloppy main
deb http://apt/ lenny/


** Copiar algunos archivos de configuración
cp /etc/hosts /srv/chroot/lenny/etc/hosts
cp /etc/resolv.conf /srv/chroot/lenny/etc/
cp /etc/passwd /srv/chroot/lenny/passw
cp /etc/shadow /srv/chroot/lenny/
cp /etc/group /srv/chroot/lenny/

Nota: Cron no arranca por defecto

Una vez instalado el SO, procedemos a instalar kmkey normalmente, teniendo en cuenta algunos detalles:

-- Cambiar hpg_ba de postgres y poner autentificación de postgres a trust
-- El postgresql.conf puede dar problemas, revisar
-- Cambiar los puertos de apache y de postgres si hay instalados en la raíz (revisar los puertos usados en general)


Referencias:
http://www.tcu-inc.com/Articles/23/chroot.html#pg
http://wiki.debian.org/chroot


Leer más...
jueves, 1 de agosto de 2013

Mejoras edición portal actions (portal_actions)

0 comentarios
 
Como todos sabéis, las pestañas, tabs y actions se definen casi todos en el zmi --> portal_actions

Por desgracia, también sabemos que su edición es inviable cuando hay un cierto número de actions, lo que nos obliga a hacer un export --> edición xml --> import, a veces un poco lento y engorroso

Al final con poco esfuerzo hemos hecho una pequeña mejora para poder filtrar los actions, así trabajar por bloques de una sola vez, mejorando notablemente la edición y ordenación,  aunque se aceptan otras pequeñas mejoras o un editor más amigable :-)


Leer más...
viernes, 31 de mayo de 2013

ZMI, usuario Admin y login en KM

0 comentarios
 
Un pequeño inconveniente que tenemos los desarrolladores a la hora de configurar KM desde el ZMI es la imposibilidad de logearse con un usuario de la aplicación después de hacerlo con un usuario 'admin' des de la raíz del ZMI

En resumen: si entramos directamente por ZMI con un usuario 'admin' luego no podemos logear en la aplicación con un usuario de KM, ya que tiene preferencia el 'admin' y no queda más remedio que, o eliminar las cookies o , lo más común y cómodo, trabajar con dos navegadores, uno para ZMI y otro para KM.

Leer más...
lunes, 25 de marzo de 2013

KMKey Quality - Objetivos

2 comentarios
 
Buenos días,

Dentro de nuestro afán por proporcionar un mayor conocimiento de las funcionalidades de KMKey Quality Basic, presentamos un nuevo vídeo en nuestro canal de YouTube con un ejemplo de alta y gestión de Objetivos.

http://youtu.be/oU3fvZvBZf4

Como sabemos los objetivos están orientados a cumplir un propósito, representa una meta a alcanzar, y para conseguirlo se establece un plan de acciones, con unas fechas límite de realización y un responsable. En el ejemplo veremos como Editar la Planificación de estas acciones y como trabajar con ellas añadiendo al sistema documentación, notas, elementos de progreso o generando emails. Desde la opción de Control podremos ver el estado y progreso de cada una de estas tareas.

En función de la periodicidad que hayamos definido para nuestro objetivo, iremos introduciendo sus seguimientos desde la opción de Añadir Seguimientos Objetivos, y gracias a los indicadores asociados que nos permitirán monitorizar su evolución podremos determinar si se ha cumplido o no.

Por último, desde Listados generamos un informe con el resumen anual de Indicadores / Objetivos que se obtendrá en función del filtro de expedientes que hayamos realizado o desde la selección de un objetivo en concreto.

Nos despedimos hasta el próximo vídeo, un saludo.
Leer más...
jueves, 21 de marzo de 2013

KMKey Quality - Indicadores

0 comentarios
 
Hola, buenos días.

Quiero presentaros un nuevo vídeo http://www.youtube.com/watch?v=YpjENT52iXA en el que se muestra un ejemplo didáctico de como dar de alta en nuestro Sistema de Gestión de Calidad KMKey, un Indicador.

Posteriormente, dentro del apartado de Añadir Seguimientos Indicadores, realizamos el registro de varios valores simulando seguimientos en función de la frecuencia de toma de datos y de análisis establecido.
Veremos como consultarlos, modificarlos o borrarlos desde la opción de Gestionar Seguimientos, y el interesante Gráfico de código de barras que muestra la evolución de los datos y su comparativa con la meta establecida.

Por último generaremos varios informes desde el Tab de listados.

Hasta la próxima !!!
Leer más...
lunes, 18 de marzo de 2013

Cómo suscribirse al blog de kmkey

0 comentarios
 

Buenos días, 

Entrar al blog de kmkey-es es algo que hace mucha gente, pero si lo tienes como rutina y solamente quieres entrar para ver cuando hay algún post nuevo, no es muy cómodo estar entrando cada día para verlo. Para eso están los feeds o RSS. Para suscribirte no tienes más que abrir tu lector de RSS favorito (como feedly o google reader) y añadir una de estas URL's:


Otro blog de la comunidad donde se tratan temas menos técnicos, y se ve más el impacto sobre el sector que tiene kmkey es:

Puedes suscribirte añadiendo cualquiera de estos enlaces:


Así recibireis cada nuevo post que se haga.

Saludos,
Leer más...
jueves, 14 de marzo de 2013
0 comentarios
 
Hola,

Soy consciente de que ya estáis al corriente de la nueva versión KMKey Quality enfocado a procesos que vio la luz a principios de este año 2013, por si aun no lo habéis consultado, el siguiente enlace da acceso a un vídeo en el que se presentan las funcionalidades de la versión Basic http://www.youtube.com/watch?v=6zfdUIpEYUw

Pero en el día de hoy, quiero presentar un nuevo vídeo didáctico, en el que se trata un ejemplo de como crear y gestionar un Comité de Calidad con la aplicación KMKey Quality.   http://youtu.be/-PsywL3JYvo

En una primera fase, procedemos a darlo de alta en el sistema desde el apartado de "Seguimiento" - "Comités de calidad" y generar la convocatoria de todos sus asistentes.

Posteriormente una vez realizada la reunión del comité de calidad, introducimos los asuntos tratados, con el detalle de sus acciones, responsables y fechas de realización.

El tratamiento de estos asuntos lo realizamos desde "Gestión de las Acciones", introducimos varios ejemplos para ver como alimentar en el sistema aquellos elementos informativos y temporales que se van generando.

Finalizamos el ejemplo con la generación del "Acta del comité de Calidad" desde el apartado de listados.

Saludos
Leer más...
miércoles, 6 de marzo de 2013

Escalado de Imágenes

0 comentarios
 
Uno de los widgets que tenemos disponibles en la plataforma KMKey para visualizar imágenes es el Image Widget

Este permite subir imágenes, y al mismo tiempo, escalarlas

Existen dos métodos de escalado: escalado real de la imágen o escalado en modo visualización

El primer escalado lo que hacemos es reducir el tamaño 'físico' de la imágen (y su tamaño)

El segundo, no tocamos la imágen, pero la mostramos en modo view con el tamaño especificado , evitando así que se muestren con un tamaño desporporcinado en pantalla


Leer más...
martes, 5 de marzo de 2013

Emails personalizados

0 comentarios
 
Una funcionalidad muy útil a la hora de crear o modificar expedientes es el envío automático de eamils personalizados

Dejamos aquí un código ejemplo para utilizar en un script post edit. (este script lo dejaremos en portal_skins --> custom como siempre, y lo asociaremos a la propiedad post edit action del patrón)



from AccessControl import getSecurityManager
from Products.KMKeyCore.pattern import KMObjectCreationAdapter
from Products.CMFCore.utils import getToolByName
from DateTime.DateTime import DateTime
from urllib import unquote

if not proxy or not content:
  return
rq = context.REQUEST

from Products.KMKeyCore.pattern import KMObjectCreationAdapter
adapter = KMObjectCreationAdapter(proxy)

idd = proxy.getDocid()
if rq.get('enviaMailEscalarExecuted2_%s' % idd, False):
    return
else:
    adapter.setValueToDataModel(rq,'enviaMailEscalarExecuted2_%s' % idd,True)
 
enviar=False
cdm = content.getDataModel()
catalog = proxy.portal_catalog
reference=cdm.get('reference','')
creador = context.portal_vocabularies.members.get(cdm['creador'],cdm['creador'])

if not hasattr(rqs,'form'):
   return

if rqs.form.has_key('widget__mi_campo'):
#DETECTAR EL CAMBIO DEL CAMPO EN CUESTIÓN
    new=''
    if rqs:
       new = rqs.form['widget__campo que cambia']
    old = proxy['dept_pers']
    if not old: old = ''
    if not new: new=''

    if rqs and new!=old:
        #Enviar mail de modificaion a rr_pers
        brains = catalog(username=new)
        nombre=''
        mto=''
        if len(brains) and brains[0].email:
           mto = "%s <%s>"%(brains[0].fullname,brains[0].email)            
           nombre = brains[0].Title
           if brains[0].email:
             utool = context.portal_url
             url =  context.REQUEST['BASE0'] + '/misite/' + utool.getRelativeContentURL(proxy)
             subject='Subject del Email- %s - %s'%(reference,nombre)
             body="""
           
           
             Cabecera del body : %s
           
             Título : %s
             Descripción : %s

             Otros campos etc... : %s

           

             Click aquí para acceder
           
           


"""%(cdm['Title'],cdm['Description'],cdm['category'],url)

             proxy.createEmail(subject=subject,body=body,email_to  = mto)


Leer más...
martes, 26 de febrero de 2013

Scripts personalizados En Work Flows. Captura de eventos

0 comentarios
 
La plataforma CPS (Base de KMKey) nos permite crear scripts personalizados directamente des de ZMI (sin necesidad de compliar) asociados a una transción en los Work Flow

Por ejemplo, si queremos que en el momento de crear, editar o cerrar un proyecto se realice una acción determinada, como por ejemplo enviar un mail personalizado, podemos caputrar este evento y ejecutar código

Si por ejemplo queremos enviar un mail al crear un expediente, accedemos a portal_workflows --> kmkey_folder_wf --> scripts i crearmos un  nuevo script de python, con código parecido al especificado más abajo

para asociar entonces un script a una transición, editamos la transición en cuestión, y asignamos el script a uno de los dos events (after o before)

from Products.KMKeyCore.pattern import KMObjectCreationAdapter
from Products.KMKeyDefault.smssenderfactory import SMSSenderFactory
from DateTime.DateTime import DateTime
import re
from AccessControl import getSecurityManager
from Products.KMKeyCore.pattern import KMObjectCreationAdapter
from Products.CMFCore.utils import getToolByName
from DateTime.DateTime import DateTime
from urllib import unquote
catalog = context.portal_catalog

proxy=context=cdm=state_change.object

if not proxy.portal_type=='kmkey_incidencia-ticket':
   return

content=proxy.getContent()
cdm = content.getDataModel(proxy)
crear=True

if not cdm['end_date']:
    return

if crear:
    if 1==1:
        creador = cdm['creador']
        email_to=''
        valor=''
        if creador:     
           brains = catalog(getDocid=creador)
           if not len(brains):
               brains = catalog(username=creador)
           if len(brains):
              email_to = brains[0].email
              valor = brains[0].Title

        if not email_to:
            subject='Creador sin email asociado'
            body = "xxxxxxxxx"
        else:
            reference=cdm['reference']
            utool = context.portal_url
            url_asistencia =  context.REQUEST['BASE0'] + '/kmkey/' + utool.getRelativeContentURL(proxy)
           
            subject='Asistencia finalizada - %s '%reference

            body="""
            proxy.createEmail(subject=subject,body=body,email_to = email_to)
Leer más...
martes, 15 de enero de 2013

Exportar contenedores y objetos en formato XML Importable

1 comentarios
 
Una herramienta muy útil para replicar datos de KM o hacer copias de seguridad es la exportación en formato XML mediante el método/url exportContainerAsXML, de tal forma que luego podemos importarlo a cualquier otro KMKey mediante las utilidades de importación XML

Si queremos exportar un cotenedor entero , /kmkey por ejemplo, con todos sus expedientes, patrones, contactos etc, o un expediente en concreto con todos sus datos y documentos, lo hacemos directamente llamando a esta url

Hay dos formatos de llamada: Uno, que devuelve un zip con todos los datos, incluidos los documentos (para exportaciones relativamente pequeñas) y el otro que solamente devuelve el xml por navegador y deja los documentos guardados en el servidor (por defecto /var/zope/storages/kmkey/export)

Para generar el zip con todo:
http://mikmkey/.../kmkey/exportContainerAsXML?zipfilename=miarchivo.zip

Esto devuelve directamente por navegador un zip con todo: un archivo xml con todos los datos y una carpeta con todos los documentos
(Notar que para importar, los documentos tiene que copiarse en el servidor en el path especificado, cada objeto file tiene la referencia al path dónde se encuentra)

 Para generar solamente el xml , (y guardar los archivos en servidor):
 http://mikmkey/.../kmkey/exportContainerAsXML

El método se encuentra en un adaptador específico en /KMKeyDefault/adapters/xmlexport.py, y el método de llamada en container.py

Otros parámetros del método:

export_documents=True --> exportar o no los documentos
filename= --> nombre del archivo xml (por defecto /tmp/export.xml)
browser=True --> devolver resultados por navegador
export_patterns=False , --> exportar o no los patrones
files_path='', ---> Directorio del servidor dónde se crean los archivos
zipfilename='' --> Nonbre del archhivo zip a comprimir con todos los datos


Leer más...
lunes, 14 de enero de 2013

Descarga documentos read-only (PDF)

0 comentarios
 
En algunos casos nos puede interesar que los usuarios no se descarguen los documentos en formato editable para que no puedan realizar modificaciones en sus copias

El widget "file" del layout "kmkey_document" ahora permite esta funcionalidad mediante las opciones "Download files in pdf format if read-only" y "Valid PDF convertible formats"

La primera indica si la queremos habilitar, de tal forma que si un usuario no tiene permiso de edición sobre el objeto, se activa, y la segunda indica los formatos permitidos a convertir.

Saludos
Leer más...