Adsence

viernes, 20 de febrero de 2015

Contenidos Personalizados en Alfresco



TIPO DOCUMENTAL EN ALFRESCO

Resultado de imagen para alfresco

Alfresco es una plataforma de gestion documental (ECM) en la cual se puede hacer entre otras cosas manejo de procesos documentales (BPMS), maneja gestores de contenido (CMS) y toda una plataforma de integracion para servicios.

Por esta ocacion nos vamos a centrar en la creacion de contenido personalizado en Alfresco, la version de alfresco que se esta usando es la version 5 de Alfresco sobre un servidor Ubuntu.
Para crear un tipo documental en Alfresco se deben realizar los siguientes pasos:
Primero crear los archivos de configuración, estos deben tener cualquier nombre pero se debe colocar al final de los archivos de contexto la cadena “–context” para que sean reconocidos por el aplicativo.

El siguiente ejemplo crea un tipo de contenido y un aspecto con tres cadenas cada uno.

En la ruta %ALFRESCO_HOME%/tomcat/shared/clases/alfresco/extensión crear los siguientes archivos:

AgreementModel.xml
(Contiene el modelo del contenido, se puede agregar contenido y aspectos)
<?xml version = "1.0" encoding = "UTF-8"?>
<model name = "reinsurance:agreementmodel" xmlns = "http://www.alfresco.org/model/dictionary/1.0">
                <description>Custom Model para Contratos</description>
                <author>Christian Villavicencio</author>
                <version>1.0</version>
                <imports>
                               <import uri = "http://www.alfresco.org/model/dictionary/1.0" prefix="d"/>
                               <import uri = "http://www.alfresco.org/model/content/1.0" prefix = "cm"/>
                </imports>
                <namespaces>
                               <namespace uri = "modelo.agreement" prefix = "reinsurance"/>
                </namespaces>
                <types>
                               <type name = "reinsurance:agreement">
                                               <title>Contratos</title>
                                               <parent>cm:content</parent>
                                               <properties>
                                                               <property name = "reinsurance:nombrecontenido">
                                                                              <title>Nombre Principal</title>
                                                                              <type>d:text</type>
                                                                              <mandatory>false</mandatory>
                                                               </property>
                                                               <property name = "reinsurance:cedentecontenido">
                                                                              <title>Nombre Cedente Completo</title>
                                                                              <type>d:text</type>
                                                                              <mandatory>false</mandatory>
                                                               </property>
                                                               <property name = "reinsurance:fechacontenido">
                                                                              <title>Fecha Creacion documento</title>
                                                                              <type>d:text</type>
                                                                              <mandatory>false</mandatory>
                                                               </property>                                                                          
                                               </properties>
                                               <!--mandatory-aspects>
                                                               <aspect>reinsurance:aspectAgreement</aspect>
                                               </mandatory-aspects-->
                               </type>
                </types>
                <aspects>
                               <aspect name = "reinsurance:aspectAgreement">
                                               <title>Agreement</title>
                                               <properties>
                                                               <property name = "reinsurance:nombre">
                                                                              <title>Nombre</title>
                                                                              <type>d:text</type>
                                                                              <mandatory>false</mandatory>
                                                               </property>
                                                               <property name = "reinsurance:cedente">
                                                                              <title>Nombre Cedente</title>
                                                                              <type>d:text</type>
                                                                              <mandatory>false</mandatory>
                                                               </property>
                                                               <property name = "reinsurance:fecha">
                                                                              <title>Fecha Creacion</title>
                                                                              <type>d:text</type>
                                                                              <mandatory>false</mandatory>
                                                               </property>                                                                          
                                               </properties>
                               </aspect>
                </aspects>
</model>

AgreementModel-context.xml

(mapeo del modelo en el contexto de Alfresco)
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans default-lazy-init="false" default-autowire="no" default-dependency-check="none">
                <bean id = "extension.dictionaryBootstrap" parent = "dictionaryModelBootstrap" depends-on = "dictionaryBootstrap">
                               <property name = "models">
                                               <list>
                                                               <value>alfresco/extension/AgreementModel.xml</value>
                                               </list>
                               </property>
                </bean>
