Tuesday, July 24, 2012

SharePoint BDC

Trasteando un rato el BDC (Business Data Connectivity) de SharePoint 2010, es una herramienta que nos permite manipular datos de otras bases de datos, todo desde el entorno de SharePoint.

Casi siempre el problema al crear ese tipo de soluciones es la cadena de conexión u otras configuraciones, ya saben que no es lo mismo desarrollar en un ambiente de pruebas a un ambiente de producción.

Cuando pasas a producción un desarrollo tienes que cambiar varias configuraciones y las más comunes son los datos de conexión a las bases de datos.

Esta solución que plantea es mucho mas sencilla de las encontradas en la red, no quiere decir que sea la mejor y más óptima, pero a final de cuentas nos saca del apuro.

Quiero mencionarles que hice un módelo BDC basado en este ejemplo:


A partir de ahi todo es sencillo, código .NET de toda la vida

1. Mapear el folder Layouts.
2. Dentro del folder Layouts creamos una carpeta llamada "BDC" o cualquier nombre que se representativo de la aplicación.
3. En el folder creado en el paso anterior agregamos un archivo XML llamado Settings.xml.
4. Editamos el archivo para especificar las configuraciones, para este ejemplo asi lo hice;

<?xml version="1.0" encoding="utf-8" ?>
<settings>
 <setting id="ConnectionString" value="SERVER=.; DATABASE=BD; UID=usuario; PWD=password;" />
</settings>
5. Agregamos la referencia System.Web
6. Hacer una funcion que lea el xml y devuelva la configuración solicitada

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Xml;
 
namespace JehutyX.BDC
{
 
 public static class Global
 {
 
  public static string GetSetting(string fileName, string id)
  {
   string result = string.Empty;
 
   // Cargar archivo
   XmlDocument doc = new XmlDocument();
   doc.Load(HttpContext.Current.Server.MapPath("/_layouts/BDC/" + fileName));
 
   // Recuperamos el nodo
   XmlNode node = doc.DocumentElement.SelectSingleNode("./setting[@id = '" + id + "']");
 
   // Si es válido
   if (node != null)
   {
    // Recuperamos el valor
    result = node.Attributes["value"].InnerText;
   }
 
   // Destruir objetos
   node = null;
   doc = null;
 
   // Regresar resultado
   return result;
 
  }
 
 }
  
} 

7. En la clase que genera el Modelo donde viene el código de nuestros métodos (en mi caso se llama EquipmentEntityService.cs), quedaría así:

  public static Equipo ReadItem(int id)
  {
   Equipo result = new Equipo();
   Connection connection = new Connection(Global.GetSetting("EquipmentModel.xml""ConnectionString"));
 
   try
   {
    connection.Open();
    connection.AddParameter("@id"SqlDbType.BigInt, id);
 
    using (SqlDataReader reader = connection.ExecuteReader("SELECT * FROM Equipos WHERE id = @id"))
    {
 
     if (reader.Read())
     {
      result.ID = reader.GetInt32("id", 0);
      result.Nombre = reader.GetString("nombre");
      result.Ubicacion = reader.GetString("ubicacion");
      result.NumeroEquipos = reader.GetInt32("numeroEquipos", 0);
      result.NumeroActivo = reader.GetString("numeroActivo");
      result.Marca = reader.GetString("marca");
      result.Modelo = reader.GetString("modelo");
      result.NumeroSerie = reader.GetString("numeroSerie");
      result.AlcanceOpNominal = reader.GetString("alcanceOpNominal");
      result.IntervaloUso = reader.GetString("intervaloUso");
      result.Magnitud = reader.GetString("magnitud");
      result.ExactitudFabrica = reader.GetString("exactitudFabrica");
      result.Resolucion = reader.GetString("resolucion");
      result.ToleranciasProceso = reader.GetString("toleranciasProceso");
      result.CriteriosRiesgo = reader.GetString("criteriosRiesgo");
      result.EstadoActual = reader.GetString("estadoActual");
      result.Observaciones = reader.GetString("observaciones");
     }
 
    }
 
   }
   catch (Exception)
   {
 
    throw;
   }
   finally
   {
    connection.Dispose();
    connection = null;
   }
 
   // Regresar resultado
   return result;
 
  }
La siguiente línea de código es donde ejecuto el método GetSetting, le paso el nombre del archivo XML y la configuración que quiero obtener
Connection connection = new Connection(Global.GetSetting("Settings.xml""ConnectionString"));

El nombre del archivo lo pueden omitir y poner directamente en el código del método GetSetting.

Y listo, ya podemos tener las configuraciones que queramos y usarlas en nuestra solución de SharePoint.

No comments:

Post a Comment