viernes, 20 de marzo de 2015

Conexion a SAP DI API

Cascaron DataLayerIng Siempre que se desea intereactuar con SAP desde C# existe  unas librerias que proporciona el mismo SAP para poder realizar desarrollos externos; yo en este momento estoy realizando interacciones atravez de un portal web, se requiere agregar la referencia SAPbobsCOM.dll

Ya dentro del codigo se incluye :

using SAPbobsCOM;

Se inicializa de la siguiente forma:

#region SAP Conection
            SAPbobsCOM.Company oCompany;
            int lRetCode, ErrorCode;
            String ErrorMessage;
            oCompany = new SAPbobsCOM.Company();
            oCompany.DbServerType = SAPbobsCOM.BoDataServerTypes.dst_MSSQL2008; // o la version de MSSQL que esten usando
            oCompany.DbUserName = "usuario de BD";
            oCompany.DbPassword = "Contraseña del usuario";
            oCompany.Server = "IP del servidor";
            oCompany.CompanyDB = "Nombre de la base de datos de la compañia de SAP";
            oCompany.UserName = "Usuario de SAP";
            oCompany.Password = "PASSWORD DE SAP";
            oCompany.language = SAPbobsCOM.BoSuppLangs.ln_Spanish; //Aqui cambias si tu lenguaje no es español

            oCompany.UseTrusted = false;
            lRetCode = oCompany.Connect();
            #endregion
            if (lRetCode != 0)
            {
                oCompany.GetLastError(out ErrorCode, out ErrorMessage);
                ViewBag.Message = ("Falló la Conexion: " + ErrorCode.ToString() + "," + ErrorMessage);
            }
            else
            {
                //Realizar Operaciones con la Coneccion
            }


Con este código es sencillo crear una conexión a los objetos de SAP para interactuar con ellos.

¿Por que interactuar atravez del DI API y no directamente hacer Inserts en la Base de Datos?

Puedes hacer los Insert directamente pero para ello necesitas conocer toda la logica que desarrolla SAP al insertar un registro modificarlo o eliminarlo; por ejemplo al registrar un articulo crea listas de precios almacenes .. etc Cosas que crea el DI API de forma automatica al guardar el articulo por eso es importate al interactuar con SAP usar el DI API para modificar o insertar registros y/o Objetos,,,

viernes, 6 de marzo de 2015

IF en Sentcias SQL

Cascaron DataLayerIng

Hoy en día en el camino de extracción de información de una base de datos me he encontrado que se suelen usar valores que reprecentan algun valor que para el usuario final no le son entendibles o ahy que explicar mira si es cero es que es ... y bla bla bla... Para esos casos no es útil poder poner un IF dentro de una instruccion SQL y de esa forma no extraer lo satos en bruto desde la base de datos... Para el caso de SQL Server se usa la sentencia


SELECT
  CASE 
  WHEN [Comparacion logica] THEN [Valor a Desplegar]
  WHEN [Comparacion logica] THEN [Valor a Desplegar]
     .
     .
     .
  WHEN [Comparacion logica] THEN [Valor a Desplegar]    
    ELSE [VAlor por defecto] 
 END 
FROM
 [Tabla]
Un ejemplo de como funciona:

SELECT
  a.ID
  ,CASE
      WHEN a.MyChar = 'A' THEN 'Success'
      WHEN a.MyChar = 'B' THEN 'Close'
      WHEN a.MyChar = 'C' THEN 'Far'
      ELSE 'Fail'
  END
FROM MyTable a


Leer Archivos de un directorio

Cascaron DataLayerIng Leer Los  archivos de un directorio es la cosa mas sencilla del mundo lo único que hay que hacer es iniciar la Clase DirectoryInfo  con el constructor indicando la carpeta de la cual se desea revisar los archivos new DirectoryInfo(folderName) y luego usar la Función GetFiles(); la cual recibe como parámetro si se desea hacer un filto como por ejemplo "*.txt", a continuación un ejemplo de una función que rellena un listbox con todos los archivo TXT de un directorio

        private void button1_Click(object sender, EventArgs e)
        {
            DialogResult result = folderBrowserDialog1.ShowDialog();
           
            if (result == DialogResult.OK)
            {
                folderName = folderBrowserDialog1.SelectedPath;
                textBox1.Text = folderName;
                DirectoryInfo di = new DirectoryInfo(folderName);
                FileInfo[] FiArray = di.GetFiles("*.txt");

                foreach (FileInfo item in FiArray)
                {
                    listBox1.Items.Add(item.Name);
                }
            }
        }