</beans>

web-client-config-custom.xml

(despliegue de contenido en Alfresco Explorer)
<?xml version="1.0" encoding="UTF-8"?>
<alfresco-config>
                <config evaluator = "string-compare" condition = "Action Wizards">
                               <subtypes>
                                               <type name = "reinsurance:agreement"/>
                               </subtypes>
                               <aspects>
                                               <aspect name = "reinsurance:aspectAgreement"/>
                               </aspects>
                               <especialise-types>
                                               <type name = "reinsurance:agreement"/>
                               </especialise-types>
                </config>
               
                <config evaluator = "string-compare" condition = "Content Wizards">
                               <content-types>
                                               <type name = "reinsurance:agreement" />
                               </content-types>
                </config>
               
                <config evaluator = "node-type" condition = "reinsurance:agreement">
                               <property-sheet>
                                               <show-property name = "reinsurance:nombrecontenido"/>
                                               <show-property name = "reinsurance:cedentecontenido"/>
                                               <show-property name = "reinsurance:fechacontenido"/>                                    
                               </property-sheet>
                </config>

                <config evaluator = "aspect-name" condition = "reinsurance:aspectAgreement">
                               <property-sheet>
                                               <show-property name= "reinsurance:nombre"/>
                                               <show-property name= "reinsurance:cedente"/>
                                               <show-property name= "reinsurance:fecha"/>                                      
                               </property-sheet>
                </config>
               
                <config evaluator= "string-compare" condition = "Advanced Search">
                               <advanced-search>
                                               <content-types>
                                                               <type name= "reinsurance:agreement" />
                                               </content-types>
                                               <custom-properties>
                                                               <meta-data aspect= "reinsurance:aspectAgreement" property= "reinsurance:nombre" />
                                                               <meta-data aspect= "reinsurance:aspectAgreement" property= "reinsurance:cedente" />
                                                               <meta-data aspect= "reinsurance:aspectAgreement" property= "reinsurance:fecha" />                                                      
                                               </custom-properties>
                               </advanced-search>
                </config>

</alfresco-config>

web-client-custom-context.xml

(Mapeo de archivo en el contexto del Alfresco)
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
     <bean id="myproject-extension-webclient-configBootstrap" class="org.alfresco.web.config.WebClientConfigBootstrap" init-method="init">
      <property name="configs">
            <list>
                <value>alfresco/extension/web-client-config-custom.xml</value>
            </list>
        </property>
    </bean>
</beans>

myproject-extension-module-context.xml

(Import  de los archivos de contexto)
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<!-- references to XML configurations -->
<beans>
    <import resource="AgreementModel-context.xml"/>
    <import resource="web-client-custom-context.xml"/>
</beans>

En la ruta %ALFRESCO_HOME%/tomcat/shared/clases/alfresco/web-extensión  modificar el archivo con las líneas en rojo y los nuevos nodos:

share-config-custom.xml

(contiene el despliegue del contenido en la visualización de Alfresco Share)

<aspects>
         <!-- Aspects that a user can see -->
         <visible>
            <aspect name="cm:generalclassifiable" />
            <aspect name="cm:complianceable" />
            <aspect name="cm:dublincore" />
            <aspect name="cm:effectivity" />
            <aspect name="cm:summarizable" />
            <aspect name="cm:versionable" />
            <aspect name="cm:templatable" />
            <aspect name="cm:emailed" />
            <aspect name="emailserver:aliasable" />
            <aspect name="cm:taggable" />
            <aspect name="app:inlineeditable" />
            <aspect name="cm:geographic" />
            <aspect name="exif:exif" />
            <aspect name="audio:audio" />
            <aspect name="cm:indexControl" />
            <aspect name="dp:restrictable" />
                                               <aspect name="reinsurance:aspectAgreement" />
         </visible>

         <!-- Aspects that a user can add. Same as "visible" if left empty -->
         <addable>
         </addable>

         <!-- Aspects that a user can remove. Same as "visible" if left empty -->
         <removeable>
         </removeable>
      </aspects>

      <!--
         Used by the "Change Type" action

         Define valid subtypes using the following example:
            <type name="cm:content">
               <subtype name="cm:mysubtype" />
            </type>

         Remember to also add the relevant i18n string(s):
            cm_mysubtype=My SubType
      -->
      <types>
         <type name="cm:content">
                                               <subtype name="reinsurance:agreement" />
         </type>

         <type name="cm:folder">
         </type>
                                
         <type name="trx:transferTarget">
            <subtype name="trx:fileTransferTarget" />
         </type>
      </types>


