Webcast – Integrando aplicaciones de negocio en Sharepoint – Ciclo 24 MOSS

El Jueves 25/09/2008 estuvimos dictando con mi amigo y colega Juan Andrés Valenzuela el webcast donde mostramos como se pueden integrar nuestras aplicaciones de negocio en nuestros portales de Sharepoint. El mismo se baso en la configuración y utilización de los catálogos de datos profesionales (BDC) y como Sharepoint 2007 (MOSS) nos permite integrar aplicaciones externas. En la siguiente dirección Microsoft Technet podrán acceder a la grabación del mismo para verlo completo.

Dado que el tiempo para el WebCast fue poco para mostrar todo los que deseábamos, vamos a estar haciendo una segunda parte en las próximas sesiones y además voy a estar escribiendo una serie de artículos para adentrarnos en la funcionalidad de lleno y así ver la misma de forma completa.

Acá les dejo el código de la webpart que estuvimos mostrando en el Webcast, donde podrán ver como programáticamente podemos consumir también los catálogos de datos profesionales.

using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using System.Data;
using System.Web.UI.HtmlControls;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using Microsoft.Office.Server.ApplicationRegistry.MetadataModel;
using Microsoft.Office.Server.ApplicationRegistry.Runtime;
using Microsoft.Office.Server.ApplicationRegistry.Infrastructure;

namespace MOSSCA.WebCast.BussinesDataCatalog
{
    [Guid("ddd7cda5-5156-4e6a-a838-9d5c12f38369")]
    public class ViewWebPart : System.Web.UI.WebControls.WebParts.WebPart
    {
        private LobSystem lLobSystem;
        private LobSystemInstance lLobSystemInstancia;
        private NamedLobSystemInstanceDictionary lSystemInstancia;
        private Entity lEntidad;
        private MethodInstance lMetodo;
        private NamedEntityDictionary lEntidades;
        private NamedMethodInstanceDictionary lInstanciasMetodos;
        DataTable lRowEntityDataTable = new DataTable();
        
        public ViewWebPart()
        {
            this.ExportMode = WebPartExportMode.All;
        }

        protected override void CreateChildControls()
        {
            lLobSystem = ApplicationRegistry.GetLobSystems()["AdventureWorksLOBSystem"]; 
            lSystemInstancia = lLobSystem.GetLobSystemInstances(); //Obtengo todas las instancias.
            lLobSystemInstancia = lSystemInstancia["AdventureWorksInstance"]; //Obtengo la instancia especifica                                                                      
            lEntidades = lLobSystemInstancia.GetEntities(); //Obtengo todas las entidades de la instancia.
            lEntidad = lEntidades["HumanResources.Department"]; //Obtengo la entidad departamento.
            lInstanciasMetodos = lEntidad.GetMethodInstances(); //Obtengo todas las instancias de los metodos
            lMetodo = lInstanciasMetodos["HumanResources.[Department]Finder"]; //Obtengo el metodo que deseo ejecutar.
            Object[] lParametros = { }; //Array de objetos para la ejecucion de la instancia del metodo.

            //Ejecuto el metodo y cargo un enumerador para iterar los resultados.
            IEntityInstanceEnumerator lEnumeratorDepartamento = (IEntityInstanceEnumerator)lEntidad.Execute(lMetodo, lLobSystemInstancia, ref lParametros);
            IEntityInstance lEntityInstance = null;
            HtmlTable lTableResultado = new HtmlTable();
            while (lEnumeratorDepartamento.MoveNext())
            {
                //Obtengo la instancia de la entidad que apunta el enumerador.
                lEntityInstance = lEnumeratorDepartamento.Current;
                lRowEntityDataTable = lEntityInstance.EntityAsDataTable; //Convierto la instancía del registro en una DataTable
                lTableResultado.Controls.Add(GetRowFromTable(lRowEntityDataTable.Rows[0])); //Creo un HtmlRow a partir de la tabla cargada
            }
            base.Controls.Add(lTableResultado); //Cargo la HtmlTable en la coleccion de controles para ser dibujada en el formulario.
            base.CreateChildControls();
        }

        private HtmlTableRow GetRowFromTable(DataRow pRow)
        {
            HtmlTableCell lCell;
            HtmlTableRow lRetorno = new HtmlTableRow();
            foreach (DataColumn lDt in pRow.Table.Columns)
            {
                lCell = new HtmlTableCell();
                lCell.InnerText = pRow[lDt.ColumnName].ToString();
                lRetorno.Controls.Add(lCell);
            }
            return lRetorno;
        }

        protected override void Render(HtmlTextWriter writer)
        {
            // TODO: add custom rendering code here.
            base.Render(writer);
        }
    }
}

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *