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 } }