Aumentar los nodos para realizar búsquedas y visualizar contenido:

<config evaluator="node-type" condition="reinsurance:agreement">
                   <forms>
                                <form>
                                               <field-visibility>
                                                  <show id="reinsurance:nombrecontenido" />
                                                  <show id="reinsurance:cedentecontenido" />
                                                  <show id="reinsurance:fechacontenido" />
                                               </field-visibility>
                                </form>
                   </forms>
                </config>

                <config evaluator="model-type" condition="reinsurance:agreement">
                   <forms>
                                <form id="search">
                                               <field-visibility>
                                                               <show id="reinsurance:nombrecontenido" />
                                                               <show id="reinsurance:cedentecontenido" />
                                                               <show id="reinsurance:fechacontenido" />
                                                </field-visibility>
                                </form>
                   </forms>
                </config>
               
                <config evaluator="string-compare" condition="AdvancedSearch">
                   <advanced-search>
                                 <!-- Forms for the advanced search type list -->
                                 <forms>
                                                <!-- Añadimos el contrato en la búsqueda avanzada -->
                                                <form label="Contratos" description="Búsqueda de Contratos">reinsurance:agreement</form>
                                 </forms>
                   </advanced-search>
                </config>

Reiniciar Alfresco con el comando:
./alfresco.sh stop
Y con el comando:
./alfresco.sh start

Se debe crear una regla a nivel de fichero en donde se depositarán los archivos, por ejemplo se tiene la siguiente regla:



viernes, 6 de febrero de 2015

Sistemas de Informacion Gerencial

 
 Los sistemas de informacion gerencial son sistemas divididos de acuerdo al valor de la informacion que generan para las empresas, de acuerdo a esto se puede identificar el siguiente problema:

Problema

Debido al incorrecto uso e implementación de soluciones tecnológicas, las soluciones tecnológicas se corrompen y dejan de ser mantenibles dentro de un entorno de TICs en las empresas, es importante entender el objetivo de cada uno de los diferentes tipos de sistemas. 

 

En una empresa existe un forma basica de desarrollo de los sistemas empezando por los sistemas de recoleccion de datos, estos generan informacion, conocimiento y por ultimo sabiduria.

Piramide de sistemas de informacion

El siguiente es un modelo conceptual que ayuda a visualizar de mejor manera los sistemas de informacion dentro de la empresa.



Si a esta piramide se le extrapola a tipos de soluciones informaticas dentro de la empresa tenemos lo siguiente:


 

Como se puede observar de realmente importante el establecimiento de una capa de infraestructura tecnologica que soporte todos los tipos de sistemas de la empresa, y de forma trasversal lo importante es que deben estar alineados con la vision estrategica de la empresa.


sábado, 10 de enero de 2015

Configuraciones Basicas en Apache ActiveMQ

http://activemq.apache.org/ 


Apache ActiveMQ es un bróker de mensajería de código abierto (bajo licencia Apache 2.0) que implementa la especificación de Java Message Service 1.1 (JMS).
Ofrece Características empresariales como:
  • Clustering
  • Múltiples almacenes para mensajes
  • Capacidad de emplear cualquier administrador de base de datos como proveedor de persistencia JMS, aparte de VM, caché y persistencia de colas por el KahaDB.
