Proyecto

General

Perfil

Plugin Hotfolder Multicliente

Información

Autor Teresa Quílez
Sitio Web http://www.adapting.com
Repositorio source Plugin_Hotfolder_Multicliente
Código fuente http://svn-community.adapting.com:8080/svn/Community/Plugins/Plugin_Hotfolder_Multicliente/trunk
Versión Actual v1.0
Compatible con Hotfolder 2.0.8

Resumen

En esta wiki se explica la estructura básica que deben tener los plugins para poder funcionar en el hotfolder multicliente. En ella se explicarán detalles que se han ido encontrando durante el desarrollo del mismo.

Notas de instalación

Descargarse e instalar la versión del hotfolder 2.0.8. Descargar este plugin y abrirlo con visual studio 2010.
Una vez instalado el hotfolder, hay que configurar todos los hotfolder necesarios, cada uno apuntando al Abox correspondiente. Cuando se ejecuta el hotfolder se creará una carpeta extensions y otra Rules, dentro de las cuales habrá una subcarpeta HotfolderX para cada uno de los hotfolder configurados. Es dentro de estas carpetas donde se debe depositar el fichero de reglas y el fichero de la compilación del plugin, en caso de que sea necesario. En caso de estar vacías no se realizará ninguna acción adicional con los documentos procesados y se seguirá las reglas del fichero de reglas general ubicado en la raíz de la carpeta del hotfolder.

Guía de uso

En la solución del plugin existe un proyecto llamado Adapting.Hotfolder.Extensions.Hotfolder1, en éste se ha creado la clase HotfolderEvents.cs en donde se ha realizado la suscripción de los eventos de Initialization y BeforeUploadDocument, para el resto de suscripciones se debe proceder igual.

Nombre ensamblado

Respecto al nombre del ensamblado, sólo hay que tener la precaución de que cada uno debe tener un nombre diferente al resto, ya que se cargan todas la librería existentes en la subcarpetas de extension, por lo que cada uno debe identificarse de manera única.
Para que se ejecute el plugin correspondiente al hotfolder que se está procesando es necesario realizar la siguiente comprobación:

     var assemblyName = Assembly.GetExecutingAssembly().Location;
     if (assemblyName.Contains(context.Configuration.Name.ToUpper()))
     {
        //Logica del plugin
     }

De esta manera sólo se ejecuta la lógica del plugin si estamos en el correspondiente hotfolder.

Fichero configuración plugin

En este plugin se ha incluido la forma de poder tener un fichero de configuración propio para cada uno de los plugin, de manera que no interfiera en la configuración del resto de hotfolders configurados. También se ha incluido un fichero de configuración general a todos los hotfolder llamado HotFolder.exe.config que posteriormente iremos definiendo su utilidad.

Para definir un fichero de configuración propio al plugin de un hotfolder debemos incluir en nuestro proyecto un fichero de configuración, app.config y en el método Initialization añadir la siguiente sentencia dentro de la lógica del plugin:

 GetConfiguration(context);

Definir la variable Configuration:

 private static Configuration Configuration;

De manera que:

     private void GetConfiguration(ActionContext context)
     {

       var fileMap = new ExeConfigurationFileMap
       {
            ExeConfigFilename =
             ConfigurationManager.AppSettings[context.Configuration.Name]
       };

       Configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
     }

     private string GetValueConfiguration(string key)
     {
         var value = Configuration.AppSettings.Settings[key].Value;

         return value;
     }

También es necesario incluir en el fichero de configuración general del hotfolder (HotFolder.exe.config) la siguiente entrada de configuración:

   <add key="HotFolder1" value="C:\Program Files (x86)\Adapting\HotFolder Abox\extensions\HotFolder1\app.config"/>

NOTA: si se tiene referenciado un servicio web en el plugin, los datos de configuración de conexión no los coge del fichero de configuración propio plugin sino del fichero de configuración del hotfolder raíz HotFolder.exe.config , éste debe contener la configuración necesaria para conectarse al servicio web.

Generación de log de los plugins

También se ha incluido la forma de generar logs para los plugin de manera que sabremos qué es lo que va realizando el plugin en cada momento. Para ello debemos definir una variable log:

 private readonly ILog Log = log4net.LogManager.GetLogger("PLUGIN HOTFOLDER 1");

E incluir en el método Register:

 var logConfig = ConfigurationManager.AppSettings["logConfig"];

 XmlConfigurator.Configure(new FileInfo(logConfig));

En donde logConfig lo obtendremos del fichero de configuración general del hotfolder.
Y cuyo contenido de log.config, al cual se hace referencia en la variable logConfig contiene:

<log4net configSource="log4net.config">
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline"/>
      <!--<conversionPattern value="%date [%thread] %-5level - %message%newline" />-->
    </layout>
  </appender>
  <appender name="OutputDebugStringAppender" type="log4net.Appender.OutputDebugStringAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
    </layout>
  </appender>
  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="C:\Program Files (x86)\Adapting\HotFolder Abox\log-file.txt"/>
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="100KB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
 </appender> 
  <root>
    <level value="INFO"/>
    <appender-ref ref="RollingFileAppender"/>
    <!--<appender-ref ref="ConsoleAppender"/>-->
  </root>
  <logger name="NHibernate">
    <level value="ERROR" />
  </logger>

En este plugin se encuentran todos los ejemplos descritos.

Una vez realizada la lógica necesaria para nuestro plugin y compilada la solución, debemos depositar en la carpeta extensions/HotfolderX los ficheros de la compilación, así como configurar y depositar los ficheros de configuración necesarios.

Historico

Volver al inicio
Agregar imagen desde el portapapeles (Tamaño máximo: 10 MB)