martes, 18 de enero de 2011

Ejecución de JOBs de DataStage usando REXEC en C#


Utilizando la clase descrita en la entrada de este mismo blog referente a la ejecución de REXEC utilizando C# se pueden construir otro tipo de aplicaciones como por ejemplo un componente que nos permita ejecutar programáticamente JOBs en DataStage sin utilizar API de DataStage.


En seguida el código 


using System;
using F.Net.Protocols;

namespace F.Net.DataStageServer
{
    /// <summary>
    /// Description:    Ejecución parametrizada de Jobs de DS
    /// Author:         Juan Ramón Gama Coria
    /// Date:           04 Dic 2008
    /// </summary>
    public class DataStageServer
    {
        #region VARIABLES

        private string strRutaDSJOB;
        private string strServerDatastage;
        private string strJob;
        private string strUser;
        private string strPassword;
        private string strProyecto;
        private int intPuerto;

        private string[,] strArrayParameters = new string[1, 2];
        private int intParameters;

        #endregion

        #region PROPIEDADES
        //PROPIEDADES---------------------------------------------
        public string DSJobPath
        {
            get { return strRutaDSJOB; }
            set { strRutaDSJOB = value + " -run"; }
        }
        public string Project
        {
            get { return strProyecto; }
            set { strProyecto = value; }
        }

        public int Port
        {
            get { return intPuerto; }
            set { intPuerto = value; }
        }

        public string DatastageServer
        {
            get { return strServerDatastage; }
            set { strServerDatastage = value; }
        }

        public string Job
        {
            get { return strJob; }
            set { strJob = value; }
        }

        public string User
        {
            get { return strUser; }
            set { strUser = value; }
        }

        public string Password
        {
            get { return strPassword; }
            set { strPassword = value; }
        }
        //---------------------------------------------------------------
        #endregion

        #region METODOS
        public bool ExecuteJob()
        {
            rexec objUnix = new rexec(strServerDatastage, strUser, strPassword, GenerateCommand());
            objUnix.ReceiveTimeOut = 90000000;
            objUnix.SendTimeOut = 90000000;
            objUnix.Execute();
            return true;
        }

        private string GenerateCommand()
        {
            string strComando, strParametros;
            int intContador;

            if (strRutaDSJOB == string.Empty) { DSJobPath = "/datastage/Ascential/DataStage/DSEngine/bin/dsjob"; }

            strComando = strRutaDSJOB;
            strParametros = string.Empty;

            for (intContador = 0; intContador <= intParameters - 1; intContador++)
            {
                strParametros = strParametros + " -param " + strArrayParameters[intContador, 0] + "=" + strArrayParameters[intContador, 1];
            }
            strComando = strComando + strParametros + " " + strProyecto + " " + strJob;
            return strComando;
        }

        public void AddParameter(string strParameterName, string strParameterValue)
        {
            int intContador;
            if (intParameters == 0)
            {
                strArrayParameters[0, 0] = strParameterName;
                strArrayParameters[0, 1] = strParameterValue;
            }
            else
            {
                string[,] arrHelper = new string[intParameters + 1, 2];
                for (intContador = 1; intContador <= intParameters; intContador++)
                {
                    arrHelper[intContador - 1, 0] = strArrayParameters[intContador - 1, 0];
                    arrHelper[intContador - 1, 1] = strArrayParameters[intContador - 1, 1];
                }
                arrHelper[intParameters, 0] = strParameterName;
                arrHelper[intParameters, 1] = strParameterValue;
                strArrayParameters = arrHelper;
            }
            intParameters += 1;
        }
        #endregion

        #region CONSTRUCTORES

        public DataStageServer(string strDSUnixPath, string strServerIP, string strJobToExecute, string pStrUser, string strUserPassword, string strProjectJob, int intUnixPort)
        {
            DatastageServer = strServerIP;
            Job = strJobToExecute;
            User = pStrUser;
            Password = strUserPassword;
            Project = strProjectJob;

            if (intUnixPort == 0) { intPuerto = 512; }
            else { intPuerto = intUnixPort; }

            if (strDSUnixPath == string.Empty) { DSJobPath = "/datastage/Ascential/DataStage/DSEngine/bin/dsjob"; }
            else { DSJobPath = strDSUnixPath; }
        }

        public DataStageServer()
        {
        }

        #endregion

    }

}

Transacciones Fiori

  /UI2/CACHE Register service for UI2 cache use /UI2/CACHE_DEL Delete cache entries /UI2/CHIP Chip Registration /UI2/CUST Customizing of UI ...