Otra caracteristica que me parece realmente interesante es que tambien soporta la especificacion NMS para .NET y tambien puede usarse en C, C++, Delphi,Perl, Python, PHP, Ruby.

Este broker de mensajeria tiene un conjunto de propiedades mediante las cuales se puede tener un mejor rendimiento, a continuacion las mas basicas

Multicast

Esta propiedad nos ayuda a que las peticiones sea distribuidas entre los brokers de mensajeria disponibles en la red, esta propiedad viene habilitada por omisiòn, en la mayoria de las veces es mejor deshabilitarlo.
Por amision en el archivo activemq.xml viene lo siguiente:
<transportConnector name="openwire" uri="tcp://localhost:61616"
 discoveryUri="multicast://default"/>

reemplazar con:
<transportConnector name="openwire" uri="tcp://localhost:61616" />


Memoria

Dentro de las configuraciones de memoria hay que tener en cuenta 2 cosas una es la memoria de arranque del broker de mensajeria y otra con la que opera el servicio de colas virtuales o persistentes, asi para configurar la memoria de arranque del broker como servicio se utiliza el archivo
Wrapper.conf
En este archivo hay que tener en cuenta dos cosas si nuestra instalacion es un servicio de 32 bits, la memoria maxima es de 2gb, por el contrario si es de 64 bits la memoria maxima es de 4 gb.
activemq.xml

Ampliar la memoria de uso del bróker en la sección memoryUsage:
<systemUsage>
 <systemUsage>
  <memoryUsage>
   <memoryUsage limit="64 mb"/>
  </memoryUsage>
 <storeUsage>
   <storeUsage limit="100 gb"/>
  </storeUsage>
 <tempUsage>
   <tempUsage limit="50 gb"/>
 </tempUsage>
 </systemUsage>
</systemUsage>

 Tipos de Transporte

En general se usa el tipo de transporte TCP, sin embargo es recomendable tomar en cuenta la implementacion de una mejora llamada NIO (network I/O), que es un trasporte similar al TCP pero optimizado para redes.

Espero les sirva esta pequeña guia sobre una optimizacion inicial de este broker de mensajeria, que me parece una buena opcion para este tipo de servicios. 

jueves, 8 de enero de 2015

Administracion del proceso de desarrollo




La administracion del proceso de desarrollo es una de las tareas muy importantes a la hora de desarrollar un proyecto de software, ya que permite realizar una de los procesos importantes  dentro del manejo de proyectos como es el Control y Monitoreo de Proyectos.
Existen varias herramientas  que permite soportar el desarrollo y nos ayudan a tener documentada las fases del proyecto.

Jira

Es una herramienta desarrollada por Atlassian que entre otras cosas y para mi gusto la mas interesante es la visualizacion del estado de proyecto a traves de cuadros de flujo acumulado, aunque el manejo de incidentes y tambien otras visualizacion para el dia a dia como tableros kamban.

VersionOne 

Es un producto similar a Jira, con la diferencia que es exclusivo para el manejo de proyectos que sigan metologias agiles, sin embargo es una gran herramienta.

Estas dos herramientas son pagadas pero agregan mucho valor al momento del manejo de proyectos, existen herramientas limitadas y de uso libre como el tablero kamban que ofrece el sitio kambaflow en el cual uno se registra y puede crear los tableros y usuarios para ayudarnos en el control diario de los proyectos.

Existen empresas que ayudan con el soporte en herramientas para proceso de desarrollo completo como parte de sus servicios en cloud, y una gran mayoria de empresas usan este tipo de servicios ya que se desliga la compra de muchas licencias para este soporte, un ejemplo de este tipo de servicios es el que ofrece Atlassian.

Existen muchas mas herramientas para poder hacer este proceso, sin embargo lo importante aca es poder realizar y poder obtener de un "vistazo" el estado actual de un proyecto asi como las actividades diarias del personal del cual como gerentes de proyecto esta a nuestro cargo, y es una de las tareas en las que normalmente se falla con la deteccion tardia de problemas y retrasos en los proyectos