Toda la información de producto en wiki.bizagi.com aplica para Bizagi BPM Suite 9.1.X.
Para las nuevas versiones de Bizagi BPM Suite (10.X y superior) visite la Guía de Usuario.
 

Clases de Replicacion

De


<keywords content="keywords"> replicacion, replicación, entidades replicadas, replicación de entidades, replicacion de entidades, replicacion entidades, replicar entidad, replicación entidades, integración a nivel de datos, nivel de datos, mySQL, replicación personalizada, replicacion personalizada </keywords> 

Aplica para las EDICIONES ENTERPRISE


Contenido

Clases de Replicación

Introducción

Este artículo presenta un ejemplo de las clases de replicación que implementan las interfaces "IProviderVirtualDA" y "IReplicationEntDA". Esta implementación es requerida para una replicación personalizada (a una fuente de datos diferente a Oracle o Microsoft SQL Server).
El ejemplo a continuación ilustra una replicación personalizada contra una fuente de datos en MySQL.

Alerta: Tenga en cuenta que el siguiente código provee una guía sobre la implementación del método "GetEntity()", sin embargo los otros métodos no están incluídos y por lo tanto deberán ser completados en las clases.

Prerequisitos

Para implementar estas clases, se requiere descargar e instalar el componente "MySQL Connector/Net" que se utiliza para la conexión a la instancia de MySQL.
Para este ejemplo, estas clases fueron trabajadas en Microsoft Visual Studio. En el proyecto de .Net (con Visual Studio), la librería "MySql.Data.dll" instalada por el componente "MySQL Connector/Net" debe ser referenciado en el proyecto de .Net.
De igual manera, se requiere referenciar también la librería "Bizagi.EntityManager.Interfaces.IEntityDA.dll" de Bizagi, que se encuentra ubicada en el folder de la aplicación web del proyecto (por defecto en "C:\Bizagi\Enterprise\Projects\[NOMBRE_PROYECTO]\WebApplication\bin\".


Ejemplo de Implementación de las clases

Clase que Implementa la interface IProviderVirtualDA

using System;
using System.Data;
using System.Data.OleDb;
using System.Collections;
using System.Collections.Specialized;
using System.Text;
using MySql.Data.MySqlClient;
using Bizagi.EntityManager.Interfaces;

namespace BizagiMySQL
{
    public class CMySQLProvider : IProviderVirtualDA
    {
        protected HybridDictionary m_htMetadata;
        protected MySqlConnection MySqlconn;
        protected bool bDisposed;

        public CMySQLProvider()
        {
            bDisposed = false;
            MySqlconn = null;
        }

        #region IProviderVirtualDA Members

        public void BeginTransaction()
        {
            // TODO:  Adicionar la implementación de CMySQLProvider.BeginTransaction
        }

        public void Rollback()
        {
            // TODO:  Adicionar la implementación de CMySQLProvider.Rollback 
        }

        public void Commit()
        {
            // TODO:  Adicionar la implementación de CMySQLProvider.Commit
        }

        public void OpenConnection()
        {
            if (MySqlconn == null)
            {
                // Verifica que los campos de los metadatos son correctos
                if (!m_htMetadata.Contains("Server") || !m_htMetadata.Contains("Database") ||
                    !m_htMetadata.Contains("Username") || !m_htMetadata.Contains("Password"))
                {
                    throw new CEntityClassInterfaceException("Incomplete metadata:"
					+ "connection parameters missing");
                }
                else
                {
                    // construye la cadena de la conexión
                    string sConn;
                    string sServer = m_htMetadata["Server"].ToString();
                    string sDatabase = m_htMetadata["Database"].ToString();
                    string sUsername = m_htMetadata["Username"].ToString();
                    string sPassword = m_htMetadata["Password"].ToString();
                    sConn = "Server=" + sServer + ";Database=" + sDatabase 
					+ ";Uid=" + sUsername + ";Pwd=" + sPassword + ";";

                    MySqlconn = new MySqlConnection(sConn);
                    MySqlconn.Open();
                }
            }
        }

        public void Init(HybridDictionary htMetadata)
        {
            m_htMetadata = htMetadata;
        }

        public void CloseConnection()
        {
            if (MySqlconn != null)
                MySqlconn.Close();
            MySqlconn = null;
        }

        #endregion

        #region IDisposable Members

        public void Dispose()
        {
            if (!bDisposed)
            {
                // nunca cierre la conexión en este método!!
                bDisposed = true;
            }
        }

        #endregion


        public MySqlConnection getConnection()
        {
            return this.MySqlconn;
        }


        public DataSet executeMySQLQuery(string sSQL)
        {
            MySqlCommand command;
            MySqlDataAdapter adapter;
            DataSet ds = new DataSet();

            command = new MySqlCommand(sSQL, this.getConnection());
            adapter = new MySqlDataAdapter(command);
            adapter.Fill(ds);

            return ds;
        }

        public void executeNonQueryMySQL(string sSQL)
        {
            MySqlCommand command;
            command = new MySqlCommand(sSQL, this.getConnection());
            command.ExecuteNonQuery();
        }
    }
}

Clase que Implementa la interface IReplicationEntDA

using System;
using System.Data;
using System.Data.OleDb;
using System.Collections;
using System.Collections.Specialized;
using System.Text;
using System.Xml;
using Bizagi.EntityManager.Interfaces;
using MySql.Data.MySqlClient;
using Bizagi.Defs;

namespace BizagiMySQL
{
    public class CMySQLReplication : IReplicationEntDA
    {
        /// <summary>
        /// Indicador para saber si el objeto ha sido eliminado
        /// </summary>
        protected bool m_bDisposed;

        /// <summary>
        /// Conexión con el sistema virtual
        /// </summary>
        protected CMySQLProvider m_objSystem;

        /// <summary>
        /// Metadata usada para inicializar el objeto, como una coleción de parejas nombre-valor
        /// </summary>
        protected HybridDictionary m_htMetadata;


        public CMySQLReplication()
        {
            m_bDisposed = false;
        }

        #region IReplicationEntDA Members

        public void Init(IProviderVirtualDA objProvider, HybridDictionary htMetadata)
        {
            m_objSystem = (CMySQLProvider)objProvider;
            m_htMetadata = htMetadata;
        }

        public DataSet GetEntity(string sEntSource, string[] arrsColList)
        {
            try
            {
                StringBuilder sbSQL = new StringBuilder();
                sbSQL.Append(" SELECT ");
                sbSQL.Append(string.Join(",", arrsColList));
                // Cláusula FROM
                sbSQL.Append(" FROM ");
                sbSQL.Append(sEntSource);

                DataSet ds = m_objSystem.executeMySQLQuery(sbSQL.ToString());
                return ds;
            }
            catch (Exception e)
            {
                throw new ApplicationException(e.Message);
            }
        }

        #endregion

        #region IDisposable Members

        public void Dispose()
        {
            if (!m_bDisposed)
            {
                m_bDisposed = true;
            }
        }

        #endregion
    }
}


Artículos Relacionados


<comments />