Вы находитесь на странице: 1из 383

IBM InfoSphere DataStage

Versión 8 Release 5

Guía del desarrollador de Server Job



SC11-7827-03
IBM InfoSphere DataStage
Versión 8 Release 5

Guía del desarrollador de Server Job



SC11-7827-03
Nota
Antes de utilizar esta información y el producto al que da soporte, lea la información del apartado “Avisos y marcas
registradas” en la página 359.

© Copyright IBM Corporation 1997, 2010.


Contenido
Capítulo 1. Trabajos de servidor de IBM Funcionalidad . . . . . . . . . . . . 28
InfoSphere DataStage . . . . . . . . . 1 Terminología . . . . . . . . . . . . . 28
Etapas suplementarias . . . . . . . . . . . 2 Utilización de la etapa Complex Flat File . . . 29
Paquetes de IBM InfoSphere DataStage . . . . . 2 Definición de un enlace de salida . . . . . . 30
Recursos personalizados . . . . . . . . . . 3 Acerca de la página Salida . . . . . . . . 30
Después del desarrollo . . . . . . . . . . . 3 Consideraciones sobre la fecha . . . . . . . 38
Etapas Folder. . . . . . . . . . . . . . 38
Utilización de etapas Folder . . . . . . . . 38
Capítulo 2. Optimización del rendimiento Definición de correlaciones de juegos de
en los trabajos de servidor . . . . . . 5 caracteres . . . . . . . . . . . . . . 38
Trabajos y procesos de IBM InfoSphere DataStage . . 5 Definición de los datos de entrada de la etapa
Sistemas de un procesador o de múltiples Folder . . . . . . . . . . . . . . . 39
procesadores . . . . . . . . . . . . . 6 Definición de los datos de salida de la etapa
Particionamiento y recopilación . . . . . . . 9 Folder . . . . . . . . . . . . . . . 39
Diagnóstico de limitaciones de trabajo . . . . . 10 Etapas Hashed File . . . . . . . . . . . . 40
Interpretación de las estadísticas de rendimiento 12 Utilización de la etapa Hashed File . . . . . 40
Mejora del rendimiento . . . . . . . . . . 13 Definición de datos de entrada de Hashed File 41
Trabajos de CPU limitada: sistemas de un solo Definición de datos de salida de Hashed File . . 42
procesador . . . . . . . . . . . . . 13 Utilización del símbolo de euro en los sistemas
Trabajos de CPU limitada: sistemas de sin soporte multilingüístico . . . . . . . . 44
multiprocesador . . . . . . . . . . . . 13 Etapas Sequential File . . . . . . . . . . . 44
Trabajos limitados de E/S . . . . . . . . 15 Utilización de la etapa Sequential File . . . . 45
Diseño de archivo hash . . . . . . . . . 15 Definición de correlaciones de juegos de
caracteres . . . . . . . . . . . . . . 45
Capítulo 3. Trabajos de servidor y Definición de datos de entrada de Sequential File 46
soporte multilingüístico . . . . . . . 19 Definición de datos de salida de Sequential File 48
Cómo funciona la modalidad de soporte Cómo se comporta la etapa Sequential . . . . 50
multilingüístico . . . . . . . . . . . . . 19 Etapas Aggregator . . . . . . . . . . . . 55
Juegos de caracteres internos . . . . . . . 19 Utilización de una etapa Aggregator . . . . . 56
Correlación . . . . . . . . . . . . . 19 Subrutinas anteriores y posteriores a la etapa . . 56
Entornos locales . . . . . . . . . . . . 20 Definición de datos de entrada de Aggregator . . 56
Correlaciones y entornos locales en los trabajos de Definición de datos de salida de Aggregator . . 58
IBM IBM InfoSphere DataStage . . . . . . . . 22 Etapa Command. . . . . . . . . . . . . 60
Carga de correlaciones. . . . . . . . . . 23 Funcionalidad . . . . . . . . . . . . 60
Carga de entornos locales. . . . . . . . . 23 Terminología . . . . . . . . . . . . . 61
Utilización de correlaciones en trabajos de servidor 23 Utilización de la etapa Command . . . . . . 61
Datos de carácter en trabajos de servidor . . . 24 Definición de la correlación de juego de
Especificación de una correlación predeterminada caracteres . . . . . . . . . . . . . . 62
del proyecto . . . . . . . . . . . . . 24 Definición de los datos de entrada de la etapa
Especificación de una correlación predeterminada Command . . . . . . . . . . . . . . 63
del trabajo . . . . . . . . . . . . . . 24 Definición de datos de salida de etapa Command 63
Especificación de una correlación de etapa . . . 25 Utilización de mandatos . . . . . . . . . 64
Especificación de una correlación de columna . . 25 Etapas InterProcess . . . . . . . . . . . . 65
Utilización de entornos locales en trabajos de Utilización de la etapa IPC . . . . . . . . 67
servidor . . . . . . . . . . . . . . . 25 Definición de propiedades de la etapa IPC . . . 68
Especificación de un entorno local Definición de los datos de entrada de la etapa
predeterminado del proyecto . . . . . . . 26 IPC . . . . . . . . . . . . . . . . 68
Especificación de un entorno local Definición de datos de salida de la etapa IPC . . 68
predeterminado del trabajo . . . . . . . . 26 Etapas FTP Plug-in . . . . . . . . . . . . 68
Funcionalidad . . . . . . . . . . . . 69
Terminología . . . . . . . . . . . . . 70
Capítulo 4. Etapas de trabajo de
Instalación de la etapa . . . . . . . . . . 70
servidor . . . . . . . . . . . . . . 27 Propiedades . . . . . . . . . . . . . 70
Etapas Complex Flat File . . . . . . . . . . 27 Etapas Link Collector . . . . . . . . . . . 83
Trabajos existentes creados con la versión 1 de la Utilización de una etapa Link Collector . . . . 83
etapa Complex Flat File . . . . . . . . . 28 Subrutinas anteriores y posteriores a la etapa . . 84

© Copyright IBM Corp. 1997, 2010 iii


Definición de propiedades de la etapa Link Depuración de los contenedores compartidos 129
Collector . . . . . . . . . . . . . . 84 Compilación de un trabajo . . . . . . . . . 131
Definición de datos de entrada de etapa Link Comprobaciones de compilación . . . . . . 132
Collector . . . . . . . . . . . . . . 85 Compilación satisfactoria . . . . . . . . 132
Definición de datos de salida de etapa Link Resolución de problemas . . . . . . . . 132
Collector . . . . . . . . . . . . . . 85 Supervisor de rendimiento gráfico . . . . . . 132
Etapas Link Partitioner . . . . . . . . . . 85
Utilización de una etapa Link Partitioner . . . 86 Capítulo 6. Programación en IBM
Subrutinas anteriores y posteriores a la etapa . . 86 InfoSphere DataStage . . . . . . . . 135
Definición de propiedades de la etapa Link
Componentes de programación . . . . . . . 135
Partitioner . . . . . . . . . . . . . . 87
Rutinas . . . . . . . . . . . . . . 135
Definición de datos de entrada de etapa Link
Transformaciones . . . . . . . . . . . 136
Partitioner . . . . . . . . . . . . . . 87
Funciones . . . . . . . . . . . . . 136
Definición de datos de salida de etapa Link
Expresiones . . . . . . . . . . . . . 137
Partitioner . . . . . . . . . . . . . . 88
Subrutinas . . . . . . . . . . . . . 137
Etapas Merge . . . . . . . . . . . . . . 88
Macros . . . . . . . . . . . . . . 137
Funcionalidad . . . . . . . . . . . . 88
Reglas de prioridad . . . . . . . . . . 137
Utilización de la etapa Merge . . . . . . . 88
Cómo trabajar con las rutinas . . . . . . . . 138
El separador General de la página Etapa . . . 89
Recuadro de diálogo Rutina de servidor . . . 138
Recuadro de diálogo Seleccionar desde servidor 89
Creación de una rutina . . . . . . . . . 140
Definición de la correlación de juego de
Visualización y edición de una rutina . . . . 143
caracteres . . . . . . . . . . . . . . 89
Cómo copiar una rutina . . . . . . . . . 143
Ajuste del tamaño del archivo de entrada . . . 90
Cómo renombrar una rutina . . . . . . . 144
Definición de propiedades de salida . . . . . 90
Definición de transformaciones personalizadas . . 144
Etapas Pivot . . . . . . . . . . . . . . 95
Funciones ActiveX (OLE) externas . . . . . . 146
Funcionalidad . . . . . . . . . . . . 96
Importación de funciones ActiveX (OLE)
Giro de datos . . . . . . . . . . . . . 96
externas . . . . . . . . . . . . . . 146
Ejemplos . . . . . . . . . . . . . . 96
Etapas Row Merger. . . . . . . . . . . . 99
Funcionalidad . . . . . . . . . . . . 99 Capítulo 7. Programación BASIC . . . 147
Separador General de la página Etapa . . . . 99 Convenios de sintaxis . . . . . . . . . . 147
Página Entrada . . . . . . . . . . . . 99 El lenguaje BASIC . . . . . . . . . . . . 148
Página Salida . . . . . . . . . . . . 101 Constantes . . . . . . . . . . . . . 148
Etapas Row Splitter . . . . . . . . . . . 101 Variables . . . . . . . . . . . . . . 148
Funcionalidad . . . . . . . . . . . . 101 Expresiones . . . . . . . . . . . . . 149
Separador General de la página Etapa . . . . 101 Funciones . . . . . . . . . . . . . 149
Página Entrada . . . . . . . . . . . . 102 Sentencias . . . . . . . . . . . . . 149
Página Salida . . . . . . . . . . . . 102 Subrutinas . . . . . . . . . . . . . 150
Etapas Sort . . . . . . . . . . . . . . 103 Operadores . . . . . . . . . . . . . 150
Funcionalidad . . . . . . . . . . . . 104 Tipos de datos en las funciones y sentencias de
Propiedades configurables . . . . . . . . 104 BASIC . . . . . . . . . . . . . . . 156
Criterios de ordenación . . . . . . . . . 105 Series BASIC vacías y valores nulos . . . . . 156
Propiedades de la etapa . . . . . . . . . 106 Campos . . . . . . . . . . . . . . 156
Etapas Transformer . . . . . . . . . . . 108 Palabras reservadas . . . . . . . . . . 157
Utilización de una etapa Transformer . . . . 108 Código fuente y código objeto . . . . . . . 157
Componentes del editor de transformadores . . 108 Caracteres especiales . . . . . . . . . . 158
Conceptos básicos de la etapa Transformer . . 110 Variables del sistema . . . . . . . . . . . 159
Edición de las etapas Transformer . . . . . 112 Funciones y sentencias de BASIC . . . . . . . 160
Editor de expresiones de IBM InfoSphere Directivas de compilador . . . . . . . . 160
DataStage . . . . . . . . . . . . . 122 Declaración . . . . . . . . . . . . . 160
Propiedades de la etapa Transformer . . . . 125 Control de trabajos . . . . . . . . . . 160
Control del programa . . . . . . . . . 162
Proceso de archivo secuencial . . . . . . . 163
Capítulo 5. Depuración y compilación
Verificación de series y formateo . . . . . . 163
de un trabajo . . . . . . . . . . . 127 Extracción de subseries y formateo . . . . . 164
El depurador de IBM InfoSphere DataStage . . . 127 Conversión de datos . . . . . . . . . . 165
Para añadir un punto de interrupción: . . . . 127 Formateo de datos. . . . . . . . . . . 166
Para añadir una variable a la lista de Funciones de entorno local . . . . . . . . 166
observaciones: . . . . . . . . . . . . 128 Sentencia $Define . . . . . . . . . . . . 166
Para suprimir variables de la lista de Sentencias $IfDef y $IfNDef . . . . . . . . 167
observaciones, seleccione las variables y pulse Sentencia $Include. . . . . . . . . . . . 168
Eliminar observación.. . . . . . . . . . 128

iv Guía del desarrollador de Server Job


Sentencia $Undefine . . . . . . . . . . . 168 DSMakeJobReport . . . . . . . . . . . . 209
Operador [] . . . . . . . . . . . . . . 168 DSMakeMsg. . . . . . . . . . . . . . 210
Sentencia * . . . . . . . . . . . . . . 169 DSPrepareJob . . . . . . . . . . . . . 210
Función Abs. . . . . . . . . . . . . . 170 DSRunJob . . . . . . . . . . . . . . 211
Función Alpha . . . . . . . . . . . . . 170 DSSendMail . . . . . . . . . . . . . . 212
Función Ascii . . . . . . . . . . . . . 171 DSSetDisableJobHandler. . . . . . . . . . 212
Sentencia de asignación . . . . . . . . . . 171 DSSetDisableProjectHandler . . . . . . . . 213
Funciones Bit . . . . . . . . . . . . . 172 DSSetGenerateOpMetaData. . . . . . . . . 213
Funciones orientadas a los bytes . . . . . . . 173 DSSetJobLimit . . . . . . . . . . . . . 214
Función Byte . . . . . . . . . . . . . 174 DSSetParam . . . . . . . . . . . . . . 214
Función ByteLen . . . . . . . . . . . . 174 DSSetUserStatus . . . . . . . . . . . . 215
Función ByteType . . . . . . . . . . . . 174 DSStopJob . . . . . . . . . . . . . . 215
Función ByteVal . . . . . . . . . . . . 175 DSTransformError . . . . . . . . . . . . 216
Sentencia Call . . . . . . . . . . . . . 175 DSTranslateCode . . . . . . . . . . . . 216
Sentencia Case . . . . . . . . . . . . . 176 DSWaitForFile . . . . . . . . . . . . . 217
Sentencia Cats . . . . . . . . . . . . . 177 DSWaitForJob . . . . . . . . . . . . . 218
Función Change . . . . . . . . . . . . 177 Función Dtx . . . . . . . . . . . . . . 218
Función Char . . . . . . . . . . . . . 178 Función Ebcdic . . . . . . . . . . . . . 219
Función Checksum . . . . . . . . . . . 178 Sentencia End . . . . . . . . . . . . . 219
Sentencia CloseSeq . . . . . . . . . . . 179 Sentencia Equate . . . . . . . . . . . . 220
Función Col1 . . . . . . . . . . . . . 179 Función Ereplace . . . . . . . . . . . . 221
Función Col2 . . . . . . . . . . . . . 180 Función Exchange . . . . . . . . . . . . 222
Sentencia Common . . . . . . . . . . . 181 Función Exp. . . . . . . . . . . . . . 222
Función Compare . . . . . . . . . . . . 182 Función Field . . . . . . . . . . . . . 223
Función Convert . . . . . . . . . . . . 183 Función FieldStore. . . . . . . . . . . . 224
Sentencia Convert . . . . . . . . . . . . 183 Función FIX . . . . . . . . . . . . . . 225
Función Count . . . . . . . . . . . . . 184 Función Fmt. . . . . . . . . . . . . . 225
Función CRC32. . . . . . . . . . . . . 184 Expresión de formato. . . . . . . . . . . 226
Función de fecha . . . . . . . . . . . . 185 Sintaxis . . . . . . . . . . . . . . 226
Función DCount . . . . . . . . . . . . 185 Longitud de salida . . . . . . . . . . 226
Sentencia Deffun . . . . . . . . . . . . 186 Carácter de relleno . . . . . . . . . . 226
Sentencia Dimension . . . . . . . . . . . 187 Justificación . . . . . . . . . . . . . 226
Función Div . . . . . . . . . . . . . . 188 Formatos numérico y monetario . . . . . . 226
Función DownCase . . . . . . . . . . . 188 Salida enmascarada . . . . . . . . . . 227
Función DQuote . . . . . . . . . . . . 188 Función FmtDP. . . . . . . . . . . . . 230
DSAttachJob. . . . . . . . . . . . . . 189 Función Fold . . . . . . . . . . . . . 230
DSCheckRoutine . . . . . . . . . . . . 189 Función FoldDP . . . . . . . . . . . . 231
DSDetachJob . . . . . . . . . . . . . 190 Sentencias For...Next . . . . . . . . . . . 231
DSExecute . . . . . . . . . . . . . . 190 Sentencia Function . . . . . . . . . . . 232
DSGetCustInfo . . . . . . . . . . . . . 191 Función GetLocale. . . . . . . . . . . . 234
DSGetJobInfo . . . . . . . . . . . . . 191 Sentencia GoSub . . . . . . . . . . . . 234
DSGetJobMetaBag . . . . . . . . . . . . 194 Sentencia GoTo . . . . . . . . . . . . . 235
DSGetLinkInfo . . . . . . . . . . . . . 195 Función Iconv . . . . . . . . . . . . . 236
DSGetLinkMetaData . . . . . . . . . . . 196 Ejemplos . . . . . . . . . . . . . . 236
DSGetLogEntry. . . . . . . . . . . . . 197 Sentencias If...Else . . . . . . . . . . . . 241
DSGetLogEventIds . . . . . . . . . . . 197 Sentencias If...Then...Else . . . . . . . . . 242
DSGetLogSummary . . . . . . . . . . . 198 Sentencias If...Then . . . . . . . . . . . 243
DSGetNewestLogId . . . . . . . . . . . 199 Operador If...Then...Else . . . . . . . . . . 243
DSGetParamInfo . . . . . . . . . . . . 200 Función Index . . . . . . . . . . . . . 244
DSGetProjectInfo . . . . . . . . . . . . 202 Función InMat . . . . . . . . . . . . . 244
DSGetStageInfo. . . . . . . . . . . . . 202 Función Int . . . . . . . . . . . . . . 245
DSGetStageLinks . . . . . . . . . . . . 204 Función IsNull . . . . . . . . . . . . . 245
DSGetStagesOfType . . . . . . . . . . . 205 Función Left. . . . . . . . . . . . . . 246
DSGetStagesTypes . . . . . . . . . . . . 205 Función Len . . . . . . . . . . . . . . 246
DSGetVarInfo . . . . . . . . . . . . . 205 Función LenDP. . . . . . . . . . . . . 246
DSIPCPageProps . . . . . . . . . . . . 206 Función Ln . . . . . . . . . . . . . . 247
DSLogEvent . . . . . . . . . . . . . . 207 Sentencia LOCATE . . . . . . . . . . . 247
DSLogFatal . . . . . . . . . . . . . . 207 Sentencias Loop...Repeat. . . . . . . . . . 249
DSLogInfo . . . . . . . . . . . . . . 208 Sentencia Mat . . . . . . . . . . . . . 250
DSLogToController . . . . . . . . . . . 208 Función MatchField . . . . . . . . . . . 251
DSLogWarn . . . . . . . . . . . . . . 208 Función Mod . . . . . . . . . . . . . 252

Contenido v
Sentencia Nap . . . . . . . . . . . . . 252 MM . . . . . . . . . . . . . . . . 298
Función Neg . . . . . . . . . . . . . 253 MO. . . . . . . . . . . . . . . . . 299
Función Not . . . . . . . . . . . . . . 253 MP . . . . . . . . . . . . . . . . . 299
Sentencia Null . . . . . . . . . . . . . 253 MT . . . . . . . . . . . . . . . . . 300
Función Num . . . . . . . . . . . . . 254 MUOC . . . . . . . . . . . . . . . 301
Función Oconv . . . . . . . . . . . . . 254 MX . . . . . . . . . . . . . . . . . 301
Ejemplos . . . . . . . . . . . . . . 255 MY . . . . . . . . . . . . . . . . . 302
Sentencias On...GoSub . . . . . . . . . . 260 NL . . . . . . . . . . . . . . . . . 303
Sentencia On...GoTo . . . . . . . . . . . 261 NLS . . . . . . . . . . . . . . . . 303
Sentencia OpenSeq . . . . . . . . . . . 262 NR . . . . . . . . . . . . . . . . . 303
Operadores de coincidencia de patrón . . . . . 263 P . . . . . . . . . . . . . . . . . 304
Función Pwr . . . . . . . . . . . . . 264 R . . . . . . . . . . . . . . . . . 306
Sentencia Randomize . . . . . . . . . . . 264 S . . . . . . . . . . . . . . . . . 306
ReadSeq . . . . . . . . . . . . . . . 265 TI . . . . . . . . . . . . . . . . . 307
Función REAL . . . . . . . . . . . . . 266
Sentencia Return . . . . . . . . . . . . 266 Capítulo 8. Transformaciones y
Sentencia Return (valor) . . . . . . . . . . 267 rutinas incorporadas . . . . . . . . 309
Función Right . . . . . . . . . . . . . 267
Transformaciones incorporadas . . . . . . . 309
Función Rnd . . . . . . . . . . . . . 268
Transformaciones de serie . . . . . . . . 309
Función Seq . . . . . . . . . . . . . . 268
Transformaciones de fecha . . . . . . . . 310
SetLocale . . . . . . . . . . . . . . . 268
Transformaciones de tipo de datos . . . . . 319
Sentencia Sleep . . . . . . . . . . . . . 269
Transformaciones de gestión de claves . . . . 322
Función Soundex . . . . . . . . . . . . 270
Transformaciones de medidas: área . . . . . 322
Función Space . . . . . . . . . . . . . 270
Transformaciones de medidas: distancia . . . 323
Función Sqrt. . . . . . . . . . . . . . 271
Transformaciones de medidas: temperatura . . 324
Función SQuote . . . . . . . . . . . . 271
Transformaciones de medidas: tiempo . . . . 324
Función Status . . . . . . . . . . . . . 271
Transformaciones de medidas: volumen . . . 325
Función Str . . . . . . . . . . . . . . 272
Transformaciones de medidas: peso . . . . . 327
Sentencia Subroutine . . . . . . . . . . . 273
Transformaciones numéricas . . . . . . . 327
Función Time . . . . . . . . . . . . . 273
Transformaciones del procesador de filas . . . 328
Función TimeDate . . . . . . . . . . . . 274
Transformaciones del programa de utilidad . . 329
Funciones trigonométricas . . . . . . . . . 274
Rutinas incorporadas . . . . . . . . . . . 330
Función Trim . . . . . . . . . . . . . 276
Subrutinas anteriores y posteriores incorporadas 330
Función TrimB . . . . . . . . . . . . . 277
Funciones de transformación de ejemplo . . . 331
Función TrimF . . . . . . . . . . . . . 277
Función UniChar . . . . . . . . . . . . 277
Función UniSeq . . . . . . . . . . . . 277 Capítulo 9. Almacenamiento en la
Función UpCase . . . . . . . . . . . . 278 memoria caché de disco de la etapa
Función WEOFSeq . . . . . . . . . . . 278 Hashed File . . . . . . . . . . . . 333
Función WriteSeq . . . . . . . . . . . . 279 Funcionalidad . . . . . . . . . . . . . 333
Función WriteSeqF . . . . . . . . . . . 280 Terminología . . . . . . . . . . . . . 334
Función Xtd . . . . . . . . . . . . . . 281 Secuencias de datos múltiples . . . . . . . 336
Códigos de conversión . . . . . . . . . . 281 Directrices para elegir un tipo de memoria caché 336
D . . . . . . . . . . . . . . . . . 282 Preparación de la memoria caché privada de
G . . . . . . . . . . . . . . . . . 285 enlaces . . . . . . . . . . . . . . . 336
L . . . . . . . . . . . . . . . . . 286 Preparación para el almacenamiento en la memoria
MB . . . . . . . . . . . . . . . . . 287 caché pública de enlaces y el almacenamiento en la
MCA . . . . . . . . . . . . . . . . 288 memoria caché del sistema en las plataformas
MC/A. . . . . . . . . . . . . . . . 288 UNIX . . . . . . . . . . . . . . . . 336
MCD . . . . . . . . . . . . . . . . 288 Requisitos especiales de AIX para determinar el
MCL . . . . . . . . . . . . . . . . 289 tamaño de la memoria caché de disco . . . . 337
MCM . . . . . . . . . . . . . . . . 289 Preparación para el almacenamiento en la memoria
MC/M . . . . . . . . . . . . . . . 290 caché pública de enlaces y el almacenamiento en la
MCN . . . . . . . . . . . . . . . . 290 memoria caché del sistema en las plataformas
MC/N . . . . . . . . . . . . . . . 290 Windows . . . . . . . . . . . . . . . 338
MCP . . . . . . . . . . . . . . . . 291 Utilización de la memoria caché privada de enlaces 339
MCT . . . . . . . . . . . . . . . . 291 Utilización de la memoria caché pública de enlaces 339
MCU . . . . . . . . . . . . . . . . 292 Utilización de la memoria caché del sistema . . . 340
MCX . . . . . . . . . . . . . . . . 292 Creación de un archivo hash para el
MD. . . . . . . . . . . . . . . . . 293 almacenamiento en memoria caché del sistema . 340
ML & MR . . . . . . . . . . . . . . 296 Mandatos del motor de servidor . . . . . . 340

vi Guía del desarrollador de Server Job


Ajuste de la memoria caché pública de enlaces y la Enlaces a sitios Web no IBM . . . . . 357
memoria caché del sistema . . . . . . . . . 349
Utilización del símbolo de euro en los sistemas sin Avisos y marcas registradas . . . . . 359
soporte multilingüístico . . . . . . . . . . 350
Consideraciones sobre el rendimiento . . . . . 350
Cómo ponerse en contacto con IBM 363
Accesibilidad de los productos. . . . 353
Índice. . . . . . . . . . . . . . . 365
Acceso a la documentación del
producto . . . . . . . . . . . . . 355

Contenido vii
viii Guía del desarrollador de Server Job
Capítulo 1. Trabajos de servidor de IBM InfoSphere DataStage
Los trabajos de InfoSphere DataStage constan de etapas individuales. Cada etapa describe una base de
datos o proceso en concreto. Por ejemplo, una etapa puede extraer datos de un origen de datos, mientras
que otra puede transformarlos. Las etapas se añaden a un trabajo y se enlazan entre ellas utilizando
InfoSphere DataStage y el Diseñador de QualityStage.

Hay dos tipos de etapas:


v Etapas integradas. Se proporcionan con InfoSphere DataStage y se utilizan para extraer, agregar,
transformar y grabar datos.
v Etapas suplementarias. Etapas adicionales que pueden instalarse en InfoSphere DataStage para ejecutar
tareas especializadas a las que las etapas incorporadas no dan soporte. Por ejemplo, las etapas que se
suministran como parte de los paquetes de InfoSphere DataStage.

La paleta de herramientas del servidor organiza las etapas en los grupos siguientes:
v Base de datos. Estas etapas leen o graban los datos contenidos en una base de datos.
v Archivo. Estas etapas leen o graban los datos contenidos en un archivo o un conjunto de archivos.
v Proceso. Estas etapas ejecutan algún proceso en los datos que se pasan entre ellas.

La siguiente tabla lista los tipos de etapa disponibles y proporciona una guía rápida acerca de sus
funciones:

Tipo Etapa Función


Base de datos ODBC (consulte IBM InfoSphere DataStage Lee o graba datos en las bases de datos que dan
and QualityStage Connectivity Guide for soporte a la API estándar Open Database
ODBC) Connectivity.
Base de datos Oracle 7 Load (consulte IBM InfoSphere Genera archivos de control y de datos para la carga
DataStage and QualityStage Connectivity Guide masiva de datos en una sola tabla en una base de
for Oracle Databases) datos Oracle.
Base de datos Sybase BCP Load (consulte IBM InfoSphere Utiliza el programa de utilidad BCP (Programa de
DataStage and QualityStage Connectivity Guide copia en masa) para copiar programas en masa a una
for Sybase Databases y IBM InfoSphere única tabla de una base de datos Microsoft® SQL
DataStage and QualityStage Connectivity Guide Server o Sybase.
for Microsoft SQL Server and OLE DB Data)
Base de datos UniData (consulte IBM InfoSphere DataStage Lee o graba datos en las bases de datos UniData.
and QualityStage Connectivity Guide for IBM
UniVerse and UniData)
Base de datos UniData 6 (consulte IBM InfoSphere Lee o graba datos en las bases de datos UniData 6.
DataStage and QualityStage Connectivity Guide
for IBM UniVerse and UniData)
Base de datos UniVerse (consulte IBM InfoSphere DataStage Lee o graba datos en las bases de datos UniVerse.
and QualityStage Connectivity Guide for IBM
UniVerse and UniData)
Archivo Complex Flat File Lee datos de una estructura de datos de archivo sin
formato complejo.
Archivo Folder Lee o graba datos como archivos en un directorio
ubicado en el servidor de InfoSphere DataStage.
Archivo Hashed File Lee o graba datos en un archivo hash.
Archivo Sequential File Lee o graba datos en un archivo secuencial.

© Copyright IBM Corp. 1997, 2010 1


Tipo Etapa Función
Proceso Aggregator Agrupa los datos entrantes, calcula los totales y otras
funciones de resumen, y pasa los datos a otra etapa
del trabajo.
Proceso Etapa Command Ejecuta mandatos, programas y trabajos externos.
Proceso FTP Plug-in Lee o graba datos en archivos secuenciales remotos
utilizando FTP.
Proceso InterProcess Proporciona un canal de comunicación entre dos
procesos de InfoSphere DataStage que se ejecutan
simultáneamente en el mismo trabajo.
Proceso Link Collector Combina datos de diversos enlaces de entrada en un
solo enlace de salida.
Proceso Link Partitioner Particiona los datos de un enlace de entrada
individual en varios enlaces de salida.
Proceso Merge Combina dos archivos secuenciales en uno o varios
enlaces de salida.
Proceso Pivot Correlaciona conjuntos de columnas en una tabla de
entrada con una única columna de una tabla de
salida.
Proceso Row Merger Fusiona columnas de entrada en una serie y graba la
serie en una columna de salida.
Proceso Row Splitter Reparte los datos de una serie de entrada en varias
columnas de salida.
Proceso Sort Ordena los datos entrantes en valores de columna
ascendentes o descendentes y los pasa a otra etapa
del trabajo.
Proceso Transformer Filtra y transforma los datos entrantes, y los genera
como salida en otra etapa del trabajo.

Puede encontrar información general sobre cómo construir el trabajo y definir los metadatos necesarios
utilizando el cliente del Diseñador en el manual IBM InfoSphere DataStage and QualityStage Designer Client
Guide. Este manual describe los editores de etapas individuales que puede utilizar para desarrollar
trabajos de servidor. Algunas de estas etapas están incorporadas y otras son suplementarias.

Etapas suplementarias
Hay un gran número de etapas suplementarias especializadas disponibles para InfoSphere DataStage.
Pueden instalarse cuando se instala inicialmente IBM® InfoSphere DataStage o más adelante en cualquier
momento.

Las etapas de conectividad se utilizan para conectarse a bases de datos específicas. Aparecen en la
categoría Base de datos en la paleta de herramientas. Se describen en sus guías de consulta de
conectividad respectivas.

Las demás etapas suplementarias son etapas activas que aparecen en la categoría Proceso en la paleta de
herramientas. Todas se describen en esta guía.

Paquetes de IBM InfoSphere DataStage


Hay varios paquetes disponibles con InfoSphere DataStage que afectan a los trabajos del servidor; cada
uno proporciona un conjunto de etapas suplementarias y una funcionalidad asociada.

2 Guía del desarrollador de Server Job


v Paquete XML. Este paquete se proporciona con InfoSphere DataStage. Proporciona las herramientas
que permiten convertir datos entre documentos XML y tablas de datos. Las características y la
funcionalidad se describen detalladamente en IBM InfoSphere DataStage XML Pack Guide.
v Paquete Java™. Este paquete se proporciona con InfoSphere DataStage. Está formado por dos etapas de
plantillas y una API que permite implementar etapas de InfoSphere DataStage en Java. Se describe en
IBM InfoSphere DataStage and QualityStage Java Pack Guide.
v Paquete de servicios web. Hay dos versiones del paquete de servicios web: una permite acceder a los
servicios web a través de los trabajos de InfoSphere DataStage y la otra también permite publicar
trabajos de InfoSphere DataStage como servicios web. Ambos paquetes son complementos de
InfoSphere DataStage. Los recursos de los servicios web se describen en IBM InfoSphere DataStage Web
Services Pack Guide.

Recursos personalizados
IBM InfoSphere DataStage proporciona un gran número de transformaciones y rutinas incorporadas para
su uso en las etapas Transformer en los trabajos de servidor. Se describen en Capítulo 8,
“Transformaciones y rutinas incorporadas”, en la página 309. Si tiene requisitos específicos de rutinas y
transformaciones personalizadas, InfoSphere DataStage dispone de un potente lenguaje de programación
de procedimientos denominado BASIC que permite definir sus propios componentes. Puede encontrar
material de referencia de BASIC en Capítulo 7, “Programación BASIC”, en la página 147. Una vez
desarrollados estos componentes, pueden reutilizarse en otros trabajos de InfoSphere DataStage.

Después del desarrollo


Una vez completado el desarrollo del trabajo de servidor de IBM InfoSphere DataStage, deberá
compilarlo y probarlo antes de publicarlo para que esté disponible para su ejecución.

InfoSphere DataStage tiene un depurador que permite eliminar los problemas con los trabajos de servidor
que ha diseñado. El depurador se describe en Capítulo 5, “Depuración y compilación de un trabajo”, en
la página 127.

Si está satisfecho con el diseño del trabajo, puede validarlo y ejecutarlo utilizando el Director de
InfoSphere DataStage y QualityStage. También puede ejecutar trabajos desde otro programa o desde la
línea de mandatos utilizando los recursos que se proporcionan en el InfoSphere DataStage Development
Kit, que se describe en InfoSphere DataStage Development Kit (interfaces de control de trabajo).

Capítulo 1. Trabajos de servidor de IBM InfoSphere DataStage 3


4 Guía del desarrollador de Server Job
Capítulo 2. Optimización del rendimiento en los trabajos de
servidor
En estos temas se describen algunas técnicas de diseño para obtener el máximo rendimiento posible de
los trabajos de IBM InfoSphere DataStage que diseña.

Muchos de estos temas describen el diseño de un trabajo que se va a ejecutar en un sistema


multiprocesador, pero también hay sugerencias para los trabajos que se ejecutan en sistemas de un solo
procesador.

Se recomienda leer estos temas antes de diseñar nuevos trabajos pero, si lo desea, también puede revisitar
diseños de trabajos anteriores basándose en lo que lea aquí.

Las sugerencias de proceso paralelo están especialmente indicadas para los sistemas UNIX® o Windows®
de multiprocesador simétrico (SMP) de hasta 64 procesadores. Para los sistemas UNIX MPP y en clúster
(y los sistemas Windows o UNIX SMP) hay disponibles trabajos paralelos. Para obtener detalles, consulte
IBM InfoSphere DataStage and QualityStage Parallel Job Developer's Guide.

Trabajos y procesos de IBM InfoSphere DataStage


Cuando diseña un trabajo, aparece en términos de etapas y enlaces. Cuando se compila, el motor de
servidor lo ve el términos de los procesos que se ejecutan posteriormente en el servidor.

¿Cómo define el motor de servidor un proceso? Aquí es donde es importante la distinción entre etapas
activas y pasivas. Las etapas activas como, por ejemplo, Transformer y Aggregator, ejecutan tareas de
proceso, mientras que las etapas pasivas como, por ejemplo, Sequential File y Hashed File, leen o graban
orígenes de datos y proporcionar servicios a las etapas activas. En su forma más simple, las etapas activas
se convierten en procesos. No obstante, la situación se complica cuando conecta etapas activas entre ellas
y etapas pasivas entre ellas.

¿Qué ocurre cuando tiene un trabajo que enlaza dos etapas pasivas? Obviamente, se produce algún
proceso. De modo no visible, InfoSphere DataStage inserta una etapa Transformer reducida entre las
etapas pasivas que pasa datos directamente de una etapa a otra, y se convierte en un proceso cuando se
ejecuta el trabajo.

¿Qué ocurre cuando tiene un trabajo que enlaza dos o más etapas activas? De forma predeterminada,
todas se ejecutarán en un solo proceso. Las etapas pasivas marcan los límites del proceso y todas las
etapas activas adyacentes entre ellas se ejecutan en un solo proceso.

Los siguientes diagramas ilustran cómo se convierten los trabajos en procesos.

Figura 1. Proceso individual

© Copyright IBM Corp. 1997, 2010 5


Figura 2. Un proceso individual, con una etapa pasiva enlazada a una etapa pasiva, y una etapa Transformer invisible
insertada en el tiempo de compilación

Figura 3. Proceso individual

Figura 4. Dos procesos

Sistemas de un procesador o de múltiples procesadores


El comportamiento cuando se compilan trabajos de IBM InfoSphere DataStage es ejecutar todas las etapas
activas adyacentes en un solo proceso. Esto tiene sentido cuando se ejecuta el trabajo en un sistema de un
procesador. Cuando se ejecuta en un sistema de múltiples procesadores, es mejor ejecutar cada etapa
activa en un proceso diferente, para que los procesos puedan distribuirse entre los procesadores
disponibles y ejecutarse en paralelo. Estas mejoras en los trabajos de servidor del Release 6 de InfoSphere
DataStage permiten estipular en el diseño que los trabajos se compilen de esta forman. Hay dos formas
de hacerlo:
v Explícitamente, insertando etapas InterProcess (IPC) entre las etapas activas conectadas.
v Implícitamente, activando el almacenamiento intermedio de filas entre procesos, ya sea en todo el
proyecto (utilizando el Administrador de InfoSphere DataStage y QualityStage) o en trabajos
individuales (en el recuadro de diálogo Propiedades del trabajo)

El recurso IPC también puede utilizarse para producir varios procesos en los que las etapas pasivas están
conectadas directamente. Esto significa que una operación que lee en un origen de datos y graba en otro
puede dividirse en un proceso de lectura y un proceso de grabación para aprovechar los sistemas de
múltiples procesadores.

6 Guía del desarrollador de Server Job


El diagrama siguiente ilustra el posible comportamiento de las etapas activas:

Figura 5. Comportamiento predeterminado

Figura 6. Imposición implícita de varios procesos mediante el almacenamiento intermedio de filas entre procesos

Capítulo 2. Optimización del rendimiento en los trabajos de servidor 7


Figura 7. Utilización de las etapas de IPC para imponer varios procesos

El diagrama siguiente ilustra el posible comportamiento de las etapas pasivas:

8 Guía del desarrollador de Server Job


Figura 8. Comportamiento predeterminado con la etapa Transformer invisible insertada en el tiempo de compilación

Figura 9. Utilización de la etapa IPC para imponer varios procesos, con las etapas Transformer invisibles insertadas
en el tiempo de compilación

Particionamiento y recopilación
Con la introducción del soporte de multiprocesador mejorado en el Release 6 y posteriores, es posible
mejorar aún más el rendimiento de los trabajos del servidor mediante el particionamiento de datos.

La etapa Link Partitioner permite particionar los datos que está leyendo, de forma que pueden procesarse
en procesadores individuales que se ejecutan en varios procesadores. La etapa Link Collector permite
recopilar y unir datos particionados para grabarlos en un destino de datos individual.

El siguiente diagrama ilustra cómo puede utilizar las etapas Link Partitioner y Link Collector en un
trabajo. Ambas etapas están activas, y debe activar el almacenamiento intermedio de filas entre procesos a
nivel de proyecto o de trabajo para poder implementar los límites de proceso.

Figura 10. Utilización de las etapas Link Partitioner y Link Collector

Capítulo 2. Optimización del rendimiento en los trabajos de servidor 9


Diagnóstico de limitaciones de trabajo
Después de diseñar un trabajo, si lo desea, puede ejecutar algunos diagnósticos para ver si el rendimiento
se puede mejorar.

Dos factores afectan al rendimiento de un trabajo:


v Puede tener una limitación de CPU
v Puede tener una limitación de E/S

Puede obtener estadísticas detalladas sobre el rendimiento del trabajo para identificar aquellas partes de
un trabajo que limitan el rendimiento y realizar cambios para aumentarlo.

La colección de estadísticas de rendimiento puede activarse y desactivarse para cada etapa activa en un
trabajo de IBM InfoSphere DataStage. Para recopilar estadísticas de rendimiento:
1. Abra la ventana Opciones de ejecución del trabajo:
v En el cliente del Diseñador, pulse el botón de la barra de herramientas Ejecutar.
v En el cliente del Director, seleccione el trabajo y pulse el botón de la barra de herramientas Ejecutar
ahora.
2. Pulse el separador Rastreo.
3. Seleccione las etapas que desee supervisar en la lista Nombres de etapa. Utilice mayúscula-pulsar
para seleccionar varias etapas activas.
4. Seleccione el recuadro de selección Estadísticas de rendimiento.
5. Pulse Ejecutar.

Si el rastreo de rendimiento está activado, se genera inmediatamente una entrada especial después del
mensaje de terminación de la etapa en el registro de trabajo. La entrada de registro es parecida a la
siguiente:

job.stage.DSD.StageRun Performance statistics(...)

Para ver las estadísticas de forma tabular, pulse con el botón derecho del ratón sobre la entrada de
registro y seleccione Detalle. Puede copiar las estadísticas en la ventana Detalle del suceso y pegarlas en
una hoja de cálculo para que pueda continuar el análisis.

El siguiente diagrama muestra el trabajo desde el que se han recopilado las estadísticas. La etapa
resaltada es la que tiene activado Estadísticas de rendimiento:

10 Guía del desarrollador de Server Job


Figura 11. Trabajo de ejemplo para las estadísticas de rendimiento

La tabla siguiente permite interpretar las estadísticas, que se han pegado en una hoja de cálculo, como se
muestra a continuación:
Tabla 1. Estadísticas de rendimiento
Enlace en el diseño de trabajo Acción Fila en la hoja de cálculo
DSLink5 Leer archivo secuencial 2
DSLink6 Derivación de transformador 5
Grabación entre procesos (de una 3
etapa Transformer a una etapa
Transformer)
DSLink8 Grabar archivo secuencial 3
DSLink7 Derivación de transformador 6
Grabar archivo secuencial 7

Figura 12. Hoja de cálculo de estadísticas de rendimiento

Capítulo 2. Optimización del rendimiento en los trabajos de servidor 11


Figura 13. Gráfico de la hoja de cálculo

El mensaje de registro de terminación de etapa notifica el tiempo transcurrido y la CPU real utilizada por
la etapa, mientras que la vista Supervisor en una etapa completada muestra el porcentaje promedio de
CPU utilizada por la etapa.

Interpretación de las estadísticas de rendimiento


Las estadísticas de rendimiento están relacionadas con el ciclo de proceso por fila de una etapa activa, y
de cada uno de sus enlaces de entrada y salida. La información que se muestra es:
v Porcentaje. El porcentaje del tiempo de ejecución general que utiliza esta parte del proceso.
v Recuento. El número de veces que se ha ejecutado esta parte del proceso.
v Mínimo. El tiempo mínimo transcurrido en microsegundos que ha utilizado esta parte del proceso
para algunas de las filas procesadas.
v Promedio. El tiempo promedio transcurrido en microsegundos que ha utilizado esta parte del proceso
para las filas procesadas.

Debe tener cuidado cuando interprete estas cifras. Por ejemplo, cuando se utilizan enlaces de etapa activa
en curso a etapa activa, la columna de porcentaje no sumará el 100%. Asimismo, tenga en cuenta que, en
estas circunstancias, si recopila estadísticas para la primera etapa activa, el coste total de la etapa activa
en sentido descendente se incluye en el enlace de activa a activa (como se muestra en el diagrama de
ejemplo). Esta distorsión permanece incluso cuando ejecuta las etapas activas en distintos procesos (con el
almacenamiento intermedio de filas entre procesos habilitado), a menos que se ejecute realmente en un
sistema de multiprocesador.

Si la cifra de Mínimo y la cifra de Promedio están muy próximas, esto indica que el proceso tiene una
limitación de CPU. De lo contrario, los trabajos con un mal rendimiento pueden tener una limitación de
E/S.

12 Guía del desarrollador de Server Job


Si la ventana del supervisor de trabajos muestra que una etapa activa está utilizando casi el 100% del
tiempo de CPU, esto también indica que el trabajo tiene una limitación de CPU.

Mejora del rendimiento


En las siguientes secciones se proporcionan algunos consejos sobre cómo mejorar el rendimiento de los
diseños de trabajo.

Trabajos de CPU limitada: sistemas de un solo procesador


Puede mejorar el rendimiento de la mayoría de trabajos de IBM InfoSphere DataStage activando el
almacenamiento intermedio de filas en curso y recompilando el trabajo. Esto permite que las etapas
activas conectadas pasen datos a través de los almacenamientos intermedios en lugar de fila por fila.

Puede activar el almacenamiento intermedio de filas en curso de todo el proyecto utilizando el cliente del
Administrador. O bien, puede activarlo para trabajos individuales utilizando el separador Rendimiento
en el recuadro de diálogo Propiedades del trabajo.

Nota: No puede utilizar el almacenamiento intermedio de filas en curso si el trabajo utiliza bloques
COMMON en funciones de transformación para pasar datos entre etapas. Se recomienda rediseñar el
trabajo para que utilice el almacenamiento intermedio de filas en lugar de los bloques COMMON.

Trabajos de CPU limitada: sistemas de multiprocesador


Para mejorar el rendimiento de la mayoría de trabajos de IBM InfoSphere DataStage, active el
almacenamiento intermedio de filas entre procesos y vuelva a compilar el trabajo. Esto permite que el
trabajo se ejecute utilizando un proceso distinto para cada etapa activa; estos se ejecutarán
simultáneamente en procesadores aparte.

Puede activar el almacenamiento intermedio de filas entre procesos de todo el proyecto utilizando el
cliente del Administrador. O bien, puede activarlo para trabajos individuales utilizando el separador
Rendimiento en el recuadro de diálogo Propiedades del trabajo.

Nota: No puede utilizar el almacenamiento intermedio de filas entre procesos si el trabajo utiliza bloques
COMMON en funciones de transformación para pasar datos entre etapas. Se recomienda rediseñar el
trabajo para que utilice el almacenamiento intermedio de filas en lugar de los bloques COMMON.

Si tiene un etapa activa que utiliza casi el 100% de la CPU, puede mejorar el rendimiento ejecutando
varias copias paralelas de un proceso de etapa. Para ello, duplique las etapas con un uso intensivo de la
CPU (la forma más rápida de hacerlo es utilizar un contenedor compartido) e inserte una etapa Link
Partitioner y Link Collector antes y después de las etapas duplicadas. Las siguientes capturas de pantalla
muestran un ejemplo de cómo puede hacerlo.

Capítulo 2. Optimización del rendimiento en los trabajos de servidor 13


Figura 14. Trabajo de ejemplo

Figura 15. Trabajo de ejemplo

14 Guía del desarrollador de Server Job


Trabajos limitados de E/S
Aunque es difícil diagnosticar trabajos limitados de E/S y mejorarlos, hay algunos pasos básicos que
puede realizar:
v Si divide los procesos del diseño de trabajo grabando los datos en un archivo secuencial para volverlos
a leer, puede utilizar una etapa InterProcess (IPC) en lugar de la etapa Sequential File. De esta forma,
el proceso se divide y se reduce la E/S y el tiempo transcurrido, ya que el proceso de lectura puede
empezar a leer datos tan pronto como estén disponibles, en lugar de tener que esperar a que finalice el
proceso de grabación.
v Si se está utilizando una etapa Sequential File intermedia para descargar un archivo para que se pueda
introducir en una herramienta externa, por ejemplo, un cargador masivo o un clasificador externo,
puede invocar la herramienta como un mandato de filtro en la etapa Sequential File y pasar los datos
directamente a la herramienta (consulte “Etapas Sequential File” en la página 44).
v Si procesa un conjunto de datos de gran tamaño, puede utilizar la etapa Link Partitioner para dividirlo
en varias partes sin cargar los campos intermedios.

Si un trabajo todavía parece que tiene una limitación de E/S después de realizar uno o varios de los
pasos anteriores, puede utilizar las estadísticas de rendimiento para determinar qué etapas individuales
tienen una limitación de E/S:
1. Ejecute el trabajo con un conjunto de datos considerable y con el rastreo de rendimiento habilitado
para cada una de las etapas activas.
2. Analice los resultados y compárelos para cada etapa. En concreto, busque las etapas activas que
utilicen menos CPU que otras.

Una vez identificada la etapa, las acciones a realizar dependerán de los tipos de etapa pasiva implicados
en el proceso. Un archivo hash mal diseñado puede tener un efecto concreto en el rendimiento (para
obtener ayuda con el diseño del archivo hash, consulte “Diseño de archivo hash”). Para todos los tipos de
etapa, se recomienda:
v redistribuir los archivos en las unidades de disco
v cambiar la memoria o el hardware de disco
v reconfigurar las bases de datos
v reconfigurar el sistema operativo

Diseño de archivo hash


Los archivos hash mal diseñados pueden hacer que disminuya el rendimiento. Los archivos hash se
utilizan normalmente para proporcionar una tabla de referencia basada en una clave individual. Realizar
búsquedas puede ser rápido en un archivo bien diseñado, pero lento en uno mal diseñado. Otro uso es
alojar tablas de dimensiones de crecimiento lento en un diseño de almacén de esquema de estrella. De
nuevo, un archivo bien diseñado hará que la extracción de datos de los archivos de dimensión sea mucho
más rápida.

Operación básica del archivo hash


Si está familiarizado con los principios de los archivos hash, puede omitir esta sección.

Los archivos hash funcionan distribuyendo los datos entre varios grupos de un archivo. Esto acelera el
acceso a los datos, ya que puede ir a un grupo específico antes de buscar secuencialmente en los datos
que contiene una determinada fila de datos. El número de grupos que tiene, el tamaño de los grupos y el
algoritmo utilizado para determinar la distribución se deciden según la naturaleza de los datos que está
almacenando en el archivo.

Se ejecuta hash en las filas de datos (es decir, se asignan a los grupos) en un campo de clave. El
algoritmo hash convierte de forma eficaz y repetible una serie en un número del rango del 1 al n, donde
n es el módulo de archivo. Esto proporciona el grupo donde se grabarán las filas. El campo de clave

Capítulo 2. Optimización del rendimiento en los trabajos de servidor 15


puede ser de cualquier tipo; por ejemplo, puede contener un nombre, un número de serie, una fecha, etc.
El tipo de datos en la clave determina el algoritmo hash óptimo que se puede utilizar al grabar datos;
este algoritmo también se utiliza para ubicar los datos cuando se vuelven a leer. El objetivo es utilizar un
algoritmo que distribuya los datos uniformemente en el archivo.

El otro objetivo es distribuir los datos lo más uniformemente posible entre varios grupos. En términos de
rendimiento, es especialmente importante que los grupos no estén superpoblados y no que se tengan que
ampliar a grupos de desbordamiento, ya que esto dificulta el acceso a los datos. Asimismo, es importante
tener en cuenta el tamaño de los registros (las filas) cuando se diseña el archivo, ya que es preferible que
se ajusten equitativamente a los grupos y no generen desbordamientos.

Existe una relación de compensación entre el tamaño del grupo y el número de grupos. En la mayoría de
operaciones, un buen diseño tiene muchos grupos de pequeño tamaño (por ejemplo, cuatro registros por
grupo). La búsqueda secuencial de la fila de datos necesaria no será nunca tan larga. No obstante, puede
haber casos en los que el diseño funcionará mejor con un número pequeño de grupos grandes.

Archivos hash de IBM InfoSphere DataStage


Hay dos tipos básicos de archivos hash que puede utilizar en estas circunstancias: estático (hash) y
dinámico.
v Archivos estáticos. Son los que ofrecen el máximo rendimiento si están bien diseñados. No obstante, si
están mal diseñados, es probable que ofrezcan el mínimo rendimiento. Los archivos estáticos permiten
decidir de qué forma se ejecuta hash en el archivo. Puede especificar:
– Algoritmo hash. La forma en que se asignan las filas de datos a los distintos grupos, dependiendo
del valor de sus campos de clave.
– Módulo. El número de grupos que tiene el archivo.
– Separación. El tamaño del grupo como el número de bloques de 512 bytes.
En general, deberá utilizar un archivo estático si conoce el tamaño y la forma de los datos que se
van a almacenar en el archivo hash. Puede reestructurar un archivo hash estático entre ejecuciones
de trabajo si desea ajustarlo. Para ello, utilice el mandato RESIZE, que puede emitirse mediante la
característica Mandato del cliente del Administrador. El mandato para cambiar el tamaño de un
archivo estático es:
RESIZE nombre_archivo [tipo] [módulo]
[separación]
Donde:
nombre_archivo es el nombre del archivo al que se cambia el tamaño.
tipo especifica el algoritmo de hash que se utiliza (consulte “Diseño de archivo hash” en la página
15)
módulo especifica el número de grupos en el rango de 1 a 8.388.608.
separación especifica el tamaño de los grupos en bloques de 512 bytes y está en el rango de 1 a
8.388.608.
v Archivos dinámicos. Hay archivos hash que cambian dinámicamente cuando se graban datos en ellos
con el tiempo. Esto puede sonar ideal, pero si se deja un crecer orgánicamente archivo dinámico,
deberá realizar varias opciones de división en grupos mientras se graban los datos en él, lo que puede
consumir mucho tiempo y reducir el rendimiento si tiene un archivo con un rápido crecimiento. Los
archivos dinámicos no funcionan tan bien como un archivo estático bien diseñado, pero funcionan
mejor que uno mal diseñado. Cuando se crea un archivo dinámico, puede especificar la siguiente
información (aunque todas estas opciones tienen valores predeterminados):
– Módulo mínimo. El número mínimo de grupos que tiene el archivo. El valor predeterminado es 1.
– Tamaño del grupo. El grupo puede especificarse como 1 (2048 bytes) o 2 (4096 bytes). El valor
predeterminado es 1.
– Carga partida. Especifica cuánto puede cargarse un archivo (en porcentaje) antes de partirse. El
carga del archivo se calcula de la manera siguiente:

16 Guía del desarrollador de Server Job


Carga
del archivo = ((total de bytes de datos) / (total de bytes de archivo)) * 100
La carga partida predeterminada es 80.
– Carga con fusión. Especifica cómo puede ser de pequeña la carga de un archivo (en porcentaje)
antes de que se parta el archivo. La carga del archivo se calcula como la carga partida. El valor
predeterminado es 50.
– Registro grande. Especifica el número de bytes que puede contener un registro (fila). Un registro de
gran tamaño siempre se coloca en un grupo de desbordamiento.
– Algoritmo hash. Elija GENERAL para la mayoría de tipos de campo de clave y SEQ.NUM para las
claves que son una serie de números secuencial.
– Tamaño de registro. De manera opcional, utilice esta opción para especificar el tamaño de registro
medio en bytes. A continuación, puede utilizarse para calcular el tamaño de grupo y el tamaño de
registro grande.
Puede cambiar manualmente el tamaño de un archivo dinámico utilizando el mandato RESIZE, que
se emite mediante la característica Mandato del cliente del Administrador. El mandato para cambiar
el tamaño de un archivo dinámico es:
RESIZE
nombre_archivo [parámetro] [valor]
donde:
nombre_archivo es el nombre del archivo al que se cambia el tamaño.
parámetro es uno de los siguientes y se corresponde con los argumentos descritos anteriormente
para crear un archivo dinámico:
GENERAL | SEQ.NUM
MINIMUM.MODULUS n
SPLIT.LOAD n
MERGE.LOAD n
LARGE.RECORD n
RECORD.SIZE n

De forma predeterminada, InfoSphere DataStage creará un archivo dinámico con los valores
predeterminados descritos anteriormente. No obstante, puede utilizar las opciones de Crear archivo en la
página Entradas de la etapa Hashed File para especificar el tipo de archivo y sus valores.

Esto ofrece la opción de varios tipos de archivos hash (estáticos) y un tipo de archivo dinámico. Los
distintos tipos de archivos estáticos reflejan los distintos algoritmos hash que utilizan. Elija un tipo según
su tipo de clave, tal como se muestra a continuación:
Tipo Adecuado para las claves que se forman de la siguiente manera:
2 Numérica, significativa en los últimos 8 caracteres
3 Mayormente numérica con delimitadores, significativa en los últimos 8 caracteres
4 Alfabética, significativa en los últimos 5 caracteres
5 Cualquier clave ASCII, significativa en los últimos 4 caracteres
6 Numérica, significativa en los primeros 8 caracteres
7 Mayormente numérica con delimitadores, significativa en los primeros 8 caracteres
8 Alfabética, significativa en los primeros 5 caracteres
9 Cualquier clave ASCII, significativa en los primeros 4 caracteres
10 Numérica, significativa en los últimos 20 caracteres
11 Mayormente numérica con delimitadores, significativa en los últimos 20 caracteres
12 Alfabética, significativa en los últimos 16 caracteres

Capítulo 2. Optimización del rendimiento en los trabajos de servidor 17


13 Cualquier clave ASCII, significativa en los últimos 16 caracteres
14 La clave numérica completa es significativa
15 Mayormente numérica con delimitadores, la clave completa es significativa
16 La clave alfabética completa es significativa
17 Cualquier clave ASCII completa es significativa
18 Cualquier clave de caracteres completa es significativa

Mejoras operativas
Puede realizar varios pasos en el diseño del trabajo para acelerar las operaciones que leen y graban
archivos hash.
v Precarga. Puede acelerar las operaciones de lectura de los enlaces de referencia si precarga un archivo
hash en la memoria. Puede especificarlo en la página Salidas de la etapa Hashed File.
v Memoria caché de grabación. Puede especificar una memoria caché para las operaciones de grabación
de forma que los datos se graben en ella y se desechen en el disco. Esto garantiza que los archivos
hash se graben en el disco en el orden del grupo, en lugar del orden en el que se graban las filas
individuales (que por su naturaleza necesitarán un acceso de disco aleatorio más lento). Si el
almacenamiento en la memoria caché del servidor está habilitado, puede especificar el tipo de
almacenamiento en la memoria caché de grabación cuando cree el archivo has, y el archivo siempre
utilizará el tipo especificado de memoria caché de grabación. De lo contrario, puede activar la memoria
caché de grabación a nivel de etapa en la página Salidas de la etapa Hashed File.
v Preasignación. Si utiliza archivos dinámicos, puede acelerar la carga del archivo realizando algunos
cálculos preliminares y especificar el módulo mínimo según corresponda. Esto mejora
significativamente la operación al recortar o eliminar las operaciones de división. Puede calcular el
módulo mínimo de la siguiente manera:
módulo mínimo = tamaño de datos estimado/(tamaño de grupo *
2048)
Una vez calculado el módulo mínimo, puede especificarlo para crear un archivo (utilizando la
característica Crear archivo del recuadro de diálogo Etapa Hashed File; consulte “Definición de datos
de entrada de Hashed File” en la página 41) o cambiar el tamaño de un archivo existente (utilizando el
mandato RESIZE que se describe en “Archivos hash de IBM InfoSphere DataStage” en la página 16).
v Cálculo del módulo de un archivo estático. Puede calcular el módulo necesario para un archivo
estático utilizando un método parecido al que se ha descrito anteriormente para calcular un módulo de
preasignación para los archivos dinámicos:
módulo = tamaño de datos estimado/(separación * 512)
Una vez calculado el módulo, puede especificarlo para crear un archivo (utilizando la característica
Crear archivo del recuadro de diálogo Etapa Hashed File; consulte “Definición de datos de entrada de
Hashed File” en la página 41) o cambiar el tamaño de un archivo existente (utilizando el mandato
RESIZE que se describe en “Archivos hash de IBM InfoSphere DataStage” en la página 16).

18 Guía del desarrollador de Server Job


Capítulo 3. Trabajos de servidor y soporte multilingüístico
Estos temas proporcionan detalles acerca del soporte multilingüístico en trabajos de servidor de IBM
InfoSphere DataStage. Incluye:
v Correlaciones y entornos locales disponibles en los trabajos de servidor
v Carga de correlaciones y de entornos locales
v Consideraciones sobre los datos de carácter en los trabajos de servidor
v Cómo utilizar las correlaciones y los entornos locales en los trabajos de servidor
v Creación de nuevas correlaciones para los trabajos de servidor
v Creación de nuevos entornos locales para los trabajos de servidor

Cómo funciona la modalidad de soporte multilingüístico


El soporte multilingüístico funciona con dos tipos de juegos de caracteres:
v El juego de caracteres interno del soporte multilingüístico
v Juegos de caracteres externos que cubren los distintos idiomas del mundo

En modalidad de soporte multilingüístico, InfoSphere DataStage correlaciona entre los dos juegos de
caracteres, si es necesario.

El mecanismo para manejar el soporte multilingüístico varía para los trabajos paralelos y los trabajos de
servidor. Cada uno utiliza un juego de caracteres interno distinto, de manera que utilizan un conjunto
distinto de correlaciones para la conversión de datos. Tenga en cuenta que son algunos tipos de series (es
decir, caracteres) que necesitan correlación; los tipos de datos puramente numéricos no la requieren
nunca.

Los trabajos paralelos y de servidor utilizan también entornos locales distintos.

Juegos de caracteres internos


El juego de caracteres interno puede representar, como mínimo, 64.000 caracteres. Cada carácter del juego
de caracteres interno tiene un punto de código exclusivo. Este es un número que, por convención, se
representa en formato hexadecimal. Puede utilizar este número para representar el carácter en programas.
InfoSphere DataStage almacena fácilmente varios idiomas.

El juego de caracteres interno del soporte multilingüístico forma el estándar Unicode. El consorcio de
Unicode especifica varias formas de representar puntos de código, conocidas como Formatos de
transformación de Unicode (UTF). Los trabajos de servidor utilizan UTF-8, y los trabajos paralelos,
UTF-16.

Dado que los dos tipos de trabajo utilizan distintos juegos de caracteres internos, se facilita un juego
distinto de correlaciones para la conversión a y de cada uno de ellos (aunque para los trabajos paralelos
se facilitan equivalentes de las correlaciones de trabajos de servidor que se utilizan comúnmente).

Para obtener más información sobre Unicode, consulte la página Web a nivel mundial del Consorcio de
Unicode en http://www.unicode.org.

Correlación
Cuando debe transformar o transferir datos, el soporte multilingüístico correlaciona los datos en o de el
juego de caracteres externo que desee utilizar. El soporte multilingüístico incluye tablas de correlación

© Copyright IBM Corp. 1997, 2010 19


para muchos de los juegos de caracteres externos que se utilizan en el mundo (consulte la lista de IBM
InfoSphere DataStage and QualityStage Globalization Guide). Puede especificar correlaciones a distintos
niveles dentro de InfoSphere DataStage:
v Un valor predeterminado de todo el proyecto. En el cliente del Administrador de InfoSphere DataStage
and QualityStage especifique una correlación predeterminada para todos los trabajos de servidor de un
proyecto, y una correlación predeterminada para todos los trabajos paralelos de un proyecto.
v Un valor predeterminado de trabajo. En el cliente del Diseñador de InfoSphere DataStage and
QualityStage puede especificar una correlación predeterminada utilizada por un trabajo concreto que
sobrescribe el valor predeterminado de proyecto.
v Una correlación de etapa. Algunas etapas paralelas y de servidor permiten especificar que utilizan una
correlación determinada. Esto sustituye el valor predeterminado del proyecto y del trabajo.
v Una correlación de columna. Algunas etapas paralelas y de servidor soportan la correlación por
columna. Ello le permite especificar una correlación concreta para determinadas columnas de datos.
Esto sustituye el valor predeterminado de proyecto, el valor predeterminado de trabajo y las
correlaciones de etapa.

Si los archivos incluyen caracteres ASCII de 7 bits, es necesario que no se correlacionen.

Entornos locales
Un entorno local de soporte multilingüístico de InfoSphere DataStage es un conjunto de convenciones
nacionales. Un entorno local se ve como una entidad separada de un juego de caracteres. Debe tener en
cuenta el idioma, el juego de caracteres, y las convenciones para el formateo de los datos que no o varios
grupos de personas utilizan. Defina el juego de caracteres por separado, aunque para que las
convenciones nacionales funcionen correctamente, debe utilizar también los juegos de caracteres
adecuados. Por ejemplo, tanto Venezuela como Ecuador utilizan el español como idioma, pero tienen
convenciones de formateo de datos distintas.

Los entornos locales no respetan los límites nacionales. Un país puede utilizar varios entornos locales, por
ejemplo, Canadá utiliza dos y Bélgica utiliza tres. Varios países pueden utilizar un entorno local, por
ejemplo, una empresa multinacional podría definir un entorno local a nivel mundial para utilizarlo en
todas sus oficinas. Consulte IBM InfoSphere DataStage and QualityStage Globalization Guide para obtener
una lista de todos los entornos locales facilitados con InfoSphere DataStage y los territorios e idiomas
relacionados.

Los trabajos de servidor le permiten elegir entornos locales de manera individual para diferentes aspectos
de las convenciones nacionales:
v Formato para horas y fechas
v Formato para visualizar números
v Visualización de valores monetarios
v Si un carácter es alfabético, numérico, si no puede imprimirse, etc.
v Orden en que deben ordenarse los caracteres (clasificación)

Puede combinar entornos locales si es necesario, por ejemplo podría especificar horas y fechas en un
entorno local y convenciones monetarias en otro.

Los trabajos paralelos le permiten elegir entornos locales de manera individual para:
v Orden en que deben ordenarse los caracteres (clasificación)

Puede especificar entornos locales a distintos niveles dentro de InfoSphere DataStage:


v Un valor predeterminado de todo el proyecto. En el cliente del Administrador especifique los entornos
locales predeterminados para todos los trabajos de servidor de un proyecto, y un entorno local
predeterminado para todos los trabajos paralelos del proyecto.

20 Guía del desarrollador de Server Job


v Un valor predeterminado de trabajo. En el cliente del Diseñador puede especificar entornos locales
predeterminados utilizados por un trabajo concreto que sobrescribe el valor predeterminado de
proyecto.
v Un entorno local de etapa. Algunas etapas paralelas permiten especificar que utilizan un entorno local
determinado. Esto sustituye el valor predeterminado del proyecto y del trabajo.

Este manual utiliza el término territorio en lugar de país para describir una zona que utiliza un entorno
local.

Hora y fecha

La mayor parte de los territorios tienen un estilo preferido para presentar las horas y las fechas. En
cuanto a las horas, suele ser una elección entre un reloj de 12 horas o un reloj de 24 horas. En cuanto a
las fechas, existen más variaciones. Aquí aparecen algunos ejemplos de formatos utilizados por los
distintos entornos locales para expresar las 9.30 de la noche del día 1 de abril de 1990:

Entorno local InfoSphere


Territorio Hora Fecha DataStage
Francia 21h30 1.4.90 FR-FRENCH
EE.UU. 9:30 p.m. 4/1/90 US-ENGLISH
Japón 21:30 90.4.1 JP-JAPANESE

Numérico

Esta convención define la forma en que se muestran los números, incluyendo:


v El carácter utilizado como separador decimal (carácter raíz)
v Carácter utilizado como separador de millares
v Si los ceros del principio se deben utilizar para los números de 1 a -1

Por ejemplo, los números siguientes pueden significar mil, dependiendo del entorno local en que los
utilice:

Territorio Número Entorno local InfoSphere DataStage


Irlanda 1,000 IE-ENGLISH
Países Bajos 1.000 NL-DUTCH
Francia 1 000 FR-FRENCH

Monetaria
Esta convención define la forma en que se muestran los valores monetarios, incluyendo:
v Carácter utilizado como separador decimal. Este puede ser distinto que el separador decimal utilizado
en los formatos numéricos.
v Carácter utilizado como separador de millares. Este puede ser distinto que el separador de miles
utilizado en los formatos numéricos.
v El símbolo de la moneda local del territorio, por ejemplo, $, £ o ¥.
v La serie utilizada como símbolo de moneda internacional, por ejemplo, USD (dólares estadounidenses)
NOK (Kroner noruego), JPY (Yen japonés).
v El número de las posiciones decimales que se utilizan en los valores monetarios locales.
v El número de las posiciones decimales que se utilizan en los valores monetarios internacionales.
v El signo que se utiliza para indicar los valores monetarios positivos.

Capítulo 3. Trabajos de servidor y soporte multilingüístico 21


v El signo que se utiliza para indicar los valores monetarios negativos.
v Las posiciones relativas del símbolo de moneda y los signos positivo o negativo de los valores
monetarios.

A continuación se facilitan ejemplos de los formatos monetarios que utilizan los distintos entornos locales:

Moneda Formato Entorno local InfoSphere DataStage


Dólares de EE.UU. $123.45 US-ENGLISH
Libras de GB £37,000.00 GB-ENGLISH
Marcos de Alemania DM123,45 DE-GERMAN
Euros de Alemania €123,45 DE-GERMAN-EURO

Tipo de carácter

Esta convención define si un carácter es alfabético, numérico, si no puede imprimirse, etc. Esta
convención define también las normas de mayúsculas y minúsculas, por ejemplo, algunas letras llevan
acento en minúsculas pero no en mayúsculas.

Ordenación

Esta convención define el orden en que se clasifican los caracteres, es decir, el orden. Puede haber muchas
variaciones en el orden de clasificación dentro de un único juego de caracteres. Por ejemplo, el carácter Ä
sigue al carácter A en Alemania, pero sigue al carácter Z en Suecia.

Correlaciones y entornos locales en los trabajos de IBM IBM


InfoSphere DataStage
Cuando instala InfoSphere DataStage con el soporte multilingüístico habilitado, se instalan un gran
número de correlaciones y entornos locales. InfoSphere DataStage realiza una distinción entre las
correlaciones y los entornos locales disponibles y las correlaciones y los entornos locales cargados.
Dependiendo de qué idioma especifique al instalar InfoSphere DataStage, se compilan y se cargan un
conjunto de correlaciones y de entornos locales preparados para su uso cuando se diseñan y se ejecutan
los trabajos del servidor de InfoSphere DataStage. Las correlaciones y los entornos locales disponibles son
los que InfoSphere DataStage tiene disponibles para la compilación y la carga; pueden especificarse
cuando se diseñan los trabajos, pero deben cargarse realmente antes de ejecutar un trabajo que los utiliza.

Puede ver qué correlaciones y entornos locales hay cargados actualmente y cuáles están disponibles en el
Administrador de InfoSphere DataStage:
1. Abra el cliente del Administrador.
2. Pulse el separador Proyectos para pasar a la página Proyectos.
3. Seleccione un proyecto y pulse el botón NLS... para abrir el diálogo Valores de soporte
multilingüístico del proyecto para el proyecto. De forma predeterminada, se muestran todas las
correlaciones cargadas actualmente para los trabajos de servidor. Elija la opción Mostrar todas las
correlaciones para ver una lista de las correlaciones disponibles para la carga.
4. Para ver los entornos locales cargados, pulse el separador Entornos locales del servidor. Pulse la
flecha abajo al lado de la categoría de entorno local para ver la lista desplegable de los entornos
locales cargados. Seleccione la opción Mostrar todos los entornos locales para que las listas
desplegables muestren todas las correlaciones disponibles para la carga.

22 Guía del desarrollador de Server Job


Carga de correlaciones
Para cargar una de las correlaciones disponibles para que los trabajos puedan utilizarla en el tiempo de
ejecución:
1. En la página Correlaciones del servidor, pulse el botón Instalar. La página se expande para mostrar
las listas de correlaciones disponibles y cargadas:
2. Seleccione la correlación que desee cargar en la lista Disponibles de la izquierda y pulse el botón
Añadir. Un recuadro de diálogo solicitará que confirme la acción. Pulse Sí. Cuando la correlación se
haya compilado, se añadirá a la lista Instaladas de la derecha. Debe detener y reiniciar el motor de
servidor para que se cargue del todo, por lo que inicialmente no aparece ninguna marca de referencia
al lado.
3. Para detener y reiniciar el motor, rearranque la máquina, o detenga e inicie los servicios de IBM
InfoSphere DataStage (consulte la Guía del cliente del administrador para obtener instrucciones sobre
cómo hacerlo). La correlación estará disponible para los trabajos en el tiempo de ejecución.

Carga de entornos locales


Para cargar uno de los entornos locales disponibles para que los trabajos puedan utilizarlo en el tiempo
de ejecución:
1. En la página Entornos locales del servidor, pulse el botón Instalar. La página se expande para mostrar
las listas de entornos locales disponibles y cargados:
2. Seleccione el entorno local que desee cargar en la lista Disponibles de la izquierda y pulse el botón
Añadir. Un recuadro de diálogo solicitará que confirme la acción. Pulse Sí. Cuando el entorno local se
haya compilado, se añadirá a la lista Instalados de la derecha. Debe detener y reiniciar el motor de
servidor para que se cargue del todo, por lo que inicialmente no aparece ninguna marca de referencia
al lado.
3. Para detener y reiniciar el motor de servidor, rearranque la máquina, o detenga e inicie los servicios
de DataStage (consulte la Guía del cliente del administrador para obtener instrucciones sobre cómo
hacerlo). El entorno local estará disponible para los trabajos en el tiempo de ejecución.

Utilización de correlaciones en trabajos de servidor


Debe utilizar una correlación siempre que lee datos de caracteres (distintos de ASCII de 7 bits) en IBM
InfoSphere DataStage o que graba datos de caracteres de InfoSphere DataStage. La correlación indica a
InfoSphere DataStage cómo convertir el juego de caracteres externo en un juego de caracteres Unicode
interno.

No es necesario correlacionar los datos si está:


v Manejando datos puramente numéricos.
v Leyendo o grabando en una etapa que representa el almacenamiento interno proporcionado por
InfoSphere DataStage (es decir, una etapa Hashed File o una etapa UniVerse).
v Leyendo o grabando en una base de datos UniVerse externa con el soporte multilingüístico habilitado.
v Leyendo o grabando datos ASCII de 7 bits.

InfoSphere DataStage permite especificar la correlación que debe utilizar en los distintos puntos de un
diseño de trabajo:
v Puede especificar la correlación predeterminada de un proyecto. Se utilizará en todas las etapas de
todos los trabajos de un proyecto, a menos que se altere temporalmente en el diseño del trabajo.
v Puede especificar la correlación predeterminada de un trabajo. Se utilizará en todas las etapas de un
trabajos (sustituyendo el valor predeterminado del proyecto), a menos que se altere temporalmente en
el diseño del trabajo.

Capítulo 3. Trabajos de servidor y soporte multilingüístico 23


v Puede especificar una correlación para que una determinada etapa en el trabajo. Esto sustituye el valor
predeterminado del proyecto y del trabajo.
v Para determinadas etapas, puede especificar una correlación de columnas individuales, que altera
temporalmente el proyecto, el trabajo y las correlaciones predeterminadas de la etapa.

Datos de carácter en trabajos de servidor


Sólo es necesario especificar una correlación de juego de caracteres donde el trabajo procesa datos de
carácter. IBM InfoSphere DataStage tiene varios tipos de carácter que pueden especificarse como el tipo
SQL de una columna:
v Char
v VarChar
v LongVarChar
v NChar
v NVarChar
v NLongVarChar

Todos los tipos anteriores denotan columnas de serie, que deben correlacionarse con el juego de
caracteres Unicode interno de InfoSphere DataStage.

Especificación de una correlación predeterminada del proyecto


La correlación predeterminada para un proyecto se especifica en el cliente del Administrador de IBM
InfoSphere DataStage:
1. Abra el cliente del Administrador.
2. Pulse el separador Proyectos para pasar a la página Proyectos.
3. Seleccione el proyecto para el que desee establecer una correlación predeterminada y pulse el botón
NLS... para abrir el diálogo Valores de soporte multilingüístico del proyecto para el proyecto. De
forma predeterminada, se muestran todas las correlaciones cargadas actualmente para los trabajos de
servidor.
4. Elija la correlación que desee en la lista Nombre de correlación predeterminada. Puede seleccionar la
opción Mostrar todas las correlaciones y elegir una correlación que no se haya cargado todavía, pero
tenga en cuenta que deberá cargar la correlación (consulte "Carga de correlaciones") antes de ejecutar
los trabajos que utilizan la correlación.
5. Pulse Aceptar. La correlación seleccionada es ahora la predeterminada para el proyecto y la que
utilizan todos los trabajos del proyecto.

Especificación de una correlación predeterminada del trabajo


Puede especificar una correlación predeterminada para un trabajo específico en el Diseñador de IBM
InfoSphere DataStage, utilizando el recuadro de diálogo Propiedades del trabajo:
1. Abra el trabajo para el que desea establecer la correlación en el Diseñador de InfoSphere DataStage.
2. Abra el recuadro de diálogo Propiedades de trabajo para dicho trabajo (elija Editar → Propiedades de
trabajo).
3. Pulse el separador Soporte multilingüístico para pasar a la página Soporte multilingüístico:
4. Elija la correlación que desee en la lista Correlación predeterminada para las etapas. Seleccione la
opción Mostrar todas las correlaciones y elija una correlación que no se haya cargado todavía, pero
tenga en cuenta que deberá cargar la correlación (consulte "Carga de correlaciones") antes de ejecutar
el trabajo.
5. Pulse Aceptar. La correlación seleccionada es ahora la predeterminada para el trabajo y la que utilizan
todas las etapas del trabajo.

24 Guía del desarrollador de Server Job


Especificación de una correlación de etapa
Especifique una correlación para que una determinada etapa utilice el diálogo del editor de etapas en el
Diseñador de IBM InfoSphere DataStage. Puede especificar correlaciones para todos los tipos de etapa,
excepto:
v Las etapas activas como, por ejemplo, la etapa Aggregator y Transformer. Estas manejan los datos que
se han especificado en InfoSphere DataStage y, por lo tanto, ya se han correlacionado.
v Las etapas que utilizan el almacenamiento interno ofrecido por InfoSphere DataStage, es decir, las
etapas Hashed File y UniVerse. Estas manejan los datos en el juego de caracteres Unicode, por lo que
no requieren ninguna correlación.

Para especificar una correlación para una etapa:


1. Abra el editor de etapas en el trabajo en el cliente del Diseñador. Seleccione el separador NLS de la
página Etapa.
2. Realice uno de los pasos siguientes:
v Elija la correlación que desee en la lista Nombre de correlación que se utiliza con la etapa.
Seleccione la opción Mostrar todas las correlaciones y elija una correlación que no se haya cargado
todavía, pero tenga en cuenta que deberá cargar la correlación (consulte “Carga de correlaciones”
en la página 23) antes de ejecutar el trabajo que contiene la etapa.
v Pulse el botón Utilizar parámetro de trabajo... Esta opción permite seleccionar un parámetro de
trabajo existente o especificar uno nuevo. Cuando se ejecuta el trabajo, InfoSphere DataStage
utilizará el valor del parámetro para el nombre de correlación.
3. Pulse Aceptar. La etapa utilizará el parámetro de trabajo o la correlación seleccionada.

Especificación de una correlación de columna


Algunos tipos de etapa de trabajo de servidor permiten especificar una correlación que se utiliza para
una determinada columna en los datos manejados por dicha etapa. Las siguientes etapas permiten la
correlación por columnas:
v Etapa ODBC
v Etapa Sequential File

Para especificar una correlación por columnas:


1. Abra el editor de etapas en el trabajo. Pulse el separador NLS de la página Etapa:
2. Seleccione la opción Permitir correlación por columnas. A continuación, vaya a la página Entradas o
Salidas (dependiendo de si está grabando o leyendo datos) y seleccione el separador Columnas:
3. La cuadrícula de columnas tiene ahora un campo adicional denominado Correlación de soporte
multilingüístico. Seleccione la correlación que desee para una determinada columna en la lista
desplegable.
4. Pulse Aceptar.

Utilización de entornos locales en trabajos de servidor


Los entornos de trabajo permiten especificar que los datos se manejan de acuerdo con los convenios de
un determinado territorio. No existe siempre una relación directa entre el entorno local y el idioma, por
ejemplo, el entorno local del francés es distinto al del francés canadiense.

Los trabajos de servidor le permiten elegir entornos locales de manera individual para diferentes aspectos
de las convenciones nacionales:
v Formato para horas y fechas
v Formato para visualizar números

Capítulo 3. Trabajos de servidor y soporte multilingüístico 25


v Visualización de valores monetarios
v Si un carácter es alfabético, numérico, si no puede imprimirse, etc.
v Orden en que deben ordenarse los caracteres (clasificación)

Puede combinar entornos locales si es necesario, por ejemplo podría especificar horas y fechas en un
entorno local y convenciones monetarias en otro. En "Entornos locales", se proporcionan descripciones de
cada tipo de convenio.

En los trabajos del servidor, puede establecer un entorno local predeterminado para un proyecto o para
un trabajo individual.

Especificación de un entorno local predeterminado del proyecto


El entorno local predeterminado para un proyecto se especifica en el cliente del Administrador de IBM
InfoSphere DataStage:
1. Abra el cliente del Administrador.
2. Pulse el separador Proyectos para pasar a la página Proyectos.
3. Seleccione el proyecto para el que desee establecer una correlación predeterminada y pulse el botón
NLS... para abrir el diálogo Valores de soporte multilingüístico del proyecto para el proyecto. Pulse el
separador Entornos locales del servidor para pasar a la página Entornos locales del servidor.
4. Pulse la flecha que aparece al lado de la categoría para la que desea establecer un entorno local y elija
un entorno local en la lista desplegable. Puede seleccionar la opción Mostrar todos los entornos
locales y elegir un entorno local que no se haya cargado todavía, pero tenga en cuenta que deberá
cargar el entorno local (consulte "Carga de entornos locales") antes de ejecutar los trabajos que lo
utilizan.
5. Pulse Aceptar. El entorno local seleccionado es ahora el predeterminado para la categoría en el
proyecto y el que utilizan todos los trabajos del proyecto.

Especificación de un entorno local predeterminado del trabajo


Puede especificar un entorno local predeterminado para un trabajo específico en el Diseñador de IBM
InfoSphere DataStage, utilizando el diálogo Propiedades del trabajo:
1. Abra el trabajo para el que desee establecer el entorno local en el cliente del Diseñador.
2. Abra el recuadro de diálogo Propiedades de trabajo para dicho trabajo (elija Editar → Propiedades de
trabajo).
3. Pulse el separador Soporte multilingüístico para pasar a la página Soporte multilingüístico:
4. Pulse la flecha que aparece al lado de la categoría para la que desea establecer un entorno local y elija
un entorno local en la lista desplegable. Puede seleccionar la opción Mostrar todos los entornos
locales y elegir un entorno local que no se haya cargado todavía, pero tenga en cuenta que deberá
cargar el entorno local (consulte "Carga de entornos locales") antes de ejecutar el trabajo.
5. Pulse Aceptar. El entorno local seleccionado es ahora el predeterminado para la categoría en el trabajo
y el que utilizan todas las etapas del trabajo.

26 Guía del desarrollador de Server Job


Capítulo 4. Etapas de trabajo de servidor
Etapas Complex Flat File
La etapa Complex Flat File permite convertir los datos extraídos de los archivos sin formato complejos
que se generan en un sistema principal de IBM. Un archivo sin formato complejo tiene una estructura
jerárquica en su disposición de las columnas. Físicamente es un archivo sin formato (es decir, no tiene
punteros ni ninguna otra infraestructura complicada), pero lógicamente representa relaciones padre-hijo.
Puede utilizar varios tipos de registro para conseguir esta estructura jerárquica.

Cómo reconocer una estructura jerárquica

Por ejemplo, utilice registros con varias estructuras para diferentes tipos de información, tales como un
registro "E" para la información estática del empleado y un registro "S" para la información sobre la
nómina mensual del empleado o para grupos repetitivos de información (doce meses de ingresos).
También puede combinar estas agrupaciones de registros y, cuando se trate de datos que se repitan,
puede presentar simultáneamente grupos OCCURS anidados.

Gestión de grupos repetitivos y de estructuras internas

Los grupos repetitivos y las estructuras de registros internas tales como campos GROUP y OCCURS son
fáciles de cargar, gestionar y utilizar. Puede ignorar las columnas de datos GROUP que se visualizan
como datos en bruto y no pueden utilizarse de forma lógica en la mayoría de aplicaciones. Los metadatos
pueden presentarse simultáneamente en un conjunto de columnas normalizado durante el tiempo de
carga de forma que no existan matrices durante el tiempo de ejecución.

Selección de subconjuntos de columnas

Puede seleccionar un subconjunto de columnas desde una extensa CFD (COBOL File Description,
Descripción de archivo COBOL). Este proceso de filtrado redunda en que se logra un incremento del
rendimiento puesto que la etapa ya no analiza ni procesa cientos de columnas, cuando en realidad, sólo
necesita unas pocas.

Los archivos sin formato complejo también pueden incluir tipos de datos de herencia.

Enlaces de salida

La etapa Complex Flat File soporta varias salidas. Un enlace de salida especifica los datos que está
extrayendo es decir, una secuencia de filas que se deben leer.

Si utiliza la etapa Complex Flat File para procesar un extenso número de columnas, por ejemplo, más de
300, utilice sólo un enlace de salida en su trabajo. Así mejorará sustancialmente el rendimiento de la
interfaz gráfica de usuario al cargar, guardar o estructurar estas columnas. El hecho de tener más de un
enlace de salida implica una secuencia de guardado o de carga cada vez que se cambian separadores.

La etapa Complex Flat File no dispone de la función de búsqueda de referencias ni soporta los enlaces de
entrada. Para obtener más información acerca de los trabajos creados con la versión 1 de esta etapa,
consulte la siguiente sección.

© Copyright IBM Corp. 1997, 2010 27


Trabajos existentes creados con la versión 1 de la etapa Complex Flat
File
Cuando abre por primera vez la etapa Complex Flat File, la cuadrícula del separador Columnas de
origen está vacía para los trabajos existentes hasta que pulsa Aceptar y guarda el trabajo. La GUI genera
los valores de columna de origen utilizando la lista de columnas de salida, y puede actualizar los trabajos
existentes seleccionando Sí en la siguiente consulta:
Esta etapa se ha desarrollado con una versión anterior del plug-in CFF. ¿Desea actualizar esta etapa?

Las columnas de origen se rellenan, y puede seleccionar y modificar columnas.

Puede detener la actualización seleccionando No en la consulta. No puede utilizar el separador


Columnas de origen y la cuadrícula permanece vacía. Los trabajos existentes se ejecutan sin alterar
siempre que no guarde el trabajo.

Funcionalidad
Funcionalidad soportada

La etapa Complex Flat File soporta la funcionalidad siguiente:


v Datos en bruto EBCDIC y ASCII.
v Los siguientes tipos de datos de COBOL:
– Empaquetados (COMP-3).
– Delimitados (DISPLAY son signos).
– Carácter (DISPLAY o PIC X).
– Entero (COMP. Entero también soporta implementaciones de 1 y 3 bytes no estándares).
– Binario (lo mismo que COMP, pero sin signos.)
– Decimal (COMP-2).
– Flotante (COMP-1).
– Estructuras de formato fijas. No soporta columnas que estén separadas por delimitadores.
v Una cláusula REDEFINES.
v OCCURS paralela mediante enlaces de salida separados.
v OCCURS anidada en el mismo formato CFD. Deben presentarse simultáneamente durante el tiempo de
carga (no durante el tiempo de ejecución).
v OCCURS fija con ninguna cláusula DEPENDING ON.
v Archivos sin formato complejo generados en el sistema principal de IBM.
v Soporte multilingüístico.
v La capacidad de seleccionar subconjuntos de columnas desde una CFD.

Funcionalidad no soportada

No se da soporte a la siguiente funcionalidad:


v Formatos de archivo de byte que no son de 8 bits.
v Archivos sin formato complejo generados en sistemas principales que no son de IBM (por ejemplo,
Windows).

Terminología
La lista siguiente describe los términos utilizados en este documento:

28 Guía del desarrollador de Server Job


Término
Descripción
CFD Formato de descripción de archivos COBOL.
Archivo sin formato complejo
Un superconjunto del archivo sin formato simple que contiene estructuras de datos complejas.
Las estructuras de datos complejas soportadas por el archivo sin formato complejo son los
grupos, las matrices y las redefiniciones, que se encuentran en los archivos VSAM o QSAM. (Los
archivos preparados para la carga o delimitados no contienen estas estructuras complejas). Un
archivo sin formato complejo tiene una estructura jerárquica implicada en su disposición de las
columnas. Los archivos sin formato complejo también pueden incluir tipos de datos de herencia.
Importación de DCLGen
El componente IBM InfoSphere DataStage al que se importa una definición de tabla en un
archivo DCLGen que se ha exportado previamente de VS/IBM DB2.
Archivo sin formato de ancho fijo
Un archivo caracterizado por archivos delimitados o de longitud fija (binarios).
Presentación simultánea
La conversión de archivos que contienen estructuras de datos complejas como, por ejemplo,
matrices, grupos y redefiniciones, en archivos de datos que contienen registros sin relaciones
estructuradas.
Normalización
La conversión de registros en formato NF2 (no de primera forma normal) que contienen datos con
varios valores en una o varias filas 1NF (primera forma normal).
QSAM
Método de acceso secuencial en cola.
VSAM
Método de acceso de almacenamiento virtual. Este método es un sistema de gestión de archivos
para el sistema operativo de sistema principal de IBM MVS.

Utilización de la etapa Complex Flat File


Si utiliza la interfaz gráfica de usuario personalizada para editar una etapa Complex Flat File, se abrirá el
recuadro de diálogo CFF Etapa. Este recuadro de diálogo tiene las páginas Etapa y Salida:
v Etapa. Esta página muestra el nombre de la etapa que está editando en el campo Nombre de etapa. El
separador General describe el objetivo de la etapa en el campo Descripción. (El separador Soporte
multilingüístico sólo aparece si se ha instalado el soporte multilingüístico). Para obtener detalles,
consulte “Separador Soporte multilingüístico”.)

Nota: No puede cambiar el nombre de la etapa desde este recuadro de diálogo.


v Salida. Esta página especifica las fuentes de datos que se deben utilizar y las definiciones de columnas
asociadas para cada enlace de salida.

Separador Soporte multilingüístico


Puede definir una correlación de juegos de caracteres que interprete el archivo de entrada para una etapa.
Realícelo en el separador Soporte multilingüístico en la página Etapa, que sólo aparecerá si ha instalado
el soporte multilingüístico.

Si el soporte multilingüístico está instalado, se selecciona la opción Soporte multilingüístico en el


recuadro de lista Formato de los datos en el separador General de la página Salida y se habilita el
separador Soporte multilingüístico en la página Etapa.

Capítulo 4. Etapas de trabajo de servidor 29


Especifique la información mediante el siguiente botón y los siguientes campos:
v Correlacionar el nombre que debe utilizarse con la etapa. Se define la correlación de juegos de
caracteres predeterminada para el proyecto o el trabajo. Puede cambiar la correlación seleccionando un
nombre de correlación de la lista.
v Utilizar parámetro de trabajo... . Especifica los valores de los parámetros para el trabajo. Utilice el
formato #Param#, donde Param es el nombre del parámetro de trabajo. La serie #Param# se sustituye
por el parámetro de trabajo cuando se ejecuta el trabajo.
v Mostrar todas las correlaciones. Muestra una lista de todas las correlaciones transferidas con IBM
InfoSphere DataStage.
v Sólo correlaciones cargadas. Muestra una lista de las correlaciones que están cargadas en ese
momento.

Si el soporte multilingüístico no está instalado, la opción Soporte multilingüístico no está disponible en


el recuadro de lista Formato de los datos y el separador Soporte multilingüístico de la página Salida
está inhabilitado. El archivo de entrada se interpreta de acuerdo con la opción que se selecciona el
recuadro de lista Formato de los datos del separador General de la página Salida.

Definición de un enlace de salida


Al leer datos de un origen de datos, la etapa Complex Flat File tiene un enlace de salida.

Defina las propiedades de este enlace y las definiciones de columna de los datos en la página Salida, en
el recuadro de diálogo Etapa CFF.

Acerca de la página Salida


La página Salida tiene un campo Nombre de salida, los separadores General, Columnas de origen,
Seleccionar columnas, Criterios de selección y Columnas de destino y los botones Columnas... y
Visualizar datos.... (El separador Soporte multilingüístico sólo aparece si se ha instalado el soporte
multilingüístico). Para obtener detalles, consulte “Separador Soporte multilingüístico” en la página 29.)
v Nombre de salida. Nombre del enlace de salida. Seleccione el enlace que desee editar en el recuadro
de lista Nombre de salida. Esta lista muestra todos los enlaces de salida de una etapa Complex Flat
File.
v Botón Columnas.... Pulse el botón Columnas... para visualizar una breve lista de columnas en el
archivo de fuente de datos. Puede seguir visualizando la lista a medida que va entrando metadatos
detallados en el separador Origen Columnas.
v Botón Visualizar datos... . Pulse el botón Ver datos... para iniciar el Navegador de datos. Permite ver
los datos asociados con el enlace de salida.

Separador General
Este separador se visualiza de forma predeterminada. Opcionalmente, puede entrar texto para describir la
finalidad del enlace de salida en el campo Descripción. Entre la información correspondiente en los
siguientes campos:
v Vía de acceso. El nombre de la vía de acceso de entrada de la fuente de datos a partir del que se
pueden recuperar los datos. También puede pulsar el botón ... situado a la derecha del campo para
examinar los directorios del sistema que hospeda la capa de motor para el origen de datos.
v Formato de los datos. El formato de un archivo de entrada: EBCDIC, ASCII o NLS. Si el soporte
multilingüístico está habilitado, el formato de los datos se fija en Soporte multilingüístico y no se podrá
editar. (Las correlaciones de soporte multilingüístico soportan datos EBCDIC.)
v Estilo del registro. El tratamiento de fin de la línea de los registros de acuerdo con la tabla siguiente:

30 Guía del desarrollador de Server Job


Tabla 2. Tratamiento de fin de la línea
Formato de los datos Estilo del registro Longitud del registro Comentarios
ASCII o EBCDIC Binary Mayor que cero La longitud del registro
viene determinada por el
campo Longitud del
registro.

Si los metadatos definen un


registro que es más largo
que el campo Longitud del
registro, las columnas que
tengan posiciones de inicio
mayores que la Longitud
del registro se establecerán
en nulo.
ASCII o EBCDIC Binary Cero La longitud del registro
viene determinada por los
metadatos.
ASCII o EBCDIC CR/LF Cualquier valor La longitud del registro
viene determinada por el
delimitador CR/LF.

Si los metadatos definen un


registro que es más largo
que la Longitud del
registro tal y como ha
determinado el CR/LF, las
columnas que tengan
posiciones de inicio
mayores que la posición de
CR/LF se establecerán en
nulo.

Si los metadatos definen un


registro que es menor que
la posición del CR/LF, los
datos después del final del
registro y antes del CR/LF
(tal y como han
determinado los metadatos)
se descartarán.

Si los datos que se están


leyendo están en formato
EBCDIC, puede generarse
una coincidencia de
caracteres CR/LF. Éstos
también delimitan un
registro.

Capítulo 4. Etapas de trabajo de servidor 31


Tabla 2. Tratamiento de fin de la línea (continuación)
Formato de los datos Estilo del registro Longitud del registro Comentarios
Soporte multilingüístico Binary >0 La longitud del registro
viene determinada por el
campo Longitud del
registro.

Si los metadatos definen un


registro que es más largo
que el campo Longitud del
registro, las columnas que
tengan posiciones de inicio
mayores que la Longitud
del registro se establecerán
en espacios.
Soporte multilingüístico CR/LF Cualquier valor La longitud del registro
viene determinada por el
delimitador CR/LF.

Si los metadatos definen un


registro que es más largo
que la Longitud del
registro tal y como ha
determinado el CR/LF, las
columnas que tengan
posiciones de inicio
mayores que la posición de
CR/LF se establecerán en
espacios.

Si los metadatos definen un


registro que es menor que
la posición del CR/LF, los
datos después del final del
registro y antes del CR/LF
(tal y como han
determinado los metadatos)
se descartarán.

Si los datos que se están


leyendo están en formato
EBCDIC, puede generarse
una coincidencia de
caracteres CR/LF. Éstos
también delimitan un
registro.
Soporte multilingüístico Binary 0 La longitud del registro
viene determinada por los
metadatos.

Nota: Si el Estilo del registro se establece en CR/LF, el CR/LF no debe finalizar el último registro del
conjunto de datos. Si uno o varios CR/LF se encuentran al final de un conjunto de datos, se generarán
registros vacíos para cada CR/LF.
v Verificar valor de signo en datos DECIMAL COMP-3. Si se selecciona esta opción, la etapa
comprueba si existe un valor de signo válido en los datos definidos como COMP-3. Si el valor no es un
hexadecimal "C," "F," o "D,", la etapa graba un mensaje de error en el registro de IBM InfoSphere
DataStage.

32 Guía del desarrollador de Server Job


v Preservar NULL. Si se selecciona esta opción, la etapa interpreta que el valor de cualquier columna que
contenga valores nulos binarios será un a SQL_NULL. Si no se selecciona, la etapa interpreta que el
valor es cero. De forma predeterminada, no se selecciona la opción Preservar NULL.
v Descripción. Texto opcional que describe la finalidad del enlace de salida.

Separador Columnas de origen


El separador Columnas de origen contiene la lista completa de todas las columnas. Si utiliza el separador
Seleccionar Columnas, podrá seleccionar columnas de esta lista para que los datos se trasladen al enlace
de salida de CFF. (También puede utilizar la etapa Transformer para hacerlo, pero el rendimiento será
más lento debido a los datos de las columnas que no se utilizan.)

Utilice el separador Columnas de origen para entrar los datos de columna que constituyen el archivo sin
formato manualmente o puede utilizar Cargar.

Nota: No utilice el separador Columnas de origen para omitir columnas del archivo de destino. Las
Columnas de origen deben describir de forma precisa y completa el archivo de origen o, de lo contrario,
el archivo no se analizará correctamente. En su lugar, utilice el separador Seleccionar columnas para
omitir columnas.

Botón Cargar

Cargar presenta simultáneamente las matrices generando nombres de columnas con números que
incrementan monotónicamente si se responde con Sí a la consulta siguiente:
¿Desea presentar simultáneamente OCCURS en las columnas que se están cargando?

Si entra los datos manualmente, también deberá presentar simultáneamente todas las matrices
manualmente.

Las columnas siguientes tienen un significado especial para la etapa Complex Flat File:
v Número de nivel. Representa el número de nivel de la columna dentro de una descripción de archivo
de COBOL.
v Tipo nativo. Representa el tipo de datos de COBOL.

Las otras columnas de la cuadrícula son las columnas estándar para el separador Columnas. Puede editar
estos campos pulsando el botón derecho del ratón en una fila de la cuadrícula y seleccionado Editar fila...
. Se abrirá el recuadro de diálogo Editar columna.

Recuadro de diálogo Editar metadatos de columna


Utilice el recuadro de diálogo Editar metadatos de columna para editar los metadatos de columna tal y
como se describe en esta sección.

El recuadro de diálogo Editar metadatos de columna tiene un área general que contiene campos comunes
a todos los tipos de fuente de datos, además de dos páginas que contienen campos específicos para los
metadatos utilizados en trabajos de servidor e información específica de fuentes de datos de COBOL.

Propiedades de metadatos

Utilice el IBM InfoSphere DataStage and QualityStage Designer para importar los metadatos de archivo
sin formato complejo (CFD) en el InfoSphere DataStage. La lista siguiente define las propiedades que se
capturan para metadatos de archivo sin formato complejo.
Campo Descripción
Nombre de la columna
Nombre de la columna.
Capítulo 4. Etapas de trabajo de servidor 33
Clave Especifica si la columna es una clave.
Tipo nativo
Tipo de datos nativo de la columna.
Utilice uno de los valores siguientes: FLOAT, DECIMAL, BINARY, DISPLAY_NUMERIC,
CHARACTER, o GROUP.
Para obtener detalles acerca de la utilización del tipo nativo GROUP para manejar fechas,
consulte “Separador Columnas de destino” en la página 37.
Longitud
Valor numérico de la precisión.
Escala Número de posiciones decimales.
Con posibilidades de nulos
Especifica si la columna puede contener valores nulos. Si se establece en Sí, estará sujeta a una
restricción NOT NULL. (Sí/No)
Formato de fecha
Formato de una columna de fecha.
Descripción
Descripción de una columna. Consulte los ejemplos de los valores del campo Descripción al final
de esta sección.
Número de nivel
Número de nivel COBOL relativo de la columna.
OCCURS
Número de ocurrencias de la columna especificada en la cláusula OCCURS de COBOL. (Consulte
los ejemplos de OCCURS paralela, a la que no se da soporte, al final de esta sección.)
Uso Especifica una cláusula de uso de COBOL. Utilice una de las siguientes:
COMP COMP-1 COMP-2 COMP-3 DISPLAY
Indicador de signo
Especifica el signo. Fíjelo en S si la serie de caracteres de la imagen contiene el símbolo S. De lo
contrario, fíjelo en U.
Opción de signo
Si especifica una cláusula de signo y la serie de caracteres de la imagen contiene un símbolo S,
este atributo se establece en uno de los valores siguientes:
L - LEADING T - TRAILING LS - LEADING SEPARATE TS - TRAILING SEPARATE
Indicador de sinc.
Especifica si es una cláusula sincronizada de COBOL.
Campo redefinido
Nombre de la columna que se está redefiniendo.
Depending on
Nombre de la columna de dependencia.
Longitud de almacenamiento
Longitud de almacenamiento real en bytes de la columna.
Picture
Muestra una cláusula Picture generada en base a los valores en Nativo Tipo, Longitud y Escala.

34 Guía del desarrollador de Server Job


Proceso de metadatos

Utilice los botones de la parte inferior del recuadro de diálogo Editar metadatos de columna para
continuar añadiendo o editando columnas o guardar los cambios y cerrar el recuadro de diálogo.
v Anterior y Siguiente. Visualizar los metadatos de la fila anterior o de la siguiente.
v Cerrar. Cerrar el recuadro de diálogo Editar metadatos de columna. Si hay cambios pendientes para la
fila actual, se le preguntará si desea guardarlos antes de cerrar la ventana.
v Aplicar. Guardar los cambios en la fila actual.
v Restablecer. Eliminar todos los cambios efectuados en la fila desde la última vez que se aplicaron los
cambios.

Sólo aparece visible un subconjunto de estas propiedades en el separador Columnas de origen. Para ver
todas las propiedades de una determinada fila, pulse con el botón derecho del ratón en una fila de la
cuadrícula y seleccione Editar fila....

Si entra o modifica metadatos utilizando el editor de etapas y desea guardar una copia en el repositorio
de InfoSphere DataStage para utilizarlas en otra etapa, pulse el botón Guardar....

Para cargar una definición de tabla existente en una etapa, utilice el botón Cargar....

Gestión de OCCURS paralelas

La etapa Complex Flat File no soporta OCCURS paralelas, es decir: dos o más cláusulas OCCURS en la
misma definición de datos. Es necesario procesar estas cláusulas OCCURS paralelas para separar enlaces
de salida.

Este ejemplo emplea una cláusula PHONES OCCURS y una cláusula ADDRESS OCCURS:
01 CLIENT.
03 SURNAME PIC X(25).
03 FORENAME PIC X(25).
03 ADDRESS OCCURS 4.
05 ADDLINE PIC X (10).
03 POSTCODE PIC X (10).
03 PHONES OCCURS 2.
05 TELNO PIC X(10).

El ejemplo siguiente utiliza una cláusula PHONES OCCURS y una cláusula ADDLINE OCCURS:
01 CLIENT.
03 SURNAME PIC X(25).
03 FORENAME PIC X(25).
03 ADDRESS.
05 ADDLINE PIC X (10) OCCURS 5.
03 POSTCODE PIC X (10).
03 PHONES OCCURS 2.
05 TELNO PIC X(10).

La interfaz gráfica de usuario personalizada CFF reconoce las OCCURS paralelas y muestra el error
siguiente:
Demasiadas OCCURS

No dispone de autorización para guardar las definiciones de columna cargadas o editadas.

Para procesar OCCURS paralelas:


1. Borre el campo OCCURS utilizando el recuadro de diálogo Editar metadatos de columna.
2. Entre NONE en el campo Descripción de las columnas que no están siendo procesadas en este enlace.
De esta manera se consigue que los datos de dichas columnas fluyan sin modificarse.

Capítulo 4. Etapas de trabajo de servidor 35


3. Cree un enlace de salida separado utilizando un procedimiento similar para procesar la próxima
OCCURS.

Valores del campo Descripción

Los valores siguientes para el campo Descripción tienen un significado especial durante el tiempo de
ejecución:
v UNSIGNED_DECIMAL. Sólo utilícelo con campos DECIMAL. Puede utilizar este valor con campos de
decimales empaquetados para desencadenar algoritmos especiales de desempaquetamiento.
v ANYSIGN_DECIMAL. Sólo utilícelo con campos DECIMAL. Puede utilizar este valor con campos de
decimales empaquetados para desencadenar algoritmos especiales de desempaquetamiento.
v NONE. Utilícelo con tipos nativos non-GROUP. NONE provoca que los datos fluyan por la etapa sin
modificarla, es decir, no se realizan conversiones en los datos y se produce una salida de datos en
bruto. NONE se ignorará si utiliza un formato de fecha.
v OCCURS_COUNTER. Se comporta como una pseudocolumna del tipo nativo DECIMAL que no
espera recibir datos en la secuencia de entrada.

Primero debe insertar un campo nuevo con el tipo DECIMAL en la cuadrícula Columnas dentro de la
cláusula OCCURS. También debe incluir la serie OCCURS_COUNTER en el campo Descripción. Durante
el tiempo de ejecución, la etapa crea sus propios datos incrementando automáticamente el contador para
cada ocurrencia que se procesa. Actualmente no está soportado por el OCCURS anidado.

Columnas GROUP y OCCURS

Si selecciona una columna en un GROUP que tiene una OCCURS y no se selecciona la columna GROUP,
podrían visualizarse resultados incorrectos. Debe incluir la columna GROUP con OCCURS en su
selección si elige cualquier columna en el GROUP.

Nota: Sólo podrían seleccionarse determinados tipos de columnas GROUP. Consulte las secciones
siguientes para obtener detalles.

Separador Seleccionar columnas


Utilice el separador Seleccionar columnas para elegir las columnas que se deben cargar al enlace de
salida. El separador Seleccionar columnas contiene una cuadrícula que muestra las definiciones de
columna para los datos que están saliendo en el enlace seleccionado.

Nota: No utilice el separador Columnas de origen con el objetivo de seleccionar columnas para el
archivo de destino. Sólo utilice el separador Seleccionar columnas para este propósito. La descripción en
el separador Columnas de origen debe coincidir de forma completa y precisa con el archivo de origen
(consulte “Separador Columnas de origen” en la página 33).

El separador Seleccionar columnas funciona de forma parecida a la etapa de origen de sistema principal
Complex File, tal y como se describe a continuación:
v Columnas disponibles lista las columnas de origen visualizadas en formato jerárquico. Utiliza campos
para columnas non-GROUP y carpetas para columnas GROUP. Cuando selecciona o borra cada
columna, aparece una marca de selección en la columna de la lista.
Sólo puede seleccionar columnas GROUP si todas las columnas en GROUP tienen el tipo de datos
CHARACTER. Si cualquier columna en GROUP tiene un tipo de datos distintos, no podrá seleccionar
la columna GROUP y se visualizará como tal.
v Columnas seleccionadas contiene la lista de columnas que está creando utilizando las teclas de flecha.
v Utilice estas teclas de flecha para mover las columnas de acá para allá entre la lista Columnas
disponibles y la lista Columnas seleccionadas. Utilice la flecha simple ( > ) para mover columnas
resaltadas y la flecha doble ( >> ) para mover todos los elementos.

36 Guía del desarrollador de Server Job


v De forma predeterminada se seleccionan todas las columnas para la carga. Pulse Buscar para abrir un
recuadro de diálogo que permite buscar una columna en concreto.
v Pulse Aceptar cuando termine la selección para cargar las columnas seleccionadas.

Separador Criterios de selección


Utilice el separador Criterios de selección para redefinir campos extraídos del archivo de entrada. Entre
la información correspondiente en los siguientes campos:
v Registro de inicio #. Número de registro a partir del que se inicia el proceso.
v Registro de fin #. Número de registro a partir del que se detiene el proceso.
v Campo ID. Seleccione el campo que contenga el tipo de registro del recuadro de lista.
v Valor (hex). Valor del tipo de registro. Este valor se convierte en el Estilo de registro antes de la
comparación, por ejemplo, ASCII o EBCDIC. Sólo se envían los registros que contienen este valor al
enlace de salida. No se soportan los rangos de valores. Si el valor está precedido por el carácter &, se
tratará como un valor hexadecimal y se comparará sin ninguna conversión.

Ejemplo redefinido

La etapa Complex Flat File soporta la redefinición de cualquier parte del archivo de origen. Lo hace al
restableciendo la posición de inicio de un campo cuyos metadatos redefinen otro campo.

Por ejemplo, Field-2 redefine Field-1 y así sucesivamente.


Entrada:
01 Ejemplo-Registro.
03 Field-1 Pic X(24).
03 Field-2 redefine Field-1.
05 Field-2a Pic X(8).
05 Field-2b Pic X(8).
05 Field-2c Pic X(8).
03 Field-3 Pic X(24).
03 Field-3 redefine Field-3.
05 Field-4a Pic X(8).
05 Field-4b Pic X(8).
05 Field-4c Pic X(8).
03 Field-5 redefine Field-1.
05 Field-5a Pic X(8).
05 Field-5b Pic X(8).
05 Field-5c Pic X(8).
Datos de entrada:
2a2a2a2a2b2b2b2b2c2c2c2c4a4a4a4a4b4b4b4b4c4c4c4c
Orden de los campos de salida:
Field-2a
Field-2b
Field-2c
Field-4a
Field-4b
Field-4c
Field-5a
Field-5b
Field-5c
Datos de salida:
2a2a2a2a2b2b2b2b2c2c2c2c4a4a4a4a4b4b4b4b4c4c4c4c2a2a2a2a2b2b2b2b2c2c2c2c

Separador Columnas de destino


El separador Columnas de destino de la página Salida contiene la lista de columnas que se ha creado
utilizando el separador Seleccionar columnas. Las columnas aparecen en gris y no son editables. Debe
utilizar el separador Seleccionar columnas para elegir las columnas que desea cargar al enlace de salida.

Capítulo 4. Etapas de trabajo de servidor 37


Consideraciones sobre la fecha
En muchos casos, los archivos de COBOL definen fechas como un campo de caracteres. Por ejemplo:
05 Application-Date pic 99999999.

Pulse el separador Origen Columnas en la página Salida para entrar o cargar definiciones de columna
para sus datos. En este caso, defina el campo Tipo nativo para Application-Date (aplicación-fecha) como
CARÁCTER. Seleccione un formato adecuado en el campo Formato de fecha de la ventana Editar
metadatos de columna, en este caso, CCYYMMDD.

Para generar una fecha de IBM InfoSphere DataStage en la columna del enlace de salida, los datos de
entrada y el campo Formato de fecha deben utilizar el mismo formato. Por ejemplo, los datos de entrada
con formato "25/12/2000" deben utilizar el formato DD/MM/CCYY en el campo Formato de fecha. De
lo contrario, se genera una fecha con un valor nulo y aparece un aviso sobre una conversión de fecha
incorrecta en el registro de InfoSphere DataStage.

Etapas Folder
Las etapas Folder se utilizan para leer o grabar datos como archivos en un directorio ubicado en el
servidor de IBM InfoSphere DataStage.

Utilización de etapas Folder


Las etapas Folder pueden leer varios archivos de un solo directorio y proporcionar los archivos al trabajo
como filas en un enlace de salida. Las etapas Folder también pueden grabar filas de datos como archivos
en un directorio. Las filas llegan a la etapa en un enlace de entrada.

Nota: El comportamiento de la etapa Folder cuando lee carpetas que contienen otras carpetas no está
definido.

En un entorno de soporte multilingüístico, el usuario que ejecuta el trabajo debe tener permiso de
grabación en la carpeta para que la información de correlación de soporte multilingüístico pueda
configurarse correctamente.

Cuando edita una etapa Folder, aparece el recuadro de diálogo Etapa Folder. Este recuadro de diálogo
tiene tres páginas:
v Etapa. El separador General muestra el nombre de la etapa que está editando, el tipo de etapa y una
descripción. El separador Propiedades contiene las propiedades que definen la operación de la etapa.
v Entradas. El separador Columnas muestra las definiciones de columna para los datos que llegan al
enlace de entrada. El directorio en el que la etapa graba los archivos se define en la propiedad Nombre
de vía de acceso de la carpeta en el separador Propiedades de la etapa.
v Salidas. El separador Columnas muestra las definiciones de columna para los datos que salen en el
enlace de salida. El separador Propiedades controla la operación del enlace. El directorio en el que la
etapa lee los archivos se define en la propiedad Nombre de vía de acceso de la carpeta en el separador
Propiedades de la etapa.

Definición de correlaciones de juegos de caracteres


Puede definir una correlación de juegos de caracteres para una etapa Folder mediante el separador NLS
en el recuadro diálogo Etapa Folder.

La correlación de juegos de caracteres predeterminada (definida para el proyecto o el trabajo) se puede


cambiar seleccionando un nombre de correlación de la lista. El separador también presenta los campos
siguientes:

38 Guía del desarrollador de Server Job


v Mostrar todas las correlaciones. Lista todas las correlaciones suministradas mediante IBM InfoSphere
DataStage. Las correlaciones no se pueden utilizar a menos que se hayan cargado utilizando el cliente
del Administrador.
v Sólo correlaciones cargadas. Muestra las correlaciones que se han cargado y que están preparadas para
ser utilizadas.
v Utilizar parámetro de trabajo... . Permite especificar una correlación de juegos de caracteres como un
parámetro del trabajo que contiene la etapa. Si el parámetro todavía no se ha definido, el sistema
solicitará su definición desde el recuadro de diálogo Propiedades del trabajo.

Definición de los datos de entrada de la etapa Folder


La etapa Folder sólo tiene datos de entrada cuando se utiliza para grabar archivos en un directorio. En
este caso, el directorio en el que se graban se define en el separador Propiedades de la página Etapa.

El separador Propiedades de la página Entradas define propiedades para el enlace de entrada. Las
propiedades son las siguientes:
v Conservar CRLF. Cuando Conservar CRLF se establece en Sí, las marcas de campo no se convierten
en nuevas líneas al grabarse. Se establece en Sí de forma predeterminada.

El separador Columnas define los datos que llegan al enlace que se van a grabar en archivo en el
directorio. La primera columna del separador Columnas debe definirse como una clave, y proporciona el
nombre del archivo. Las restantes columnas se graban en el archivo denominado, separando cada
columna con una línea nueva. Los datos que se van a grabar en un directorio se proporcionan
normalmente en una sola columna. Por ejemplo, la cuadrícula de columnas será parecida a la siguiente:

Con
Nombre de la posibilidades de
columna Clave Tipo de SQL Longitud Escala nulos
Nombre de U VarChar 255 No
archivo
Registro LongVarChar 999999 No

Definición de los datos de salida de la etapa Folder


El comportamiento del enlace de salida está controlado por las propiedades de salida en el separador
Propiedades de Salidas.

Las propiedades son las siguientes:


v Orden de clasificación. Puede elegir Ascendente, Descendente o Ninguno. Especifica el orden en el
que se leen los archivos en el directorio.
v Asterisco. Permite la utilización sencilla de comodines en los nombres de los archivos en el directorio.
Cualquier aparición de * (asterisco) o ... (tres puntos) se trata como una instrucción para que coincida
con cualquier carácter o con ninguno.
v Conservar CRLF. Cuando Conservar CRLF se establece en Sí, las nuevas líneas no se convierten en
marcas de campo al leerse. Se establece en Sí de forma predeterminada.
v Calificado al completo. Establezca este valor en Sí para que se escriba el nombre completo de vía de
acceso de cada archivo en la columna de clave, en lugar de sólo el nombre de archivo.

El separador Columnas define un máximo de dos columnas. La primera columna se debe marcar como la
clave y recibe el nombre de archivo. La segunda columna, si existe, recibe el contenido del archivo. Puede
cargar estas definiciones de columna de la definición de tabla predeterminada proporcionada para la

Capítulo 4. Etapas de trabajo de servidor 39


etapa. Pulse Cargar y seleccione la definición de tabla Folder que se encuentra en la carpeta Table
Definitions\Built-in\Examples del árbol de repositorios.

Etapas Hashed File


Las etapas Hashed File representan un archivo hash, es decir, un archivo que utiliza un algoritmo de
hash para distribuir registros en uno o más grupos en el disco. Utilice una etapa Hashed File para
acceder a los archivos de UniVerse. El motor de servidor puede alojar archivos de UniVerse localmente.
Puede utilizar un archivo hash como archivo intermedio en un trabajo y aprovechar las ventajas del
alojamiento local de DSEngine.

Consulte IBM InfoSphere DataStage and QualityStage Connectivity Guide for IBM UniVerse and UniData para
obtener más información sobre cómo utilizar las etapas Hashed File para acceder a los archivos de
UniVerse.

Utilización de la etapa Hashed File


Puede utilizar una etapa Hashed File para extraer o grabar datos o bien para que sirva de archivo
intermedio en un trabajo. El rol principal de una etapa Hashed File es el de una tabla de referencia
basada en un solo campo clave.

Cada etapa Hashed File puede tener una cantidad distinta de entradas o salidas. Cuando edita una etapa
Hashed File, aparece el recuadro de diálogo Etapa Hashed File. Este recuadro de diálogo puede tener
hasta tres páginas (en función de si existen entradas o salidas de la etapa):
v Etapa. Muestra el nombre de la etapa que se está editando. Esta pestaña tiene un separador General,
donde puede escribir texto para describir la finalidad de la etapa en el campo Descripción y especificar
dónde están los archivos de datos pulsando uno de los siguientes botones de opción:
– Utilizar nombre de cuenta. Si selecciona esta opción, debe elegir el nombre de la cuenta en la lista
Nombre de cuenta. Esta lista contiene todas las cuentas definidas en la carpeta Definiciones de
tablas → Con hash en el repositorio. Si la cuenta que desea no está en la lista, es conveniente definir
una definición de tabla. O buen, puede especificar un nombre de cuenta o utilizar un parámetro de
trabajo. Para obtener más información sobre cómo crear una definición de tabla, o cómo definir y
utilizar parámetros de trabajo, consulte el manual IBM InfoSphere DataStage and QualityStage Designer
Client Guide.
– Utilizar vía de acceso de directorio. Si selecciona esta opción, debe especificar una vía de acceso de
directorio que contenga la cuenta de UV. El directorio debe ser una cuenta de UniVerse y se utiliza
para las cuentas de UniVerse que no aparecen en el archivo UV.ACCOUNT. Si DSEngine aloja
localmente el archivo hash, debe especificar el directorio del proyecto de IBM InfoSphere DataStage
como la vía de acceso del directorio, por ejemplo, C:\IBM\InformationServer\Server\Projects\
Dstage. El directorio se especifica en el campo Vía de acceso de directorio. Puede especificar la vía
de acceso directamente, pulsar Examinar... para buscar un directorio adecuado en el sistema o
utilizar un parámetro de trabajo.
– Valor nulo de SQL. Determina qué carácter representa el valor nulo de SQL en el archivo hash
correspondiente a esta etapa. Si el sistema utiliza el símbolo del Euro, seleccione la opción Especial
(permitir Euro) en la lista. Seleccione Detección automática para que InfoSphere DataStage
determine que representa el nulo SQL.
– Compatibilidad de etapas de UniVerse. Marque este recuadro de selección para asegurarse de que
las conversiones de trabajos funcionarán correctamente. Con esta opción seleccionada, la fecha o la
hora se representarán en formato ISO (según el tipo ampliado) y se escalarán los números de
acuerdo con los metadatos. (El programa de utilidad de conversión de trabajos es una herramienta
autónoma especial; no está disponible en el cliente del Diseñador.)
v Entradas. Esta página sólo se muestra si dispone de un enlace de entrada de esta página. Especifica el
archivo de datos que se debe utilizar y las definiciones de columnas asociadas para cada enlace de
entrada de datos. Esta página también especifica cómo se graban datos en el archivo de datos.

40 Guía del desarrollador de Server Job


v Salidas. Esta página sólo se muestra si dispone de un enlace de salida de esta etapa. Especifica el
archivo de datos que se debe utilizar y las definiciones de columnas asociadas a cada enlace de salida
de datos.

Pulse Aceptar para cerrar este recuadro de diálogo. Los cambios se guardan cuando se guarda el trabajo.

Si una etapa Hashed File hace referencia a un archivo hash que no existe, utilice la característica Trabajo
de validación de Director antes de ejecutar el trabajo y InfoSphere DataStage lo creará automáticamente.
Para validar un trabajo, elija Trabajo → Validar en el cliente del Director. Aparecerá el diálogo Opciones
de ejecución del trabajo. Pulse Validar. Para obtener más información sobre cómo validar un trabajo y
establecer las opciones de trabajo, consulte IBM InfoSphere DataStage and QualityStage Director Client Guide.

Definición de datos de entrada de Hashed File


Al grabar datos en un archivo hash, la etapa Hashed File dispone de un enlace de entrada. Las
propiedades de este enlace y las definiciones de columnas de los datos se definen en la página Entradas
del recuadro de diálogo Etapa Hashed File.

La página Entradas presenta el campo y los dos separadores siguientes:


v Nombre de entrada. Nombre del enlace de entrada. Seleccione el enlace que desee editar desde la lista
Nombre de entrada. Esta lista muestra todos los enlaces de entrada con la etapa Hashed File.
v General. Se visualiza de forma predeterminada. Contiene los campos y opciones siguientes:
– Nombre de archivo. El nombre del archivo en el que se graban los datos. Puede utilizar un
parámetro de trabajo para representar el archivo creado en tiempo de ejecución o elegir el archivo
de la lista Nombre de archivo. Esta lista contiene todos los archivos definidos en la carpeta
Definiciones de tabla → Con hashNombre de cuenta del repositorio, donde Nombre de cuenta es el
nombre de la cuenta elegida en la página Etapa. De forma predeterminada, el nombre del enlace de
entrada se utiliza como nombre de archivo. Si el archivo que desea no está en la lista, es conveniente
definir una definición de tabla.
– Borrar archivo antes de grabar. Si selecciona este recuadro, el archivo existente se borra, y se graban
registros de datos nuevos en el archivo vacío. Este recuadro de selección está deseleccionado de
forma predeterminada.
– Hacer copia de seguridad de archivo existente. Si selecciona este recuadro, se realiza una copia de
seguridad del archivo existente antes de grabar los registros de datos nuevos en el archivo. La copia
de seguridad se puede utilizar para restablecer el archivo si un trabajo se detiene o termina
anormalmente en el tiempo de ejecución. Este recuadro de selección está deseleccionado de forma
predeterminada.
– Permitir memoria caché de grabación de la etapa. Seleccione este recuadro de selección para
especificar que todos los registros deben almacenarse en la memoria caché en lugar de grabarse
inmediatamente en el archivo hash. No lo seleccione si el trabajo graba y lee en el mismo archivo
hash en la misma secuencia de ejecución, por ejemplo, cuando una etapa Transformer comprueba si
ya existe un registro para determinar la operación necesaria. (Si tiene habilitado el almacenamiento
en memoria caché en el servidor, los atributos de memoria caché con los que se ha creado el archivo
alterarán temporalmente la memoria caché a nivel de etapa).
– Crear archivo. Seleccione este recuadro de selección para especificar que la etapa creará el archivo
hash en el que grabar. Pulse Opciones para abrir el recuadro de diálogo Opciones de creación de
archivo para especificar los detalles sobre cómo se crea el archivo (consulte “Opciones de creación
de archivo” en la página 42).
– Descripción. Contiene una descripción opcional del enlace de entrada.
v Columnas. Contiene las definiciones de columnas para los datos grabados en el archivo.

Nota: Debe utilizar los recuadros de selección Clave para identificar las columnas de claves. De lo
contrario, se toma la primera definición de columna como campo de clave del archivo hash. Las

Capítulo 4. Etapas de trabajo de servidor 41


restantes columnas dictan el orden en el que se grabarán los datos en el archivo hash. No reorganice las
definiciones de columnas de la cuadrícula a menos que esté seguro de que conoce cuáles serán las
consecuencias de su acción.

Pulse Ver datos... para abrir el Navegador de datos. Esto le permite examinar los datos asociados al
enlace de entrada. Para obtener una descripción del Navegador de datos, consulte el manual IBM
InfoSphere DataStage and QualityStage Designer Client Guide.

Opciones de creación de archivo


Si elige crear el archivo hash en el que desea grabar, el recuadro de diálogo Opciones de creación de
archivo permite especificar diversas opciones sobre cómo se crea el archivo.

El recuadro de diálogo contiene los campos siguientes:


v Tipo de archivo. El tipo de archivo seleccionado determina qué otras opciones están disponibles en el
recuadro de diálogo. El valor predeterminado es Type30(Dynamic).
v Módulo mínimo. Sólo visible para tipos de archivo Type30(Dynamic). Especifica el módulo mínimo de
archivo dinámico en el rango entre 1 y 999999. El valor predeterminado es 1.
v Tamaño del grupo. Sólo visible para tipos de archivo Type30(Dynamic). Especifica el tamaño del grupo
dinámico. Seleccione 1 para seleccionar un tamaño de grupo de 2048 bytes o bien 2 para seleccionar un
tamaño de grupo de 4096 bytes. El valor predeterminado es 1.
v Carga partida. Sólo visible para tipos de archivo Type30(Dynamic). Especifica el particionamiento del
archivo dinámico como un porcentaje entre 1 y 99. El valor predeterminado es 80.
v Carga con fusión. Sólo visible para tipos de archivo Type30(Dynamic). Especifica la carga con fusión
del archivo dinámico como un porcentaje en el rango entre 1 y 99. El valor predeterminado es 50.
v Registro grande. Sólo visible para tipos de archivo Type30(Dynamic). Especifica el valor de registro
grande en bytes en el rango entre 1 y 999999. El valor predeterminado es 1628.
v Algoritmo hash. Sólo visible para tipos de archivo Type30(Dynamic). Especifica el algoritmo de
dispersión (hash) de archivos dinámico. Seleccione entre GENERAL o SEQ.NUM. El valor
predeterminado es GENERAL.
v Tamaño de registro. Sólo visible para tipos de archivo Type30(Dynamic). Especifica el tamaño de
registro en el rango entre 1 y 999999.
v Módulo. Sólo es visible para tipos de archivo hash. Especifica el módulo del archivo hash en el rango
entre 1 y 999999. El valor predeterminado es 1.
v Separación. Sólo es visible para tipos de archivo hash. Especifica la separación del archivo hash en el
rango entre 1 y 999999. El valor predeterminado es 2.
v Atributos de memoria caché. Si tiene habilitada la memoria caché del servidor, esta opción permite
elegir los atributos de memoria caché para el archivo que está creando. Estos atributos permanecerán
con el archivo siempre que se utilice posteriormente. NINGUNO significa que no se realiza el
almacenamiento en memoria caché. GRABACIÓN DIFERIDA es el método más rápido, pero la
integridad de los archivos se puede perder si se cuelga el sistema. GRABACIÓN INMEDIATA es más
lento, pero más seguro por lo que respecta a la integridad.
v Espacio mínimo. Sólo visible para tipos de archivo Type30(Dynamic). Seleccione esta opción para
especificar que se ajusten algunas de las otras opciones para optimizar el tamaño de archivo mínimo.
v Suprimir el archivo antes de la creación. Seleccione este recuadro de selección para especificar que
cualquier archivo existente que tenga el mismo nombre se suprimirá antes de que se cree uno nuevo.

Definición de datos de salida de Hashed File


Al extraer datos de un archivo hash, la etapa Hashed File dispone de un enlace de salida. Las
propiedades de este enlace y las definiciones de columnas de los datos se definen en la página Salidas del
recuadro de diálogo Etapa Hashed File.

42 Guía del desarrollador de Server Job


La página Salidas presenta los dos campos y los tres separadores siguientes:
v Nombre de salida. Nombre del enlace de salida. Seleccione el enlace que desee editar desde la lista
Nombre de salida. Esta lista muestra todos los enlaces de salida de una etapa Hashed File.
v Normalizar. Esta lista permite normalizar (o desanidar) datos. Se puede normalizar una asociación o
una sola columna de varios valores sin asociar. La lista Normalizar sólo está habilitada para enlaces de
salida sin referencia, donde se han definido metadatos que contienen campos de varios valores.
v General. Se visualiza de forma predeterminada. Contiene los campos y opciones siguientes:
– Nombre de archivo. El nombre del archivo del que se leen los datos. Puede utilizar un parámetro
de trabajo para representar el archivo creado en tiempo de ejecución o elegir el archivo de la lista
Nombre de archivo. Esta lista contiene todos los archivos definidos en la carpeta Definiciones de
tabla → Con hashNombre de cuenta del repositorio, donde Nombre de cuenta es el nombre de la
cuenta elegida en la página Etapa. Si el archivo que desea no está en la lista, es conveniente definir
una definición de tabla.
– Lectura por registros . Seleccione esta opción para forzar la lectura del archivo registro a registro. Es
más lento, pero es necesario si desea leer y grabar el archivo hash a la vez. Si especifica una
sentencia Select en el separador Selección, el archivo se leerá por registros igualmente, y este
recuadro de selección estará seleccionado pero sombreado.
– Precargar archivo en memoria. Puede utilizar estas opciones para mejorar el rendimiento si el
enlace de salida es una entrada de referencia a una etapa Transformer. Si selecciona Habilitado, el
archivo hash se lee en la memoria cuando se ejecuta el trabajo (de forma predeterminada, está
seleccionado Inhabilitado. Las dos opciones restantes están especialmente indicadas para los
especialistas y se utilizan en aquellas situaciones en las que es necesario modificar una tabla de
búsqueda mientras se ejecuta un trabajo. Si se selecciona Habilitado, bloquear para actualizaciones,
el archivo hash se lee en la memoria cuando se ejecute el trabajo. Si no se encuentra una búsqueda
en la memoria, el trabajo buscará en el archivo que hay en el disco. Si la búsqueda sigue sin
encontrarse, se aplicará un bloqueo de actualizaciones sabiendo que el trabajo grabará
posteriormente el registro en el archivo hash. La operación de Inhabilitado, bloquear para
actualizaciones es similar, a excepción de que el archivo hash no se lee en la memoria.
– Descripción. Contiene una descripción opcional del enlace de salida.
v Columnas. Contiene las definiciones de columnas de los datos en el enlace de salida elegido.
Debe tener en cuenta lo siguiente cuando extraiga datos de un archivo hash:
– Los campos de claves deben identificarse seleccionando los recuadros Clave. (Si no lo hace, se le
avisará de que la primera columna se tratará como la clave, lo que puede generar resultados no
deseados).
– De forma predeterminada, las otras columnas se ordenan de acuerdo con la posición en el archivo.
También puede utilizar la etapa Hashed File para reorganizar las columnas en el orden en el que se
leen. Para ello, especifique el orden de columna en el campo Posición. Las columnas se grabarán en
el enlace de salida en dicho orden, aunque mantengan el mismo nombre de columna. Si utiliza esta
característica, deberá identificar las columnas de clave estableciendo su campo Posición en 0.
– No reorganice las definiciones de columnas de la cuadrícula si no está seguro de cuáles serán las
consecuencias de su acción. Tenga especial cuidado cuando utilice el campo Posición para
reorganizar las columnas y guarde la definición como una definición de tabla en el repositorio para
su reutilización posterior. En concreto, si utiliza esta definición de columna para grabar en el mismo
archivo hash, reorganizará el propio archivo.
– Puede generar un registro completo como una sola columna, si es necesario. Para ello, inserte un
valor -1 en el campo Posición de la definición de columna del campo del registro. (El campo
Posición de la columna de clave debe ser 0.)
v Selección. Contiene cláusulas SELECT opcionales para la extracción condicional de datos de un
archivo. Este separador sólo está disponible si ha especificado el archivo hash por nombre de cuenta,
en lugar de por vía de acceso del directorio, en la página Etapa.

Capítulo 4. Etapas de trabajo de servidor 43


Pulse Ver datos... para abrir el Navegador de datos. Esto le permitirá ver los datos asociados con el
enlace de salida.

Si tiene previsto leer y grabar en un archivo hash al mismo tiempo, debe configurar una selección en el
separador Selección, o debe seleccionar el recuadro de selección Lectura por registros en el separador
General. Esto garantiza que el archivo se lea en registros en lugar de en grupos y que funcionen los
bloqueos de registros. No obstante, tenga en cuenta que esta modalidad de operación es mucho más lenta
y sólo debe utilizarse si hay una clara necesidad de leer y grabar el mismo archivo al mismo tiempo.

Utilización del símbolo de euro en los sistemas sin soporte


multilingüístico
Si desea incluir el símbolo del euro en los archivos hash en los sistemas sin soporte multilingüístico,
deberá realizar varios pasos para dar soporte al símbolo. Los pasos a realizar dependen de en qué tipo de
sistema esté ejecutando el servidor de IBM InfoSphere DataStage.

Sistemas UNIX con la página de códigos ISO 8859-15


Para dar soporte al símbolo de euro en este sistema, debe editar el archivo msg.txt en el directorio de
inicio de IBM InfoSphere DataStage, tal como se muestra a continuación:
v En la línea LOC0016, sustituya el símbolo $ por el símbolo de euro (puede generar un símbolo de euro
utilizando un teclado que lo genere, o utilizar el mandato BASIC char(128) o char(164).
v En la línea LOC0015, asegúrese de que se haya establecido el separador decimal correcto.
v En la línea LOC0014, asegúrese de que se haya establecido el separador de millares correcto.

Sistemas Windows y sistemas UNIX con la página de códigos Windows


En estos sistemas, el código que representa el símbolo de euro puede entrar en conflicto con la
representación de nulo de SQL de los archivos hash. Para solucionar este problema, deben realizarse
varios pasos:
v Si el sistema no necesitará nunca que el símbolo de euro aparezca de forma aislada en una columna de
un archivo hash, lo único que debe hacer es editar el archivo msg.txt en el directorio de inicio de IBM
InfoSphere DataStage, tal como se muestra a continuación:
– En la línea LOC0016, sustituya el símbolo $ por el símbolo de euro (puede generar un símbolo de
euro utilizando un teclado que lo genere, o utilizar el mandato BASIC char(128) o char(164).
– En la línea LOC0015, asegúrese de que se haya establecido el separador decimal correcto.
– En la línea LOC0014, asegúrese de que se haya establecido el separador de millares correcto.
v Si el sistema requiere utilizar el símbolo de euro de forma aislada, deberá elegir otro carácter para
representar el nulo de SQL. Esta acción se realiza en el separador General de la página Etapa del
archivo hash. Seleccione una de las opciones siguientes en la lista Valor nulo de SQL:
– Especial (permitir Euro). Esta opción establece el nulo de SQL en 0x19.
– Detección automática. Esta opción detecta si el euro es el símbolo de la moneda local y, en caso
afirmativo, establece el nulo de SQL en 0x19.

Etapas Sequential File


Las etapas Sequential File se utilizan para extraer datos de, o grabar datos en, un archivo de texto. El
archivo de texto se puede crear o puede existir en cualquier unidad que sea local o que esté
correlacionada con el servidor. Cada etapa Sequential File puede tener una cantidad distinta de entradas
o salidas.

44 Guía del desarrollador de Server Job


Utilización de la etapa Sequential File
Cuando edita una etapa Sequential File, aparece el recuadro de diálogo Etapa Sequential File. Este
recuadro de diálogo puede tener hasta tres páginas (en función de si existen entradas o salidas de la
etapa):
v Etapa. Muestra el nombre de la etapa que se está editando. El separador General también permite
especificar opciones de finalización de línea, una descripción opcional de la etapa y si la etapa utiliza
conductos con nombre o mandatos de filtro.
Las opciones de finalización de línea permiten establecer el tipo de terminador de línea que se utiliza
en la etapa Sequential File. De forma predeterminada, la finalización de línea coincide con el tipo
utilizado en el servidor IBM InfoSphere DataStage. Para cambiar el valor, elija Estilo Unix (LF), Estilo
DOS (CR LF) o Ninguno.
Seleccione el recuadro de selección La etapa utiliza conductos con nombre si desea utilizar los
recursos de los conductos con nombre. Estos recursos permiten dividir un trabajo grande en diversos
trabajos más pequeños. Se recomienda hacerlo si hay un elevado grado de paralelismo en el diseño, ya
que aumenta el rendimiento y permite a varios desarrolladores trabajar en el diseño al mismo tiempo.
Cuando este recuadro de selección está seleccionado, todas las entradas y salidas de la etapa utilizan
conductos con nombre. Puede ver algunos ejemplos de cómo utilizar los recursos de conducto con
nombre en la ayuda del desarrollador de InfoSphere DataStage.
Seleccione La etapa utiliza mandatos de filtro si desea especificar un mandato de filtro para procesar
los datos en los enlaces de entrada o de salida. En el separador General de la página Entradas o
Salidas se proporcionan detalles del mandato en cuestión (consulte “Definición de datos de entrada de
Sequential File” en la página 46 y “Definición de datos de salida de Sequential File” en la página 48).
Las opciones La etapa utiliza conductos con nombre y La etapa utiliza mandatos de filtro son
mutuamente exclusivas.
Si el soporte multilingüístico está habilitado, el separador Soporte multilingüístico permite definir una
correlación de juegos de caracteres y valores Unicode para la etapa. Para obtener más información,
consulte “Definición de correlaciones de juegos de caracteres”.
v Entradas. Contiene información sobre los formatos de archivo y las definiciones de columna para cada
enlace de entrada de datos. Esta página sólo se muestra si dispone de un enlace de entrada de esta
página.
v Salidas. Contiene información sobre el formato de archivo y las definiciones de columna para los
enlaces de salida de datos. Esta página solamente aparece si dispone de un enlace de salida de esta
etapa.

Pulse Aceptar para cerrar este recuadro de diálogo. Los cambios se guardan cuando se guarda el trabajo.

Definición de correlaciones de juegos de caracteres


Puede definir una correlación de juegos de caracteres para una etapa Sequential File mediante el
separador NLS en el recuadro diálogo Etapa Sequential File.

La correlación de juegos de caracteres predeterminada (definida para el proyecto o el trabajo) se puede


cambiar seleccionando un nombre de correlación de la lista. El separador también presenta los campos
siguientes:
v Mostrar todas las correlaciones. Elija este campo para mostrar todas las correlaciones proporcionadas
con IBM InfoSphere DataStage en la lista. Las correlaciones no se pueden utilizar a menos que se
hayan cargado utilizando el cliente del Administrador.
v Sólo correlaciones cargadas. Muestra las correlaciones que se han cargado y que están preparadas para
ser utilizadas.
v Utilizar parámetro de trabajo... . Permite especificar una correlación de juegos de caracteres como un
parámetro del trabajo que contiene la etapa. Si el parámetro todavía no se ha definido, el sistema
solicitará su definición desde el recuadro de diálogo Propiedades del trabajo.
Capítulo 4. Etapas de trabajo de servidor 45
v Utilizar correlación de UNICODE. Si selecciona este campo, la correlación del juegos de caracteres se
altera temporalmente y todos los datos se leen y se graban en formato Unicode con dos bytes por
carácter.
– Si se selecciona Intercambio de bytes, los datos se leen o se graban con el byte de orden inferior
primero. Por ejemplo, 0X0041 (es decir, "A") se graba como los bytes 0X41,0X00. De lo contrario, se
graba como 0X00,0X41.
– Si se selecciona El primer carácter es la marca de orden de bytes, la etapa lee o graba la secuencia
0XFE,0XFF, si hay intercambio de bytes, o 0XFF,0XFE si no hay intercambio de bytes.

Definición de datos de entrada de Sequential File


Al grabar datos en un archivo secuencial, la etapa Sequential File dispone de un enlace de entrada. Las
propiedades de este enlace y las definiciones de columnas de los datos se definen en la página Entradas
del recuadro de diálogo Etapa Sequential File.

La página Entradas contiene el campo y los tres separadores siguientes:


v Nombre de entrada. Nombre del enlace de entrada. Seleccione el enlace que desee editar desde la lista
Nombre de entrada. Esta lista muestra todos los enlaces de entrada con la etapa Sequential File.
v General. Se visualiza de forma predeterminada. Contiene los siguientes parámetros:
– Nombre de archivo. El nombre de vía de acceso del archivo en el que se graban los datos. Puede
especificar un parámetro de trabajo que represente el archivo creado en tiempo de ejecución. Para
obtener más información sobre cómo definir parámetros de trabajo, consulte el manual IBM
InfoSphere DataStage and QualityStage Designer Client Guide. También se puede localizar el archivo. Si
no especifica ninguno, el nombre de archivo tomará como valor predeterminado el nombre del
enlace.
– Mandato de filtro. Aquí puede especificar un programa de filtro que procese los datos antes de que
se graben en el archivo. Por ejemplo, este parámetro se puede utilizar para especificar un programa
zip para comprimir los datos. Puede escribir el nombre del programa de filtro, o examinar para
buscarlo, y especificar los argumentos de línea de mandatos que necesite en el recuadro de texto.
Este recuadro de texto sólo estará habilitado si se ha seleccionado el recuadro de selección La etapa
utiliza mandatos de filtro en el separador General de la página Etapa (consulte “Utilización de la
etapa Sequential File” en la página 45). Tenga en cuenta que si se especifica un mandato de filtro, no
se podrán examinar los datos, por lo que el botón Ver datos estará inhabilitado.
– Descripción. Contiene una descripción opcional del enlace de entrada.
El separador General también contiene opciones que determinan cómo se graban los datos en el
archivo. Se encuentran debajo del área Acción de actualización:
– Sobrescribir archivo existente. Esta opción es la predeterminada. Si se selecciona esta opción, el
archivo existente se trunca y los nuevos registros de datos se graban en un archivo vacío.
– Anexar a archivo existente. Si selecciona esta opción, los registros de datos se anexan al final del
archivo existente.
– Hacer copia de seguridad de archivo existente. Si selecciona este recuadro de selección, se realiza
una copia de seguridad del archivo existente. Los nuevos registros de datos se graban según decida
anexar o sobrescribir el archivo existente.

Nota: La copia de seguridad se puede utilizar para restablecer el archivo si un trabajo se detiene o
termina anormalmente en el tiempo de ejecución. Consulte IBM InfoSphere DataStage and QualityStage
Designer Client Guide para obtener más información.
v Formato. Contiene parámetros que determinan el formato de los datos del archivo. Puede haber hasta
cuatro recuadros de selección:

46 Guía del desarrollador de Server Job


– Columnas de anchura fija. Si selecciona este recuadro de selección, los datos se graban en el archivo
en columnas de anchura fija. La anchura de cada columna se especifica mediante el tamaño de
visualización de SQL (establecido en la columna Visualización de la cuadrícula Columnas). De
forma predeterminada, esta opción está borrada.
– La primera línea es nombres de columnas. Seleccione este recuadro de selección si la primera fila
de datos del archivo contiene nombres de columna. Esta opción está sin marcar de forma
predeterminada; es decir, la primera fila del archivo contiene datos.
– Omitir última línea nueva. Marque este recuadro de selección si desea eliminar el último carácter
de nueva línea del archivo. Esta opción está sin marcar de forma predeterminada; es decir, el
carácter de línea nueva no se elimina.
– Desechar después de cada fila. Este parámetro sólo aparece si ha seleccionado La etapa utiliza
conductos con nombre en la página Etapa. Si selecciona este recuadro de selección, los datos se
pasan entre el lector y el grabador del conducto registro por registro.
Puede haber hasta siete campos en el separador Formato:
– Delimitador. Sólo se activa si no ha especificado columnas de anchura fija. Contiene el delimitador
que separa los campos de datos en el archivo. De forma predeterminada, este campo contiene una
coma. Puede entrar un único carácter imprimible o un número decimal o hexadecimal para
representar el código ASCII del carácter que desea utilizar. Los códigos ASCII válidos se encuentran
en el rango del 1 al 253. Los valores decimales entre el 1 y el 9 deben estar precedidos por un cero.
Los valores hexadecimales deben prefijarse con &h. Entre 000 para suprimir el delimitador.
– Carácter de cita. Sólo se activa si no ha especificado columnas de anchura fija. Contiene el carácter
utilizado para incluir series. De forma predeterminada, este campo contiene un carácter de comillas
dobles. Puede entrar un único carácter imprimible o un número decimal o hexadecimal para
representar el código ASCII del carácter que desea utilizar. Los códigos ASCII válidos se encuentran
en el rango del 1 al 253. Los valores decimales entre el 1 y el 9 deben estar precedidos por un cero.
Los valores hexadecimales deben prefijarse con &h. Entre 000 para suprimir el carácter de cita.
– Espacios entre columnas. Este campo sólo se activa cuando selecciona el recuadro de selección
Columnas de anchura fija. Contiene un número para representar el número de espacios utilizado
entre columnas.
– Serie NULL predeterminada. Contiene los caracteres predeterminados que se graban en el archivo
cuando una columna contiene un valor nulo de SQL (que puede ser sobrescrito para una definición
de columna individual en el separador Columnas).
– Relleno predeterminado. Contiene el carácter utilizado para rellenar las columnas ausentes. Es # de
forma predeterminada, pero puede establecerse en otro carácter para aplicarlo a todas las columnas
o puede alterarse temporalmente para definiciones de columnas individuales en el separador
Columnas.
Los campos siguientes sólo aparecen si ha seleccionado La etapa utiliza conductos con nombre en
la página Etapa:
– Esperar que transcurra el tiempo de espera del lector. Especifica cuánto tiempo esperará la etapa
una conexión durante la lectura de un conducto antes de que se exceda el tiempo de espera. Los
valores recomendados son de 30 a 600 segundos. Si la etapa supera el tiempo de espera , se emitirá
un error y el trabajo terminará anormalmente.
– Tiempo de espera para la grabación. Especifica durante cuánto tiempo intentará la etapa grabar
datos en un conducto antes de exceder el tiempo de espera. Los valores recomendados son de 30 a
600 segundos. Si la etapa supera el tiempo de espera , se emitirá un error y el trabajo terminará
anormalmente.
v Columnas. Contiene las definiciones de columnas de los datos en el enlace de entrada elegido. Además
de los campos de definición de columna estándar (Nombre de columna, Clave, Tipo de SQL, Longitud,
Escala, Con posibilidades de nulos, Visualización, Elemento de datos y Descripción), los separadores
Columna de la etapa Sequential File también tienen los campos siguientes:
– Serie Null. Rellene este campo si desea alterar temporalmente el valor predeterminado del
separador Formato correspondiente a esta columna en particular.

Capítulo 4. Etapas de trabajo de servidor 47


– Relleno. Rellene este campo si desea alterar temporalmente el valor predeterminado del separador
Formato correspondiente a esta columna en particular.
– Contiene terminadores. No se aplica a los enlaces de entrada.
– Columna incompleta. No se aplica a los enlaces de entrada.
Tenga en cuenta que la Escala de una columna de archivo secuencial tiene un límite práctico de 14.
Si se utilizan valores mayores que este, los resultados pueden ser ambiguos.
Las propiedades de tipo de datos SQL afectan a cómo se graban los datos en un archivo secuencial.
El tamaño de visualización de SQL determina el tamaño de las columnas de anchura fija. El tipo de
datos SQL determina cómo se justifican los datos en una columna: los tipos de datos de carácter se
escriben entre comillas y están justificados a la izquierda, y los tipos de datos numéricos no se
escriben entre comillas y están justificados a la derecha. Las propiedades de SQL están en la
cuadrícula Columnas cuando edita una columna de entrada.

Pulse Ver datos... para abrir el Navegador de datos. Esto le permite examinar los datos asociados al
enlace de entrada. Para obtener una descripción del Navegador de datos, consulte el manual IBM
InfoSphere DataStage and QualityStage Designer Client Guide.

Definición de datos de salida de Sequential File


Al extraer (leer) datos de un archivo secuencial, la etapa Sequential File dispone de un enlace de salida.
Las propiedades de este enlace y las definiciones de columnas de los datos se definen en la página
Salidas del recuadro de diálogo Etapa Sequential File.

La página Salidas presenta el campo y los tres separadores siguientes:


v Nombre de salida. Nombre del enlace de salida. Seleccione el enlace que desee editar desde la lista
Nombre de salida. Esta lista muestra todos los enlaces de salida con la etapa Sequential File.
v General. Se visualiza de forma predeterminada. Hay dos campos:
– Nombre de archivo. El nombre de vía de acceso del archivo del que se extraen los datos. Puede
especificar un parámetro de trabajo que represente el archivo creado en tiempo de ejecución.
También se puede localizar el archivo.
– Mandato de filtro. Aquí puede especificar un programa de filtro para procesar el archivo del que
está extrayendo datos. Por ejemplo, esta característica se puede utilizar para descomprimir un
archivo comprimido antes de leerlo. Puede escribir el nombre del programa de filtro, o examinar
para buscarlo, y especificar los argumentos de línea de mandatos que necesite en el recuadro de
texto. Este recuadro de texto sólo estará habilitado si se ha seleccionado el recuadro de selección La
etapa utiliza mandatos de filtro en el separador General de la página Etapa (consulte “Utilización
de la etapa Sequential File” en la página 45). Tenga en cuenta que si se especifica un mandato de
filtro, no se podrán examinar los datos, por lo que el botón Ver datos estará inhabilitado.
– Descripción. Contiene una descripción opcional del enlace de salida.
v Formato. Contiene parámetros que determinan el formato de los datos del archivo. Hay tres recuadros
de selección:
– Columnas de anchura fija. Si selecciona este recuadro de selección, los datos se extraen del archivo
en columnas de anchura fija. La anchura de cada columna se especifica mediante el tamaño de
visualización de SQL (establecido en la columna Visualización de la cuadrícula Columnas). De
forma predeterminada, esta opción está borrada.
– La primera línea es nombres de columnas. Seleccione este recuadro de selección si la primera fila
de datos del archivo contiene nombres de columna. Esta opción está sin marcar de forma
predeterminada; es decir, la primera fila del archivo contiene datos.
– Supresión de advertencias de truncamiento de filas. Si el archivo secuencial que se está leyendo
contiene más columnas que las que haya definido, normalmente recibirá avisos acerca de las filas

48 Guía del desarrollador de Server Job


demasiado largas cuando ejecute el trabajo. Si desea suprimir este mensaje (por ejemplo, es posible
que sólo esté interesado en las tres primeras columnas y desee prescindir del resto), seleccione este
recuadro de selección.
Puede haber hasta ocho campos en el separador Formato:
– Acción si faltan columnas. Permite especificar la acción que se debe realizar cuando falta una
columna de los datos de entrada. Elija Rellenar con nulo de SQL, Correlacionar serie vacía o
Rellenar con serie vacía en la lista.
– Delimitador. Sólo se activa si no ha especificado columnas de anchura fija. Contiene el delimitador
que separa los campos de datos en el archivo. De forma predeterminada, este campo contiene una
coma. Puede entrar un único carácter imprimible o un número decimal o hexadecimal para
representar el código ASCII del carácter que desea utilizar. Los códigos ASCII válidos se encuentran
en el rango del 1 al 253. Los valores decimales entre el 1 y el 9 deben estar precedidos por un cero.
Los valores hexadecimales deben prefijarse con &h. Entre 000 para suprimir el delimitador.
– Carácter de cita. Sólo se activa si no ha especificado columnas de anchura fija. Contiene el carácter
utilizado para incluir series. De forma predeterminada, este campo contiene un carácter de comillas
dobles. Puede entrar un único carácter imprimible o un número decimal o hexadecimal para
representar el código ASCII del carácter que desea utilizar. Los códigos ASCII válidos se encuentran
en el rango del 1 al 253. Los valores decimales entre el 1 y el 9 deben estar precedidos por un cero.
Los valores hexadecimales deben prefijarse con &h. Entre 000 para suprimir el carácter de cita.
– Espacios entre columnas. Este campo sólo se activa cuando selecciona el recuadro de selección
Columnas de anchura fija. Contiene un número para representar el número de espacios utilizado
entre columnas.
– Serie NULL predeterminada. Contiene caracteres que, cuando se encuentran en el archivo
secuencial que se está leyendo, se interpretan como el valor nulo de SQL (que puede ser sobrescrito
para definiciones de columna individuales en el separador Columnas).
– Relleno predeterminado. Contiene el carácter utilizado para rellenar las columnas ausentes. Es # de
forma predeterminada, pero puede establecerse en otro carácter para aplicarlo a todas las columnas
o puede alterarse temporalmente para definiciones de columnas individuales en el separador
Columnas.
Los campos siguientes sólo aparecen si ha seleccionado La etapa utiliza conductos con nombre en
la página Etapa:
– Esperar que transcurra el tiempo de espera del grabador. Especifica cuánto tiempo esperará la
etapa una conexión durante la grabación en un conducto antes de que se exceda el tiempo de
espera. Los valores recomendados son de 30 a 600 segundos. Si la etapa supera el tiempo de espera ,
se emitirá un error y el trabajo terminará anormalmente.
– Tiempo de espera para la lectura. Especifica durante cuánto tiempo intentará la etapa leer datos de
un conducto antes de exceder el tiempo de espera. Los valores recomendados son de 30 a 600
segundos. Si la etapa supera el tiempo de espera , se emitirá un error y el trabajo terminará
anormalmente.
v Columnas. Contiene las definiciones de columnas de los datos en el enlace de salida elegido. Además
de los campos de definición de columna estándar (Nombre de columna, Clave, Tipo de SQL, Longitud,
Escala, Con posibilidades de nulos, Visualización, Elemento de datos y Descripción), los separadores
Columna de la etapa Sequential File también tienen los campos siguientes:
– Serie Null. Rellene este campo si desea alterar temporalmente el valor predeterminado del
separador Formato correspondiente a esta columna en particular.
– Relleno. Rellene este campo si desea alterar temporalmente el valor predeterminado del separador
Formato correspondiente a esta columna en particular.
– Contiene terminadores. Utilice este campo para especificar cómo se tratan las marcas de fin de
registro, (EOR, del inglés End of Record) en esta columna. Elija entre:
Sí para especificar que los datos pueden incluir marcas de EOR y que su significado no se debe
interpretar como el de fin de registro. Para la definición de la columna final de un archivo CSV, la
opción Sí está inhabilitada.

Capítulo 4. Etapas de trabajo de servidor 49


Entrecomillado para especificar que las marcas de EOR que forman parte de los datos van
entrecomilladas, mientras que las marcas de EOR sin entrecomillar se deben interpretar como fin de
registro.
No para especificar que las marcas de EOR de la columna se deben interpretar como fin de registro.
– Columna incompleta. Permite especificar la acción que se realiza si la columna contiene datos
insuficientes para coincidir con los metadatos. Puede elegir:
Error para terminar anormalmente el trabajo cuando se encuentra una fila de este tipo.
Descartar y avisar para descartar la fila de datos actual y emitir un aviso.
Sustituir y avisar para rellenar una columna corta con un nulo de SQL, o actuar de acuerdo con
Acción si faltan columnas si falta una columna y grabar un aviso en el archivo de registro.
Retener y avisar para pasar los datos tal cual, pero emitiendo un aviso.
Retener para pasar los datos tal cual.
Sustituir para rellenar una columna corta con un nulo de SQL, o actuar de acuerdo con Acción si
faltan columnas si falta una columna.
El comportamiento de Columna incompleta también depende de si el archivo es de anchura fija o
CSV. En formato CSV, resulta imposible tener una columna corta, de modo que la opción se aplica
sólo a las columnas ausentes y las opciones Retener no tienen sentido.

Pulse Ver datos... para abrir el Navegador de datos. Esto le permitirá ver los datos asociados con el
enlace de salida.

Cómo se comporta la etapa Sequential


Las tablas siguientes muestran cómo una etapa Sequential File procesa dos filas de datos con varias
opciones establecidas en el editor de etapas.

Los metadatos del enlace especifican que los datos se organizan en tres columnas que contienen tres
caracteres cada una. En la tabla, <EMPTY> indica un nulo SQL, una serie vacía o una serie vacía
correlacionada, dependiendo de los valores.
Conjunto de datos de entrada 1
Fila 1: ABC|123|<LF>YZ<LF>
Fila 2: PQR...
Tabla 3. Conjunto de datos de entrada 1
Opciones de Opciones de columna:
¿Inicio
formato (se aplica a todas las filas)
de
Finalización Contiene Columna Datos de salida Entradas de 2ª
de línea terminadores incompleta (primera fila) registro fila? Comentario
<LF> N Error Ninguno Error muy n/d Sin datos de
UNIX Descartar y avisar Ninguno grave Y salida
Sustituir y avisar ABC|123|<EMPTY> Aviso Y Fila 1 descartada
Sustituir ABC|123|<EMPTY> Aviso Y Fila fantasma
Retener y avisar "ABC|123|" " " " " Ninguno Y Fila fantasma
Retener "ABC|123|" " " " " Aviso Y Fila fantasma
Ninguno Fila fantasma
<LF> S Error ABC|123|<LF>YZ Ninguno P Datos correctos
UNIX Descartar y avisar ABC|123|<LF>YZ Ninguno P Datos correctos
Sustituir y avisar ABC|123|<LF>YZ Ninguno P Datos correctos
Sustituir ABC|123|<LF>YZ Ninguno P Datos correctos
Retener y avisar ABC|123|<LF>YZ Ninguno P Datos correctos
Retener ABC|123|<LF>YZ Ninguno P Datos correctos

50 Guía del desarrollador de Server Job


Tabla 3. Conjunto de datos de entrada 1 (continuación)
Opciones de Opciones de columna:
¿Inicio
formato (se aplica a todas las filas)
de
Finalización Contiene Columna Datos de salida Entradas de 2ª
de línea terminadores incompleta (primera fila) registro fila? Comentario
<CR><LF> N Error ABC|123|<LF>YZ Ninguno n/d Sin fin de fila
DOS Descartar y avisar ABC|123|<LF>YZ Ninguno n/d Sin fin de fila
Sustituir y avisar ABC|123|<LF>YZ Ninguno n/d Sin fin de fila
Sustituir ABC|123|<LF>YZ Ninguno n/d Sin fin de fila
Retener y avisar ABC|123|<LF>YZ Ninguno n/d Sin fin de fila
Retener ABC|123|<LF>YZ Ninguno n/d Sin fin de fila
<CR><LF> S Error ABC|123|<LF>YZ Ninguno n/d Sin fin de fila
DOS Descartar y avisar ABC|123|<LF>YZ Ninguno n/d Sin fin de fila
Sustituir y avisar ABC|123|<LF>YZ Ninguno n/d Sin fin de fila
Sustituir ABC|123|<LF>YZ Ninguno n/d Sin fin de fila
Retener y avisar ABC|123|<LF>YZ Ninguno n/d Sin fin de fila
Retener ABC|123|<LF>YZ Ninguno n/d Sin fin de fila
Ninguno n/d Error ABC|123|<LF>YZ Ninguno <LF> Omisión de
Descartar y avisar ABC|123|<LF>YZ Ninguno <LF> datos
Sustituir y avisar ABC|123|<LF>YZ Ninguno <LF> Omisión de
Sustituir ABC|123|<LF>YZ Ninguno <LF> datos
Retener y avisar ABC|123|<LF>YZ Ninguno <LF> Omisión de
Retener ABC|123|<LF>YZ Ninguno <LF> datos
Omisión de
datos
Omisión de
datos
Omisión de
datos

Conjunto de datos de entrada 2


Fila 1: ABC|123|X<LF>Z<LF>
Fila 2: PQR...
Tabla 4. Conjunto de datos de entrada 2
Opciones de Opciones de columna:
¿Inicio
formato (se aplica a todas las filas)
de
Finalización Contiene Columna Datos de salida Entradas de 2ª
de línea terminadores incompleta (primera fila) registro fila? Comentario
<LF> N Error Ninguno Error muy n/d Sin datos de
UNIX Descartar y avisar Ninguno grave Z salida
Sustituir y avisar ABC|123|<EMPTY> Aviso Z Fila 1 descartada
Sustituir ABC|123|<EMPTY> Aviso Z Fila fantasma
Retener y avisar ABC|123|X Ninguno Z Fila fantasma
Retener ABC|123|X Aviso Z Fila fantasma
Ninguno Fila fantasma
<LF> S Error ABC|123|X<LF>Z Ninguno P Datos correctos
UNIX Descartar y avisar ABC|123|X<LF>Z Ninguno P Datos correctos
Sustituir y avisar ABC|123|X<LF>Z Ninguno P Datos correctos
Sustituir ABC|123|X<LF>Z Ninguno P Datos correctos
Retener y avisar ABC|123|X<LF>Z Ninguno P Datos correctos
Retener ABC|123|X<LF>Z Ninguno P Datos correctos

Capítulo 4. Etapas de trabajo de servidor 51


Tabla 4. Conjunto de datos de entrada 2 (continuación)
Opciones de Opciones de columna:
¿Inicio
formato (se aplica a todas las filas)
de
Finalización Contiene Columna Datos de salida Entradas de 2ª
de línea terminadores incompleta (primera fila) registro fila? Comentario
<CR><LF> N Error ABC|123|X<LF>Z Ninguno n/d Sin fin de fila
DOS Descartar y avisar ABC|123|X<LF>Z Ninguno n/d Sin fin de fila
Sustituir y avisar ABC|123|X<LF>Z Ninguno n/d Sin fin de fila
Sustituir ABC|123|X<LF>Z Ninguno n/d Sin fin de fila
Retener y avisar ABC|123|X<LF>Z Ninguno n/d Sin fin de fila
Retener ABC|123|X<LF>Z Ninguno n/d Sin fin de fila
<CR><LF> S Error ABC|123|X<LF>Z Ninguno n/d Sin fin de fila
DOS Descartar y avisar ABC|123|X<LF>Z Ninguno n/d Sin fin de fila
Sustituir y avisar ABC|123|X<LF>Z Ninguno n/d Sin fin de fila
Sustituir ABC|123|X<LF>Z Ninguno n/d Sin fin de fila
Retener y avisar ABC|123|X<LF>Z Ninguno n/d Sin fin de fila
Retener ABC|123|X<LF>Z Ninguno n/d Sin fin de fila
Ninguno n/d Error ABC|123|X<LF>Z Ninguno <LF> Omisión de
Descartar y avisar ABC|123|X<LF>Z Ninguno <LF> datos
Sustituir y avisar ABC|123|X<LF>Z Ninguno <LF> Omisión de
Sustituir ABC|123|X<LF>Z Ninguno <LF> datos
Retener y avisar ABC|123|X<LF>Z Ninguno <LF> Omisión de
Retener ABC|123|X<LF>Z Ninguno <LF> datos
Omisión de
datos
Omisión de
datos
Omisión de
datos

Conjunto de datos de entrada 3


Fila 1: ABC|12<LF>|XYZ<LF>
Fila 2: PQR...
Tabla 5. Conjunto de datos de entrada 3
Opciones de Opciones de columna:
¿Inicio
formato (se aplica a todas las filas)
de
Finalización Contiene Columna Datos de salida Entradas de 2ª
de línea terminadores incompleta (primera fila) registro fila? Comentario
<LF> N Error Ninguno Error muy n/d Sin datos de
UNIX Descartar y avisar Ninguno grave X salida
Sustituir y avisar ABC|<EMPTY>| Aviso X Descartar fila 1
Sustituir <EMPTY> Aviso X Fila fantasma
Retener y avisar ABC|<EMPTY>| Ninguno X Fila fantasma
Retener <EMPTY> Aviso X Fila fantasma
ABC|12|<EMPTY> Ninguno Fila fantasma
ABC|12|<EMPTY>
<LF> S Error ABC|12<LF>|XYZ Ninguno P Datos correctos
UNIX Descartar y avisar ABC|12<LF>|XYZ Ninguno P Datos correctos
Sustituir y avisar ABC|12<LF>|XYZ Ninguno P Datos correctos
Sustituir ABC|12<LF>|XYZ Ninguno P Datos correctos
Retener y avisar ABC|12<LF>|XYZ Ninguno P Datos correctos
Retener ABC|12<LF>|XYZ Ninguno P Datos correctos

52 Guía del desarrollador de Server Job


Tabla 5. Conjunto de datos de entrada 3 (continuación)
Opciones de Opciones de columna:
¿Inicio
formato (se aplica a todas las filas)
de
Finalización Contiene Columna Datos de salida Entradas de 2ª
de línea terminadores incompleta (primera fila) registro fila? Comentario
<CR><LF> N Error ABC|12<LF>|XYZ Ninguno n/d Sin fin de fila
DOS Descartar y avisar ABC|12<LF>|XYZ Ninguno n/d Sin fin de fila
Sustituir y avisar ABC|12<LF>|XYZ Ninguno n/d Sin fin de fila
Sustituir ABC|12<LF>|XYZ Ninguno n/d Sin fin de fila
Retener y avisar ABC|12<LF>|XYZ Ninguno n/d Sin fin de fila
Retener ABC|12<LF>|XYZ Ninguno n/d Sin fin de fila
<CR><LF> S Error ABC|12<LF>|XYZ Ninguno n/d Sin fin de fila
DOS Descartar y avisar ABC|12<LF>|XYZ Ninguno n/d Sin fin de fila
Sustituir y avisar ABC|12<LF>|XYZ Ninguno n/d Sin fin de fila
Sustituir ABC|12<LF>|XYZ Ninguno n/d Sin fin de fila
Retener y avisar ABC|12<LF>|XYZ Ninguno n/d Sin fin de fila
Retener ABC|12<LF>|XYZ Ninguno n/d Sin fin de fila
Ninguno n/d Error ABC|12<LF>|XYZ Ninguno <LF> Omisión de
Descartar y avisar ABC|12<LF>|XYZ Ninguno <LF> datos
Sustituir y avisar ABC|12<LF>|XYZ Ninguno <LF> Omisión de
Sustituir ABC|12<LF>|XYZ Ninguno <LF> datos
Retener y avisar ABC|12<LF>|XYZ Ninguno <LF> Omisión de
Retener ABC|12<LF>|XYZ Ninguno <LF> datos
Omisión de
datos
Omisión de
datos
Omisión de
datos

Conjunto de datos de entrada 4


Fila 1: ABC|123|<eof>
Tabla 6. Conjunto de datos de entrada 4
Opciones de Opciones de columna:
¿Inicio
formato (se aplica a todas las filas)
de
Finalización Contiene Columna Datos de salida Entradas de 2ª
de línea terminadores incompleta (primera fila) registro fila? Comentario
<LF> N Error Ninguno Error muy n/d Sin datos de
UNIX Descartar y avisar Ninguno grave salida
Sustituir y avisar ABC|123|<EMPTY> Aviso Descartar fila 1
Sustituir ABC|123|<EMPTY> Aviso Datos correctos
Retener y avisar "ABC|123|" " " " " Ninguno Datos correctos
Retener "ABC|123|" " " " " Aviso Datos correctos
Ninguno Datos correctos
<LF> S Error Ninguno Error muy n/d Sin datos de
UNIX Descartar y avisar Ninguno grave salida
Sustituir y avisar ABC|123|<EMPTY> Aviso Descartar fila 1
Sustituir ABC|123|<EMPTY> Aviso Datos correctos
Retener y avisar "ABC|123|" " " " " Ninguno Datos correctos
Retener "ABC|123|" " " " " Aviso Datos correctos
Ninguno Datos correctos

Capítulo 4. Etapas de trabajo de servidor 53


Tabla 6. Conjunto de datos de entrada 4 (continuación)
Opciones de Opciones de columna:
¿Inicio
formato (se aplica a todas las filas)
de
Finalización Contiene Columna Datos de salida Entradas de 2ª
de línea terminadores incompleta (primera fila) registro fila? Comentario
<CR><LF> N Error Ninguno Error muy n/d Sin datos de
DOS Descartar y avisar Ninguno grave salida
Sustituir y avisar ABC|123|<EMPTY> Aviso Descartar fila 1
Sustituir ABC|123|<EMPTY> Aviso Datos correctos
Retener y avisar "ABC|123|" " " " " Ninguno Datos correctos
Retener "ABC|123|" " " " " Aviso Datos correctos
Ninguno Datos correctos
<CR><LF> S Error Ninguno Error muy n/d Sin datos de
DOS Descartar y avisar Ninguno grave salida
Sustituir y avisar ABC|123|<EMPTY> Aviso Descartar fila 1
Sustituir ABC|123|<EMPTY> Aviso Datos correctos
Retener y avisar "ABC|123|" " " " " Ninguno Datos correctos
Retener "ABC|123|" " " " " Aviso Datos correctos
Ninguno Datos correctos
Ninguno n/d Error Ninguno Error muy n/d Sin datos de
Descartar y avisar Ninguno grave salida
Sustituir y avisar ABC|123|<EMPTY> Aviso Descartar fila 1
Sustituir ABC|123|<EMPTY> Aviso Datos correctos
Retener y avisar "ABC|123|" " " " " Ninguno Datos correctos
Retener "ABC|123|" " " " " Aviso Datos correctos
Ninguno Datos correctos

Conjunto de datos de entrada 5


Fila 1: ABC|12<CR>|<LF>YZ<CR><LF>
Fila 2: PQR...
Tabla 7. Conjunto de datos de entrada 5
Opciones de Opciones de columna:
¿Inicio
formato (se aplica a todas las filas)
de
Finalización Contiene Columna Datos de salida Entradas de 2ª
de línea terminadores incompleta (primera fila) registro fila? Comentario
<LF> N Error Ninguno Error muy n/d Sin datos de
UNIX Descartar y avisar Ninguno grave Y salida
Sustituir y avisar ABC|12<CR>| Aviso Y Descartar fila 1
Sustituir <EMPTY> Aviso Y Fila fantasma
Retener y avisar ABC|12<CR>| Ninguno Y Fila fantasma
Retener <EMPTY> Aviso Y Fila fantasma
"ABC|12<CR>| Ninguno Fila fantasma
" " " " "
"ABC|12<CR>|
" " " " "

54 Guía del desarrollador de Server Job


Tabla 7. Conjunto de datos de entrada 5 (continuación)
Opciones de Opciones de columna:
¿Inicio
formato (se aplica a todas las filas)
de
Finalización Contiene Columna Datos de salida Entradas de 2ª
de línea terminadores incompleta (primera fila) registro fila? Comentario
<LF> S Error ABC|12<CR>| Ninguno P Datos correctos
UNIX Descartar y avisar <LF>YZ Ninguno P Datos correctos
Sustituir y avisar ABC|12<CR>| Ninguno P Datos correctos
Sustituir <LF>YZ Ninguno P Datos correctos
Retener y avisar ABC|12<CR>| Ninguno P Datos correctos
Retener <LF>YZ Ninguno P Datos correctos
ABC|12<CR>|
<LF>YZ
ABC|12<CR>|
<LF>YZ
ABC|12<CR>|
<LF>YZ
<CR><LF> N Error Ninguno Error muy n/d Sin datos de
DOS Descartar y avisar Ninguno grave Y salida
Sustituir y avisar ABC|<EMPTY>| Aviso Y Descartar fila 1
Sustituir <EMPTY> Aviso Y Fila fantasma
Retener y avisar ABC|<EMPTY>| Ninguno Y Fila fantasma
Retener <EMPTY> Aviso Y Fila fantasma
ABC|12|<EMPTY> Ninguno Fila fantasma
ABC|12|<EMPTY>
<CR><LF> S Error ABC|12<CR>| Ninguno P Datos correctos
DOS Descartar y avisar <LF>YZ Ninguno P Datos correctos
Sustituir y avisar ABC|12<CR>| Ninguno P Datos correctos
Sustituir <LF>YZ Ninguno P Datos correctos
Retener y avisar ABC|12<CR>| Ninguno P Datos correctos
Retener <LF>YZ Ninguno P Datos correctos
ABC|12<CR>|
<LF>YZ
ABC|12<CR>|
<LF>YZ
ABC|12<CR>|
<LF>YZ
Ninguno n/d Error ABC|12<CR>| Ninguno <CR> Omisión de
Descartar y avisar <LF>YZ Ninguno <CR> datos
Sustituir y avisar ABC|12<CR>| Ninguno <CR> Omisión de
Sustituir <LF>YZ Ninguno <CR> datos
Retener y avisar ABC|12<CR>| Ninguno <CR> Omisión de
Retener <LF>YZ Ninguno <CR> datos
ABC|12<CR>| Omisión de
<LF>YZ datos
ABC|12<CR>| Omisión de
<LF>YZ datos
ABC|12<CR>| Omisión de
<LF>YZ datos

Etapas Aggregator
Las etapas Aggregator clasifican las filas de datos de un solo enlace de entrada en grupos y calculan
totales u otras funciones de totales para cada grupo. La etapa produce los totales sumados de cada grupo
mediante un enlace de salida.

Capítulo 4. Etapas de trabajo de servidor 55


Utilización de una etapa Aggregator
Si desea agregar los datos de entrada de varias formas, puede tener varios enlaces de salida, donde cada
uno especifica un conjunto diferente de propiedades para definir cómo se agrupan y se resumen los datos
de entrada.

Cuando edita una etapa Aggregator, aparece el recuadro de diálogo Etapa Aggregator. Este recuadro de
diálogo tiene tres páginas:
v Etapa. Muestra el nombre de la etapa que se está editando. Esta página tiene un separador General
que contiene una descripción opcional de la etapa y los nombres de las rutinas anterior y posterior.
Para obtener más información sobre estas rutinas, consulte “Subrutinas anteriores y posteriores a la
etapa”.
v Entradas. Especifica las definiciones de columna para el enlace de entrada de datos.
v Salidas. Especifica las definiciones de columna para el enlace de salida de datos.

Pulse Aceptar para cerrar este recuadro de diálogo. Los cambios se guardan cuando se guarda el trabajo.

Subrutinas anteriores y posteriores a la etapa


El separador General de la página Etapa contiene campos opcionales que permiten definir las rutinas que
se van a utilizar, que se ejecutan antes o después de que la etapa haya procesado los datos.
v Subrutina anterior a la etapa y Valor de entrada. Contiene el nombre (y el valor) de una subrutina
que se ejecuta antes de que la etapa empiece a procesar datos. Por ejemplo, se puede especificar una
rutina que prepare los datos antes de que se inicie el proceso.
v Subrutina posterior a la etapa y Valor de entrada. Contiene el nombre (y el valor) de una subrutina
que se ejecuta después de que la etapa haya procesado los datos. Por ejemplo, se puede especificar una
rutina que envíe un mensaje electrónico cuando la etapa haya finalizado.

Seleccione una rutina en la lista. Esta lista contiene todas las rutinas definidas como una Subrutina
anterior/posterior en la carpeta Rutinas del árbol de repositorio. Entre un valor apropiado para el
argumento de entrada de la rutina en el campo Valor de entrada.

Si elige una rutina definida en el repositorio, que se ha editado pero que no se ha compilado, un mensaje
de aviso le recordará que debe compilar la rutina cuando cierre el recuadro de diálogo Etapa Aggregator.

Un código de retorno 0 de la rutina indica que ha resultado satisfactoria y cualquier otro código indica
que la rutina ha resultado anómala y provoca un error muy grave cuando se ejecuta el trabajo.

Si ha instalado o importado un trabajo, es posible que el campo Subrutina anterior a la etapa o


Subrutina posterior a la etapa haga referencia a una rutina que no exista en el sistema. En tal caso,
aparecerá un mensaje de aviso cuando cierre el recuadro de diálogo Etapa Aggregator. Debe instalar o
importar la rutina "ausente" o seleccionar una rutina alternativa que utilizar.

Definición de datos de entrada de Aggregator


Los datos que se van a agregar se pasan de una etapa anterior en el diseño de trabajo a la etapa
Aggregator mediante un único enlace de entrada. Las propiedades de este enlace y las definiciones de
columnas de los datos se definen en la página Entradas del recuadro de diálogo Etapa Aggregator.

Nota: La etapa Aggregator no conserva el orden de las filas de entrada, incluso cuando los datos de
entrada ya están ordenados.

La página Entradas presenta el campo y los dos separadores siguientes:

56 Guía del desarrollador de Server Job


v Nombre de entrada. Nombre del enlace de entrada a la etapa Aggregator.
v General. Se visualiza de forma predeterminada. Contiene una descripción opcional del enlace.
v Columnas. Contiene una cuadrícula que muestra las definiciones de columna para los datos que se
están grabando en la etapa y un orden de clasificación opcional.
– Nombre de la columna. Nombre de la columna.
– Ordenación. Muestra la posición clave de orden de la columna, si la ordenación está habilitada. Para
obtener más información, consulte “Definición del orden de clasificación de la columna de entrada”.
– Orden de clasificación. Especifica el orden de clasificación. Este campo esta en blanco de forma
predeterminada; es decir, no hay orden de clasificación. Elija Ascendente para el orden ascendente,
Descendiente para el orden descendiente o Ignorar si no desea seleccionar una clasificación.
– Clave. Indica si la columna forma parte de la clave primaria.
– Tipo SQL. Tipo de datos SQL.
– Longitud. Precisión de los datos. Es la longitud para los datos CHAR y la longitud máxima para los
datos VARCHAR.
– Escala. Factor de escala de los datos.
– Con posibilidades de nulos. Especifica si la columna puede contener valores nulos.
– Visualización. Número máximo de caracteres necesarios para visualizar los datos de la columna.
– Elemento de datos. Tipo de datos de la columna.
– Descripción. Una descripción en texto de la columna.

Definición del orden de clasificación de la columna de entrada


Cuando la etapa Aggregator clasifica datos de entrada para la agregación, se almacenan en la memoria. Si
se ordenan una o varias columnas de grupo en los datos de entrada, puede mejorar considerablemente el
modo en que la etapa Aggregator maneja los datos.

Los datos de entrada ordenados pueden producirse como salida de una etapa ODBC o UniVerse
(utilizando una cláusula ORDER BY en la sentencia SQL) o una etapa Sequential File.

Para utilizar datos de entrada ordenados, puede utilizar las propiedades de columna adicionales en el
separador Columnas de la página Entradas.

Escriba un número en la columna Ordenar para especificar la posición que ocupa la columna en la clave
de ordenación. Por ejemplo, si los datos de entrada se han ordenado por fecha y posteriormente por
código de producto, la posición de la clave de ordenación para la columna de fecha será 1 y la posición
de la clave de ordenación para la columna de código de producto será 2. Un valor de 1 siempre indica la
clave más significativa. Si no especifica ningún valor en este campo, la columna se añadirá el final de la
secuencia de claves de ordenación. Cuando pulsa Aceptar, todas las columnas se ordenan en secuencia de
la columna más significativa hacia arriba.

Elija el orden en que se ordenan los datos en la columna Orden de clasificación. El valor predeterminado
es ninguno:
v Ascendente. Seleccione esta opción si los datos de entrada de la columna especificada se ordenan en
orden ascendente. Si selecciona esta opción, el servidor de IBM InfoSphere DataStage comprobará el
orden en tiempo de ejecución.
v Descendente. Seleccione esta opción si los datos de entrada de la columna especificada se ordenan en
orden descendente. Si selecciona esta opción, el servidor de InfoSphere DataStage comprobará el orden
en tiempo de ejecución.
v Ignorar. No comprueba el orden. Seleccione esta opción si el orden de clasificación utilizado por los
datos de entrada no es simplemente ascendente o descendente sino que se utiliza un orden de
clasificación más complejo. Al seleccionar esta opción, debe hacerlo con prudencia. En tiempo de

Capítulo 4. Etapas de trabajo de servidor 57


ejecución, el servidor de InfoSphere DataStage no comprueba el orden de clasificación de los datos, lo
que puede producir errores. Si selecciona esta opción, aparece un mensaje de aviso cuando pulsa
Aceptar. Para poder editar otras columnas de entrada, deberá aceptar este mensaje.

Definición de datos de salida de Aggregator


Cuando extrae datos de una etapa Aggregator, las propiedades de los enlaces de salida y las definiciones
de columnas de los datos se definen en la página Salidas del recuadro de diálogo Etapa Aggregator.

La página Salidas presenta el campo y los dos separadores siguientes:


v Nombre de salida. Nombre del enlace de salida. Seleccione el enlace que desee editar desde la lista
Nombre de salida. Esta lista muestra todos los enlaces de salida desde la etapa.
v General. Se visualiza de forma predeterminada. Contiene una descripción opcional del enlace.
v Columnas. Contiene una cuadrícula que muestra las definiciones de columna para los datos que se
están extrayendo de la etapa. La cuadrícula tiene las columnas siguientes:
– Nombre de la columna. Nombre de la columna.
– Grupo. Especifica si se deben realizar una agrupación de acuerdo con los datos de la columna.
– Derivación. Contiene una expresión que especifica cómo se agregan los datos. Esta es una celda
compleja que requiere más de un dato. Si efectúa una doble pulsación en la celda, se abre el
recuadro de diálogo Derivación. Para obtener más información, consulte “Agregación de datos”.
– Clave. Indica si la columna forma parte de la clave primaria.
– Tipo SQL. Tipo de datos SQL.
– Longitud. Precisión de los datos. Es la longitud para los datos CHAR y la longitud máxima para los
datos VARCHAR.
– Escala. Factor de escala de los datos.
– Con posibilidades de nulos. Especifica si la columna puede contener valores nulos.
– Visualización. Número máximo de caracteres necesarios para visualizar los datos de la columna.
– Elemento de datos. Tipo de datos de la columna.
– Descripción. Una descripción en texto de la columna.
Para obtener una descripción de cómo entrar y editar definiciones de columna, consulte el manual
IBM InfoSphere DataStage and QualityStage Designer Client Guide.

Agregación de datos
Los orígenes de datos de los que se extraen los datos pueden contener cientos de miles de filas de datos.
Por ejemplo, los datos en una base de datos de ventas pueden contener información sobre cada
transacción o venta. Puede pasar todos estos datos a su depósito de datos. No obstante, esto significa que
deberá realizar búsquedas en grandes volúmenes de datos en el depósito de datos antes de obtener los
resultados que desee.

Si sólo desea información de resumen, por ejemplo, el total del producto A vendido desde el 01/01/96,
puede agregar los datos y pasar sólo la suma total al depósito de datos. Esto reduce la cantidad de datos
que se almacenan en el depósito de datos, acelera el tiempo necesario para encontrar los datos que desea
y garantiza que el depósito de datos almacene los datos con el formato que necesita.

La etapa Aggregator permite agrupar por o resumir las columnas que desee en cualquiera de los enlaces
de salida.

Nota: Cada salida de columna de una etapa Aggregator debe estar resumida, o se debe haber agrupado
por ella.

58 Guía del desarrollador de Server Job


Un grupo de datos de entrada es un conjunto de filas de entrada que comparten los mismos valores,
agrupados por comas. Por ejemplo, si la base de datos de ventas contiene información sobre tres
productos diferentes, A, B y C, puede agruparla por la columna Producto. Toda la información sobre el
producto A se agrupará conjuntamente, de la misma forma que toda la información de los productos B y
C.

Al resumir los datos, puede realizar cálculos básicos en los valores de una determinada columna. Las
acciones que puede realizar dependen del tipo de datos SQL de la columna seleccionada.

Puede realizar las acciones siguientes para los tipos de datos SQL numéricos:
v Mínimo. Devuelve el valor más bajo de la columna.
v Máximo. Devuelve el valor más alto de la columna.
v Recuento. Cuenta el número de valores de la columna.
v Suma. Suma los valores totales de la columna.
v Promedio. Proporciona el promedio de los valores de la columna.
v Primer. Devuelve el primer valor de la columna.
v Último. Devuelve el último valor de la columna.
v Desviación estándar. Devuelve la desviación estándar de los valores en la columna.
Al calcular la desviación estándar, IBM InfoSphere DataStage utiliza la fórmula:
desviación_estándar = sqrt [
(sum(Xi2) - N avg(Xi)2) / N ]
Algunos otros paquetes como, por ejemplo, Microsoft Excel, utilizan la fórmula:
desviación_estándar =
sqrt [ (sum(Xi2) - N avg(Xi)2) / (N-1)]

Puede realizar las acciones siguientes para los demás tipos de datos SQL:
v Mínimo. Devuelve el valor más bajo de la columna.
v Máximo. Devuelve el valor más alto de la columna.
v Recuento. Cuenta el número de valores de la columna.
v Primer. Devuelve el primer valor de la columna.
v Último. Devuelve el último valor de la columna.

Por ejemplo, si desea saber el número total del producto A vendido, debe sumar los valores de la
columna QtySold.

Para agrupar por o resumir una columna, debe editar la columna Derivación en el recuadro de diálogo
Columna de salida. Para ello, efectúe una doble pulsación en la celda para abrir el recuadro de diálogo
Derivación.

El recuadro de diálogo Derivación contiene los campos y las opciones siguientes:


v Columna de origen. Contiene el nombre de la columna por la que desea agrupar o que desea resumir,
con el formato nombre_enlace.nombre_columna. Puede elegir cualquiera de las columnas de entrada de la
lista.
v Función agregada. Contiene la función de agregación que se ejecuta. Elija la función que desee en la
lista. La opción predeterminada es Suma.
v Agrupar por esta columna. Especifica si la columna se agrupará. Este recuadro de selección está
deseleccionado de forma predeterminada.

Si desea agrupar por la columna, seleccione el recuadro de selección Agrupar por esta columna. La
función agregada se establece automáticamente en (agrupada) y no puede seleccionar una función
agregada en la lista.

Capítulo 4. Etapas de trabajo de servidor 59


Para utilizar una función agregada, deseleccione el recuadro de selección Agrupar por esta columna y
seleccione la función que desee utilizar en la lista Función agregada.

Pulse Aceptar para guardar los valores de la columna.

Etapa Command
La etapa Command es una etapa activa que puede ejecutar distintos mandatos externos, incluidos los
mandatos de motor de servidor, los programas y los trabajos desde cualquier punto del flujo de datos de
IBM InfoSphere DataStage. Puede ejecutar un mandato cualquiera, incluidos sus argumentos, que puede
escribir en el shell del sistema operativo como, por ejemplo, Windows o UNIX. A modo de ejemplo cabe
citar scripts Perl, archivos por lotes DOS, scripts UNIX y otros programas ejecutables de línea de
mandatos que pueda llamar si no son interactivos.

Hay disponible una interfaz gráfica de usuario (GUI) para la etapa Command.

Puede utilizar la etapa Command en cualquier lugar de la vía de acceso de trabajo para invocar un
mandato externo. Las rutinas anteriores y posteriores que ya están disponibles actúan de forma parecida,
excepto que puede colocar la etapa Command en cualquier lugar de una secuencia de trabajos e invocarla
varias veces en paralelo.

Si la etapa se coloca en medio de una secuencia y no se selecciona No reenviar datos de fila, los datos se
mueven al enlace de salida. Si la etapa está al final de una vía de acceso, ejecuta el mandato y pasa los
datos entrantes sin alterar. La llega de la fila sólo causa la ejecución del mandato.

La etapa Command sólo puede tener un enlace de entrada y un enlace de salida:


v Enlace de entrada. Especifica una fila de datos reales o una fila individual de una instancia previa de
la etapa Command. Puede colocar una etapa Command en medio de una secuencia o al final de una
vía de acceso de trabajo (sin ningún enlace de salida).
v Enlace de salida. Si ejecuta una etapa Command al principio de una vía de acceso de trabajo para un
enlace de salida, la etapa ejecuta el mandato especificado y envía una fila individual en el enlace de
salida. Como mínimo, esta fila contiene el código de retorno del mandato especificado en la primera
columna. A continuación, una etapa Transformer puede utilizar las operaciones de ramificación de
InfoSphere DataStage para procesar el código. Si selecciona Salida a enlace, la segunda columna
mantiene la salida del mandato.

La GUI maneja la creación de columnas en el enlace de salida al examinar los valores de Salida a enlace,
No reenviar datos de fila y No esperar al mandato.

Funcionalidad
Funcionalidad soportada

La etapa Command tiene la funcionalidad siguiente:


v Más flexibilidad que cuando se utilizan otras rutinas anteriores o posteriores a la etapa.
v Metadatos visuales y textuales.
v Invocación gráfica de mandatos externos sin recurrir a la codificación del control de trabajos.
v Un proceso más sencillo de los códigos de retorno de los mandatos externos.
v La etapa y sus enlaces aparecen como metadatos de sucesos en los Servicios de gestión de metadatos
de la suite de IBM InfoSphere DataStage.
v Soporte para soporte multilingüístico.

60 Guía del desarrollador de Server Job


Funcionalidad no soportada

No se da soporte a la siguiente funcionalidad:


v Prestaciones de transformación de datos en las filas que fluyen en la etapa. Para ello, utilice la etapa
Transformer y Aggregator.
v Mandatos que requieren la entrada del usuario o la creación de ventanas. Generan anomalías en los
trabajos.
v Acceso de cliente a un RDBMS. Si desea ejecutar una sentencia SQL, utilice llamadas a las aplicaciones
de cliente existentes, incluidos los trabajos de InfoSphere DataStage.
v Acceso directo a los mandatos del motor de servidor. No puede utilizar esta etapa para devolver filas
que se generan como resultado de una ejecución de mandato en el motor.

Terminología
La lista siguiente describe los términos de la etapa Command utilizados en este documento:
Término
Descripción
Rutinas anteriores y posteriores
Las rutinas externas que puede definir para que se invoquen antes de que se inicie un trabajo y
después de que se salga de un trabajo. Grabe estas rutinas en BASIC de IBM InfoSphere
DataStage.
Algunas etapas dan soporte a las rutinas anteriores y posteriores a la etapa. Estas se invocan
antes o después de invocar una etapa.
ExecTCL
Una rutina incorporada que ejecuta mandatos del motor de servidor desde un trabajo de
InfoSphere DataStage.
ExecDOS
Una rutina incorporada que ejecuta mandatos de DOS desde un trabajo de InfoSphere DataStage.

Utilización de la etapa Command


Si utiliza la interfaz gráfica de usuario para editar una etapa Command, se abre el recuadro de diálogo
Etapa Command. Este recuadro de diálogo tiene las páginas Etapa, Entrada y Salida, en función de si
existen entradas a y salidas de la etapa:
v Etapa. Esta página muestra el nombre de la etapa que se está editando. El separador General define el
tipo de mandato, el texto del mandato, la acción que se debe emprender si se produce un error, dónde
grabar la salida y si el trabajo debe esperar que se complete el mandato. También puede describir el
objetivo de la etapa. Para obtener detalles, consulte “Definición de la etapa Command”.
El separador Soporte multilingüístico define una correlación de juego de caracteres que se debe
utilizar con la etapa. Este separador sólo aparece si se ha instalado el soporte multilingüístico para IBM
InfoSphere DataStage. Para obtener detalles, consulte “Definición de la correlación de juego de
caracteres” en la página 62.
v Entrada. Esta página sólo se muestra si dispone de un enlace de entrada de esta página. Especifica
cuando debe ejecutarse el mandato y cómo deben tratarse las filas desde este enlace.
v Salida. Esta página sólo se muestra si dispone de un enlace de salida de esta etapa. Especifica cómo
debe tratarse la salida desde el mandato.

Definición de la etapa Command


Los parámetros del mandato se establecen en el separador General de la página Etapa. Especifique la
información adecuada utilizando los siguientes campos:

Capítulo 4. Etapas de trabajo de servidor 61


v Tipo de mandato. El tipo de mandato que se debe ejecutar. Seleccione una de las opciones siguientes:
– OS. La etapa ejecuta un mandato de sistema operativo.
– TCL. La etapa ejecuta un mandato de motor de servidor. Puede ejecutar programas BASIC de IBM
InfoSphere DataStage.
Para obtener información sobre cómo utilizar estos mandatos, consulte “Utilización de mandatos” en
la página 64.
v Mandato. La serie que se debe pasar como mandato.
v Terminar anormalmente si el mandato falla. Si se selecciona, el trabajo termina anormalmente si se
produce un error al ejecutar el mandato.
v Inhabilitar salida en registro. Si se selecciona, la salida del mandato no se graba en el registro de
InfoSphere DataStage.
v No esperar al mandato. Si se selecciona, el trabajo no espera a que el mandato finalice antes de
continuar. El trabajo es un proceso independiente y prosigue con el proceso de los datos. Ejecuta el
mandato como una hebra en Windows. La etapa espera si el mandato aún se está ejecutando después
de procesar todos los datos.
Si selecciona esta opción se eliminan los elementos de datos COMMAND.RTNCODE y
COMMAND.OUTPUT desde el enlace de salida. No se permite la salida de enlace, pero el código de
retorno y de salida para el mandato se siguen grabando en el registro de InfoSphere DataStage y en el
archivo de salida. la primera columna en el enlace de salida no se utiliza para el código de retorno.
De forma adicional, se inhabilitan las opciones siguientes:
– Terminar anormalmente si el mandato falla (etapa)
– Repetir para cada fila (entrada)
– Ejecutar mandato después de fila (entrada)
– No reenviar datos de fila (entrada)
– Salida a enlace (salida)
v Salida a archivo. Graba la salida desde el mandato a un archivo. Si no especifica un nombre de vía de
acceso, el archivo se crea en el directorio padre para el proyecto. Si deja el campo en blanco, no se crea
ningún archivo de salida.
v Descripción. Opcional. Describe el objetivo de la etapa Command.

Definición de la correlación de juego de caracteres


Puede definir una correlación de juego de caracteres para una etapa. Realice esta tarea desde el separador
Soporte multilingüístico en la página Etapa. El separador Soporte multilingüístico sólo aparece si ha
instalado el soporte multilingüístico.

Especifique la información mediante el siguiente botón y los siguientes campos:


v Nombre de correlación que debe utilizarse con la etapa. Se define la correlación de juego de
caracteres predeterminada para el proyecto o el trabajo. Puede cambiar la correlación seleccionando un
nombre de correlación de la lista.
v Utilizar parámetro de trabajo.... Especifica los valores de los parámetros para el trabajo. Utilice el
formato #Parám#, donde Parám es el nombre del parámetro de trabajo. La serie #Parám# se sustituye
por el parámetro de trabajo cuando se ejecuta el trabajo.
v Mostrar todas las correlaciones. Lista todas las correlaciones que se envían con IBM InfoSphere
DataStage.
v Sólo correlaciones cargadas. Muestra una lista de las correlaciones que están cargadas en ese
momento.

62 Guía del desarrollador de Server Job


Definición de los datos de entrada de la etapa Command
Cuando una fila de datos reales o una fila individual de una instancia previa de la etapa Command llega
a un enlace de entrada de esta etapa, ejecuta el mandato especificado. Defina las propiedades de este
enlace y las definiciones de columna de los datos en la página Entrada en el recuadro de diálogo Etapa
Command de la interfaz gráfica de usuario.

Acerca de la página Entrada


La página Entrada tiene un campo Nombre de entrada, los separadores General y Columnas y el botón
Columnas....
v Nombre de entrada. Nombre del enlace de entrada. Seleccione el enlace que desee editar desde el
recuadro de la lista desplegable Nombre de entrada. Este recuadro de lista muestra todos los enlaces
de entrada a la etapa Command.
v Pulse el botón Columnas... para visualizar una breve lista de las columnas asociadas con el enlace de
entrada. Puede seguir visualizando la lista a medida que va entrando metadatos detallados en el
separador Columnas.

Separador General:

Este separador, de forma predeterminada, contiene los campos siguientes:


v Repetir para cada fila. Si se selecciona, ejecuta el mandato especificado para cada fila que llega a este
enlace. Si no selecciona No esperar a mandato desde el separador General de la página Etapa, esta
opción estará inhabilitada para evitar saturar al servidor con procesos.
v Ejecutar mandato después de fila. Si se selecciona, ejecuta el mandato especificado después de copiar
y enviar la fila al enlace de salida. Si no existe ningún enlace de salida, la opción se inhabilita. De
modo predeterminado, el mandato se ejecuta de forma asíncrona cuando la fila llega al enlace de
entrada.
Si selecciona esta opción se eliminan los elementos de datos COMMAND.RTNCODE y
COMMAND.OUTPUT desde el enlace de salida. No se permite la salida de enlace, pero el código de
retorno y de salida para el mandato se siguen grabando en el registro de IBM InfoSphere DataStage y
en el archivo de salida. Las opciones siguientes están inhabilitadas:
– No reenviar datos de fila (entrada)
– Salida a enlace (salida)
v No reenviar datos de fila. Si se borra, la etapa pasa a través de filas hacia el mismo número de
columnas en el enlace de salida, siempre que contenga tanto enlaces de entrada como de salida. No
puede seleccionar esta opción si no existe ningún enlace de salida.
Si se borra, las definiciones de columna se copian desde el enlace de entrada al enlace de salida. La
etiqueta "La etapa Command pasa a través de la columna" del campo Descripción identifica cada
columna copiada para su eliminación.
v Descripción. Opcional. Describe el objetivo del enlace de entrada.

Separador Columnas:

Este separador contiene las definiciones de columna para los datos grabados en el origen de datos. El
separador Columnas se comporta de la misma forma que el separador Columnas de la etapa ODBC.

Definición de datos de salida de etapa Command


Puede grabar la salida de un mandato como una columna en un enlace de salida de la etapa Command.
La interfaz gráfica de usuario gestiona automáticamente las definiciones de columna de salida. Las

Capítulo 4. Etapas de trabajo de servidor 63


columnas de salida dependen más de lo que haya seleccionado para los valores de campo que de los
requisitos de los metadatos en sus destinos. Por ello, tiene una flexibilidad mínima al definir las
columnas de salida de la etapa Command.

El paso a través de columnas debe tener los mismos tipos datos y tamaños que las correspondientes
columnas de entrada. No obstante, puede editar los campos Nombre, Elemento de datos, Derivación y
Descripción para las columnas.

Acerca de la página Salida


La página Salida tiene un campo Nombre de salida, los separadores General y Columnas y el botón
Columnas....
v Nombre de salida. Nombre del enlace de salida. Seleccione el enlace que desee editar desde el
recuadro de la lista desplegable Nombre de salida. Este recuadro de lista muestra todos los enlaces de
salida.
v Pulse el botón Columnas... para visualizar una breve lista de columnas designadas en este enlace.
Puede seguir visualizando la lista a medida que va entrando metadatos detallados en el separador
Columnas.

Separador General:

Este separador, de forma predeterminada, contiene los campos siguientes:


v Salida a enlace. Si se selecciona, envía la salida del mandato como la segunda columna del enlace de
salida. Esta columna COMMAND.OUTPUT mantiene la salida de la ejecución de mandato.
v Descripción. Opcional. Describe el objetivo del enlace de salida.

Separador Columnas:

Este separador contiene las definiciones de columna para los datos a los que se da salida en el enlace
seleccionado. La interfaz gráfica de usuario gestiona automáticamente las definiciones de columna de
salida.

Si no selecciona No esperar al mandato y se selecciona la opción de salida Salida a enlace, los elementos
de datos COMMAND.RTNCODE y COMMAND.OUTPUT para las definiciones de columna contendrán
el código de retorno y la salida del mandato respectivamente. Por el contrario, el campo Derivación
carece de sentido para esta etapa.

Utilización de mandatos
Puede ejecutar cualquier mandato, incluyendo sus argumentos, que pueda escribir en el shell del sistema
operativo, por ejemplo, scripts Perl, archivos de proceso por lotes DOS, scripts de UNIX y otros
programas accionados por líneas de mandatos que no son interactivas y no precisan ninguna entrada.

Mandatos TCL y programas BASIC

Puede establecer el tipo de mandato en TCL en el separador General de la página Etapa para ejecutar
mandatos TCL y ejecutar programas BASIC.

Mandato dsjob

Puede utilizar el mandato dsjob para llamar a otros trabajos de IBM InfoSphere DataStage desde la etapa
Command. InfoSphere DataStage proporciona el programa dsjob que permite ejecutar trabajos compilados
desde un mandato en lugar de desde InfoSphere DataStage. El programa dsjob tiene la sintaxis simple
siguiente:

64 Guía del desarrollador de Server Job


dsjob -run [ -mode ] [ -param ] [ -warn ] [ -rows ] [ -wait ]
[ -stop ] [ -jobstatus ] [ -userstatus ] trabajo de
proyecto

Para ver información sobre la sintaxis completa, consulte InfoSphere DataStage Programmer's Guide.

Nota: Si selecciona Omitir en el recuadro de diálogo Conectar con proyecto mientras inicia InfoSphere
DataStage, deberá utilizar las opciones de usuario y contraseña cuando utilice el mandato dsjob.

Puede grabar la salida de un mandato en uno de los siguientes lugares:


v El registro de InfoSphere DataStage. Este es el valor predeterminado.
v En enlaces de salida. Si existen enlaces de salida, puede escribir la salida como una columna en el
enlace, además del código de retorno para el mandato. El código de retorno se envía automáticamente
como la primera columna al enlace de salida.
v En un archivo.

Nota: Puesto que la etapa envía el código de retorno para el mandato como la primera columna de un
enlace de salida, la interfaz gráfica de usuario lo proporciona automáticamente. Si utiliza el editor de
cuadrículas estándar, deberá añadir manualmente las columnas obligatorias a las definiciones de
columna para el enlace de salida.

Etapas InterProcess
Una etapa InterProcess (IPC) es una etapa pasiva que proporciona un canal de comunicación entre los
procesos de IBM InfoSphere DataStage que se ejecutan simultáneamente en el mismo trabajo. Permite
diseñar trabajos que se ejecutan en sistemas SMP con grandes ventajas para el rendimiento. Para conocer
las ventajas del uso de las etapas IPC, necesita obtener más información sobre cómo se ejecutan realmente
los trabajos de InfoSphere DataStage como procesos. Para ello, consulte “Trabajos y procesos de IBM
InfoSphere DataStage” en la página 5.

El enlace de salida que conecta la etapa IPC con la etapa que lee los datos puede abrirse una vez abierto
el enlace de entrada conectado a la etapa que graba los datos.

Puede utilizar las etapas InterProcess para unir etapas pasivas. Por ejemplo, puede utilizarlas para
acelerar la transferencia de datos entre dos orígenes de datos:

Capítulo 4. Etapas de trabajo de servidor 65


Figura 16. Trabajo de ejemplo

En este ejemplo, el trabajo se ejecutará como dos procesos: uno que maneja la comunicación desde la
etapa Sequential File a la etapa IPC y otro que maneja la comunicación de la etapa IPC a la etapa ODBC.
Una vez la etapa Sequential File ha abierto su enlace de salida, la etapa IPC puede empezar a pasar datos
a la etapa ODBC. Si el trabajo se ejecuta en un sistema de multiprocesador, los dos procesos pueden
ejecutarse simultáneamente para que la transferencia sea mucho más rápida.

También puede utilizar la etapa IPC para especificar explícitamente que las etapas activas conectadas se
ejecuten como procesos aparte. Esto ofrece muchas ventajas de rendimiento para los sistemas de
multiprocesador. También puede especificar este comportamiento implícitamente activando el
almacenamiento intermedio de filas entre procesos, ya sea para todo el proyecto mediante el cliente del

66 Guía del desarrollador de Server Job


administrador o individualmente para un trabajo en el recuadro de diálogo Propiedades del trabajo.

Figura 17. Trabajo de ejemplo

Utilización de la etapa IPC


Cuando edita una etapa IPC, aparece el recuadro de diálogo Etapa InterProcess. Este recuadro de diálogo
tiene tres páginas:

Capítulo 4. Etapas de trabajo de servidor 67


v Etapa. La página Etapa tiene dos separadores, General y Propiedades. La página General permite
especificar una descripción opcional de la etapa. El separador Propiedades permite especificar las
propiedades de la etapa.
v Entradas. La etapa IPC sólo puede tener un enlace de entrada. La página Entradas muestra
información sobre el enlace.
v Salidas. La etapa IPC sólo puede tener un enlace de salida. La página Salidas muestra información
sobre el enlace.

Definición de propiedades de la etapa IPC


El separador Propiedades permite especificar dos propiedades para la etapa IPC:
v Tamaño del almacenamiento intermedio. Toma como valor predeterminado 128 kb. La etapa IPC
utiliza dos bloques de memoria; un bloque puede grabarse mientras se lee el otro. Esta propiedad
define el tamaño de cada bloque, de forma que se asigna un valor predeterminado de 256 Kb en total.
v Tiempo de espera. Toma como valor predeterminado 10 segundos. Este valor ofrece un límite de
tiempo que especifica cuánto tiempo esperará la etapa que un proceso se conecte a ella antes de que se
exceda el tiempo de espera. Normalmente no debe modificarse, pero puede ser importante si está
creando prototipos de trabajos de multiprocesador en plataformas de un solo procesador y es probable
que se produzcan retardos.

Definición de los datos de entrada de la etapa IPC


La etapa IPC puede tener un enlace de entrada. Aquí es donde se conecta el proceso que está grabando.

La página Entradas tiene dos separadores:


v General. El separador General permite especificar una descripción opcional de la etapa.
v Columnas. El separador Columnas contiene las definiciones de columna para los datos en el enlace de
entrada. Normalmente se rellena con los metadatos de la etapa que se conecta en el lado de la entrada.
También puede Cargar una definición de columna desde el repositorio o escribir la suya propia (y
Guardar esta en el repositorio si es necesario). Tenga en cuenta que los metadatos del enlace de
entrada deben ser idénticos a los metadatos del enlace de salida.

Definición de datos de salida de la etapa IPC


La etapa IPC puede tener un enlace de salida. Aquí es donde se conecta el proceso que está leyendo.

La página Salidas tiene dos separadores: General y Columnas.


v General. El separador General permite especificar una descripción opcional de la etapa.
v Columnas. El separador Columnas contiene las definiciones de columna para los datos en el enlace de
salida. Normalmente se rellena con los metadatos de la etapa que se conecta en el lado de la entrada.
También puede Cargar una definición de columna desde el repositorio o escribir la suya propia (y
Guardar esta en el repositorio si es necesario). Tenga en cuenta que los metadatos del enlace de salida
deben ser idénticos a los metadatos del enlace de entrada.

Etapas FTP Plug-in


Como la etapa Sequential File, la etapa FTP Plug-in extrae datos desde un único archivo de texto o los
graba en un único archivo de texto. Sin embargo, los archivos de texto a los que debe accederse mediante
la etapa FTP Plug-in residen en otra máquina (posiblemente, con un sistema de archivos y convenciones
de almacenamiento de archivos de caracteres distintos) de una red de comunicaciones en lugar de en un
disco local.

68 Guía del desarrollador de Server Job


La etapa FTP Plug-in proporciona un rápido y eficiente acceso de archivos remoto a los usuarios
utilizando servidores FTP en plataformas remotas. La etapa FTP Plug-in no precisa ninguna instalación
adicional en las plataformas remotas.

De forma adicional, la etapa de conector FTP proporciona la opción de ejecutar mandatos Before/After en
la máquina remota. Así, se automatizan los siguientes procesos de flujo de datos:
v Antes de que empiece la transferencia de archivos. Puede utilizar el mandato Before (antes) para
preparar un archivo que se debe transferir o para preparar la máquina remota que va a recibirlo.
v Después de que finalice la transferencia de archivos. Puede utilizar el mandato After (después) para
suprimir archivos temporales o para iniciar una actividad subsiguiente que utilice el archivo
transferido.

Cada etapa FTP Plug-in es una etapa pasiva que puede tener cualquier número de enlaces de entrada y
de salida:
v Los enlaces de entrada especifican los datos que está grabando, que es una secuencia de filas que se
debe cargar en un único archivo remoto.
v Los enlaces de salida especifican los datos que está extrayendo, que es una secuencia de filas que se
debe leer desde un único archivo remoto.

Funcionalidad
La etapa FTP Plug-in contiene las funcionalidades y ventajas siguientes:
v Comparte propiedades comunes de nombre de host remoto, nombre de usuario, contraseña y vía de
acceso del directorio hacia o desde los archivos que se transfieren para cada instancia de etapa.
v Se corresponde generalmente con una sesión de transferencia de archivos independiente para cada
enlace, por lo que pueden transferirse varios archivos de forma simultánea.
v Actúa como cliente FTP y utiliza un protocolo de transferencia de archivos genérico con el que iniciar
sesiones y transferir archivos hacia o desde cualquier servidor de transferencia de archivos. Mantiene
una sesión FTP el tiempo suficiente para permitir la transferencia de grandes cantidades de datos.
v Da soporte al protocolo de datos STREAM. Si se cierra una conexión de transferencia STREAM, el
trabajo termina anormalmente con un mensaje de error.
v Maneja las anomalías en los trabajos según corresponda cuando se transfieren archivos incompletos.

Nota: Puede especificar el número de filas que el trabajo debe procesar en la página Límites en el
cliente del Director de IBM InfoSphere DataStage. A partir del release 1.3, si limita las filas, pueden
registrarse errores muy graves en el archivo de registro al final del trabajo debido a un cierre
prematuro de la conexión de datos. No obstante, la transferencia de datos estará completa para el
número de filas seleccionado.
v Da soporte a un número especificado por el usuario de reintentos de conexión e intervalos de
reintento.
v Proporciona mandatos opcionales anteriores y posteriores para que se ejecuten en la máquina remota
antes y después de transferir un archivo satisfactoriamente (requiere un servidor telnet para poder
utilizar todas las prestaciones en Windows).
v Proporciona un nivel de rastreo opcional para diagnosticar problemas de rendimiento.
v Permite leer o grabar datos ASCII o binarios.

Nota: La modalidad binaria no está soportada en el lienzo del servidor paralelo. Consulte la propiedad
de entrada Tipo de representación de datos y la propiedad de salida Tipo de representación de datos.
v Utiliza las propiedades de etapa y enlace, y el tipo de columna para determinar el formato de las series
de caracteres antes de la transferencia.
v Permite controlar qué proceso inicia la solicitud de conexión para la transferencia de datos.
v Proporciona un uso opcional de definiciones de metadatos para leer un archivo remoto.

Capítulo 4. Etapas de trabajo de servidor 69


v Permite validar la existencia del archivo remoto en el cliente del Director de InfoSphere DataStage (sólo
para el enlace de salida).
v Soporta el soporte multilingüístico.

La siguiente funcionalidad no está soportada:


v Carga masiva para enlaces de entrada de secuencia
v Búsquedas con clave en una etapa de transferencia de archivos
v Procedimientos almacenados

Terminología
En la lista siguiente se describen los términos de FTP Plug-in utilizados en este documento:
Término
Descripción
mandato after
El mandato que se ejecuta en la máquina remota utilizando una sesión de telnet si la
transferencia ha finalizado.
mandato before
El mandato que se ejecuta en la máquina remota utilizando una sesión de telnet antes de iniciar
la transferencia.
FTP Protocolo de transferencia de archivos. Una prestación de transferencia interactiva de archivos
que se utiliza a menudo en las redes TCP/IP.
retrotraer
Cancela todos los cambios de E/S de archivo realizados durante una transacción.
telnet El nombre de una sesión de protocolo que actúa como una emulación de terminal remoto
estándar con las comunicaciones con el host a través de una red.
transacción
Una secuencia de operaciones de E/S de archivo que se trata como una operación lógica en
relación con la recuperación y la visibilidad para otros usuarios.

Instalación de la etapa
Para especificar retrotracciones de transacciones, compromisos o el proceso anterior/posterior en el
servidor Windows, debe proporcionar primero un servidor telnet distinto del servidor telnet de UniVerse.

Propiedades
Las tablas de las siguientes secciones incluyen las siguientes cabeceras de columna:
v Solicitud es el texto que el diseñador de trabajo puede ver en la interfaz de usuario del editor de
etapas.
v Tipo es el tipo de datos de la propiedad.
v Valor predeterminado es el texto que se utiliza si el diseñador del trabajo no suministra ningún valor.
v Descripción describe las propiedades.

70 Guía del desarrollador de Server Job


Propiedades de la etapa
La etapa FTP Plug-in da soporte a las siguientes propiedades de etapa:

Solicitud Tipo Valor predeterminado Descripción


Nombre del servidor Serie Ninguno Necesario. El nombre de la
máquina de host en la que
reside el archivo para el
servidor FTP.
Puerto de FTP remoto Largo 21 Necesario. Número de
puerto del servidor FTP de
la máquina remota.
Puerto Telnet remoto Largo 23 Necesario. Número de
puerto del servidor telnet
de la máquina remota.
Nombre de usuario Serie Ninguno Necesario. Nombre de
usuario para iniciar la
sesión en la máquina
remota.
Contraseña del usuario Serie Ninguno La contraseña para el
usuario especificado. Es
necesaria si la máquina
remota utiliza una
contraseña para el "Nombre
de usuario."
Nombre de cuenta Serie Ninguno El nombre de cuenta para
el inicio de sesión de FTP
remoto. Sólo es necesario si
la máquina remota necesita
información de cuentas de
usuario durante el proceso
de inicio de sesión.
Nivel de rastreo Largo 0 Opcional. Controla el tipo
de información de rastreo
que se añade al registro.
Utilice uno de los
siguientes niveles de
rastreo:

0 Ningún rastreo 1
Propiedades de la etapa del
informe
Reintentos Largo 3 Opcional. El número de
reintentos si falla la
conexión.
Intervalo de reintentos Largo 15 Opcional. Número de
segundos que se debe
esperar entre reintentos si
la conexión falla.
Número de solicitudes de Serie 2 Necesaria si se utilizan
Telnet servicios de telnet. Número
total de solicitudes
previstas que se reciben
durante el proceso de inicio
de sesión en el servidor de
telnet.

Capítulo 4. Etapas de trabajo de servidor 71


Solicitud Tipo Valor predeterminado Descripción
Solicitud de Telnet 1 Serie Inicio de sesión Necesaria si se utilizan
servicios de telnet. La serie
literal (no distingue entre
mayúsculas y minúsculas)
que envía el servidor de
telnet y solicita al proceso
de IBM InfoSphere
DataStage los datos de
inicio de sesión.
Respuesta de Telnet 1 Serie Ninguno Necesaria si se utilizan
servicios de telnet. El
nombre de usuario de
telnet para iniciar sesión en
la sesión de telnet.
Solicitud de Telnet 2 Serie Contraseña Necesaria si se utilizan
servicios de telnet. La serie
literal (no distingue entre
mayúsculas y minúsculas)
que envía el servidor de
telnet y solicita al proceso
de InfoSphere DataStage los
datos de contraseña.
Respuesta de Telnet 2 Serie Ninguno Necesaria si se utilizan
servicios de telnet.
Contraseña de telnet del
usuario de telnet
especificado.
Solicitud de Telnet n Serie Ninguno Las solicitudes que son
necesarias para conectarse a
un sistema de destino
mediante telnet, además del
inicio de sesión y la
contraseña.
Respuesta de Telnet n Serie Ninguno Las repuestas que son
necesarias para conectarse a
un sistema de destino
mediante telnet, además del
inicio de sesión y la
contraseña.
Tiempo de espera de Int 50 Número de milisegundos
mandatos que se esperará a que
finalicen los mandatos
anterior (Before) y posterior
(After) de Telnet.

72 Guía del desarrollador de Server Job


Propiedades del enlace de entrada
La tabla siguiente lista las propiedades del enlace de entrada en el editor de cuadrícula:
Tabla 8. Propiedades del enlace de entrada
Solicitud Tipo Valor predeterminado Descripción
Vía de acceso remota Serie Ninguno Opcional. Nombre de la vía
de acceso del directorio de
trabajo en la máquina
remota donde están
ubicados los archivos que
se deben recuperar o
enviar.
Nombre de archivo remoto Serie Ninguno Necesario. El nombre del
archivo en la máquina
remota que se ha de
recuperar o enviar.
Tipo de representación de Lista ASCII Necesario. Controla cómo
datos se leen o se graban los
datos del archivo remoto.
Para la representación
ASCII, la transferencia de
datos utiliza el NVT-ASCII
estándar, sobre todo para
archivos de texto.

Para la representación
binaria, los datos se
transfieren en bits
continuos como datos
IMAGE. Debe establecer las
"Columnas de anchura fija"
en Sí.
Nota: La modalidad
binaria no se soporta
cuando la etapa se ejecuta
en el lienzo paralelo. Para
transferir datos en
modalidad binaria, utilice
los tipos de datos binarios
o varbinarios con el "Tipo
de representación de datos"
fijado en ASCII.
Finalización de línea Lista [CR] [LF] Especifica la secuencia de
terminación de fila (fin de
(Terminación de estilo la línea) en el archivo
DOS) remoto.

Si "Tipo de representación
de datos" se establece en
ASCII, los valores válidos
son "sin terminación" (no
termination) y [CR] [LF].
Columnas de anchura fija Serie No Necesario. Indica si los
datos del archivo remoto
pueden estar con columnas
de anchura fija.

Capítulo 4. Etapas de trabajo de servidor 73


Tabla 8. Propiedades del enlace de entrada (continuación)
Solicitud Tipo Valor predeterminado Descripción
Espacios entre columnas Largo 0 El número de espacios
entre las columnas de
anchura fija en el archivo
remoto. Es necesario si
"Columnas con anchura
fija" está establecido en Sí.
Delimitador de columna Char , (coma) Es necesario si "Columnas
con anchura fija" está
establecido en No. El
delimitador que separa los
campos de datos en el
archivo remoto. Puede
entrar un único carácter sin
comillas o el valor ASCII
del carácter que desea
utilizar.
Carácter de comilla Char " (comillas dobles) Opcional y válido
solamente si "Columnas
con anchura fija" está
establecido en No. El
carácter único se utiliza
para incluir un valor de
datos que contiene un
carácter delimitador como
datos. También puede
entrar el valor ASCII para
el carácter que desee
utilizar. Puede suprimir
"Carácter de comillas" si no
entra ningún valor.
Carácter de escape Char \ (barra inclinada Necesario. El único carácter
invertida) entrado para ser
interpretado como el
carácter de escape.
Serie Null Serie Ninguno Opcional. Especifica la serie
que debe interpretarse
como el valor nulo de SQL.
Nombres de columnas de la Serie No Es necesario si "Tipo de
primera línea representación de datos"
está establecido en ASCII.
Especifica si se debe
transferir la primera línea
al archivo remoto (es decir,
es posible que contenga
nombres de columnas).
Omitir la última línea Serie No Necesario. Indica si desea
nueva omitir la última línea nueva
al final de los datos al
enviarlos a la máquina
remota.

74 Guía del desarrollador de Server Job


Tabla 8. Propiedades del enlace de entrada (continuación)
Solicitud Tipo Valor predeterminado Descripción
Anexar a archivo Serie No Opcional. Indica si los
datos deben colocarse en el
archivo remoto en
modalidad de anexo o de
sobrescritura. Sí indica
"anexo" con respecto al
archivo existente. No indica
que se sobrescribirá el
archivo.
Archivo de copia de Serie No Opcional. Indica si el
seguridad "Mandato de copia de
seguridad de Telnet" debe
ejecutarse antes de
continuar con el trabajo.
Mandato de copia de Serie Ninguno Opcional. Especifica el
seguridad de Telnet mandato de Telnet que
debe ejecutarse en la
máquina remota antes de
que se grabe el trabajo en el
archivo remoto. Este
mandato de Telnet sólo se
ejecuta si "Realizar copia de
seguridad del archivo" está
fijado en Sí. Utilice este
mandato para crear copias
de seguridad del archivo.
Mandato anterior (Before) Serie Ninguno Opcional. El mandato de
de Telnet Telnet que se debe ejecutar
en la máquina remota antes
de iniciar un trabajo.
Mandato posterior (After) Serie Ninguno Opcional. Especifica el
de Telnet mandato de Telnet que
debe ejecutarse en la
máquina remota después
de completar un trabajo.
Mandato de iniciar Serie Ninguno Opcional. Especifica el
transacción mandato de Telnet que
debe ejecutarse antes de
iniciar la transferencia de
archivos a la máquina
remota. Utilice este
mandato para crear copias
temporales de los archivos.
Mandato de confirmar Serie Ninguno Opcional. Especifica el
transacción mandato de Telnet que
debe ejecutarse después de
una transferencia de datos
satisfactoria. Utilice este
mandato para suprimir
cualquier archivo temporal
que se haya creado.

Capítulo 4. Etapas de trabajo de servidor 75


Tabla 8. Propiedades del enlace de entrada (continuación)
Solicitud Tipo Valor predeterminado Descripción
Mandato de retrotracción Serie Ninguno Opcional. Especifica el
de transacciones mandato de Telnet que
debe ejecutarse si se
produce un error al enviar
el archivo a la máquina
remota, o si utiliza el
cliente del Director para
restablecer el trabajo.
Utilice este mandato para
restaurar cualquier archivo
de la copia temporal si se
produce una anomalía o
una terminación anormal.
Modalidad de conexión de Lista Pasiva Especifica el proceso que
datos de FTP inicia la conexión para la
transferencia de datos.

Si se establece en Activa, el
servidor FTP inicia las
conexiones.

Si se establece en Pasiva,
las conexiones se inician
desde el sistema principal
donde se ha instalado la
capa de motor. Permite
almacenar archivos en
sistemas principales que se
encuentran fuera del
cortafuegos basado en un
router.

Sistemas OpenVMS
digitales. Establézcalo en
Activos para los enlaces de
entrada de forma que el
servidor FTP inicie la
conexión para la
transferencia de datos. De
lo contrario, no se
aceptarán los datos.

76 Guía del desarrollador de Server Job


Tabla 8. Propiedades del enlace de entrada (continuación)
Solicitud Tipo Valor predeterminado Descripción
Nivel de rastreo de enlace Largo 0 Opcional. Controla el tipo
de información de rastreo
que se añade al registro.
Los niveles de rastreo
disponibles son:
0 Ningún rastreo
1 Propiedades de enlace
2 Rendimiento
4 Mensajes de FTP
8 Mensajes de Telnet
16 Rastreo de función
32 Volcado de datos de
Telnet

Puede combinar los niveles


de rastreo. Por ejemplo, un
nivel de rastreo de 3
significa que se añadirán
las propiedades del enlace
y los mensajes de
rendimiento en el registro.
Longitud de Largo 4096 Necesario. Establece la
almacenamiento intermedio longitud (en fragmentos
superiores a 512 bytes) de
los almacenamientos
intermedios de recepción y
de envío del FTP para filas
de datos antes de ser
enviadas o recuperadas.

Puede especificar cualquier mandato de UNIX para las siguientes propiedades de enlace: Telnet después
de mandato, Mandato de copia de seguridad de Telnet, Mandato de inicio de transacción, Mandato de
confirmación de transacción o Mandato de retrotracción de transacción. Por ejemplo, el siguiente mandato
de UNIX copia un archivo a otro archivo en un directorio diferente:
cp /nombre_vía_acceso/nombre_archivo1 /nombre_vía_acceso2/nombre_archivo2

Propiedades del enlace de salida


La tabla siguiente lista las propiedades del enlace de salida en el editor de cuadrícula:
Tabla 9. Propiedades del enlace de salida
Solicitud Tipo Valor predeterminado Descripción
Vía de acceso remota Serie Ninguno Opcional. Nombre de la vía
de acceso del directorio de
trabajo en la máquina
remota donde están
ubicados los archivos que
se deben recuperar o
enviar.
Nombre de archivo remoto Serie Ninguno Necesario. El nombre del
archivo en la máquina
remota que se ha de
recuperar o enviar.

Capítulo 4. Etapas de trabajo de servidor 77


Tabla 9. Propiedades del enlace de salida (continuación)
Solicitud Tipo Valor predeterminado Descripción
Tipo de representación de Lista ASCII Necesario. Controla cómo
datos se leen o se graban los
datos del archivo remoto.
Para la representación
ASCII, la transferencia de
datos utiliza el NVT-ASCII
estándar, sobre todo para
archivos de texto.

Para la representación
binaria, los datos se
transfieren en bits
continuos como datos
IMAGE. Debe establecer las
"Columnas de anchura fija"
en Sí.
Nota: La modalidad
binaria no se soporta
cuando la etapa se ejecuta
en el lienzo paralelo. Para
transferir datos en
modalidad binaria, utilice
los tipos de datos binarios
o varbinarios con el "Tipo
de representación de datos"
fijado en ASCII.
Comprobar datos con Lista No Establezca Sí para utilizar
metadatos definiciones de metadatos a
fin de leer datos del archivo
remoto en lugar de utilizar
un terminador de línea
para identificar el final de
una fila. Se leerán los datos
hasta que se agoten los
metadatos.

Para los datos de anchura


fija, esto significa el total de
la longitud de las columnas
más los espacios.Para los
datos delimitados, esto
significa el número de
columnas.

Si se establece en No, el
final de la fila viene
determinado por la
secuencia de fin de la línea
[CR] [LF]

78 Guía del desarrollador de Server Job


Tabla 9. Propiedades del enlace de salida (continuación)
Solicitud Tipo Valor predeterminado Descripción
Finalización de línea Lista [CR] [LF] Especifica la secuencia de
terminación de fila (fin de
(Terminación de estilo la línea) en el archivo
DOS) remoto.

Si las "Columnas de
anchura fija" se establecen
en No, utilice el valor [CR]
[LF]. Si las "Columnas de
anchura fija" se establecen
en Sí y el "Tipo de
representación de datos" se
establece en ASCII, los
valores válidos son sin
terminación ni [CR] [LF]
(terminador de estilo DOS).

Si se establece en "Ninguna
terminación", "Comprobar
datos con metadatos" debe
estar fijado en Sí.
Columnas de anchura fija Serie No Necesario. Indica si los
datos del archivo remoto
pueden estar con columnas
de anchura fija.
Espacios entre columnas Largo 0 El número de espacios
entre las columnas de
anchura fija en el archivo
remoto. Es necesario si
"Columnas con anchura
fija" está establecido en Sí.
Delimitador de columna Char , (coma) Es necesario si "Columnas
con anchura fija" está
establecido en No. El
delimitador que separa los
campos de datos en el
archivo remoto. Puede
entrar un único carácter sin
comillas o el valor ASCII
del carácter que desea
utilizar.
Carácter de comilla Char " (comillas dobles) Opcional y válido
solamente si "Columnas
con anchura fija" está
establecido en No. El
carácter único se utiliza
para incluir un valor de
datos que contiene un
carácter delimitador como
datos. También puede
entrar el valor ASCII para
el carácter que desee
utilizar. Puede suprimir
"Carácter de comillas" si no
entra ningún valor.

Capítulo 4. Etapas de trabajo de servidor 79


Tabla 9. Propiedades del enlace de salida (continuación)
Solicitud Tipo Valor predeterminado Descripción
Carácter de escape Char \ (barra inclinada Necesario. El único carácter
invertida) entrado para ser
interpretado como el
carácter de escape.
Serie Null Serie Ninguno Opcional. Especifica la serie
que debe interpretarse
como el valor nulo de SQL.
Nombres de columnas de la Serie No Es necesario si "Tipo de
primera línea representación de datos"
está establecido en ASCII.
Especifica si se debe
transferir la primera línea
al archivo remoto (es decir,
es posible que contenga
nombres de columnas).
Mandato anterior (Before) Serie Ninguno Opcional. El mandato de
de Telnet Telnet que se debe ejecutar
en la máquina remota antes
de iniciar un trabajo.
Mandato posterior (After) Serie Ninguno Opcional. Especifica el
de Telnet mandato de Telnet que
debe ejecutarse en la
máquina remota después
de completar un trabajo.
Modalidad de conexión de Lista Activa Especifica el proceso que
datos de FTP inicia la conexión para la
transferencia de datos.

Si se establece en Activa, el
servidor FTP inicia las
conexiones.

Si se establece en Pasiva,
las conexiones se inician
desde el sistema principal
donde se ha instalado la
capa de motor. Permite
almacenar archivos en
sistemas principales que se
encuentran fuera del
cortafuegos basado en un
router.

80 Guía del desarrollador de Server Job


Tabla 9. Propiedades del enlace de salida (continuación)
Solicitud Tipo Valor predeterminado Descripción
Puerto de datos de FTP Lista Ninguno Opcional. El número de
puerto exclusivo en el que
se reciben datos desde el
servidor FTP de la máquina
remota. El servidor FTP de
la máquina remota se
conecta a este puerto para
transferir el archivo remoto.

Si no especifica un valor o
dicho valor es 0, la etapa
configura automáticamente
un número de puerto
disponible para el usuario.
Si especifica un valor, éste
debe estar entre el 1025 y el
4999.

Para obtener más


información acerca del
modelo de FTP, consulte el
protocolo de transferencia
de archivos (FTP) 959 RFC
estándar.
Nivel de rastreo de enlace Largo 0 Opcional. Controla el tipo
de información de rastreo
que se añade al registro.
Los niveles de rastreo
disponibles son:
0 Ningún rastreo
1 Propiedades de enlace
2 Rendimiento
4 Mensajes de FTP
8 Mensajes de Telnet
16 Rastreo de función
32 Volcado de datos de
Telnet

Puede combinar los niveles


de rastreo. Por ejemplo, un
nivel de rastreo de 3
significa que se añadirán
las propiedades del enlace
y los mensajes de
rendimiento en el registro.
Longitud de Largo 4096 Necesario. Establece la
almacenamiento intermedio longitud (en fragmentos
superiores a 512 bytes) de
los almacenamientos
intermedios de recepción y
de envío del FTP para filas
de datos antes de ser
enviadas o recuperadas.

Capítulo 4. Etapas de trabajo de servidor 81


Representación de datos ASCII o binaria
Representación de datos ASCII para los enlaces de salida. Si establece Tipo de representación de datos
en ASCII:
v El servicio FTP se configura para el tipo de representación ASCII. El remitente (host remoto) convierte
los datos de su representación en caracteres internos, es decir, ASCII o EBCDIC, a la representación
NVT-ASCII estándar. Para obtener más información sobre la representación de datos y el
almacenamiento FTP, consulte el protocolo de transferencia de archivos (FTP) 959 RFC estándar.
v La secuencia de datos recibida del host remoto se analiza en filas de datos explorando los datos para la
secuencia de fin de la línea [CR] [LF].
v La fila de datos se continúa analizando en datos de columna. El método de análisis utilizado depende
del valor de Columnas de anchura fija. Si se establece en Sí, los metadatos de columna determinan los
tamaños de archivo. Si se establece en No, la fila se analiza en columnas explorando en busca del
delimitador de columna.

Representación de datos ASCII para los enlaces de entrada. Si establece Tipo de representación de
datos en ASCII:
v El servicio FTP se configura para el tipo de representación ASCII. El destinatario (host remoto)
convierte los datos del formato ASCII a su propio formato interno.
v Los datos de columna (por fila) se colocan en una fila formateada. El formato depende del valor de
Columnas de anchura fija. Si se establece en Sí, los datos se colocan en un almacenamiento intermedio
de caracteres. Los metadatos de columna determinan el tamaño asignado por columna. Si los datos de
columna son mayores que la anchura de columna, los datos se truncan a la anchura de columna de los
metadatos y se muestra un mensaje de aviso. Si se establece en No, los datos se colocan en un
almacenamiento intermedio de caracteres, separador por el delimitador de la columna configurada.
v Se añaden los caracteres de terminación [CR] [LF] a cada fila de datos. Los datos se envían a la
máquina remota para almacenarse como un archivo de texto.

Representación de datos binaria para los enlaces de salida. Si establece Tipo de representación de
datos en Binaria:
v Columnas de anchura fija debe establecerse en Sí.
v El servicio FTP se configura para el tipo de representación IMAGE. Los datos se envían desde la
máquina remota como bits contiguos sin conversión de caracteres.
v La secuencia de datos recibida de la máquina remota se analiza en filas de datos determinando la
longitud total de la fila. La longitud de la fila se calcula mediante la acumulación de la anchura de
cada columna y los valores asociados con Espacios entre columnas y Finalización de línea.
v La fila de datos se continúa analizando en datos de columna utilizando las mismas propiedades y
metadatos.

Nota: La modalidad binaria no está soportada en el lienzo del servidor paralelo. Consulte la propiedad
de entrada Tipo de representación de datos y la propiedad de salida Tipo de representación de datos.

Representación de datos binaria para los enlaces de entrada. Si establece Tipo de representación de
datos en Binaria:
v Columnas de anchura fija debe establecerse en Sí.
v El servicio FTP se configura para el tipo de representación IMAGE. Los datos se envían como bits
contiguos sin conversión de caracteres.
v Los datos de columna por fila se colocan en un almacenamiento intermedio de caracteres. Los
metadatos de columna determinan el tamaño asignado por columna. Si los datos de columna son
mayores que la anchura de columna, los datos se truncan a la anchura de columna de los metadatos y
se muestra un mensaje de aviso.

82 Guía del desarrollador de Server Job


v Se añaden los caracteres de terminación especificados por Finalización de línea a cada fila de datos y
se envían a la máquina remota.

Nota: La modalidad binaria no está soportada en el lienzo del servidor paralelo. Consulte la propiedad
de entrada Tipo de representación de datos y la propiedad de salida Tipo de representación de datos.

Etapas Link Collector


En estos temas se describe cómo utilizar una etapa Link Collector en el diseño del trabajo.

La etapa Link Collector es una etapa activa que utiliza hasta 64 entradas y permite recopilar datos de los
enlaces y direccionarlos a un enlace de salida individual. La etapa espera que el enlace de salida utilice
los mismos metadatos que los enlaces de entrada.

La etapa Link Collector puede utilizarse con una etapa Link Partitioner para aprovechar un sistema
multiprocesador y procesar los datos en paralelo. La etapa Link Partitioner particiona los datos y los
procesa en paralelo y, a continuación, la etapa Link Collector vuelve a recopilarlos conjuntamente antes
de grabarlos en un único destino. Para conocer las ventajas, consulte “Trabajos y procesos de IBM
InfoSphere DataStage” en la página 5 para ver cómo se ejecutan los trabajos de IBM InfoSphere DataStage
como procesos.

El siguiente diagrama ilustra cómo puede utilizarse la etapa Link Collector en un trabajo de la siguiente
manera:

Para que este trabajo pueda compilarse y ejecutarse según lo previsto en un sistema multiprocesador,
debe tener activado el almacenamiento intermedio entre procesos, ya sea a nivel de proyectos utilizando
el cliente del Administrador o a nivel de trabajos en el recuadro de diálogo Propiedades del trabajo.

Los archivos temporales generados por esta etapa se colocan en el directorio especificado por la variable
de entorno TEMP. Utilice el cliente del Administrador para establecer la variable TEMP en cada proyecto.

Utilización de una etapa Link Collector


Cuando edita una etapa Link Collector, aparece el recuadro de diálogo Etapa Link Collector. Este
recuadro de diálogo tiene tres páginas:
v Etapa. Muestra el nombre de la etapa que se está editando. Esta página tiene un separador General
que contiene una descripción opcional de la etapa y los nombres de las rutinas anterior y posterior.

Capítulo 4. Etapas de trabajo de servidor 83


Para obtener más información sobre estas rutinas, consulte “Subrutinas anteriores y posteriores a la
etapa”. También tiene un separador Propiedades que permite especificar propiedades que afectan al
comportamiento de la etapa. Para obtener detalles, consulte “Definición de propiedades de la etapa
Link Collector”.
v Entradas. Especifica las definiciones de columna para los enlaces de entrada de datos.
v Salidas. Especifica las definiciones de columna para el enlace de salida de datos.

Pulse Aceptar para cerrar este recuadro de diálogo. Los cambios se guardan cuando se guarda el trabajo.

Subrutinas anteriores y posteriores a la etapa


El separador General de la página Etapa contiene campos opcionales que permiten definir las rutinas que
se van a utilizar, que se ejecutan antes o después de que la etapa haya procesado los datos.
v Subrutina anterior a la etapa y Valor de entrada. Contiene el nombre (y el valor) de una subrutina
que se ejecuta antes de que la etapa empiece a procesar datos. Por ejemplo, se puede especificar una
rutina que prepare los datos antes de que se inicie el proceso.
v Subrutina posterior a la etapa y Valor de entrada. Contiene el nombre (y el valor) de una subrutina
que se ejecuta después de que la etapa haya procesado los datos. Por ejemplo, se puede especificar una
rutina que envíe un mensaje electrónico cuando la etapa haya finalizado.

Seleccione una rutina en la lista. Esta lista contiene todas las rutinas definidas como una Subrutina
anterior/posterior en la carpeta Rutinas del árbol de repositorio. Entre un valor apropiado para el
argumento de entrada de la rutina en el campo Valor de entrada.

Si elige una rutina definida en el repositorio, que se ha editado pero que no se ha compilado, un mensaje
de aviso le recordará que debe compilar la rutina cuando cierre el recuadro de diálogo Etapa Link
Collector.

Un código de retorno 0 de la rutina indica que ha resultado satisfactoria y cualquier otro código indica
que la rutina ha resultado anómala y provoca un error muy grave cuando se ejecuta el trabajo.

Si ha instalado o importado un trabajo, es posible que el campo Subrutina anterior a la etapa o


Subrutina posterior a la etapa haga referencia a una rutina que no exista en el sistema. En tal caso,
aparecerá un mensaje de aviso cuando cierre el recuadro de diálogo Etapa Link Collector. Debe instalar o
importar la rutina "ausente" o seleccionar una rutina alternativa que utilizar.

Definición de propiedades de la etapa Link Collector


El separador Propiedades permite especificar dos propiedades para la etapa Link Collector.
v Algoritmo de colección. Utilice esta propiedad para especificar el método que utiliza la etapa para
recopilar datos. Elija entre:
– Iteración cíclica. Este es el método predeterminado. Utilizando el método de iteración cíclica, la
etapa lee una fila de cada enlace de entrada consecutivamente.
– Ordenar/Fusionar. Utilizando el método de ordenar/fusionar, la etapa lee diversas entradas
ordenadas y graba una sola salida ordenada.
v Clave de orden. Esta propiedad sólo es significativa si ha seleccionado un algoritmo de colección de
Ordenar/Fusionar. Define cómo se sabe que se va a ordenar cada uno de los conjuntos de datos
particionados y cómo se ordenará la salida fusionada. La clave tiene el formato siguiente:
Nombre_columna {orden_clasificación]
[,Nombre_columna [orden_clasificación]]...
Nombre_columna especifica una o varias columnas que se deben ordenar.
orden_clasificación define el orden de clasificación de la siguiente manera:

84 Guía del desarrollador de Server Job


Orden ascendente Orden descendente
a p
asc dsc
ascendente descendente
A D
ASC DSC
ASCENDING DESCENDING

En un entorno de soporte multilingüístico, el convenio de clasificación del entorno local afectar al


orden de clasificación. El convenio de clasificación predeterminado se establece en el cliente del
Administrador, pero puede establecerse para trabajos individuales en el recuadro de diálogo
Propiedades del trabajo.
Por ejemplo:
FIRSTNAME d, SURNAME D
Especifica que las filas se ordenan según la columna FIRSTNAME y la columna SURNAME en orden
descendente.

Definición de datos de entrada de etapa Link Collector


La etapa Link Collector puede tener hasta 64 enlaces de entrada. Aquí es donde llegan los datos que se
van a recopilar. La lista Nombre de entrada de la página Entradas permite seleccionar cuál de los 64
enlaces está buscando.

La página Entradas tiene dos separadores:


v General. El separador General permite especificar una descripción opcional de la etapa.
v Columnas. El separador Columnas contiene las definiciones de columna para los datos en los enlaces
de entrada. Normalmente se rellena con los metadatos de las etapas que se conectan en el lado de la
entrada. También puede Cargar una definición de columna desde el repositorio o escribir la suya
propia (y Guardar esta en el repositorio si es necesario). Tenga en cuenta que los metadatos de todos
los enlaces de entrada deben ser idénticos, y a la vez coincidir con los metadatos del enlace de salida.

Definición de datos de salida de etapa Link Collector


La etapa Link Collector puede tener un enlace de salida.

La página Salidas tiene dos separadores: General y Columnas.


v General. El separador General permite especificar una descripción opcional de la etapa.
v Columnas. El separador Columnas contiene las definiciones de columna para los datos en el enlace de
salida. Puede Cargar una definición de columna desde el repositorio o escribir la suya propia (y
Guardar esta en el repositorio si es necesario). Tenga en cuenta que los metadatos del enlace de salida
deben ser idénticos a los metadatos de los enlaces de entrada.

Etapas Link Partitioner


En estos temas se describe cómo utilizar una etapa Link Partitioner en el diseño del trabajo.

La etapa Link Partitioner es una etapa activa que utiliza una entrada y permite distribuir las filas
particionadas entre un máximo de 64 enlaces de salida. La etapa espera que los enlaces de salida utilicen
los mismos metadatos que el enlace de entrada.

Capítulo 4. Etapas de trabajo de servidor 85


El particionamiento de los datos permite aprovechar las ventajas de un sistema multiprocesador y
procesar los datos en paralelo. Puede utilizarse con la etapa Link Collector para particionar datos,
procesarlos en paralelo y volver a recopilarlos conjuntamente antes de grabarlos en un único destino.
Para conocer las ventajas, consulte “Trabajos y procesos de IBM InfoSphere DataStage” en la página 5
para ver cómo se ejecutan los trabajos de IBM InfoSphere DataStage como procesos.

El siguiente diagrama ilustra cómo puede utilizarse la etapa Link Partitioner en un trabajo de la siguiente
manera.

Para que este trabajo pueda compilarse y ejecutarse según lo previsto en un sistema multiprocesador,
debe tener activado el almacenamiento intermedio entre procesos, ya sea a nivel de proyectos utilizando
el cliente del Administrador o a nivel de trabajos en el recuadro de diálogo Propiedades del trabajo.

Los archivos temporales generados por esta etapa se colocan en el directorio especificado por la variable
de entorno TEMP. Utilice el cliente del Administrador para establecer la variable TEMP en cada proyecto.

Utilización de una etapa Link Partitioner


Cuando edita una etapa Link Partitioner, aparece el recuadro de diálogo Etapa Link Partitioner. Este
recuadro de diálogo tiene tres páginas:
v Etapa. Muestra el nombre de la etapa que se está editando. Esta página tiene un separador General
que contiene una descripción opcional de la etapa y los nombres de las rutinas anterior y posterior.
Para obtener más información sobre estas rutinas, consulte “Subrutinas anteriores y posteriores a la
etapa”. También tiene un separador Propiedades que permite especificar propiedades que afectan al
comportamiento de la etapa. Para obtener detalles, consulte “Definición de propiedades de la etapa
Link Partitioner” en la página 87.
v Entradas. Especifica las definiciones de columna para el enlace de entrada de datos.
v Salidas. Especifica las definiciones de columna para los enlaces de salida de datos.

Pulse Aceptar para cerrar este recuadro de diálogo. Los cambios se guardan cuando se guarda el trabajo.

Subrutinas anteriores y posteriores a la etapa


El separador General de la página Etapa contiene campos opcionales que permiten definir las rutinas que
se van a utilizar que se ejecutan antes o después de que la etapa haya procesado los datos.

86 Guía del desarrollador de Server Job


v Subrutina anterior a la etapa y Valor de entrada. Contiene el nombre (y el valor) de una subrutina
que se ejecuta antes de que la etapa empiece a procesar datos. Por ejemplo, se puede especificar una
rutina que prepare los datos antes de que se inicie el proceso.
v Subrutina posterior a la etapa y Valor de entrada. Contiene el nombre (y el valor) de una subrutina
que se ejecuta después de que la etapa haya procesado los datos. Por ejemplo, se puede especificar una
rutina que envíe un mensaje electrónico cuando la etapa haya finalizado.

Seleccione una rutina en la lista. Esta lista contiene todas las rutinas definidas como una Subrutina
anterior/posterior en la carpeta Rutinas del árbol de repositorio. Entre un valor apropiado para el
argumento de entrada de la rutina en el campo Valor de entrada.

Si elige una rutina definida en el repositorio, que se ha editado pero que no se ha compilado, un mensaje
de aviso le recordará que debe compilar la rutina cuando cierre el recuadro de diálogo Etapa Link
Partitioner.

Un código de retorno 0 de la rutina indica que ha resultado satisfactoria y cualquier otro código indica
que la rutina ha resultado anómala y provoca un error muy grave cuando se ejecuta el trabajo.

Si ha instalado o importado un trabajo, es posible que el campo Subrutina anterior a la etapa o


Subrutina posterior a la etapa haga referencia a una rutina que no exista en el sistema. En tal caso,
aparecerá un mensaje de aviso cuando cierre el recuadro de diálogo Etapa Link Partitioner. Debe instalar
o importar la rutina "ausente" o seleccionar una rutina alternativa que utilizar.

Definición de propiedades de la etapa Link Partitioner


El separador Propiedades permite especificar dos propiedades para la etapa Link Partitioner.
v Algoritmo de particionamiento. Utilice esta propiedad para especificar el método que utiliza la etapa
para particionar datos. Elija entre:
– Iteración cíclica. Este es el método predeterminado. Utilizando el método de iteración cíclica, la
etapa grabará cada fila entrante en uno de los enlaces de salida sucesivamente.
– Aleatorio. Mediante este método, la etapa utilizará un generador de números aleatorios para
distribuir filas entrantes equitativamente entre todos los enlaces de salida.
– Hash. Mediante este método, la etapa aplica una función hash a uno o varios valores de columna de
entrada para determinar a qué enlace de salida se pasa la fila.
– Módulo. Mediante este método, la etapa aplica una función de módulo a un valor de columna de
entrada entero para determinar a qué enlace de salida se pasa la fila.
v Clave de particionamiento. Esta propiedad sólo es significativa si ha seleccionado un algoritmo de
particionamiento Hash o Módulo. Para el algoritmo Hash, especifique uno o varios nombres de
columna separados por comas. Estas claves se concatenan y se aplica una función hash para
determinar el enlace de salida de destino. Para el algoritmo Módulo, especifique un solo nombre de
columna que identifique una columna numérica de entero. El valor de esta columna determina el
enlace de salida de destino.

Definición de datos de entrada de etapa Link Partitioner


La etapa Link Partitioner puede tener un enlace de entrada. Aquí es donde llegan los datos que se van a
particionar.

La página Entradas tiene dos separadores:


v General. El separador General permite especificar una descripción opcional de la etapa.
v Columnas. El separador Columnas contiene las definiciones de columna para los datos en el enlace de
entrada. Normalmente se rellena con los metadatos de la etapa que se conecta en el lado de la entrada.
También puede Cargar una definición de columna desde el repositorio o escribir la suya propia (y

Capítulo 4. Etapas de trabajo de servidor 87


Guardar esta en el repositorio si es necesario). Tenga en cuenta que los metadatos del enlace de
entrada deben ser idénticos a los metadatos de los enlaces de salida.

Definición de datos de salida de etapa Link Partitioner


La etapa Link Partitioner puede tener hasta 64 enlaces de salida. Los datos particionados fluyen entre
estos enlaces. La lista Nombre de salida de la página Salidas permite seleccionar cuál de los 64 enlaces
está buscando.

La página Salidas tiene dos separadores:


v General. El separador General permite especificar una descripción opcional de la etapa.
v Columnas. El separador Columnas contiene las definiciones de columna para los datos en el enlace de
salida. Puede Cargar una definición de columna desde el repositorio o escribir la suya propia (y
Guardar esta en el repositorio si es necesario). Tenga en cuenta que los metadatos del enlace de salida
deben ser idénticos a los metadatos del enlace de entrada. De esta forma, los metadatos son idénticos
para todos los enlaces de salida.

Etapas Merge
La etapa Merge permite combinar dos archivos secuenciales en uno o varios enlaces de salida. Merge,
una etapa pasiva, no tiene enlaces de entrada, pero tiene al menos un enlace de salida. Utilice la interfaz
gráfica de usuario (GUI) para definir la operación de unión que se utiliza para fusionar dos archivos. Los
dos archivos de entrada que se fusionarán deben ser archivos de texto secuenciales.

Funcionalidad
La etapa Merge da soporte a la siguiente funcionalidad:
v Combinación de dos archivos de texto secuenciales.
v Elección entre varios tipos de uniones diferentes.
v Soporte para soporte multilingüístico sólo en la modalidad automática.

Utilización de la etapa Merge


A continuación, se proporciona una serie de tareas necesarias para fusionar dos archivos, que se muestran
en el orden en el que deben ejecutarse. Debe especificar:
v Los directorios del archivo de entrada y el archivo de trabajo, y la información del archivo de registro.
Consulte “El separador General de la página Etapa” en la página 89.
v Los nombres de los archivos que se van a fusionar. Consulte El separador General.
v El tipo de unión. Consulte Tipo de unión.
v El nivel de rastreo. Consulte Nivel de rastreo.
v El formato del archivo de entrada. Consulte “Separador Propiedades de archivo de entrada” en la
página 91.
v Las columnas el archivo de entrada. Consulte Separadores Columnas del primer y del segundo
archivo.
v Dónde se guarda la información de la columna. Consulte El recuadro de diálogo Guardar definición de
tabla.
v Las claves de la unión. Consulte “El separador Correlación” en la página 94.
v El contenido de las columnas de salida. Consulte “Especificación de columnas de salida” en la página
94.
v El nombre y el formato de las columnas de archivo de salida. Consulte “El separador Columnas” en la
página 95.

88 Guía del desarrollador de Server Job


El separador General de la página Etapa
El separador General de la página Etapa define los directorios del archivo de entrada y el archivo de
trabajo, y la información del archivo de registro. El separador General contiene los campos siguientes:
v Vía de acceso del directorio del primer archivo. La vía de acceso y el directorio del primer archivo
secuencial.
v ... (Botón Examinar). Si pulsa ..., se abre el recuadro de diálogo Seleccionar desde servidor. Consulte
“Recuadro de diálogo Seleccionar desde servidor”.
v Vía de acceso del directorio del segundo archivo. La vía de acceso y el directorio del segundo archivo
secuencial.
v ... (Botón Examinar). Si pulsa ..., se abre el recuadro de diálogo Seleccionar desde servidor. Consulte
“Recuadro de diálogo Seleccionar desde servidor”.
v Directorio temporal. La vía de acceso completa y el directorio en el que se almacenan los archivos
temporales. Estos archivos temporales se crean cuando se está ejecutando el trabajo y se suprimen
cuando finaliza el trabajo. El valor predeterminado es el directorio de trabajo actual.
v ... (Botón Examinar). Si pulsa ..., se abre el recuadro de diálogo Seleccionar desde servidor. Consulte
“Recuadro de diálogo Seleccionar desde servidor”.
v Nivel de rastreo. El tipo de información que debe incluirse en el archivo de registro de trabajo. Puede
especificar los siguientes niveles de rastreo:
– 0 - No se graba información en el archivo de registro
– 1 - Las propiedades de la etapa se graban en el archivo de registro
El valor predeterminado es 0.
v Descripción. Descripción opcional de las propiedades de la etapa.

Nota: También puede incluir un parámetro de trabajo en la vía de acceso del directorio.

Recuadro de diálogo Seleccionar desde servidor


Si pulsa Examinar (botón ...), se abre el recuadro de diálogo Seleccionar desde servidor. Los campos
siguientes se encuentran en el recuadro de diálogo Seleccionar desde servidor:
v Buscar en. El nombre del directorio predeterminado seleccionado. Pulse la flecha hacia abajo para ver
dónde está actualmente ubicado dentro de la jerarquía del directorio.
v Nombres de directorio o archivo. Una lista de nombres de directorios o archivos en el directorio de
Buscar en.
v Nombre de archivo (o patrón). Nombre del archivo o patrón seleccionado.
v Archivos del tipo. La expresión de nombre de archivo. De forma predeterminada, se muestran todos
los archivos.

Definición de la correlación de juego de caracteres


Puede definir una correlación de juego de caracteres para una etapa. Realice esta tarea desde el separador
Soporte multilingüístico en la página Etapa. El separador Soporte multilingüístico sólo aparece si ha
instalado el soporte multilingüístico.

Especifique la información mediante los siguientes campos:


v Nombre de correlación que debe utilizarse con la etapa. Define la correlación de juego de caracteres
predeterminada para el proyecto o el trabajo. Puede cambiar la correlación seleccionando un nombre
de correlación de la lista.
v Mostrar todas las correlaciones. Muestra una lista de todas las correlaciones transferidas con
InfoSphere DataStage.

Capítulo 4. Etapas de trabajo de servidor 89


v Sólo correlaciones cargadas. Muestra una lista de las correlaciones que están cargadas en ese
momento.
v Permitir correlación por columnas. Habilita la correlación de juegos de caracteres por columna. Las
columnas de un registro pueden utilizar distintas correlaciones dentro de los metadatos.
v Utilizar parámetro de trabajo.... Especifica los valores de los parámetros para el trabajo. Utilice el
formato #Parám#, donde Parám es el nombre del parámetro de trabajo. La serie #Parám# se sustituye
por el parámetro de trabajo cuando se ejecuta el trabajo.

Ajuste del tamaño del archivo de entrada


La etapa Merge da soporte a los archivos de 64 bits. No obstante, debe cambiar el valor de la propiedad
Espacio máximo en VM para la Hash Table si desea alojar archivos de entrada extremadamente grandes.
Si no lo hace, se produce una terminación anómala de los trabajos. El valor predeterminado de Espacio
máximo en VM para la Hash Table es 12. Este valor es adecuado para muchos tamaños de archivo.
Cuando aumenta el tamaño del mayor de los dos archivos de entrada, debe aumentar el valor de Espacio
máximo en VM para la Hash Table. Para los archivos de 2 GB o más, debe establecer el valor de Espacio
máximo en VM para la Hash Table en su valor máximo, 512.

Para acceder a Espacio máximo en VM para la Hash Table, pulse con el botón derecho del ratón sobre el
icono Fusionar en el lienzo y seleccione Estilo de cuadrícula. Aparece el editor de estilo de cuadrícula.
Vaya al separador Propiedades de la página Salida. Desplácese en la lista de propiedades hasta que
llegue a Espacio máximo en VM para la Hash Table.

Definición de propiedades de salida


El separador Salida del recuadro de diálogo Etapa MERGE permite especificar propiedades para el enlace
de salida. Las propiedades de salida describen las distintas características de los archivos de entrada y el
enlace de salida, de la siguiente manera:
v Nombres del primer y del segundo archivo de entrada
v Nivel de rastreo del enlace de salida
v Formato del primer y del segundo archivo de entrada
v Nombres de columna y características del primer y del segundo archivo de entrada, incluida la
correlación de juegos de caracteres
v Información de columna que se va a guardar en una tabla
v Tipo de operación de unión que se va a realizar
v Teclas utilizadas en operación de unión
v Contenido de las columnas en el enlace de salida
v Nombres de columna y formatos en el enlace de salida, incluida la correlación de juego de caracteres

El separador General
Si selecciona la página Salida, se abrirá el separador General.

Nota: El botón Columnas... elabora un listado de las columnas en el enlace de salida y sólo se incluye
por motivos de compatibilidad con otras etapas.

El separador General contiene los campos siguientes:


v Nombre del primer archivo. La vía de acceso del directorio y el nombre de archivo del primer archivo
que se debe fusionar. Este archivo debe ser un archivo de texto secuencial. También puede incluir un
parámetro de trabajo en la vía de acceso del directorio.

90 Guía del desarrollador de Server Job


v Nombre del segundo archivo. La vía de acceso del directorio y el nombre de archivo del segundo
archivo que se debe fusionar. Este archivo debe ser un archivo de texto secuencial. También puede
incluir un parámetro de trabajo en la vía de acceso del directorio.
v Tipo de unión. El tipo de unión que desea efectuar entre dos archivos de entrada. Puede elegir uno de
los siguientes tipos de operación de unión:

Tipo de unión Operación Descripción


Unión interna pura A AND B Sólo fusiona aquellas filas que tienen
los mismos valores clave en ambos
archivos de entrada.
Conjunto completo A OR B Fusiona todas las filas de los dos
archivos.
Sólo derecha e izquierda A NOR B Fusiona todas las filas de los dos
archivos excepto aquellas filas con los
mismos valores clave.
Unión externa izquierda A Fusiona todas las filas del primer
archivo (A) con filas del segundo
archivo (B) con el mismo valor clave.
Unión externa derecha B Fusiona todas las filas del segundo
archivo (B) con filas del primer
archivo (A) con el mismo valor clave.
Sólo izquierda A NOT B Fusiona todas las filas del primer
archivo excepto las filas con el mismo
valor clave en el segundo archivo (B).
Sólo derecha B NOT A Fusiona todas las filas del segundo
archivo excepto las filas con el mismo
valor clave en el primer archivo (A).

v Nivel de rastreo. Especifica un nivel de rastreo para el enlace de salida. El nivel de rastreo especifica el
tipo de información que debe incluirse en el archivo de registro de trabajo. Puede especificar los
siguientes niveles de rastreo:
– 0 - No se graba información en el archivo de registro
– 1 - Las propiedades del enlace de salida se graban en el archivo de registro

Separador Propiedades de archivo de entrada


Debe especificar el formato de archivo del primer y el segundo archivo de entrada. Para especificar el
formato de archivo, pulse el separador Propiedades de archivos de entrada en la página Salida. Se abre
la página Formato de primer archivo delante de la página Propiedades de archivos de entrada.

Para especificar el formato del segundo archivo de entrada, pulse el separador Formato de segundo
archivo. Los campos y los recuadros de selección son idénticos para el segundo archivo. A continuación,
se describe cada campo y recuadro de selección de las páginas Formato de primer archivo o Formato de
segundo archivo:

Separadores Formato del primer y del segundo archivo:


v Columnas de anchura fija. Indica si el archivo tiene columnas de anchura fija. El valor predeterminado
es sin seleccionar.
v La primera línea son nombres de columna. Indica si la primera línea del primer archivo secuencial
contiene nombres de columna. El valor predeterminado es sin seleccionar.
v Comprobar datos con metadatos. Indica si se deben utilizar definiciones de metadatos para leer datos
desde un archivo en lugar de utilizar un terminador de línea para el final de una fila. Se leerán los
datos hasta que se agoten los metadatos.

Capítulo 4. Etapas de trabajo de servidor 91


– Para los datos de anchura fija, esto significa el total de la longitud de las columnas más los espacios.
– Para los datos delimitados, esto significa el número de columnas.
– Si se borra, el final de la fila se determina por la secuencia de fin de la línea.
El valor predeterminado es sin seleccionar.
v Delimitador. Especifica el delimitador que separa los campos de datos del archivo. Esta opción está
habilitada si se ha borrado Columnas de anchura fija. Puede entrar un único carácter sin comillas o el
valor ASCII del carácter que desea utilizar. El valor predeterminado es , (coma).
v Carácter de cita. Especifica el carácter que se utiliza para incluir un valor de datos que contiene el
carácter delimitador como datos. Esta opción está habilitada si se ha borrado Columnas de anchura
fija. También puede entrar el valor ASCII de tres dígitos para el carácter que desee utilizar. Todos los
valores con una longitud del 1 al 2 se tratarán como series. Puede entrar "097" para "a". Puede suprimir
el Carácter de cita si no entra ningún valor. El valor predeterminado es " (comillas dobles).
v Carácter de escape. Especifica un único carácter para que sea interpretado como un carácter de escape.
Esta opción está habilitada si se ha borrado Columnas de anchura fija. El valor predeterminado es \
(barra inclinada invertida).
v Espacios entre columnas. Especifica el número de espacios entre columnas en un archivo secuencial
con columnas de anchura fija. El valor predeterminado es 0.
v Serie vacía. Especifica la serie utilizada para el valor nulo de SQL. No existe ningún valor
predeterminado.
v Estilo Unix (LF). Especifica si se utiliza un carácter de avance de línea para indicar la secuencia de fin
de la línea en un archivo de entrada. De forma predeterminada, no se selecciona Estilo Unix (LF).
v Estilo Dos (CR LF). Especifica si se utiliza una combinación de retorno de carro y de caracteres de
avance de línea para indicar la secuencia de fin de la línea en el archivo de entrada. De forma
predeterminada, no se selecciona Estilo Dos (LF).
v Ninguno. Especifica si debe utilizarse un terminado de fin de la línea. Ninguno estará habilitado si se
ha seleccionado Columnas de anchura fija y Comprobar datos con metadatos. De forma
predeterminada, no se selecciona la opción Ninguno.

Separadores Columnas del primer y del segundo archivo:

Mediante las páginas Columnas de primer archivo y Columnas de segundo archivo puede especificar lo
siguiente:
v Nombres de columnas del primer y del segundo archivo de entrada secuencial
v Características del archivo secuencial, incluyendo tipo de SQL, longitud, escala, capacidad de nulos y
visualización de la columna
v Correlación de juego de caracteres utilizada para la columna

Pulse el separador Columnas de primer archivo o Columnas de segundo archivo de la página


Propiedades de archivos de entrada Se abrirá la página Columnas de primer archivo o Columnas de
segundo archivo.

Tiene dos opciones para entrar información sobre las columnas:


v Puede utilizar información de una tabla existente para especificar las columnas de archivo de entrada.
v Puede entrar la información sobre la columna manualmente.

Cómo utilizar la información de la columna de una tabla existente:

Puede utilizar información de una tabla existente para definir las columnas en el primer o el segundo
archivo de entrada. Las definiciones de tabla especifican los datos utilizados en cada etapa de un trabajo
de InfoSphere DataStage y se almacenan en el repositorio.

Para transferir información sobre columnas de una tabla existente:

92 Guía del desarrollador de Server Job


1. Pulse Cargar... . Aparecerá el recuadro de diálogo Definición de tabla.
2. Utilice el ratón para seleccionar la definición de tabla en el panel izquierdo y pulse Aceptar. Las
tablas listadas ya están definidas en el repositorio.
a. Si no sabe la definición de tablas, pulse Buscar... . Aparecerá el recuadro de diálogo Buscar.
b. En el campo Texto de búsqueda, entre una serie de texto. La primera definición de tabla que
contiene la serie de texto especificada por el usuario aparece resaltada en el panel izquierdo.
3. Una vez haya seleccionado el nombre del archivo, pulse Aceptar.

Entrada manual de información de columna:

Puede entrar información sobre columnas manualmente especificando dicha información en la página
Columnas del primer archivo.

Entre un nombre de columna en Lista de nombres de columna y utilice los botones de Acciones de
columna (Añadir, Insertar Antes, Modificar, Eliminar o Eliminar todo) para especificar dónde colocar
los nombres en la Lista de nombres de columna.

El sistema le solicitará que entre la información que se describe a continuación.


v Lista de nombres de columna. Especifica los nombres de cada columna en el primer o en el segundo
archivo. Estos nombres se utilizan en la página Correlación que define el enlace de salida. No existe
ningún valor predeterminado.
v Tipo de SQL. Especifica el tipo de datos SQL. No existe ningún valor predeterminado.
v Longitud. Define la precisión de los datos. Es la longitud de los datos CHAR o la longitud máxima de
los datos VARCHAR. Si se trata de datos numéricos, es el número de dígitos de precisión. El valor
predeterminado es 0.
v Escala. Especifica el factor de escala de los datos. Si se trata de datos numéricos, es el número de
dígitos a la derecha del separador decimal. El valor predeterminado es 0.
v Con posibilidades de nulos. Especifica si la columna puede contener valores nulos. El valor
predeterminado es Sí.
v Visualización. Especifica el número máximo de caracteres necesarios para visualizar los datos de la
columna. El valor predeterminado es 0.
v Correlación de soporte multilingüístico. Especifica una correlación diferente para la columna si se ha
habilitado Correlación por columna (consulte “Definición de la correlación de juego de caracteres” en
la página 89). Seleccione una correlación de la lista.

El recuadro de diálogo Guardar definición de tabla:

Una vez haya especificado los nombres de las columnas y la correspondiente información necesaria,
puede grabar dicha información en una tabla nueva. Para guardar la información de columna en una
tabla, pulse Guardar.... Se abrirá el recuadro de diálogo Guardar definición de tabla. El recuadro de
diálogo Guardar definición de tabla contiene los campos siguientes:
v Tipo de fuente de datos. El tipo de datos grabado en la tabla. El tipo de fuente de datos puede ser una
fuente de datos ODBC, una tabla de UniVerse, un archivo hash (UniVerse), un archivo de UniData y
un archivo secuencial o una etapa. La definición de tabla se almacena de acuerdo con la fuente de
datos en la ramificación Definiciones de tabla. El valor predeterminado es Guardado.
v Nombre de la fuente de datos. Constituye la segunda parte del identificador de la definición de tabla
y proporciona el nombre creado bajo la ramificación de tipo de fuente de datos. Facilita un medio para
realizar un seguimiento de dónde se ha originado la definición de datos. El valor predeterminado es el
nombre del enlace.
v Nombre de tabla/archivo. El nombre de la tabla o del archivo que contiene los datos. El valor
predeterminado es el nombre del enlace.

Capítulo 4. Etapas de trabajo de servidor 93


v Descripción breve. Una descripción breve opcional de los datos. El valor predeterminado es la hora y
la fecha guardadas.
v Descripción explicativa. Una descripción explicativa opcional de los datos.

El separador Correlación
Debe especificar las claves en el primer y el segundo archivo de entrada secuencial para que se utilicen
en la operación de unión. Para especificar las claves, pulse el separador Correlación en la página Salida.
Se abrirá el separador Correlación.

Especificación de claves para la unión:

Seleccione claves del Primer (y el Segundo) Nombre de columna de archivos en la parte izquierda de la
página y arrástrelos a la Primera (y a la Segunda) Clave de columna de archivos a la derecha. Estas
claves se utilizan en la operación de unión para comparar dos archivos.

Puede especificar varias claves para la operación de unión. Si utiliza varias claves, debe tener el mismo
número de claves en las listas de la Primera clave de columna de archivos y en la Segunda clave de
columna de archivos.

Para suprimir una entrada que ha realizado, selecciónela y pulse con el botón derecho del ratón Borrar
entrada del menú de atajo.

Especificación de columnas de salida:

Debe especificar el contenido de las columnas que deben incluirse en el enlace de salida. Utilice la página
Correlación para especificar el contenido de las columnas.

En la página Correlación, los Nombres de columna del primer archivo y Nombres de columna del
segundo archivo ya están definidos. Se han definido en la página Propiedades de archivos de entrada.

En la página Correlación, debe especificar qué columnas de los archivos de entrada desea incluir en el
enlace de salida. Para especificar el contenido de una columna en el enlace de salida, seleccione una
columna en el recuadro de lista Nombres de columna del primer archivo o Nombres de columna del
segundo archivo y arrastre la columna a la lista Correlación de la columna de entrada. El Nombre de
columna de salida se genera automáticamente. Las propiedades de las columnas en el enlace de salida se
derivan de los del archivo de entrada. Debe incluir una Clave de columna del primer archivo y una
Clave de columna del segundo archivo en la Lista de columnas.

Si desea especificar de forma explícita los nombres y las propiedades de las columnas en el enlace de
salida, vaya a la página Columnas, tal como se describe en “El separador Columnas” en la página 95.

Puede seleccionar varias columnas a la vez para arrastrarlas de la lista Nombres de columna del primer
(o segundo) archivo a la lista Correlación de la columna de entrada. Para seleccionar varias columnas,
seleccione la primera columna y mantenga pulsada la tecla Control hasta que se hayan resaltado todas
las columnas que desea. O bien, mantenga pulsada la tecla Mayús y pulse para seleccionar varias
columnas.

Puede pulsar el botón derecho del ratón para suprimir un elemento de la lista Correlación de la columna
de entrada. Para suprimir columnas del enlace de salida, pulse el separador Columnas y suprima las
columnas tal como se describe en “El separador Columnas” en la página 95.

Nota: Si cambia los Nombres de columna del primer archivo (o el segundo archivo) a la izquierda de la
página, deberá comprobar la información de correlación (es decir, las claves de correlación y la lista de
columnas) a la derecha de la página. Si los nombres de columna de la derecha de la página no coinciden
con los de la izquierda, arrastre los nombres de columna correctos de la izquierda a la derecha.

94 Guía del desarrollador de Server Job


El separador Columnas
Puede utilizar el separador Columnas para especificar el nombre y el formato de las columnas en el
enlace de salida. También puede utilizar el separador Columnas para especificar una correlación de
juegos de caracteres diferente para la columna, para que las columnas de un registro puedan utilizar
distintas correlaciones.

Tal como se describe en Separadores Columnas del primer y del segundo archivo, puede utilizar la
información de una tabla existente para especificar las columnas. Consulte dicha sección para ver cómo
puede utilizar el botón Cargar... para transferir información de una tabla.

Nota: Debe establecer todas las columnas en "Con posibilidades de nulos", excepto si establece la fusión
en Unión interna pura, tal como se describe en Tipo de unión.

El separador Columnas contiene los campos siguiente:


v Nombre de columna. Especifica el nombre de la columna cuyo formato está definiendo.
v Grupo. Especifica si desea agrupar por esta columna. El valor predeterminado es No.
v Derivación. Especifica que desea resumir utilizando esta columna.
v Clave. Define si la columna es una clave.
v Tipo de SQL. Especifica el tipo de datos SQL. El valor predeterminado es (Desconocido).
v Longitud. Define la precisión de los datos. Es la longitud de los datos CHAR o la longitud máxima de
los datos VARCHAR. Si se trata de datos numéricos, es el número de dígitos de precisión.
v Escala. Especifica el factor de escala de los datos. Si se trata de datos numéricos, es el número de
dígitos a la derecha del separador decimal.
v Con posibilidades de nulos. Especifica si la columna puede contener valores nulos. Debe ser Sí, a
menos que ejecute una unión interna pura. El valor predeterminado es No.
v Visualización. Especifica el número máximo de caracteres necesarios para visualizar los datos de la
columna.
v Elemento de datos. Especifica el tipo de datos de la columna.
v Descripción. Especifica una descripción de texto opcional de la columna.
v Correlación de soporte multilingüístico. Si se habilita la correlación por columnas, especifica la
correlación que se ejecuta para la columna. Seleccione uno de los nombres de correlación en la lista
desplegable. El valor predeterminado es el del proyecto (MS1252).

Supresión de columnas en el enlace de salida:

En la página Columnas, puede suprimir las columnas que ha definido en el enlace de salida. Para
suprimir columnas en el enlace de salida:
1. Seleccione la fila que desea suprimir.
2. Pulse la tecla Suprimir.

Etapas Pivot
Pivot, una etapa activa, correlaciona conjuntos de columnas en una tabla de entrada con una única
columna de una tabla de salida. Este tipo de correlación se denomina girar.

Esta etapa gira datos horizontales, es decir, columnas dentro de una única fila en muchas filas. Repite un
segmento de datos que normalmente está orientado a claves de cada columna girada de forma que cada
fila de salida contiene un valor separado.

Capítulo 4. Etapas de trabajo de servidor 95


Un conjunto de columnas de entrada consiste en una o en varias columnas. El giro normalmente da como
resultado una tabla de salida que contiene menos columnas pero más filas que la tabla de entrada
original.

La etapa no tiene propiedades de etapa ni de enlace. Simplemente correlaciona filas de entrada con filas
de salida.

Funcionalidad
Funcionalidad soportada

La funcionalidad de la etapa Pivot es la siguiente:


v Da soporte a los giros horizontales.
v Soporte multilingüístico.

Funcionalidad no soportada

No se da soporte a la siguiente funcionalidad:


v Compatibilidad con releases anteriores al 7.0 de IBM InfoSphere DataStage.
v Los giros verticales, es decir, la correlación de datos verticales de varias filas en una fila. (Los giros
verticales agrupan una o varias columnas y las correlacionan con muchas columnas de la fila agrupada
en una tabla de salida).
v Una interfaz de usuario personalizada.

Giro de datos
Un giro horizontal correlaciona las columnas de una fila con varias filas, es decir, repite un segmento de
datos para cada columna girada. Los datos normalmente están orientados a las claves.

Utilice el campo Derivación en la cuadrícula de columna del enlace de salida para especificar los giros.
Un campo vacío indica que hay un nombre de columna de entrada con el mismo nombre que la columna
de salida. Esta columna de entrada está correlacionada con la columna de salida correspondiente.

Derivación individual

Si el campo Derivación de una columna de salida muestra un único nombre de columna, la columna de
entrada que tiene el mismo nombre que el especificado en el campo Derivación se correlaciona con esta
columna de salida. Una columna que tenga una derivación individual se trata como una clave y se
proyecta de la misma manera en cada fila de salida derivada de la fila de entrada individual.

Varias derivaciones

Cuando una columna de salida se deriva de más de una columna de entrada, es decir, cuando aparecen
varios nombres de columna de entrada en el campo Derivación, se genera una tabla de salida con más
filas que la tabla de entrada. Cada columna de entrada especificada en el campo Derivación para las
columnas de salida se correlaciona con la columna de salida. Se crea una nueva fila para cada una de las
columnas de entrada especificada.

Ejemplos
Los ejemplos que se describen en las siguientes secciones muestran un giro en los datos de ventas del
primer trimestre para una determinada empresa. Estos ejemplos ilustran los conceptos de un giro
horizontal.

96 Guía del desarrollador de Server Job


Columnas de enlace de entrada
El ejemplo siguiente ilustra la entrada de datos en la etapa Pivot.

El separador Columnas de la página Entradas contiene tres columnas de entrada con datos de ventas:
Ventas_ENE, Ventas_FEB y Ventas_MAR. Las columnas están estructuradas de la forma siguiente:
Tabla 10. Columnas de entrada
Nombre de la columna Tipo de SQL Longitud Escala
CUSTID Entero 10
LNAME VarChar 10
Ventas_ENE Decimal 10 2
Ventas_FEB Decimal 10 2
Ventas_MAR Decimal 10 2

Nota: En toda columna, el tipo de datos documentado en Tipo de SQL debe ser el mismo que el tipo de
datos de la tabla de origen.

Los datos de las filas de origen para las columnas de entrada tienen la apariencia siguiente:
Tabla 11. Filas de origen de entrada
CUSTID LNAME Ventas_ENE Ventas_FEB Ventas_MAR
100 Smith $1,234.00 $1,456.00 $1,578.00
101 Yamada $1,245.00 $1,765.00 $1,934.00

Columnas de enlace de salida


El siguiente ejemplo ilustra como especificar los datos de salida de la etapa Pivot.

El separador Columnas del enlace de salida contiene una columna de Ventas derivada de las tres
columnas de entrada: Ventas_ENE, Ventas_FEB y Ventas_MAR. Las columnas están estructuradas de la
forma siguiente:
Tabla 12. Columnas de salida
Nombre de la
columna Derivación Tipo de SQL Longitud Escala
CUSTID Entero 10
Apellido LNAME VarChar 10
Ventas Ventas_ENE, Ventas_FEB y Decimal 10 2
Ventas_MAR

Nota: En toda columna, el tipo de datos documentado en Tipo de SQL debe ser el mismo que el tipo de
datos de la tabla de destino.

La columna de salida que se deriva de una única columna de entrada es un valor clave. El valor clave se
repite en cada fila que resulta de la correspondiente fila de entrada.

El número máximo de filas de salida que resulta de una única fila de entrada viene determinado por la
columna de salida que se deriva de la mayoría de columnas de entrada. Las tres filas de salida de los
datos de ventas que resultan de cada fila de entrada en este ejemplo son de la manera siguiente:

Capítulo 4. Etapas de trabajo de servidor 97


Tabla 13. Filas de destino de salida
CUSTID Apellido Ventas
100 Smith $1,234.00
100 Smith $1,456.00
100 Smith $1,578.00
101 Yamada $1,245.00
101 Yamada $1,765.00
101 Yamada $1.934.00

Si el giro incluye cualquier derivación con menos del número máximo de filas de salida pero más de una
fila, la fila de salida contendrá un valor nulo para cada columna en la que no esté disponible una
derivación.

Por ejemplo, supongamos que se pide al cliente que realice los pagos en su cuenta dos veces al año, en
junio y en diciembre. Es posible que los datos de origen sean como los siguientes:
Tabla 14. Ejemplo de pagos
CUSTID LNAME Ventas_ENE Ventas_FEB Ventas_MAR Pagos_JUN Pagos_DIC
100 Smith $1,234.00 $1,456.00 $1,578.00 $6,298.00 $7,050.00
101 Yamada $1,245.00 $1,765.00 $1,934.00 $7,290.00 $7,975.00

Supongamos que el enlace de salida contiene una derivación adicional para pagos:
Tabla 15. Columnas de salida con detalles de pagos
Nombre de la
columna Derivación Tipo de SQL Longitud Escala
CUSTID Entero 10
Apellido LNAME VarChar 10
Ventas Ventas_ENE, Ventas_FEB y Decimal 10 2
Ventas_MAR
Pagos Pagos JUN, Pagos DIC

Los datos de salida en las filas de destino después del giro podrían ser los siguientes:
Tabla 16. Datos de salida en filas de destino después de giro
CUSTID LNAME Ventas Pagos
100 Smith $1,234.00 $6,298.00
100 Smith $1,456.00 $7,050.00
100 Smith $1,578.00 nulo
101 Yamada $1,245.00 $7,290.00
101 Yamada $1,765.00 $7,975.00
101 Yamada $1,934.00 nulo

98 Guía del desarrollador de Server Job


Etapas Row Merger
La etapa Row Merger lee datos de una fila sin parar desde un enlace de entrada. Fusiona todas las
columnas en una única serie de un formato especificado. A continuación, grana la serie en una columna
indicada del enlace de salida. La etapa puede tener un único enlace de entrada y un único enlace de
salida.

Durante una operación normal de la etapa Row Merger, cada fila de entrada con varias columnas da
como resultado una fila de salida de una única columna. La etapa también ofrece recursos de
concatenación, no obstante, estos recursos permiten concatenar el resultado de cada fila de entrada en
una única serie a la que se da salida cuando la etapa detecta una señal de fin de los datos (EOD) o de fin
de la transmisión (EOT) (lo que significa que no se esperan más filas de entrada).

Nota: La etapa Row Merger se parece a la etapa Sequential File de servidor. La diferencia radica en que,
mientras la etapa Sequential File graba en un archivo, la etapa Row Merger realiza la salida en un enlace.

Funcionalidad
Funcionalidad soportada

La etapa Row Merger da soporte a la siguiente funcionalidad:


v La posibilidad de leer una fila cada vez, fusionar todas las columnas de una fila en una serie
individual con un determinado formato y, posteriormente, grabar las series en una columna específica
del enlace de salida.
v Agregación de varias filas de datos.
v Soporte multilingüístico. La etapa graba lo que lee sin realizar ninguna interpretación ni conversión.

Separador General de la página Etapa


El separador General de la página Etapa permite acceder a los recursos de concatenación de la etapa
Row Merger. El separador General contiene los campos siguientes:
v Varias líneas. Determina si la etapa Row Merger debe concatenar las filas de entrada en una fila de
salida individual, o si produce cada fila de entrada como una fila de salida aparte. Seleccione Varias
líneas para concatenar las filas. De forma predeterminada, esta opción no está seleccionada.
v Finalización de línea. Esta opción sólo está disponible si ha seleccionado la opción Varias líneas para
especificar que la etapa está concatenando filas de entrada. Especifica el carácter/caracteres que se
colocarán como delimitador entre las filas concatenadas cuando se muestren en una sola fila. Seleccione
uno de los valores siguientes:
– Estilo Unix (LF). Coloca un carácter de salto de línea como delimitador entre cada fila fusionada.
– Estilo DOS (CR LF). Coloca un carácter de retorno de carro y un carácter de salto de línea como
delimitador entre cada fila fusionada.
– Ninguna. No coloca ningún delimitador entre las filas fusionadas.
v Descripción. Entre una descripción opcional de la etapa.

Página Entrada
La página Entrada contiene varios separadores que describen los datos que están entrando en la etapa
Row Merger.

El separador General contiene un campo de descripción que permite entrar una descripción opcional del
enlace de entrada. El separador Formato y el separador Columnas se describen más abajo.

Capítulo 4. Etapas de trabajo de servidor 99


Separador Formato
Utilice este separador para especificar el modo en que los datos leídos en columnas individuales en cada
fila de entrada se formatearán antes de que se genere la salida en una única columna. El separador
contiene los campos siguientes:
v Columnas de anchura fija. Seleccione este recuadro de selección para generar la salida de los datos en
un formato de anchura fija. La anchura de cada campo se toma desde el tamaño de visualización de
SQL de las columnas de entrada (establecido en la columna Visualización en la Cuadrícula de
columnas de la página Entradas, separador Columnas). De forma predeterminada, esta opción está
borrada.
v Supresión de advertencias de truncamiento de filas. Esta opción sólo está disponible si se ha
seleccionado Columnas de anchura fija. Si las filas de entrada contienen más columnas que las que
haya definido en el separador Columnas, normalmente recibirá avisos acerca de las filas demasiado
largas cuando ejecute el trabajo. Si desea suprimir estos mensajes (por ejemplo, es posible que sólo esté
interesado en las tres primeras columnas y desee prescindir del resto), seleccione este recuadro de
selección.
v Delimitador. Esta opción no está disponible si se ha seleccionado Columnas de anchura fija. Especifica
el delimitador utilizado para separar los campos de datos en los datos de salida que se han derivado
de las columnas de entrada. De forma predeterminada, este campo contiene una coma. Puede entrar
un único carácter imprimible o un número decimal o hexadecimal para representar el código ASCII del
carácter que desea utilizar. Los códigos ASCII válidos se encuentran en el rango del 1 al 253. Los
valores decimales entre el 1 y el 9 deben estar precedidos por un cero. Los valores hexadecimales
deben prefijarse con &h. Entre 000 para suprimir el delimitador.
v Carácter de cita. Esta opción no está disponible si se ha seleccionado Columnas de anchura fija.
Especifica el carácter utilizado para incluir series. De forma predeterminada, este campo contiene un
carácter de comillas dobles. Puede entrar un único carácter imprimible o un número decimal o
hexadecimal para representar el código ASCII del carácter que desea utilizar. Los códigos ASCII válidos
se encuentran en el rango del 1 al 253. Los valores decimales entre el 1 y el 9 deben estar precedidos
por un cero. Los valores hexadecimales deben prefijarse con &h. Entre 000 para suprimir el carácter de
cita.
v Espacios entre columnas. Esta opción sólo está disponible si se ha seleccionado Columnas de anchura
fija. Contiene un número para representar el número de espacios utilizado entre columnas. De forma
predeterminada es 0.
v Serie NULL predeterminada. Contiene caracteres que, cuando se encuentran en una fila de entrada, se
interpretan como el valor nulo de SQL.
v Relleno predeterminado. Esta opción sólo está disponible si se ha seleccionado Columnas de anchura
fija. Contiene el carácter utilizado para rellenar las columnas ausentes. De forma predetermina es #,
pero aquí se puede establecer otro carácter.

El separador Formato también tiene un botón Cargar. Si tiene definiciones de tabla que incluyen
información sobre el formato, puede cargar detalles sobre el formato desde estas definiciones de tabla
directamente a la página Formato:
1. Pulse Cargar. Aparecerá el recuadro de diálogo Cargar definiciones de tabla.
2. Realice una búsqueda para encontrar la definición de tabla que contenga el formato que desea cargar.
3. Pulse Aceptar. Se cargarán los detalles sobre el formato.

Separador Columnas
Las entradas en la cuadrícula de columnas especifican el formato de los datos que se están leyendo desde
las filas de entrada. La cuadrícula tiene campos estándar que tienen todas las definiciones de columna.

100 Guía del desarrollador de Server Job


Página Salida
La página Salida contiene varios separadores que describen los datos editados por la etapa Row Merger.

Separador General
El separador General identifica la columna que contiene los datos fusionados. El separador General
contiene los campos siguientes:
v Nombre de la columna que se debe fusionar. Una lista contiene una lista de las columnas de salida
definidas para esta etapa. Seleccione la columna en la que quiere que se produzca la salida de los datos
fusionados.
v Descripción. Descripción opcional del enlace de salida.

Separador Columnas
Las entradas en la cuadrícula de columnas especifican el formato de los datos que se están grabando al
enlace de entrada. La cuadrícula tiene campos estándar que tienen todas las definiciones de columna. El
campo Derivación no se utiliza.

Como mínimo, debe definir una columna que lleve los datos fusionados. También puede definir
columnas adicionales para que lleven datos como entrada en la etapa.

Etapas Row Splitter


La etapa Row Splitter lee datos de una fila sin parar desde un enlace de entrada. Esta etapa divide los
campos de datos de una serie en numerosas columnas. A continuación, graba las columnas en el enlace
de salida. La etapa puede tener un único enlace de entrada y un único enlace de salida.

Durante una operación normal de la etapa Row Splitter, cada serie de entrada procesada da como
resultado una fila de salida de múltiples columnas. En algunos casos, sin embargo, una única serie de
entrada puede representar muchas filas de datos de entrada. En este caso, la etapa puede
desconcatenarlas en filas separadas para la salida.

Nota: La etapa Row Splitter se parece a la etapa Sequential File de servidor. La diferencia radica en que,
mientras la etapa Sequential File lee a partir de un archivo, la etapa Row Splitter lo hace desde un enlace.

Funcionalidad
Funcionalidad soportada

La etapa Row Splitter da soporte a la siguiente funcionalidad:


v La posibilidad de leer una fila cada vez, repartir los campos de datos contenidos en una serie entre
varias columnas y, posteriormente, grabar las columnas en el enlace de salida.
v Generación de varias filas de salida.
v Soporte multilingüístico. La etapa graba lo que lee sin realizar ninguna interpretación ni conversión.

Separador General de la página Etapa


El separador General de la página Etapa permite acceder a los recursos de desconcatenación de la etapa
Row Splitter. El separador General contiene los campos siguientes:
v Varias líneas. Determina si la etapa Row Splitter debe desconcatenar la serie de entrada en filas de
entrada separadas o si da salida a cada serie de entrada como una fila de salida separada. Seleccione
Varias líneas para desconcatenar las filas. De forma predeterminada, esta opción no está seleccionada.

Capítulo 4. Etapas de trabajo de servidor 101


v Finalización de línea. Esta opción sólo está disponible si ha seleccionado la opción Varias líneas para
especificar que la etapa está desconcatenando filas de entrada. Especifica el carácter/caracteres que se
colocan como un delimitador entre las filas concatenadas, de forma que la etapa sabe dónde partirlas.
Elija entre:
– Estilo Unix (LF). El delimitador es un carácter de salto de línea.
– Estilo DOS (CR LF). El delimitador es un carácter de retorno de carro y un carácter de salto de
línea.
– Ninguna. No existe ningún delimitador.
v Descripción. Entre una descripción opcional de la etapa.

Página Entrada
La página Entrada contiene varios separadores que describen los datos que están entrando en la etapa
Row Splitter.

Separador General
Utilice el separador General para identificar el nombre de la columna que contiene la serie a partir de la
que la etapa extrae las columnas. El separador General contiene los campos siguientes:
v Nombre de la columna que se debe partir. Una lista contiene una lista de las columnas de entrada
definidas para esta etapa. Seleccione la columna que contiene la serie a partir de la que la etapa extrae
las columnas.
v Descripción. Entre una descripción opcional del enlace de entrada.

Separador Columnas
Las entradas en la cuadrícula de columnas especifican el formato de los datos que se están leyendo desde
el enlace de entrada. La cuadrícula tiene campos estándar que tienen todas las definiciones de columna.

Como mínimo, debe definir una columna que lleve la serie de datos que la etapa está partiendo. Si es
necesario, también puede definir columnas adicionales. Todas las columnas que se definan aquí y en el
separador Columnas de la página Salida se pasarán directamente a través de la etapa.

Página Salida
La página Salida contiene varios separadores que describen los datos editados por la etapa Row Splitter.

El separador General contiene un campo de descripción que permite entrar una descripción opcional del
enlace de entrada. El separador Formato y el separador Columnas se describen más abajo.

Separador Formato
Utilice este separador para especificar cómo se formatea la serie de entrada, de forma que la etapa pueda
separar las columnas. El separador contiene los campos siguientes:
v Columnas de anchura fija. Seleccione este recuadro de selección si los datos entrantes están en un
formato de anchura fija. La anchura de cada campo se toma desde el tamaño de visualización de SQL
de las columnas de salida (establecido en la columna Visualización en la Cuadrícula de columnas de la
página Entradas, separador Columnas). De forma predeterminada, esta opción está borrada.
v Supresión de advertencias de truncamiento de filas. Si la fila de entrada contiene más campos de
datos que deban separarse en columnas de los que haya definido en el separador Columnas, por lo
general recibirá avisos sobre filas demasiado largas cuando ejecute el trabajo. Si desea suprimir estos
mensajes (por ejemplo, es posible que sólo esté interesado en las tres primeras columnas y desee
prescindir del resto), seleccione este recuadro de selección.

102 Guía del desarrollador de Server Job


v Mensaje de columnas ausentes. Si en la fila de entrada hay menos campos de datos que columnas de
división definidas para los mismos, esta opción permite especificar la acción que se debe realizar:
– Muy grave. Se graba un error muy grave en el registro de trabajo y el trabajo termina anormalmente
(es el valor predeterminado.)
– Aviso. Se graba un mensaje de aviso en el registro de trabajo, los nulos de SQL graban en columnas
adicionales y el trabajo prosigue.
– Ninguna. No se efectúa ninguna acción. Los nulos de SQL graban en columnas adicionales y el
trabajo prosigue.
v Delimitador. Esta opción no está disponible si se ha seleccionado Columnas de anchura fija. Especifica
el delimitador utilizado para separar los campos de datos en la serie de datos de entrada. De forma
predeterminada, este campo contiene una coma. Puede entrar un único carácter imprimible o un
número decimal o hexadecimal para representar el código ASCII del carácter que desea utilizar. Los
códigos ASCII válidos se encuentran en el rango del 1 al 253. Los valores decimales entre el 1 y el 9
deben estar precedidos por un cero. Los valores hexadecimales deben prefijarse con &h. Entre 000 para
suprimir el delimitador.
v Carácter de cita. Esta opción no está disponible si se ha seleccionado Columnas de anchura fija.
Especifica el carácter utilizado para incluir series. De forma predeterminada, este campo contiene un
carácter de comillas dobles. Puede entrar un único carácter imprimible o un número decimal o
hexadecimal para representar el código ASCII del carácter que desea utilizar. Los códigos ASCII válidos
se encuentran en el rango del 1 al 253. Los valores decimales entre el 1 y el 9 deben estar precedidos
por un cero. Los valores hexadecimales deben prefijarse con &h. Entre 000 para suprimir el carácter de
cita.
v Espacios entre columnas. Esta opción sólo está disponible si se ha seleccionado Columnas de anchura
fija. Contiene un número para representar el número de espacios utilizado entre columnas. De forma
predeterminada es 0.
v Serie NULL predeterminada. Contiene caracteres que, cuando se encuentran en una fila de entrada, se
interpretan como el valor nulo de SQL (que puede ser sobrescrito para definiciones de columna
individuales en el separador Columnas).
v Relleno predeterminado. Esta opción sólo está disponible si se ha seleccionado Columnas de anchura
fija. Contiene el carácter utilizado para rellenar las columnas ausentes. De forma predetermina es #,
pero aquí se puede establecer otro carácter.

El separador Formato también tiene un botón Cargar. Si tiene definiciones de tabla que incluyen
información sobre el formato, puede cargar detalles sobre el formato desde estas definiciones de tabla
directamente a la página Formato:
1. Pulse Cargar. Aparecerá el recuadro de diálogo Cargar definiciones de tabla.
2. Realice una búsqueda para encontrar la definición de tabla que contenga el formato que desea cargar.
3. Pulse Aceptar. Se cargarán los detalles sobre el formato.

Separador Columnas
Las entradas en la cuadrícula de columnas especifican el formato de los datos que se están grabando al
enlace de entrada. La cuadrícula tiene campos estándar que tienen todas las definiciones de columna.

El campo Derivación no se utiliza.

Etapas Sort
Ordena una etapa activa, ordena varios datos. Ordena cantidades pequeñas de datos de forma eficiente
en la memoria siempre y cuando disponga de la suficiente memoria. Ordena grandes cantidades de datos
utilizando el almacenamiento de disco temporal, no el espacio de intercambio de memoria virtual.

Capítulo 4. Etapas de trabajo de servidor 103


El modelo de la etapa Sort es el mandato de UNIX Sort, como se utiliza en una interconexión de shell.
Las filas de datos de entrada que se deben ordenar llegan como líneas de caracteres ASCII leídas desde la
secuencia stdin. Debe utilizar los argumentos de la línea de mandatos para especificar cómo ordenar estas
filas. Las filas ordenadas resultantes se graban como líneas de caracteres ASCII en la secuencia stdout.

En InfoSphere DataStage, la etapa Sort recibe una secuencia de filas que utiliza un único enlace de
entrada. Las filas ya están separadas en valores de columna individuales. Los valores para las
propiedades de la etapa y los atributos de columna especifican cómo ordenar estas filas. Las filas
ordenadas resultantes se graban como valores de columnas en un único enlace de salida.

La etapa Sort debe tener un enlace de entrada y un enlace de salida. Las consideraciones sobre las
columnas en las filas para los enlaces de entrada y de salida incluyen lo siguiente:
v Un único enlace de secuencia de entrada proporciona filas de datos que se deben ordenar. El tipo de
columna de la columna de entrada debe poder convertirse en el tipo de columnas de salida.
v Un único enlace de secuencia de salida recibe filas de datos ordenadas. Las filas de salida tienen el
mismo orden de columnas que las columnas de entrada. Los nombres de las columnas de salida
pueden diferir de los nombres de las columnas de entrada.

El tipo de datos de enlace de salida para cada columna determina el tipo de comparación que se debe
realizar:
v Comparación numérica para números
v Fecha y hora
v Serie de caracteres (orden de izquierda a derecha para series e indicaciones de hora y fecha)

Funcionalidad
Funcionalidad soportada

La etapa Sort contiene las funcionalidades y ventajas siguientes:


v Soporta el soporte multilingüístico.
v Soporta una opción que ordena por columna utilizando la correlación de secuencia de clasificación.
v Soporta una opción que solicita una ordenación estable. Una ordenación estable preserva la ordenación
de entrada de filas que si se comparan, son equivalentes.
v Registra mensajes para informar sobre avisos no importantes que pueden tener un impacto sobre la
precisión de los datos ordenados.
v Soporta los parámetros de ajuste de rendimiento para obtener una ordenación eficiente, por lo tanto,
un uso de la memoria virtual limitado.

Funcionalidad no soportada

No se da soporte a la siguiente funcionalidad:


v Carga masiva para enlaces de entrada de secuencia
v Procedimientos almacenados

Propiedades configurables
Puede configurar propiedades para mejorar el rendimiento de la etapa Sort.

Número máximo de filas en la propiedad Memoria virtual


El Número máximo de filas en memoria virtual permite regular la cantidad de datos de la memoria
virtual. Si se limita el número total de filas que se deben ordenar, el algoritmo de ordenación realiza

104 Guía del desarrollador de Server Job


ordenaciones crecientes. Esto reduce el uso de la memoria virtual y el excesivo intercambio de páginas
que se produce cuando se tiene una gran cantidad de datos de entrada asociados con el enlace de
entrada.

Esta propiedad se utiliza cuando el número de filas dentro del enlace de entrada excede el valor
suministrado por esta propiedad. El algoritmo de ordenación ordena filas por múltiples de este valor y
almacena estos grupos ordenados de filas en archivos temporales. Estos archivos temporales, a
continuación, se fusionan para la ordenación final.

Propiedad Número máximo de archivos abiertos


El Número máx. de archivos abiertos limita el número de archivos de datos intermedios que se crean
cuando se realizan ordenaciones crecientes. El proceso de estos datos se controla mediante:
v Número máximo de archivos abiertos
v Número máximo de filas en memoria virtual
v El número actual de filas asociado con el enlace de entrada

Ejemplo
Suponga que el enlace de entrada contiene 100.000 filas de datos y que Filas máx. en memoria virtual se
establece en 10.000 filas.

El algoritmo de ordenación lee las 10.000 primeras filas del enlace de entrada, realiza una ordenación
intermedia y, a continuación, almacena los datos ordenados en un archivo temporal. El algoritmo
prosigue agrupando porciones de 10.000 filas desde el enlace de entrada y almacenando los resultados
ordenados en archivos temporales unívocos hasta que se produce una de las siguientes condiciones:
v Todos los datos de entrada se han procesado en archivos temporales. El número total de archivos
temporales es menor que el valor especificado en Máx. de archivos abiertos.
Tras las ordenaciones intermedias, los 10 archivos temporales se fusionan y se ordenan de forma
conjunta y la ordenación final se graba en el enlace de salida.
v El número de archivos temporales es igual al valor especificado en Máx. de archivos abiertos.
Si, por ejemplo, Máx. de archivos abiertos está fijado en 5, las primeras 50.000 filas se procesan como
cinco archivos temporales, cada uno de ellos con 10.000 filas. Estos archivos temporales se fusionan de
forma conjunta para formar un nuevo archivo temporal con 50.000 filas de datos ordenados. El
algoritmo toma las siguientes 10.000 filas del enlace de entrada y prosigue con las ordenaciones
intermedias. Este algoritmo prosigue recursivamente hasta que se procesan todos los datos.

Nota: Si los valores de estos parámetros son demasiado restrictivos, un se produce un alto número de
ordenaciones intermedias con una fusión de archivos constante.

Criterios de ordenación
La etapa Sort acumula filas de entrada en la memoria, limitadas por Filas máx. en memoria virtual.
Clasifica las filas acumuladas, almacenándolas en archivos de disco, si es necesario. (Los conjuntos de
ordenación pequeños se pueden almacenar en la memoria.) Esta etapa fusiona estos archivos
almacenados y graba las filas en el enlace de salida.

Puede entrar los valores listados en la tabla siguiente para especificar el orden de las filas, según la
distinción de mayúsculas y minúsculas en la búsqueda

Capítulo 4. Etapas de trabajo de servidor 105


Tabla 17. Criterios de ordenación
Distinción de mayúsculas y
minúsculas en la búsqueda Orden ascendente Orden descendente
Sensible a la coincidencia de a asc ascending d
mayúsculas y minúsculas en la
búsqueda dsc descending
No sensible a la coincidencia de A D
mayúsculas y minúsculas en la
búsqueda ASC DSC

ASCENDING DESCENDING

El ejemplo siguiente indica que las filas resultantes deben ordenarse en un orden ascendente sensible a la
coincidencia de mayúsculas y minúsculas en la columna REGION del enlace de entrada. Utiliza un
archivo de correlación externo denominado CSM en el directorio C:\USER en la columna CUSTOMER y
un orden descendente en la columna SALE_PRICE (consulte Ordenar especificaciones en “Propiedades
de la etapa” ).
REGION asc, CUSTOMER ASC C:\USER\CSM, SALE_PRICE DSC

Correlaciones de orden de clasificación


Puede especificar la correlación del orden de clasificación ordenando por columna. El formato de la
correlación se adapta a la codificación de los caracteres como los de un único byte, de doble byte o un
número variables de bytes. Puede especificar un archivo de correlación separado para cada columna que
se deba ordenar. El archivo de correlación se utiliza al ordenar valores de series de caracteres en dicha
columna. La correlación no afecta a la ordenación de los valores de series sin caracteres, es decir, a los
valores numéricos, de fecha, de tiempo y de indicación de fecha y hora.

Una correlación de orden de clasificación es un archivo delimitado por comas que contiene dos columnas.
La columna izquierda es un código de carácter único (en una codificación única o de varios bytes, según
convenga). Utilice un carácter de escape para entrar caracteres delimitadores y valores de bytes
arbitrarios.

La columna derecha es un valor entero que utiliza caracteres ASCII para los dígitos decimales. La
columna contiene el peso numérico utilizado al comparar los correspondientes caracteres en dos series.
Cuanto más bajo sea el número, más pronto ordenará. Si dos caracteres tienen el mismo peso, entonces se
consideran equivalentes. Cualquier carácter que no esté en la correlación se considera más alto que
cualquier otro carácter dentro de la correlación. Por ejemplo, la siguiente correlación de secuencia
contiene estas columnas delimitadas por comas:

a,3 b,3 c,3 d,5 g,6 e,1

Por ejemplo, puede proporcionar una correlación de orden de clasificación para especificar la secuencia
de correlación del alfabeto francés.

Propiedades de la etapa
La tabla siguiente incluye estas cabeceras de columna:
v Solicitud es el texto que el diseñador de trabajo puede ver en la interfaz de usuario del editor de
etapas.
v Valor predeterminado es el texto que se utiliza si el diseñador del trabajo no suministra ningún valor.
v Descripción describe las propiedades.

106 Guía del desarrollador de Server Job


La etapa Sort soporta las siguientes propiedades de etapa:
Tabla 18. Propiedades de la etapa Sort
Solicitud Valor predeterminado Descripción
Especificaciones de ordenación Ninguno Los criterios según los que se
ordenan los caracteres ASCII en las
filas leídas desde el enlace de
entrada. Consulte "Criterios de
ordenación" para obtener más
información.
Filas máx. en memoria virtual 10.000 El número máximo de filas (de 2 a
50.000) que se pueden ordenar en la
memoria virtual. Cuanto más
pequeña sea la fila, más filas se
podrán ordenar.
Directorio temporal Ninguno El nombre de la vía de acceso donde
se almacenan los archivos temporales
creados durante la ordenación. Si no
especifica un nombre de vía de
acceso, se utiliza el directorio de
trabajo actual en el sistema que
hospeda la capa de motor.
Carácter de escape \ (barra inclinada invertida) El carácter simple que se utiliza en
archivos de correlación de orden de
clasificación para especificar
caracteres de control.
Nivel de rastreo 0 Controla el tipo de información de
rastreo que se añade al registro. Los
niveles de rastreo disponibles son:

0 Sin rastreo 1 Propiedades de etapa


2 Rendimiento 4 Sucesos importantes

Puede combinar los niveles de


rastreo. Por ejemplo, un nivel de
rastreo de 3 significa que las
propiedades de la etapa y los
mensajes de rendimiento se añaden
al registro.
Ordenación estable No Indica si la ordenación es una
ordenación estable. Una ordenación
estable conserva el orden de las filas
de entrada que son equivalentes.
Separador de columna , (coma) El carácter simple que separa dos
columnas en cada línea del archivo
de correlación de orden de
clasificación.
Número máximo de archivos abiertos 10 Número máximo de archivos que se
pueden abrir a la vez. Cuanto mayor
sea el valor, mejor será el
rendimiento. Cuando se utiliza una o
varias de estas instancias de la etapa
en el trabajo, el número total de
archivos abiertos de todas las
instancias de la etapa no deberá
exceder 20.

Capítulo 4. Etapas de trabajo de servidor 107


Etapas Transformer
Las etapas Transformer no extraen ni graban datos en una base de datos de destino. Se utilizan para
manejar los datos extraídos, realizar las conversiones necesarias y pasar datos a otra etapa Transformer o
a una etapa que grabe datos en una tabla de datos de destino.

Utilización de una etapa Transformer


Las etapas Transformer pueden tener una cantidad distinta de entradas o salidas. El enlace del origen de
entrada de datos principal se designa como enlace de entrada principal. Sólo puede haber un enlace de
entrada primario, pero puede haber un número cualquiera de entradas de referencia.

Nota: El editor de la etapa Transformer es parecido para los trabajos de servidor, paralelo y de sistema
principal, aunque la funcionalidad varía. En estos temas sólo se describe la funcionalidad del trabajo de
servidor. Para la funcionalidad de trabajo paralelo o de sistema principal, consulte las guías que describen
los trabajos paralelo y de sistema principal.

Cuando edita una etapa Transformer, aparece el Editor de transformador. A continuación, se muestra un
ejemplo de etapa Transformer. En este ejemplo, se han definido metadatos para los enlaces de entrada y
salida:

Componentes del editor de transformadores


El editor de transformadores contiene los componentes siguientes.

108 Guía del desarrollador de Server Job


Barra de herramientas
La barra de herramientas del Transformador contiene los siguientes botones:
v Propiedades de la etapa
v Restricciones
v Mostrar todas o las relaciones seleccionadas
v Mostrar/ocultar variables de la etapa
v Cortar
v Copiar
v Pegar
v Buscar y sustituir
v Cargar definición de columna
v Guardar definición de columna
v Coincidencia automática de columnas
v Orden de ejecución de los enlaces de entrada
v Orden de ejecución de los enlaces de salida

Área de enlaces
El área superior muestra los enlaces hacia y desde la etapa Transformer, donde se pueden ver las
columnas y las relaciones entre ellas.

El área de enlaces es donde se definen todas las definiciones de columna, expresiones de clave y variables
de etapa.

El área de enlaces está dividida en dos paneles; puede arrastrar la barra divisoria entre ellos para cambiar
el tamaño de los paneles, que depende el uno del otro. También hay una barra de desplazamiento
horizontal que permite desplazar la vista a la izquierda o la derecha.

El panel izquierdo muestra los enlaces de entrada y el panel derecho muestra los enlaces de salida. El
enlace de entrada que se muestra en la parte superior del panel izquierdo siempre es el enlace primario.
Los enlaces siguientes son enlaces de referencia. Para todos los tipos de enlaces, los campos clave se
muestran en negrita. Los campos clave del enlace de referencia que no tienen ninguna expresión definida
aparecen en rojo (o el color definido en Herramientas → Opciones), al igual que las columnas de salida
que no tienen ninguna derivación definida.

En el Editor de transformador, sólo se puede seleccionar un enlace a la vez. Cuando se selecciona, se


resalta la barra de título del enlace y las puntas de flecha indican las columnas seleccionadas.

Área de metadatos
El área inferior muestra los metadatos de columna de los enlaces de entrada y de salida. De nuevo, esta
área se divide en dos paneles: el izquierdo muestra los metadatos del enlace de entrada y el derecho
muestra los metadatos del enlace de salida.

Los metadatos correspondientes a cada enlace se muestran en una cuadrícula incluida en una página
tabulada. Pulse el separador para traer al frente al enlace necesario. Este enlace también se selecciona en
el área de enlaces.

Si selecciona un enlace en el área de enlaces, el separador de metadatos se traerá al frente


automáticamente.

Capítulo 4. Etapas de trabajo de servidor 109


Las cuadrículas se pueden editar para cambiar los metadatos de columnas de cualquiera de los enlaces.
También puede añadir y suprimir metadatos.

Menús de atajos
Los menús de atajos del Editor de transformador se muestran pulsando con el botón derecho del ratón
sobre los enlaces en el área de enlaces.

Los menús varían ligeramente, dependiendo de si pulsa un enlace de entrada, un enlace de salida o una
variable de etapa. El menú del enlace de entrada ofrece operaciones en las expresiones de clave, el menú
del enlace de salida ofrece operaciones en las derivaciones y el menú de la variable de etapa ofrece
operaciones en las variables de etapa.

El menú de atajos permite:


v Abrir el recuadro de diálogo Propiedades para especificar una descripción del enlace.
v Abrir el recuadro de diálogo Restricciones para especificar una restricción (sólo está disponible para los
enlaces de salida).
v Abrir el recuadro de diálogo Coincidencia automática de columnas.
v Mostrar el recuadro de diálogo Buscar y sustituir.
v Mostrar el recuadro de diálogo Seleccionar.
v Editar, validar o borrar una expresión de clave, una derivación o una variable de etapa.
v Editar varias derivaciones en una operación.
v Añadir una nueva columna o variable de etapa al enlace seleccionado.
v Seleccionar todas las columnas en un enlace.
v Insertar o suprimir columnas o variables de etapa.
v Cortar, copiar y pegar una columna, una expresión de clave, una derivación o una variable de etapa.

Si muestra el menú desde el área de enlaces en segundo plano, puede:


v Abrir el recuadro de diálogo Propiedades de la etapa para especificar una subrutina anterior o
posterior a la etapa.
v Abrir el recuadro de diálogo Restricciones para especificar una restricción para el enlace de salida
seleccionado.
v Abrir el recuadro de diálogo Orden de ejecución de los enlaces para especificar el orden en el que se
deben procesar los enlaces.
v Conmutar entre ver relaciones de enlace para todos los enlaces o sólo para el enlace seleccionado.
v Conmutar entre mostrar u ocultar las variables de etapa.

Si pulsa con el botón derecho del ratón sobre el área de metadatos del Editor de transformador, se abren
los menú de atajos de edición de cuadrícula estándar.

Conceptos básicos de la etapa Transformer


Cuando edita por primera vez una etapa Transformer, es muy probable que ya haya definido qué datos
se especifican en la etapa en los enlaces de entrada. Utilizará el Editor de transformador para definir los
datos que generará la etapa y cómo se transformarán. (Puede definir los datos de entrada utilizando el
Editor de transformador si es necesario).

En esta sección se explican algunos de los conceptos básicos para utilizar la etapa Transformer.

Enlaces de entrada
El origen de datos principal está unido a la etapa Transformer a través del enlace primario, pero la etapa
también puede tener un número cualquiera de enlaces de entrada de referencia.

110 Guía del desarrollador de Server Job


Un enlace de referencia representa una búsqueda de tabla. Se utilizan para suministrar información que
puede afectar a la forma de cambiar los datos, pero no proporcionan los datos que deben modificarse.

Las columnas de entrada de referencia pueden designarse como campos de clave. Puede especificar las
expresiones de clave que se utilizan para evaluar los campos de clave. El uso más común de la expresión
de clave es para especificar un equijoin, que es un enlace entre una columna de enlace primario y una
columna de enlace de referencia. Por ejemplo, si los datos de entrada primarios contienen nombres y
direcciones, y una entrada de referencia contiene nombres y números de teléfono, la columna nombre del
enlace de referencia se marca como un campo de clave y la expresión de clave hace referencia a la
columna nombre del enlace primario. Durante el proceso, el nombre en la entrada primaria se busca en
la entrada de referencia. Si los nombres coinciden, los datos de referencia se consolidan con los datos
primarios. Si los nombres no coinciden, es decir, si no hay ningún registro en la entrada de referencia que
coincida con la expresión proporcionada, todas las columnas especificadas para la entrada de referencia
se establecen en el valor nulo.

Cuando un enlace de referencia se origina en una etapa UniVerse o ODBC, puede buscar múltiples filas
desde la tabla de referencia. Las filas se especifican mediante una clave foránea, por oposición a la clave
primaria que se utiliza para la búsqueda de filas individuales.

Enlaces de salida
Puede tener un número cualquiera de enlaces de salida de la etapa Transformer.

Si lo desea, puede pasar algunos datos directamente a través de la etapa Transformer sin modificarlos,
pero es muy probable que desea transformar los datos de algunas columnas de entrada antes de pasarlos
a la etapa Transformer.

Para especificar una operación de este tipo, escriba una expresión BASIC o seleccione una transformación
para aplicarla a los datos. IBM InfoSphere DataStage tiene varias transformaciones incorporadas, o bien
puede definir sus propias transformaciones personalizadas que se almacenan en el repositorio y pueden
reutilizarse según sea necesario.

El origen de una columna del enlace de salida se define en la celda Derivación de dicha columna con el
editor de transformador. Puede utilizar el editor de expresiones para especificar expresiones o
transformaciones en esta celda. También puede arrastrar simplemente una columna de entrada a la celda
Derivación de la columna de salida, para pasar los datos directamente a través de la etapa Transformer.

Asimismo, para especificar detalles de derivación para columnas de salida individuales, también puede
especificar restricciones que operen en enlaces de salida completos. Una restricción es una expresión
BASIC que especifica criterios que los datos deben cumplir antes de que puedan pasarse al enlace de
salida. También puede especificar un enlace de rechazo, que es un enlace de salida que transporta todos
los datos no generados en otros enlaces, es decir, las columnas que no cumplen los criterios.

Cada enlace de salida se procesa uno a uno. Si la expresión de restricción se evalúa en TRUE para una
fila de entrada, la fila de datos se genera en dicho enlace. Y a la inversa, si una expresión de restricción se
evalúa en FALSE para una fila de entrada, la fila de datos no se genera en dicho enlace.

Las expresiones de restricción en distintos enlaces son independientes. Si tiene más de un enlace de
salida, una fila de entrada puede hacer que se genere una fila de datos a partir de algunos enlaces de
salida, de ninguno o de todos.

Por ejemplo, si considera los datos que provienen de una tienda de pintura, puede incluir información
sobre un número cualquiera de distintos colores. Si desea separar los colores en archivos diferentes,
deberá configurar distintas restricciones. Puede generar la información sobre la pintura verde y azul en
LinkA, la pintura roja y amarilla en LinkB, y la pintura negra en LinkC.

Capítulo 4. Etapas de trabajo de servidor 111


Cuando una fila de entrada contiene información sobre la pintura amarilla, la expresión de restricción
LinkA se evalúa en FALSE y la fila no se genera en LinkA. No obstante, los datos de entrada cumplen el
criterio de restricción de LinkB y las filas se generan en LinkB.

Si los datos de entrada contienen información sobre la pintura blanca, esta no cumple ninguna restricción
y no se genera la fila de datos en los enlaces A, B o C, pero sí se generará en el enlace de rechazo. El
enlace de rechazo se utiliza para direccionar datos a una tabla o un archivo que sirve de "contenedor
comodín" para las filas que no se generan en ningún otro enlace. La tabla o el archivo que contiene estos
rechazos se representa en otra etapa del diseño de trabajo.

Rutinas anteriores y posteriores a la etapa


Como la etapa Transformer es un tipo de etapa activa, puede especificar rutinas para ejecutarlas antes o
después de que la etapa haya procesado los datos. Por ejemplo, puede utilizar una rutina anterior a la
etapa para preparar los datos antes de que se inicie el proceso. Puede utilizar una rutina posterior a la
etapa para enviar un mensaje electrónico cuando la etapa haya finalizado.

Edición de las etapas Transformer


El editor de transformador permite realizar las siguientes operaciones en una etapa Transformer:
v Crear columnas nuevas en un enlace
v Suprimir columnas de un enlace
v Mover columnas en un enlace
v Editar metadatos de columnas
v Definir derivaciones de columna de salida
v Definir expresiones de clave de columna de entrada
v Especificar subrutinas anteriores y posteriores a la etapa
v Definir restricciones de enlace y manejar rechazos
v Especificar el orden en el que se procesan los enlaces
v Definir variables de la etapa local

Utilización de arrastrar y soltar


Muchas de las ediciones de la etapa Transformer pueden realizarse de forma más sencilla utilizando la
funcionalidad de arrastrar y soltar del editor de transformador. Puede arrastrar columnas desde un enlace
cualquiera a otro enlace. Los usos más comunes son:
v Copiar columnas de entrada en enlaces de salida
v Mover columnas en un enlace
v Copiar derivaciones en enlaces de salida
v Copiar expresiones de clave en enlaces de entrada.

Para utilizar arrastrar y soltar:


1. Pulse la celda de origen para seleccionarla.
2. Vuelva a pulsar la celda seleccionada y, sin soltar el botón del ratón, arrastre el puntero del ratón a la
ubicación deseada en el enlace de destino. Aparece un punto de inserción en el enlace de destino para
indicar dónde irá la nueva celda.
3. Suelte el botón del ratón para soltar la celda seleccionada.

Puede arrastrar varias columnas, expresiones de clave o derivaciones. Utilice las teclas estándar del
Explorador cuando seleccione las celdas de la columna de origen y continúe como para una celda
individual.

Puede arrastrar y soltar el conjunto completo de columnas arrastrando el título del enlace.

112 Guía del desarrollador de Server Job


Puede añadir una columna al final de una derivación o una expresión de clave existente manteniendo
pulsada la tecla Control cuando arrastre la columna.

Recursos de Buscar y sustituir


Si trabaja en un trabajo complejo donde hay varios enlaces, de varias columnas cada uno, que entran y
salen en la etapa Transformer, puede utilizar el recurso de buscar y sustituir columna para localizar una
determinada columna o expresión y cambiarla.

El recurso de buscar y sustituir permite:


v Buscar y sustituir un nombre de columna
v Buscar y sustituir el texto de una expresión
v Buscar la siguiente expresión vacía
v Buscar la siguiente expresión que contenga un error

Para utilizar los recursos de buscar y sustituir, abra el recuadro de diálogo Buscar y sustituir de la
siguiente manera:
v Pulse el botón Buscar y sustituir en la barra de herramientas
v Elija Buscar y sustituir en el menú de atajos
v Pulse Control-F

El recuadro de diálogo Buscar y sustituir tiene tres separadores:


v Texto de la expresión. Permite localizar la aparición de una determinada serie en una expresión y
sustituirla si es necesario. Puede buscar hacia arriba o hacia abajo, y elegir que coincidan mayúsculas y
minúsculas, que coincidan palabras completas o ninguna de estas opciones. También puede elegir
sustituir todas las apariciones de la serie en una expresión.
v Nombres de columna. Permite buscar una determinada columna y cambiarle el nombre si es necesario.
Puede buscar hacia arriba o hacia abajo, y elegir que coincidan mayúsculas y minúsculas, que coincida
la palabra completa o ninguna de estas opciones.
v Tipos de expresión. Permite buscar la siguiente expresión vacía o la siguiente expresión que contenga
un error. También puede pulsar Control-M para buscar la siguiente expresión vacía o Control-N para
buscar la siguiente expresión errónea.

Nota: Los resultados de buscar y sustituir se muestran en el color especificado en Herramientas →


Opciones.

Pulse F3 para repetir la última búsqueda que ha realizado sin abrir el recuadro de diálogo Buscar y
sustituir.

Recursos de selección
Si trabaja en un trabajo complejo donde hay varios enlaces, de varias columnas cada uno, que entran y
salen en la etapa Transformer, puede utilizar el recurso de selección de columna para seleccionar varias
columnas. Este recurso también está disponible en los separadores Correlación de algunas etapas de
trabajo paralelo.

El recurso de selección permite:


v Seleccionar todas las columnas/variables de etapa cuyas expresiones contengan texto que coincide con
el texto especificado.
v Seleccionar todas las columnas/variables de etapa cuyo nombre contenga el texto especificado (y, de
manera opcional, coincida con un tipo especificado).
v Seleccionar todas las columnas/variables de etapa con un determinado tipo de datos.
v Seleccionar todas las columnas con expresiones no válidas o que faltan.

Capítulo 4. Etapas de trabajo de servidor 113


Para poder utilizar los recursos de selección, elija Seleccionar en el menú de atajos del enlace. Aparece el
recuadro de diálogo Seleccionar. Tiene tres separadores:
v Texto de la expresión. Este separador Texto de la expresión permite seleccionar todas las
columnas/variables de etapa cuyas expresiones contengan texto que coincide con el texto especificado.
El texto especificado es una coincidencia de texto simple, que tiene en cuenta el valor de Coincidencia
de mayúsculas y minúsculas.
v Nombres de columna. El separador Nombres de columna permite seleccionar todas las
columnas/variables de etapa cuyo nombre contenga el texto especificado. Hay una lista desplegable
adicional, Tipo de datos, que limitará las columnas seleccionadas a aquellas con dicho tipo de datos.
Puede utilizar la lista desplegable Tipo de datos por sí sola para seleccionar todas las columnas de un
determinado tipo de datos. Por ejemplo, puede seleccionar todas las columnas de serie dejando el
campo de texto en blanco y seleccionar Serie como tipo de datos. Los tipos de datos de la lista son
tipos de datos genéricos y cada uno de los tipos de datos SQL de columna pertenece a uno de estos
tipos genéricos.
v Tipos de expresión. El separador Tipos de expresión permite seleccionar todas las columnas que
contengan expresiones vacías o expresiones que no sean válidas.

Especificación del enlace de entrada primario


El primer enlace a una etapa Transformer siempre se designa como el enlace de entrada primario. No
obstante, puede elegir otro enlace para que sea al enlace primario si es necesario. Para ello:
1. Seleccione el enlace de entrada primario actual en la ventana Diagrama.
2. Seleccione Convertir en referencia en el menú de atajos de la ventana Diagrama.
3. Seleccione el enlace de referencia que desea que sea el nuevo enlace de entrada primario.
4. Seleccione Convertir en secuencia en el menú de atajos de la ventana Diagrama.

Creación y supresión de columnas


Puede crear columnas en los enlaces de la etapa Transformer utilizando cualquiera de los métodos
siguientes:
v Seleccione el enlace y, a continuación, pulse el botón Cargar definición de columna en la barra de
herramientas para abrir el recuadro de diálogo de carga de columnas estándar.
v Utilice las funciones de arrastrar y soltar o copiar y pegar para crear una nueva columna copiándola de
una columna existente en otro enlace.
v Utilice los menús de atajo para crear una nueva definición de columna.
v Edite las cuadrículas en el separador de metadatos del enlace para insertar una nueva columna.

Cuando copia columnas, se crea una nueva columna con los mismos metadatos que la columna desde la
que se ha copiado.

Para suprimir una columna desde el editor de transformador, seleccione la columna que desee suprimir y
pulse Cortar o elija Suprimir columna en el menú de atajos.

Movimiento de columnas en un enlace


Puede mover las columnas en un enlace utilizando arrastrar y soltar o cortar y pegar. Seleccione la
columna necesaria y arrástrela a su nueva ubicación, o córtela y péguela en su nueva ubicación.

Edición de metadatos de columna


Puede editar los metadatos de columna desde la cuadrícula en la parte inferior del editor de
transformador. Seleccione el separador de los metadatos de enlace que desee editar y, a continuación,
utilice los controles estándar de la cuadrícula de edición de IBM InfoSphere DataStage.

114 Guía del desarrollador de Server Job


Los metadatos mostrados no incluyen las derivaciones de columna ni las expresiones de clave, ya que se
editan en el área de enlaces.

Definición de derivaciones de columna de salida


Puede definir la derivación de las columnas de salida desde el editor de transformador de cinco formas:
v Si necesita que se derive una nueva columna de salida directamente de una columna de entrada sin
que se realice ninguna transformación, puede arrastrar o copiar una columna de entrada en un enlace
de salida. Las columnas de salida tendrán los mismos nombres que las columnas de entrada de las que
se derivan.
v Si la columna de salida ya existe, puede arrastrar o copiar una columna de entrada en el campo
Derivación de la columna de salida. Esto especifica que la columna se deriva directamente de una
columna de entrada sin que se realice ninguna transformación.
v Puede utilizar el recurso de coincidencia automática de columnas para establecer automáticamente que
las columnas de salida se deriven de las columnas de entrada coincidentes.
v Es posible que necesite que una derivación de columna de enlace de salida sea la misma que otra
derivación de columna de enlace de salida. En este caso, puede arrastrar o copiar la celda de
derivación de una columna a otra.
v En muchos casos, necesitará transformar los datos antes de derivar una columna de salida de ellos.
Para ello, utilice el editor de expresiones. Para mostrar el editor de expresiones, efectúe una doble
pulsación en la celda Derivación de la columna de enlace de salida necesaria. (También puede invocar
el editor de expresiones utilizando el menú de atajos o las teclas de atajo).

Si una derivación aparece en rojo (o el color definido en Herramientas → Opciones), significa que el
editor de transformador la considera incorrecta. (En algunos casos, simplemente significa que la
derivación no cumple estrictamente las reglas del patrón de uso del motor de servidor, pero funcionará
correctamente).

Si una columna de enlace de salida tiene definida una derivación que contiene las columnas de enlace de
entrada, se dibuja una línea de relación entre la columna de entrada y la columna de salida. Puede haber
varias líneas de relación que entran o salen de las columnas. Utilice el botón de la barra de herramientas
para elegir si desea ver las relaciones de todos los enlaces o sólo las relaciones de los enlaces
seleccionados.

Recurso de coincidencia automática de columnas:

Esta característica permite ahorrar tiempo y establecer automáticamente las columnas en un enlace de
salida para derivarlas de las columnas coincidentes en un enlace de entrada. Con esta característica,
puede rellenar todas las derivaciones de enlace de salida para direccionar los datos de las columnas de
entrada correspondientes, y volver atrás y editar las columnas de enlace de salida individuales en las que
desee una derivación diferente.

Para utilizar este recurso:


1. Abra el recuadro de diálogo Coincidencia automática de columnas utilizando uno de los métodos
siguientes:
v Pulse el botón Coincidencia automática de columnas en la barra de herramientas del editor de
transformador.
v Elija Coincidencia automática en el menú de atajos de la cabecera del enlace de entrada o la
cabecera del enlace de salida.
2. Elija en las listas el enlace de entrada o el enlace de salida para el que desee hacer coincidir las
columnas.
3. Pulse Coincidencia de ubicación o Coincidencia de nombre en el área Tipo de coincidencia.

Capítulo 4. Etapas de trabajo de servidor 115


Si selecciona Coincidencia de ubicación, se establecerán las derivaciones de las columnas de salida en
las columnas del enlace de entrada en las posiciones equivalentes. Se empieza por la primera columna
del enlace de entrada que va a la primera columna del enlace de salida y continúa avanzando hasta
que no quedan columnas de entrada.
Si elige Coincidencia de nombre, deberá especificar más información para las columnas de entrada y
salida de la siguiente manera:
v Columnas de entrada:
Coincidencia de todas las columnas o Coincidencia de las columnas seleccionadas. Seleccione una
de estas opciones para especificar si se deben buscar coincidencias en todas las columnas del enlace
de entrada o sólo en las seleccionadas actualmente en el enlace de entrada.
Omitir prefijo. De manera opcional, especifica los caracteres que van delante del nombre de la
columna que se deben pasar por alto durante el procedimiento de coincidencia.
Omitir sufijo. De manera opcional, especifica los caracteres que van al final del nombre de la
columna que se deben pasar por alto durante el procedimiento de coincidencia.
v Columnas de salida:
Omitir prefijo. De manera opcional, especifica los caracteres que van delante del nombre de la
columna que se deben pasar por alto durante el procedimiento de coincidencia.
Omitir sufijo. De manera opcional, especifica los caracteres que van al final del nombre de la
columna que se deben pasar por alto durante el procedimiento de coincidencia.
v Omitir mayúsculas y minúsculas. Seleccione este recuadro de selección para especificar que la
distinción entre mayúsculas y minúsculas se debe pasar por alto al buscar coincidencias de
nombres. Este valor también afecta a los valores de Omitir prefijo y Omitir sufijo. Por ejemplo, si
especifica que el prefijo IP se pasará por alto y activa Omitir mayúsculas y minúsculas, se pasará
por alto IP e ip.
4. Pulse Aceptar para proseguir con la coincidencia automática.

Nota: La coincidencia automática no tiene en cuenta la incompatibilidad de tipos de datos entre las
columnas que relacionadas; las derivaciones se establecen independientemente.

Edición de varias derivaciones


Para realizar ediciones en varias derivaciones de variable de etapa o columna de salida, seleccione
Sustitución de derivación... en el menú de atajos. Se abrirá el recuadro de diálogo Sustitución de
expresiones.

El recuadro de diálogo Sustitución de expresiones permite realizar el mismo cambio en las expresiones de
todas las columnas seleccionadas actualmente en un enlace. Por ejemplo, si desea añadir una llamada a la
función trim() alrededor de todas las expresiones de columna de salida de serie de un enlace, puede
hacerlo en dos pasos. En primer lugar, utilice el recuadro de diálogo Seleccionar para seleccionar todas
las columnas de salida de la serie. A continuación, utilice el recuadro de diálogo Sustitución de
expresiones para aplicar una llamada trim() alrededor de cada uno de los valores de expresión existentes
en las columnas seleccionadas.

Puede elegir entre la sustitución de la expresión completa o la sustitución de una parte de la expresión.

Expresión completa:

Con esta opción, la expresión completa existente de cada columna se sustituye por el valor de sustitución
especificado. Este valor de sustitución puede ser un valor completamente nuevo, pero normalmente será
un valor basado en el valor de la expresión original. Cuando se especifica el valor de sustitución, el valor
existente de la expresión de la columna puede incluirse en este nuevo valor incluyendo "$1". El valor
puede incluirse varias veces.

116 Guía del desarrollador de Server Job


Por ejemplo, si añade una llamada trim() alrededor de cada expresión del conjunto de columnas
seleccionado actualmente y selecciona las columnas necesarias, siga estos pasos:
1. Seleccione la opción Expresión completa.
2. Especifique un valor de sustitución:
trim($1)
3. Pulse Aceptar

Si la expresión original de una columna era:


DSLink3.col1

Se sustituirá por:
trim(DSLink3.col1)

Esto se aplicará a las expresiones de cada una de las columnas seleccionadas.

Si necesita incluir el texto real $1 en la expresión, especifíquelo como "$$1".

Parte de la expresión:

Con esta opción, sólo se sustituye una parte de cada expresión seleccionada, en lugar de la expresión
completa. La parte de la expresión que se sustituye está especificada por una coincidencia de expresión
regular.

Es posible que más de una parte de una serie de una expresión coincida con la expresión regular
especificada. Si se selecciona Sustituir todas las apariciones, cada aparición de una coincidencia se
actualizará con el valor de sustitución especificado. Si no se selecciona, sólo se sustituirá la primera
aparición.

Al sustituir parte de una expresión, el valor de sustitución especificado puede incluir dicha parte de la
expresión original que se está sustituyendo. Para ello, la expresión regular especificada debe tener el
valor entre paréntesis. "$1" en el valor de sustitución representará el texto coincidente. Si la expresión
regular no se incluye entre paréntesis, "$1" será simplemente el texto "$1".

Para el uso de expresiones regulares complejas, se pueden incluir subconjuntos del texto de la expresión
regular entre paréntesis en lugar de todo el texto. En este caso, toda la parte coincidente de la expresión
original seguirá sustituida, pero se puede utilizar "$1", "$2", etc. para hacer referencia a cada parte
coincidente entre paréntesis de la expresión regular especificada.

A continuación, se proporciona un ejemplo de la parte de la sustitución de la expresión.

Supongamos que un conjunto seleccionado de columnas tienen derivaciones que utilizan columnas de
entrada de `DSLink3'. Por ejemplo, dos de estas derivaciones pueden ser:
DSLink3.OrderCount + 1
If (DSLink3.Total > 0) Then DSLink3.Total Else -1

Si desea proteger el uso de estas columnas de entrada de los valores nulos, utilice un valor cero en lugar
del nulo. Para ello:
1. Seleccione las columnas para las que desee sustituir expresiones.
2. Seleccione la opción Parte de la expresión.
3. Especifique un valor de expresión regular:
(DSLink3\.[a-z,A-Z,0-9]*)
Este coincidirá con las series que contengan "DSLink3." seguido de varios dígitos o caracteres
alfabéticos. (Se supone que los nombres de columna de este caso están formados por dígitos y

Capítulo 4. Etapas de trabajo de servidor 117


caracteres alfabéticos). Los paréntesis entre los que se escribe la expresión completa indican que $1
representará el texto coincidente completo en el valor de sustitución.
4. Especifique un valor de sustitución
NullToZero($1)
Este valor sustituye sólo las subseries coincidentes en la expresión original por las mismas subseries,
pero rodeadas por la llamada NullToZero.
5. Pulse Aceptar para aplicarlo a todas las derivaciones de columna seleccionadas.

En los ejemplos anteriores:


DSLink3.OrderCount + 1

generará
NullToZero(DSLink3.OrderCount) + 1

y
If (DSLink3.Total > 0) Then DSLink3.Total Else -1

generará:
If (NullToZero(DSLink3.Total) > 0) Then DSLink3.Total Else -1

i se selecciona la opción Sustituir todas las apariciones, la segunda expresión generará:


If (NullToZero(DSLink3.Total) > 0)
Then NullToZero(DSLink3.Total)
Else -1

El valor de sustitución puede ser una serie de expresión de cualquier formato. Por ejemplo, en el caso
anterior, el valor de sustitución puede ser:
(If (StageVar1 > 50000) Then $1 Else ($1 + 100))

En el primer caso anterior, la expresión


DSLink3.OrderCount + 1

generará:
(If (StageVar1 > 50000) Then DSLink3.OrderCount
Else (DSLink3.OrderCount + 100)) + 1

Definición de expresiones de clave de columna de entrada


Puede definir expresiones de clave para los campos de clave de las entradas de referencia. Este proceso es
similar a la definición de derivaciones para las columnas de salida.

En la mayoría de los casos, una expresión de clave será un equijoin de una columna de enlace de entrada
primario. Puede especificar un equijoin de dos formas:
v Utilice arrastrar y soltar para arrastrar una columna de enlace de entrada primario a la celda de
expresión de clave correspondiente.
v Utilice copiar y pegar para copiar una columna de enlace de entrada primario y pegarla en la celda de
expresión de clave correspondiente.

Se crea un enlace de relación entre la columna de enlace de entrada primario y la expresión de clave.

También puede arrastrar o copiar una expresión de clave existente en otra columna de entrada, y
arrastrar o copiar varias selecciones.

118 Guía del desarrollador de Server Job


Si necesita una expresión más compleja que un equijoin, puede efectuar una doble pulsación en la celda
de la expresión de clave necesaria para abrir el editor de expresiones.

Si una expresión de clave aparece en rojo (o el color definido en Herramientas → Opciones), significa que
el editor de transformador la considera incorrecta. (En algunos casos, simplemente significa que la
expresión de clave no cumple estrictamente las reglas del patrón de uso del motor de servidor, pero
funcionará correctamente).

Inicialmente, las celdas de expresión de clave ocupan una columna muy estrecha. En la mayoría de los
casos, la línea de relación ofrece suficiente información sobre la expresión de clave; de lo contrario, puede
arrastrar el borde izquierdo de la columna para expandirla.

Definición de la búsqueda de múltiples filas para las entradas de referencia


Cuando un enlace de referencia se origina en una etapa UniVerse o ODBC, puede buscar múltiples filas
desde la tabla de referencia. Las filas se seleccionan con una clave foránea, en lugar de con una clave
primaria, como ocurre con los enlaces de referencia normales.

Para poder utilizar la funcionalidad de múltiples filas, debe definir qué columna o columnas son las
claves foráneas en los metadatos de columna. Para ello, cambie el atributo Clave de la columna de claves
primarias actual por No y, a continuación, cambie el atributo Clave de la columna o columnas de claves
foráneas necesarias por Sí. Las expresiones de clave foránea pueden definirse mediante el editor de
expresiones, de la misma forma que las expresiones de clave primaria que se describen en “Definición de
expresiones de clave de columna de entrada” en la página 118.

También debe especificar que el enlace de referencia utiliza la funcionalidad de múltiples filas.

Para ello, abra el recuadro de diálogo Propiedades de la etapa Transformer, vaya al separador General
en la página Entradas, compruebe que el enlace de entrada de referencia esté seleccionado y seleccione el
recuadro de diálogo Enlace de referencia con conjunto de resultados en múltiples filas.

Especificación de subrutinas anteriores y posteriores a la etapa


Como la etapa Transformer es un tipo de etapa activa, puede especificar rutinas para ejecutarlas antes o
después de que la etapa haya procesado los datos.

Para especificar una rutina, pulse el botón de propiedades de la etapa en la barra de herramientas para
abrir el recuadro de diálogo Propiedades de la etapa. El separador General contiene los campos
siguientes:
v Subrutina anterior a la etapa y Valor de entrada. Contiene el nombre (y el valor) de una subrutina
que se ejecuta antes de que la etapa empiece a procesar datos.
v Subrutina posterior a la etapa y Valor de entrada. Contiene el nombre (y el valor) de una subrutina
que se ejecuta después de que la etapa haya procesado los datos.

Seleccione una rutina en la lista. Esta lista contiene todas las rutinas integradas definidas como una
Subrutina anterior/posterior en la carpeta Rutinas del árbol de repositorio. Entre un valor apropiado
para el argumento de entrada de la rutina en el campo Valor de entrada.

Si elige una rutina definida en el repositorio, que se ha editado pero que no se ha compilado, un mensaje
de aviso le recordará que debe compilar la rutina cuando cierre el recuadro de diálogo Etapa
Transformer.

Si ha instalado o importado un trabajo, es posible que el campo Subrutina anterior a la etapa o


Subrutina posterior a la etapa haga referencia a una rutina que no exista en el sistema. En tal caso,
aparecerá un mensaje de aviso cuando cierre el recuadro de diálogo. Debe instalar o importar la rutina
"ausente" o seleccionar una rutina alternativa que utilizar.

Capítulo 4. Etapas de trabajo de servidor 119


Un código de retorno 0 de la rutina indica que ha resultado satisfactoria y cualquier otro código indica
que la rutina ha resultado anómala y provoca un error muy grave cuando se ejecuta el trabajo.

Si edita un trabajo creado utilizando el Release 1 de IBM InfoSphere DataStage, el campo Subrutina
anterior a la etapa o Subrutina posterior a la etapa puede contener el nombre de una rutina creada en el
Release 1. Cuando se actualiza InfoSphere DataStage, se identifican estas rutinas y se renombran
automáticamente. Por ejemplo, si utiliza una subrutina anterior a la etapa denominada BeforeSubr,
aparece como BeforeSubr\<Rev1> en el campo Subrutina anterior a la etapa. Puede continuar utilizando
estas rutinas. No obstante, como no ha podido especificar valores de entrada para las rutinas en el
Release 1 de InfoSphere DataStage, el campo Valor de entrada está sombreado cuando utiliza una de
estas rutinas "antiguas".

Definición de restricciones y manejo de rechazos


Puede definir límites en los datos de salida especificando una restricción. Las restricciones son
expresiones BASIC y puede especificar una restricción para cada enlace de salida de una etapa
Transformer. También puede especificar que un enlace concreto actúe como un enlace de rechazo. Los
enlaces de rechazo generan filas que no se han grabado en otros enlaces de salida de la etapa
Transformer.

Para definir una restricción o especificar un enlace de rechazo, utilice una de las opciones siguientes:
v Seleccione un enlace de salida y pulse el botón Restricciones.
v Efectúe una doble pulsación en el campo de entrada de restricción del enlace de salida.
v Elija Restricciones en los menús de atajos de cabecera o en segundo plano.

Aparecerá un recuadro de diálogo que permite definir restricciones en los enlaces de salida de la etapa
Transformer o definir un enlace como un enlace de rechazo.

Defina una restricción especificando una expresión BASIC en el campo Restricción del enlace. A
continuación, las restricciones existentes aparecerán debajo de la barra de título del enlace en el Editor de
transformación. Esta expresión de restricción se comprobará con los datos de fila en el tiempo de
ejecución. Si los datos no cumplen la restricción, la fila no se grabará en el enlace. También es posible
definir un enlace que se puede utilizar para detectar las filas que se han "rechazado" de un enlace
anterior.

Para definir un enlace de rechazo, seleccione Sí en el campo Fila de rechazo y establezca el campo
Restricción de la siguiente manera:
v Para detectar las filas que se han rechazado en un enlace de salida específico, establezca el campo
Restricción en nombre_enlace.REJECTED. Esto debe establecerse siempre se rechace una fila en el enlace
nombre_enlace, ya sea porque la fila no cumple una restricción del enlace de salida o porque una
operación de grabación en el destino falla para la fila. Tenga en cuenta que este tipo de enlace de
rechazo debe producirse después del enlace de salida desde el que se ha definido para detectar los
rechazos.
v Para detectar las filas que han generado un error de grabación en un enlace de salida, establezca el
campo Restricción en nombre_enlace.REJECTEDCODE. El valor de nombre_enlace.REJECTEDCODE será
distinto de cero si la fila se ha rechazado debido a un error de grabación o 0 (DSE.NOERROR) si la fila
se ha rechazado porque no se ha cumplido una restricción de enlace. Cuando edita el campo
Restricción, puede establecer los valores de retorno de nombre_enlace.REJECTEDCODE realizando una
selección en las opciones de menú Variables de enlaceRestricciones... del Editor de expresiones. Estos
proporcionan un rango de errores, pero tenga en cuenta que la mayoría de errores de grabación
devuelven DSE.WRITERROR.
Para poder establecer una restricción de rechazo que diferencie entre un error de grabación y una
restricción no cumplida, puede utilizarse una combinación de los distintivos
nombre_enlace.REJECTEDCODE y nombre_enlace.REJECTED. Por ejemplo:

120 Guía del desarrollador de Server Job


– Para detectar las filas que no se ha podido grabar en un enlace de salida, establezca el campo
Restricción en nombre_enlace.REJECTEDCODE
– Para detectar las filas que no cumplen una restricción en un enlace de salida, establezca el campo
Restricción en nombre_enlace.REJECTEDCODE = DSE.NOERROR AND nombre_enlace.REJECTED
– Para detectar qué filas se han rechazado debido a una restricción o un error de grabación, establezca
el campo Restricción en nombre_enlace.REJECTED
v Para "detectar todo", el campo Restricción puede dejarse en blanco. Esto indica que este enlace de
rechazo detectará todas las filas que no se han grabado satisfactoriamente en ninguno de los enlaces de
salida procesados hasta este punto. Por lo tanto, el enlace de rechazo debe ser el último enlace en el
orden de proceso definido.
v Puede definirse cualquier otra Restricción. Esto hará que el número de filas grabadas en el enlace (es
decir, las filas que cumplen la restricción) se registren en el registro de trabajo como "filas rechazadas".

Nota: Debido a la naturaleza del caso "detectar todo" anterior, sólo debe utilizar un enlace de rechazo
cuyo campo Restricción esté en blanco. Para utilizar varios enlaces de rechazo, debe definirlos para
que utilicen el distintivo nombre_enlace.REJECTED detallado en el primer caso anterior.

Especificación del orden de enlaces


Puede especificar el orden en el que los enlaces de entrada y los enlaces de salida procesan una fila. Para
los enlaces de entrada, puede ordenar los enlaces de referencia (el enlace primario siempre se procesa
primero). Para los enlaces de salida, puede ordenar todos los enlaces.

El orden inicial de los enlaces el orden en el que se añaden a la etapa.

Para reordenar los enlaces:


1. Abra el separador Orden de los enlaces del recuadro de diálogo Propiedades de la etapa
Transformer de la siguiente manera:
v Pulse el botón Orden de ejecución de los enlaces de entrada o Orden de ejecución de los enlaces
de salida en la barra de herramientas del editor de transformador.
v Elija Reordenar enlaces de entrada o Reordenar enlaces de salida en el menú de atajos en segundo
plano.
v Pulse el botón Propiedades de la etapa en la barra de herramientas del transformador o elija
Propiedades de la etapa en el menú de atajos en segundo plano y pulse el separador Orden de los
enlaces de la página Etapa.
2. Utilice los botones de flecha para reorganizar la lista de enlaces en el orden de ejecución necesario.
3. Si está satisfecho con el orden, pulse Aceptar.

Nota: Aunque los recursos de orden de los enlaces permiten utilizar una columna de salida anterior
para derivar una columna de salida posterior, no se recomienda y recibirá un aviso si lo hace.

Definición de variables de la etapa local


Puede declarar y utilizar sus propias variables en una etapa Transformer. Este tipo de variables son
accesibles sólo desde la etapa Transformer en la que se declaran. Pueden utilizarse de la siguiente
manera:
v Se les pueden asignar valores por expresiones.
v Pueden utilizarse en expresiones que definen una derivación de columna de salida.
v Las expresiones que evalúan una variable pueden incluir otras variables o la propia variable que se
está ejecutando.

Las variables de etapa que declara se muestran en una tabla en el panel de la derecha del área de enlaces.
La tabla es parecida a un enlace de salida. Para mostrar u ocultar la tabla, pulse el botón Variables de

Capítulo 4. Etapas de trabajo de servidor 121


etapa en la barra de herramientas del transformador, o seleccione Variables de etapa en el menú de
atajos en segundo plano. Las variables de etapa no se muestran en el área de metadatos del enlace de
salida en la parte inferior del panel de la derecha.

La tabla muestra las variables de etapa junto con las expresiones utilizadas para derivar sus valores. Las
líneas de enlace unen las variables de etapa con las columnas de entrada utilizadas en las expresiones.
Los enlaces de la derecha de la tabla enlazan las variables con las columnas de salida que las utilizan.

Para declarar una variable de etapa:


1. Abra el recuadro de diálogo Propiedades de la etapa Transformer de la siguiente manera:
v Pulse el botón Propiedades de la etapa en la barra de herramientas del transformador.
v Seleccione Propiedades de la etapa desde el menú de atajos de fondo.
2. Pulse el separador Variables de la página General. El separador Variables contiene una cuadrícula
que muestra las variables declaradas actualmente, sus valores iniciales y una descripción opcional.
Utilice los controles de la cuadrícula estándar para añadir nuevas variables. Los nombres de variable
deben empezar por un carácter alfabético (a-z, A-Z) y sólo pueden contener caracteres alfanuméricos
(a-z, A-Z, 0-9). Asegúrese de que la variable no utilice el nombre de ninguna palabra clave de BASIC.

Las variables especificadas en el recuadro de diálogo Propiedades de la etapa aparecen en la tabla


Variable de la etapa en el panel de enlaces.

En general, puede realizar prácticamente las mismas operaciones en una variable de etapa que en una
columna de salida (consulte “Definición de derivaciones de columna de salida” en la página 115). Un
menú de tajos ofrece los mismos mandatos. No obstante, no puede pegar una variable de etapa como una
nueva columna o una columna como una nueva variable de etapa.

Editor de expresiones de IBM InfoSphere DataStage


El Editor de expresiones de InfoSphere DataStage permite especificar expresiones correctas cuando edita
etapas Transformer. También permite definir transformaciones personalizadas en el repositorio (consulte
“Definición de transformaciones personalizadas” en la página 144). El editor de expresiones puede:
v Facilitar la entrada de elementos de expresión
v Completar los nombres de variables utilizadas frecuentemente
v Validar nombres de variables y toda la expresión

El Editor de expresiones se puede abrir desde:


v Celdas Derivación del enlace de salida
v Celdas Derivación de la variable de la etapa
v Celdas Expresión de clave del enlace de entrada
v Recuadro de diálogo Restricción
v Recuadro de diálogo Transformación en el repositorio

Formato de expresión
El formato de una expresión es el siguiente:
KEY:

something_like_this is a token
something_in_italics is a terminal, that is, doesn’t break down any
further
| is a choice between tokens
[ is an optional part of the construction
"XXX" is a literal token (that is, use XXX not
including the quotation marks)
=================================================

122 Guía del desarrollador de Server Job


expression ::= function_call |
variable_name |
other_name |
constant |
unary_expression |
binary_expression |
if_then_else_expression |
substring_expression |
"(" expression ")"

function_call ::= function_name "(" [argument_list] ")"


argument_list ::= expression | expression "," argument_list
function_name ::= name of a built-in function |
name of a user-defined_function
variable_name ::= job_parameter name |
stage_variable_name |
link_variable name
other_name ::= name of a built-in macro, system variable, and so on
constant ::= numeric_constant | string_constant
numeric_constant ::= ["+" | "-"] digits ["." [digits]] ["E" | "e" ["+" | "-"] digits]
string_constant ::= "’" [characters] "’" |
""" [characters] """ |
"\" [characters] "\"
unary_expression ::= unary_operator expression
unary_operator ::= "+" | "-"
binary_expression ::= expression binary_operator expression
binary_operator ::= arithmetic_operator |
concatenation_operator |
matches_operator |
relational_operator |
logical_operator
arithmetic_operator ::= "+" | "-" | "*" | "/" | "^"
concatenation_operator ::= ":"
matches_operator ::= "MATCHES"
relational_operator ::= " =" |"EQ" |
"<>" | "#" | "NE" |
">" | "GT" |
">=" | "=>" | "GE" |
"<" | "LT" |
"<=" | "=<" | "LE"
logical_operator ::= "AND" | "OR"
if_then_else_expression ::= "IF" expression "THEN" expression "ELSE" expression
substring_expression ::= expression "[" [expression ["," expression] "]"
field_expression ::= expression "[" expression ","
expression ","
expression "]"
/* Es decir, siempre 3 argumentos

Nota: Las palabras clave "AND", "IF" o "EQ" pueden ir en mayúsculas o minúsculas.

Especificación de expresiones
Cuando el punto de inserción está en un recuadro de la expresión, puede utilizar el editor de expresiones
para sugerir el siguiente elemento de la expresión. Para ello, pulse con el botón derecho del ratón sobre el
recuadro o pulse el botón Sugerir a la derecha del recuadro. Se abrirá el menú Sugerir operando o
Sugerir operador. El menú que aparece depende del contexto, es decir, de si debe especificar un
operando o un operador como siguiente elemento de expresión.

Se le ofrecerá una selección diferente del menú Sugerir operando, dependiendo de si está definiendo
expresiones de clave, derivaciones y restricciones, o una transformación personalizada. El menú Sugerir
operador siempre es el mismo.

Capítulo 4. Etapas de trabajo de servidor 123


Menú Sugerir operando: etapa Transformer
Macro de DS...
Función de DS...
Constante de DS...
Rutina de DS...
Transformación de DS...
Parámetro de trabajo...
Columna de entrada...
Variables de enlace
Variables de etapa...
Variable del sistema...
Serie...
Función...
() Paréntesis
If Then Else

Menú Sugerir operando: definición de transformaciones personalizadas


Macro de DS...
Función de DS...
Constante de DS...
Rutina de DS...
Argumento de transformación...
Variable del sistema...
Serie...
Función...
() Paréntesis
If Then Else

Menú Sugerir operador


+ = Concatenar
- <> Subserie
* < Coincidencias
/ <= And
^ > Or
>=

Cómo completar los nombres de variables


El Editor de expresiones almacena nombres de variables. Cuando especifica el nombre de una variable
que ha utilizado anteriormente, puede escribir los primeros caracteres y pulsar F5. El Editor de
expresiones completa el nombre de la variable automáticamente.

Si especifica el nombre de un enlace de entrada seguido de un punto, por ejemplo, DailySales., el


Editor de expresiones muestra una lista de los nombres de columna del enlace. Si continúa escribiendo, la

124 Guía del desarrollador de Server Job


selección de lista cambia para coincidir con los que escribe. También puede seleccionar un nombre de
columna utilizando el ratón. Especifique el nombre de columna seleccionado en la expresión pulsando el
Tabulador o Intro. Pulse Esc para descartar la lista sin seleccionar un nombre de columna.

Validación de la expresión
Si ha especificado una expresión en el editor de transformador, pulse Intro para validarla. El editor de
expresiones comprueba que la sintaxis sea correcta y que los nombres de variable utilizados sean
aceptables para el compilador. Cuando utilice el editor de expresiones para definir una transformación
personalizada, pulse Aceptar para validar la expresión.

Si hay un error, aparece un mensaje y el elemento que causa el error se resalta en el recuadro de la
expresión. Puede corregir la expresión o cerrar el editor de transformador o el recuadro de diálogo
Transformación.

En el editor de transformador, las expresiones que no son válidas se muestran en rojo. (En algunos casos,
simplemente significa que la expresión no cumple estrictamente las reglas del patrón de uso del motor de
servidor, pero funcionará correctamente).

Para obtener más información sobre la sintaxis que puede utilizar en una expresión, consulte Capítulo 7,
“Programación BASIC”, en la página 147.

Cómo salir del Editor de expresiones


Puede salir del Editor de expresiones de la siguiente forma:
v Pulse Esc (y se descartan los cambios).
v Pulse Retorno (y se aceptan los cambios).
v Pulse fuera del recuadro del Editor de expresiones (y se aceptan los cambios).

Configuración del Editor de expresiones


El Editor de expresiones está activado de forma predeterminada. Si prefiere no utilizarlo, puede
desactivarlo o utilizar sólo características seleccionadas. El Editor de expresiones se configura editando las
opciones del cliente del Diseñador. Para obtener más información sobre las opciones del cliente del
Diseñador, consulte IBM InfoSphere DataStage and QualityStage Designer Client Guide.

Propiedades de la etapa Transformer


La etapa Transformer tiene un recuadro de diálogo Propiedades que permite especificar detalles sobre
cómo opera la etapa.

El recuadro de diálogo Etapa Transformer tiene tres páginas:


v Página Etapa. Se utiliza para especificar información general sobre la etapa.
v Página Entradas. Aquí se especifican los detalles sobre la entrada de datos en la etapa Transformer.
v Página Salidas. Aquí se especifican los detalles sobre los enlaces de salida de la etapa Transformer.

Página Etapa
La página Etapa tiene cuatro separadores:
v General. Permite introducir una descripción opcional de la etapa y especificar una subrutina anterior o
posterior a la etapa.
v Variables. Permite configurar variables de etapa para utilizarlas en la etapa.
v Orden de los enlaces. Permite especificar el orden en el que se procesarán los enlaces de salida.

Capítulo 4. Etapas de trabajo de servidor 125


El separador General se describe en “Rutinas anteriores y posteriores a la etapa” en la página 112. El
separador Variables se describe en “Definición de variables de la etapa local” en la página 121. El
separador Orden de los enlaces se describe en “Especificación del orden de enlaces” en la página 121.

Página Entradas
La página Entradas permite especificar detalles sobre los datos que llegan a la etapa Transformer. La
etapa Transformer sólo puede tener un enlace de entrada.

El separador General permite especificar una descripción opcional del enlace de entrada.

Página Salidas
La página Salidas tiene un separador General que permite especificar una descripción opcional para cada
uno de los enlaces de salida en la etapa Transformer.

126 Guía del desarrollador de Server Job


Capítulo 5. Depuración y compilación de un trabajo
Estos temas describen cómo crear un trabajo ejecutable. Cuando haya instalado todas las etapas en un
diseño de trabajo, podrá crear un trabajo ejecutable compilando el diseño de trabajo. El depurador ayuda
a eliminar cualquier problema del diseño. Posteriormente, el trabajo se puede validar y ejecutar
utilizando el cliente del Director.

El depurador de IBM InfoSphere DataStage


El depurador de InfoSphere DataStage proporciona recursos básicos para probar y depurar los diseños de
trabajo. El depurador se ejecuta desde el cliente del Diseñador. Puede utilizarse desde distintos lugares en
el cliente del Diseñador:
v Menú Depurar (Depurar)
v Barra de herramientas Depurar
v Menú de atajos (algunos mandatos).

El depurador permite establecer puntos de interrupción en los enlaces del trabajo. Cuando ejecuta el
trabajo en la modalidad de depuración, el trabajo se detendrá cuando alcance un punto de interrupción.
A continuación, puede pasar a la siguiente acción (lectura o grabación) en el enlace, o pasar al proceso en
la siguiente fila de datos (que puede estar en el mismo enlace o en otro).

Los puntos de interrupción que ha establecido permanecen si el trabajo se cierra y se vuelve a abrir. Los
puntos de interrupción se validan cuando se compila el trabajo y permanecen válidos si el enlace al que
pertenecen se mueve, termina de moverse o se renombra. No obstante, si se suprime un enlace y se crea
otro con el mismo nombre, el nuevo enlace no hereda el punto de interrupción. Los puntos de
interrupción no se heredan cuando un trabajo se guarda con otro nombre, se exporta o se actualiza.

Nota: Tenga cuidado cuando depure trabajos que ejecuten procesos paralelos (utilizando etapas IPC o
enlaces de activo a activo entre procesos). No puede establecer puntos de interrupción en más de un
proceso a la vez. Para asegurarse de que esto no ocurre, sólo debe establecer un punto de interrupción
cada vez en estos trabajos.

Para añadir un punto de interrupción:


1. Seleccione el enlace necesario.
2. Elija Conmutar punto de interrupción en el menú Depurar o la barra de herramientas Depurar. El
punto de interrupción puede eliminarse posteriormente seleccionado Conmutar punto de
interrupción otra vez.

Aparece un círculo en el enlace para indicar que se ha añadido un punto de interrupción. Elija Editar
puntos de interrupción en el menú Depurar o pulse Editar puntos de interrupción en la barra de
herramientas Depurar para abrir el recuadro de diálogo Editar puntos de interrupción y configurar el
punto de interrupción.

No puede colocar un punto de interrupción en un enlace que tenga un contenedor como etapa de origen.
En su lugar, debe colocar el punto de interrupción en el mismo enlace que se representa en la propia
vista del contenedor. El enlace sólo mostrará que tiene un punto de interrupción en la vista del
contenedor. Para obtener más información, consulte el apartado “Depuración de los contenedores
compartidos” en la página 129.

La Ventana de depuración permite ver las variables en la lista de observaciones y las variables en
contexto cuando se detiene un punto de interrupción.
© Copyright IBM Corp. 1997, 2010 127
La Ventana de depuración está visible cuando se selecciona Depurar → Ventana de depuración. Siempre
aparece sobre la ventana del cliente del Diseñador. Si pulsa con el botón derecho del ratón sobre la
Ventana de depuración, aparece un menú de atajos que contiene los mismos elementos que el menú
Depurar. La Ventana de depurador tiene dos paneles de visualización. Puede arrastrar la barra divisora
entre los dos paneles para redimensionar los paneles. La ventana también proporciona información sobre
el estado del trabajo y el depurador.

El panel superior muestra variables locales. Antes de iniciar la depuración, se muestran todas las
columnas de todos los enlaces del trabajo, y todas se marcan como "Fuera de contexto". Durante la
depuración, el panel muestra sólo las variables que hay en contexto cuando se detiene el trabajo en el
punto de interrupción. Muestra los nombres y los valores de las variables que hay actualmente en
contexto. Puede añadir las variables en contexto que desee a la lista de observaciones, que mantiene un
registro de las variables seleccionadas el tiempo que sea necesario.

El panel inferior muestra las variables de la lista de observaciones. Cuando las variables están en
contexto, sus valores se muestran y se actualizan en cada punto de interrupción. Cuando variables no
están en contexto, se marcan como "Fuera de contexto". La lista de observaciones se guarda entre las
distintas sesiones.

Para añadir una variable a la lista de observaciones:


1. Seleccione el nombre de la variable en el panel superior de la Ventana de depuración.
2. Pulse Añadir observación. La variable se añadirá a la lista de observaciones y aparecerá en el panel
inferior.

Para suprimir variables de la lista de observaciones, seleccione las


variables y pulse Eliminar observación.
Los siguientes mandatos están disponibles en el menú Depurar o la barra de herramientas Depurar:
v Trabajo de destino. Selecciona el trabajo que se va a depurar. Sólo puede depurarse un trabajo cada
vez.
Una vez depurado un trabajo, el trabajo en la lista Trabajo de destino no estará disponible.
v Ir. Ejecuta el trabajo actual en la modalidad de depuración, compilándolo primero si es necesario. En la
modalidad de depuración, el trabajo se ejecutará hasta que se encuentre un punto de interrupción. A
continuación, se detiene en la modalidad de interrupción, lo que permite interactuar con el trabajo. La
primera vez que se utiliza Ir después de compilar o cargar un trabajo, aparece el recuadro de diálogo
Opciones de ejecución del trabajo, que permite recopilar los valores de parámetro necesarios o los
límites de tiempo de ejecución.
v Pasar al siguiente enlace. El trabajo se ejecuta hasta que se produce la siguiente acción en un enlace
(lectura o grabación), cuando se detiene en modalidad de interrupción.
v Pasar a la siguiente fila. El trabajo se ejecuta hasta que se procesa la siguiente fila o hasta que se
encuentra otro enlace con un punto de interrupción, lo que ocurra primero. A continuación, el trabajo
se detiene en modalidad de interrupción. Si el trabajo no se ha detenido actualmente en un punto de
interrupción en un enlace (por ejemplo, si no ha empezado a depurar todavía o se ha detenido en un
aviso), se ejecutará como Pasar al siguiente enlace.
v Detener trabajo. Sólo está disponible en la modalidad de interrupción. Detiene el trabajo y sale de la
modalidad de interrupción.
v Parámetro de trabajo... Permite especificar parámetros de trabajo para cuando se ejecuta el trabajo en
modalidad de depuración. Si selecciona esta opción, se invoca el recuadro de diálogo Opciones de
ejecución del trabajo, que permite especificar los parámetros necesarios o los límites de tiempo de
ejecución del trabajo. El elemento se inhabilita cuando se inicia el trabajo en modalidad de depuración.
v Editar puntos de interrupción... Permite editar los puntos de interrupción existentes o añadir otros
nuevos.

128 Guía del desarrollador de Server Job


v Conmutar punto de interrupción. Permite establecer o borrar un punto de interrupción en el enlace
seleccionado. Si un enlace tiene un conjunto de puntos de interrupción (indicado por un círculo negro
en el origen de enlace), Conmutar punto de interrupción borra el punto de interrupción. Si el enlace
no tiene ningún punto de interrupción, se añade uno que especifica una detención en cada fila
procesada.
v Borrar todos los puntos de interrupción. Suprime todos los puntos de interrupción definidos para
todos los enlaces.
v Ver registro de trabajo. Seleccione esta opción para abrir el cliente del Director con el trabajo actual
abierto en la vista de registro de trabajo (el trabajo debe haberse guardado en el cliente del Diseñador
en algún punto para que esto funcione).
v Ventana de depuración. Seleccione esta opción para ver la Ventana de depuración. Deselecciónela para
ocultar la Ventana de depuración.

Depuración de los contenedores compartidos


El proceso de depurar contenedores compartidos es el mismo que el de otros trabajos, aunque los puntos
de interrupción se manejan de forma diferente:
v No puede colocar un punto de interrupción en un enlace que tenga un contenedor como etapa de
origen.

En su lugar, debe colocar el punto de interrupción en el mismo enlace que se representa en la vista del
contenedor. El enlace sólo se mostrará con un punto de interrupción en la vista del contenedor.

Capítulo 5. Depuración y compilación de un trabajo 129


v Si se establece un punto de interrupción en un enlace dentro de un contenedor compartido, sólo se
activará (y estará visible) para el trabajo de destino, tal como se muestra en la barra de depuración.

Nota: La barra de depuración sólo muestra trabajos de servidor abiertos porque un contenedor
compartido no puede ejecutarse fuera del contexto de un trabajo.
v Si otro trabajo utiliza el mismo contenedor compartido que se está depurando, el punto de interrupción
no estará visible ni se activará en el otro trabajo. El siguiente ejemplo muestra un trabajo denominado
`Ex2', que utiliza el mismo contenedor compartido que el ejemplo anterior denominado `Exercise 4.' El
punto de interrupción sólo se establecerá para el trabajo de destino que es Exercise 4.

130 Guía del desarrollador de Server Job


Compilación de un trabajo
Los trabajos se compilan utilizando el cliente del Diseñador. Para compilar un trabajo, abra el trabajo en
el cliente del Diseñador y efectúe uno de los pasos siguientes:
v Seleccione Archivo → Compilar.
v Pulse el botón Compilar en la barra de herramientas.

Si se han realizado cambios en el trabajo pero no se han guardado, el sistema le preguntará si desea
guardar el trabajo y, en caso afirmativo, deberá pulsar Aceptar. Se abrirá la ventana Compilar trabajo.
Esta ventana contiene una área de visualización para mensajes de compilación y tiene los siguientes
botones:
v Recompilar. Vuelve a compilar el trabajo si se han efectuado cambios.
v Mostrar error. Resalta la etapa que ha generado un error de compilación. Este botón sólo está activo si
se ha generado un error durante la compilación.
v Más. Muestra la salida que no se adapta al área de visualización. Algunos errores producidos por el
compilador incluyen una salida BASIC detallada.
v Cerrar. Cierra la ventana Compilar trabajo.
v Ayuda. Invoca al sistema de ayuda.

El trabajo se compila tan pronto como se abre la ventana. Debe comprobar el área de visualización por si
se han producido mensajes de compilación o se han generado errores.

Si se establecen puntos de interrupción para enlaces que ya no existen, aparece un mensaje durante la
compilación para avisarle al respecto. Los puntos de interrupción se eliminan automáticamente.

Capítulo 5. Depuración y compilación de un trabajo 131


También puede compilar varios trabajos a la vez utilizando el asistente del compilador de IBM
InfoSphere DataStage. Consulte IBM InfoSphere DataStage and QualityStage Designer Client Guide para
obtener más información.

Comprobaciones de compilación
Durante la compilación se comprueban los criterios siguientes en el diseño del trabajo:
v Entrada primaria. Si tiene más de un enlace de entrada a una etapa Transformer, el compilador
comprueba que se haya definido uno como enlace de entrada primario.
v Entrada de referencia. Si tiene entradas de referencia definidas en una etapa Transformer, el
compilador comprueba que éstas no provengan de archivos secuenciales.
v Expresiones de clave. Si tiene campos de clave especificados en sus definiciones de columna, el
compilador comprueba que haya expresiones de clave que unan las tablas de datos.
v Transformaciones. Si ha especificado una transformación, el compilador comprueba que sea una
transformación adecuada para el tipo de datos.

Compilación satisfactoria
Si la ventana Compilar trabajo muestra el mensaje Trabajo compilado satisfactoriamente sin errores,
puede:
v Validar el trabajo
v Ejecutar o planificar el trabajo

Los trabajos se validan utilizando el cliente del Director. (También puede realizar una ejecución de prueba
en el cliente del Diseñador durante el desarrollo, aunque las ejecuciones de producción se ejecutan
normalmente en el cliente del Director). Consulte IBM InfoSphere DataStage and QualityStage Director Client
Guide para obtener más información.

Resolución de problemas
Si la ventana Compilar trabajo muestra un error, puede utilizar el botón Mostrar error para solucionar los
problemas del diseño del trabajo. Cuando pulsa Mostrar error, se resalta la etapa que contiene el primer
error en el diseño. Debe editar la etapa para cambiar los valores incorrectos y volver a compilar el
trabajo.

El proceso de solucionar los errores de iteración es un proceso iterativo. Debe perfeccionar cada etapa
"problemática" hasta que el trabajo se compile satisfactoriamente.

Supervisor de rendimiento gráfico


El supervisor de rendimiento resulta una útil soporte de diagnóstico al diseñar trabajos de servidor de
IBM InfoSphere DataStage. Si se activa y se compila un trabajo, éste muestra información sobre cada
enlace del trabajo. Si ejecuta el trabajo, mediante el cliente del Director o depurador, la información del
enlace se completa con estadísticas para mostrar el número de filas procesadas en el enlace y la velocidad
con la que éstas se procesan. Los enlaces cambian de color cuando se ejecuta el trabajo para mostrar el
progreso del trabajo.

Para utilizar el supervisor de rendimiento:


1. Con el trabajo abierto y compilado en el Diseñador, elija Diagrama → Mostrar estadísticas de
rendimiento. Aparecerá información sobre el rendimiento de los enlaces. Si el trabajo aún no se ha
ejecutado, las figuras estarán vacías.

132 Guía del desarrollador de Server Job


2. Ejecute el trabajo (desde el cliente del Director o seleccionado Depurar → Ir). Observe como los enlaces
cambian de color mientras se ejecuta el trabajo y cómo se llenan las estadísticas con el número de filas
y filas/seg.

Capítulo 5. Depuración y compilación de un trabajo 133


Si altera cualquier cosa del diseño de trabajo, perderá la información estadística hasta la próxima vez que
compile el trabajo.

Los colores que utiliza el supervisor de rendimiento se establecen mediante el recuadro de diálogo
Opciones. Elija Herramientas → Opciones y seleccione la ramificación Supervisor de rendimiento gráfico
para ver los colores predeterminados y cambiarlos si es necesario.

También puede establecer el intervalo de renovación según el cual el supervisor actualizará la


información mientras se ejecuta el trabajo.

134 Guía del desarrollador de Server Job


Capítulo 6. Programación en IBM InfoSphere DataStage
Estos temas describen las tareas de programación que se pueden realizar en trabajos de servidor de
InfoSphere DataStage. La mayoría utilizan el lenguaje BASIC, que proporciona una potente herramienta
de programación de procedimientos.

Hay varias áreas en un trabajo de servidor donde, si lo desea, puede especificar código:
v Definición de rutinas personalizadas que se utilizan como bloques de creación en otras tareas de
programación. Por ejemplo, puede definir una rutina que se reutilizará en varias transformaciones
personalizadas. Puede ver, editar y crear sus propias rutinas BASIC utilizando el cliente del Diseñador.
v Definición de transformaciones personalizadas. La función especificada en una definición de
transformación convierte los datos en una columna seleccionada.
v Definición de derivaciones, expresiones de clave y restricciones mientras se edita una etapa
Transformer.
v Definición de subrutinas anteriores y posteriores a la etapa. Estas subrutinas realizan una acción antes
o después de que una etapa haya procesado los datos. Pueden especificarse para las etapas Aggregator,
Transformer y algunas etapas suplementarias.
v Definición de subrutinas anteriores y posteriores al trabajo. Estas subrutinas realizan una acción antes o
después de ejecutar un trabajo y se establecen como propiedades del trabajo.
v Definición de rutinas de control de trabajos. Estas subrutinas pueden utilizarse para controlar otros
trabajos dentro del trabajo actual.

Componentes de programación
En los trabajos de servidor, se utilizan tipos de componentes de programación muy diferentes. Pueden
clasificarse en tres categorías principales:
v Incorporados. IBM InfoSphere DataStage se proporciona con varios componentes de programación
incorporados que puede reutilizar en los trabajos de servidor, según sea necesario. Algunos de los
componentes incorporados son accesibles desde el repositorio, y puede copiar el código desde ellos.
Otros son sólo accesibles desde el Editor de expresiones, y el código subyacente no está visible.
v Personalizados. También puede definir sus propios componentes de programación utilizando el cliente
del Diseñador, en concreto, rutinas (consulte “Cómo trabajar con las rutinas” en la página 138) y
transformaciones personalizadas (consulte “Definición de transformaciones personalizadas” en la
página 144). Se almacenan en el repositorio y puede reutilizarse para otros trabajos y por otros
usuarios de InfoSphere DataStage.
v Externos. Puede utilizar algunos tipos de componentes externos desde InfoSphere DataStage. Si tiene
una gran inversión en funciones UniVerse personalizadas o funciones ActiveX (OLE), es posible
invocarlas desde InfoSphere DataStage. Para ello, se define una rutina de derivador que, a su vez,
invoca las funciones externas. Tenga en cuenta que el mecanismo para incluir funciones UniVerse
personalizadas es distinto al de incluir funciones ActiveX (OLE).

En las siguientes secciones se describen los términos de programación que deberá conocer cuando
programe trabajos de servidor.

Rutinas
Las rutinas se almacenan en la carpeta Rutinas del árbol de repositorio de forma predeterminada, pero
puede almacenarlas en la carpeta que prefiera. Las rutinas se pueden crear, ver o editar utilizando el
recuadro de diálogo Rutina de servidor. Los siguientes componentes de programa se clasifican como
rutinas:

© Copyright IBM Corp. 1997, 2010 135


v Funciones de transformación. Se trata de funciones que puede utilizar al definir transformaciones
personalizadas. IBM InfoSphere DataStage tiene varias funciones de transformación incorporadas que
se encuentran en la carpeta Rutinas → Ejemplos → Funciones del árbol de repositorio. También puede
definir sus propias funciones de transformación en el recuadro de diálogo Rutina de servidor.
v Subrutinas anteriores/posteriores. Al diseñar un trabajo, puede especificar una subrutina para
ejecutarla antes o después del trabajo, o antes o después de una etapa activa. InfoSphere DataStage
tiene varias subrutinas anteriores/posteriores incorporadas que se encuentran en la carpeta
RutinasIncorporadas → Anteriores/posteriores del árbol de repositorio. También puede definir sus
propias subrutinas anteriores/posteriores utilizando el recuadro de diálogo Rutina de servidor.
v Funciones de UniVerse personalizadas. Son funciones BASIC especializadas que se han definido fuera
de InfoSphere DataStage. Mediante el recuadro de diálogo Rutina de servidor, puede hacer que
InfoSphere DataStage cree un derivador que permita llamar a estas funciones desde dentro de
InfoSphere DataStage. Estas funciones se almacenan en la carpeta Rutinas del árbol de repositorio.
Cuando cree la rutina, especifique la categoría. Si el soporte multilingüístico está habilitado, deberá
estar informado sobre cualquier requisito de correlación al crear funciones de UniVerse personalizadas.
Si una función utiliza datos en un juego de caracteres en concreto, será su responsabilidad
correlacionar los datos desde y hacia Unicode.
v Funciones ActiveX (OLE). Puede utilizar funciones ActiveX (OLE) como componentes de
programación dentro de InfoSphere DataStage. En InfoSphere DataStage se pueden utilizar tales
funciones realizando una importación de las mismas. Este programa crea un derivador que permite
llamar a las funciones. Tras la importación, puede ver y editar el derivador BASIC utilizando el
recuadro de diálogo Rutina de servidor. De forma predeterminada, estas funciones se encuentran en la
carpeta Rutinas → Nombre de clase del árbol de repositorio, pero puede especificar su propia carpeta
al importar las funciones.

Cuando utiliza el editor de expresiones, todos estos componentes aparecen en el mandato Rutinas de
DS... en el menú Sugerir operando.

Un caso especial de rutina es la rutina de control de trabajos. Este tipo de rutina se utiliza para
configurar un trabajo que controla otros trabajos. Las rutinas de control de trabajos se especifican en la
página Control de trabajos del recuadro de diálogo Propiedades del trabajo. Las rutinas de control de
trabajos no se almacenan en la carpeta Rutinas del árbol de repositorio.

Transformaciones
Las transformaciones se almacenan en la carpeta Transformaciones del árbol de repositorio de forma
predeterminada, pero puede almacenarlas en la carpeta que desee. Las transformaciones se pueden crear,
ver o editar utilizando el recuadro de diálogo Transformación. Las transformaciones especifican el tipo
de datos transformados, el tipo en que se transforman y la expresión que realiza la transformación.

IBM InfoSphere DataStage se suministra con numerosas transformaciones incorporadas (que no se


pueden editar). También puede definir sus propias transformaciones personalizadas, que se almacenan en
el repositorio y que pueden ser utilizadas por otros trabajos.

Cuando utiliza el editor de expresiones, las transformaciones aparecen bajo el mandato Transformación
de DS... en el menú Sugerir operando.

Funciones
Las funcionen utilizan argumentos y devuelven un valor. La palabra "función" se aplica a muchos
componentes de IBM InfoSphere DataStage:
v Funciones BASIC. Estas constituyen unos de los bloques de creación fundamentales del lenguaje
BASIC. Cuando utiliza el editor de expresiones, puede acceder a las funciones BASIC mediante el
mandato Función... del menú Sugerir operando.
v Funciones BASIC de InfoSphere DataStage. Estas son funciones BASIC especiales que son específicas
de InfoSphere DataStage. Se utilizan principalmente en las rutinas de control de trabajos. Las funciones

136 Guía del desarrollador de Server Job


de InfoSphere DataStage empiezan por DS para distinguirlas de las funciones BASIC generales.
Cuando utiliza el editor de expresiones, puede acceder a las funciones BASIC de InfoSphere DataStage
mediante el mandato Funciones de DS... del menú Sugerir operando.

Los siguientes elementos, aunque se denominan "funciones", se clasifican como rutinas y se describen en
“Rutinas” en la página 135. Cuando utiliza el editor de expresiones, todas aparecen bajo el mandato
Rutinas de DS... en el menú Sugerir operando.
v Funciones de transformación
v Funciones de UniVerse personalizadas
v Funciones ActiveX (OLE)

Expresiones
Una expresión es un elemento de código que define un valor. La palabra "expresión" se utiliza como una
parte específica de la sintaxis de BASIC y para describir las partes de código que puede especificar
cuando define un trabajo. Las áreas de IBM InfoSphere DataStage donde puede utilizar este tipo de
expresiones son:
v Definición de puntos de interrupción en el depurador
v Definición de derivaciones de columna, expresiones de clave y restricciones en las etapas Transformer
v Definición de una transformación personalizada

En cada uno de estos casos, el editor de expresiones de InfoSphere DataStage sirve de guía sobre qué
elementos de programación puede insertar en la expresión.

Subrutinas
Una subrutina es un conjunto de instrucciones que realizan una tarea concreta. Las subrutinas no
devuelven un valor. La palabra "subrutina" se utiliza como una parte específica de la sintaxis de BASIC,
pero también para hacer referencia específica a subrutinas anteriores/posteriores que realizan tareas antes
o después de un trabajo en una etapa activa. IBM InfoSphere DataStage tiene muchas subrutinas
anteriores y posteriores incorporadas, pero también definir rutinas personalizadas.

Las subrutinas anteriores/posteriores se incluyen en la clasificación general de rutinas, ya que son


accesibles desde la carpeta Rutinas en el árbol de repositorio de forma predeterminada.

Macros
IBM InfoSphere DataStage tiene varias macros incorporadas. Pueden utilizarse en las expresiones, las
rutinas de control de trabajos y las subrutinas anteriores/posteriores. Las macros disponibles permiten
establecer el estado del trabajo.

Cuando utiliza el editor de expresiones, todas aparecen bajo el mandato Macro de DS... en el menú
Sugerir operando.

Reglas de prioridad
Se aplican las siguientes reglas de prioridad si hay conflictos de nombres entre los distintos operandos
cuando se trabaja con los componentes de programación de IBM InfoSphere DataStage:
1. Funciones incorporadas declaradas en el archivo DSParams
2. Macros de InfoSphere DataStage
3. Constantes de InfoSphere DataStage
4. Funciones de InfoSphere DataStage
5. Transformaciones de InfoSphere DataStage
6. Rutinas de InfoSphere DataStage

Capítulo 6. Programación en IBM InfoSphere DataStage 137


Estas reglas ignoran el número de argumentos implicados. Por ejemplo, si hay una transformación con
tres argumentos y una rutina del mismo nombre con dos argumentos, se genera un error si llama a la
rutina, porque la transformación se encontrará primero y la transformación espera tres argumentos.

Cómo trabajar con las rutinas


Cuando se crea, visualiza o edita una rutina, aparece el recuadro de diálogo Rutina de servidor. Este
recuadro de diálogo tiene cinco páginas: General, Creador, Argumentos, Código y Dependencias.

Hay cinco botones en el recuadro de diálogo Rutina de servidor. Su disponibilidad depende de la acción
que se esté realizando y del tipo de rutina que se esté editando.
v Cerrar. Cierra el recuadro de diálogo Rutina de Servidor. Si no ha guardado las modificaciones, el
sistema le preguntará si desea guardarlas.
v Guardar. Guarda la rutina.
v Compilar. Compila una rutina guardada. Sólo está disponible cuando no hay cambios pendientes (sin
guardar).
v Probar... Prueba una rutina. Sólo está disponible para rutinas del tipo Función de transformación y
Función UniVerse personalizada. Esto sucede porque no se pueden probar las subrutinas anteriores y
posteriores de modo aislado. Sólo está activo cuando la rutina se ha compilado o referenciado
satisfactoriamente.
v Ayuda. Invoca al sistema de Ayuda.

Recuadro de diálogo Rutina de servidor


En esta sección se describen las cinco páginas del recuadro de diálogo Rutina de servidor.

Página General
Aparece la página General de modo predeterminado. Contiene información general sobre la rutina,
incluido:
v Nombre de rutina. Nombre de la función o subrutina.
v Tipo. Tipo de rutina. Existen tres tipos de rutina: Función de transformación, Subrutina
anterior/posterior o Función de UniVerse personalizada.
v Nombre de catálogo externo. Sólo está disponible si ha elegido la Función de UniVerse personalizada
en el recuadro Tipo. Entre el nombre catalogado de la rutina externa.
v Descripción breve. Descripción breve opcional de la rutina.
v Descripción explicativa. Descripción detallada opcional de la rutina.

Página Creador
La página Creador contiene información sobre el creador y el número de versión de la rutina, por
ejemplo:
v Proveedor. Empresa que ha creado la rutina.
v Autor. Creador de la rutina.
v Versión. Número de versión de la rutina, que se utiliza al importar la rutina. El campo Versión
contiene una número de versión de tres partes, por ejemplo: 3.1.1. La primera parte de este número es
un número interno utilizado para comprobar la compatibilidad entre la rutina y el sistema IBM
InfoSphere DataStage. La segunda parte de este número representa el número de release. Este número
debería ir incrementando a medida que se vayan realizando cambios importantes en la definición de
rutina o en el código subyacente. El release nuevo de la rutina reemplaza cualquier release anterior.
Los trabajos que utilicen la rutina utilizarán el release nuevo. La última parte de este número marca los
releases intermedios cuando se ha realizado un cambio menor o un arreglo.

138 Guía del desarrollador de Server Job


Si crea una definición de una rutina, la primera parte del número de versión se establecerá de acuerdo
con la versión de InfoSphere DataStage que utilice. Puede editar el resto del número para especificar el
nivel del release. Pulse la parte del número que desee cambiar y entre un número directamente o
utilice el botón de flecha para incrementar el valor.
v Copyright. Información de copyright.

Página de argumentos
Los nombres de rutina predeterminados y si puede añadir o suprimir argumentos dependerá del tipo de
rutina que esté editando:
v Subrutinas anteriores/posteriores. Los nombres de los argumentos son ArgEntrada y Código de error.
Puede editar los nombres y las descripciones de los argumentos pero no puede añadir ni suprimir
argumentos.
v Funciones de transformación y funciones de UniVerse personalizadas. De forma predeterminada,
tienen un argumento denominado Arg1. Puede editar nombres y descripciones de argumentos y añadir
y suprimir argumentos. Como mínimo tiene que haber un argumento, pero no más de 255.

Página de códigos
La página Código se utiliza para ver o grabar el código para la rutina. La barra de herramientas contiene
botones para cortar, copiar, pegar y formatear códigos, así como para activar Buscar (y Reemplazar). La
parte principal de esta página consta de un recuadro de texto con varias líneas con barras de
desplazamiento. Para obtener más información sobre cómo utilizar esta página, consulte “Introducción de
código” en la página 140.

Nota: Esta página no estará disponible si ha seleccionado Función de UniVerse personalizada en la


página General.

Página Dependencias
La página Dependencias permite entrar cualquier función o rutina catalogada de forma local o global que
vaya a utilizar en la rutina que está definiendo. Así también se puede garantizar, que cuando empaquete
cualquier trabajo utilizando esta rutina para desplegarla en otro sistema, todas las dependencias se
incluirán en el paquete. La información necesaria es la siguiente:
v Tipo. El tipo de elemento sobre el que depende la rutina. Seleccione una de las opciones siguientes:
– Local. Funciones y subrutinas BASIC de IBM InfoSphere DataStage catalogadas localmente.
– Global. Funciones y subrutinas BASIC de InfoSphere DataStage catalogadas globalmente.
– Archivo. Un archivo estándar.
– ActiveX. Un objeto ActiveX (OLE) (no disponible en sistemas basados en UNIX).
– Servicio web. Una operación de servicio web.
v Nombre. Nombre de la función o de la rutina. El nombre necesario depende del tipo de dependencia:
– Local. Nombre del catálogo.
– Global. Nombre del catálogo.
– Archivo. Nombre del archivo.
– ActiveX. La entrada Nombre actualmente no es relevante para los objetos ActiveX. Entre algo
significativo para usted (los objetos ActiveX se identifican por el campo Ubicación).
– Servicio web. Nombre de la operación de servicio web.
v Ubicación. Ubicación de la dependencia. Para una operación de servicio web, es un URL. Esta
ubicación puede ser una vía de acceso absoluta, pero es recomendable especificar una vía de acceso
relativa utilizando las siguientes variables de entorno:
%SERVERENGINE% - directorio de la cuenta del motor de servidor (normalmente
C:\IBM\InformationServer\Server\DSEngine).

Capítulo 6. Programación en IBM InfoSphere DataStage 139


%PROJECT% - Directorio del proyecto Current.
%SYSTEM% - directorio del sistema en Windows o /usr/lib en UNIX.
Para examinar la ubicación, efectúe una doble pulsación para abrir la ventana Seleccionar desde
servidor. (Esta ventana no está disponible para los elementos locales catalogados). No puede navegar al
directorio padre de una variable de entorno.
Cuando examina la ubicación de un archivo en un servidor UNIX, hay una entrada denominada Root
en la lista Ubicaciones básicas.

Creación de una rutina


Para crear una rutina nueva:
1. Abra el recuadro de diálogo Rutina de servidor de la siguiente manera:
v Seleccione Archivo → Nuevo en el menú principal, o pulse el botón Nuevo en la barra de
herramientas. Aparecerá el recuadro de diálogo Nuevo. Pulse la carpeta Rutinas y seleccione el
icono Rutina de servidor.
v Pulse con el botón derecho del ratón sobre Rutinas en el árbol de repositorio y seleccione Nueva →
Rutina de servidor en el menú de atajos.
2. En la página General, escriba el nombre de la función o subrutina en el campo Nombre de rutina. No
puede coincidir con otro nombre de función BASIC.
3. Elija el tipo de rutina que desea crear en la lista Tipo. Existen tres opciones:
v Función de transformación. Seleccione esta opción si desea crear una rutina para la definición de
una transformación.
v Subrutina anterior/posterior. Seleccione esta opción si desea crear una rutina para una subrutina
anterior a la etapa o posterior a la etapa o una subrutina anterior al trabajo o posterior al trabajo.
v Función de UniVerse personalizada. Seleccione esta opción si desea hacer referencia a una rutina
externa, en lugar de definir una en este recuadro diálogo. Si selecciona esta opción, la página
Código no estará disponible.
4. De forma opcional, puede entrar una descripción breve de la rutina en el campo Descripción breve.
5. De forma opcional, puede entrar una descripción más detallada de la rutina en el campo Descripción
detallada.

Cuando complete esta página, puede especificar información del creador en la página Creador,
información de argumentos en la página Argumentos y detalles de las dependencias en la página
Dependencias. A continuación, debe especificar su código en la página Código.

Introducción de código
Puede entrar o editar códigos para una rutina en la página Código, en el recuadro de diálogo Rutina de
Servidor.

El primer campo de esta página muestra el nombre de la rutina y los nombres del argumento. Si desea
cambiar estas propiedades, deberá editar los campos en las páginas General y Argumentos.

El parte principal de esta página contiene un recuadro de entrada de texto de varias líneas, en el que
deberá entrar su código. Para entrar el código, pulse el recuadro y empiece a escribir. Puede utilizar las
siguientes funciones de edición estándar de Windows en este recuadro de texto:
v Suprimir utilizando la tecla Supr
v Cortar utilizando Control-X
v Copiar utilizando Control-C
v Pegar utilizando Control-V
v Ir al final de la línea utilizando la tecla Fin

140 Guía del desarrollador de Server Job


v Ir al principio de la línea utilizando la tecla Inicio
v Seleccione texto pulsando y arrastrando o efectuando una doble pulsación

Algunas de estas funciones de edición se incluyen en un menú de atajos que se puede visualizar
pulsando el botón derecho del ratón. También puede cortar y pegar códigos utilizando los botones de la
barra de herramientas.

Su código sólo debe contener funciones y sentencias BASIC soportadas por IBM InfoSphere DataStage. Si
no está seguro de las funciones y de las sentencias que se soportan o de la sintaxis apropiada que debe
utilizar, consulte Capítulo 7, “Programación BASIC”, en la página 147 para obtener una lista completa de
las funciones BASIC de InfoSphere DataStage soportadas.

Si el soporte multilingüístico está habilitado, podrá utilizar caracteres no ingleses en las siguientes
circunstancias:
v En comentarios
v En datos de serie (es decir, en series incluidas entre comillas)

El uso de caracteres no ingleses en cualquier otro lugar provocará errores de compilación.

Si desea formatear su código, pulse el botón Formatear de la barra de herramientas.

El último campo de esta página muestra la sentencia de retorno para la función o la subrutina. Este
campo no se puede editar.

Cómo guardar códigos


Cuando termine de introducir o de editar el código, debe guardarse la rutina. Una rutina no se puede
compilar ni comprobar si no se ha guardado. Para guardar una rutina, pulse Guardar en el recuadro de
diálogo Rutina de Servidor. Las propiedades de la rutina (nombre, descripción, número de argumentos e
información sobre el autor) y el código asociado se guardan en el repositorio.

Código de compilación
Una vez haya guardado la rutina, deberá compilarla. Para compilar una rutina, pulse Compilar en el
recuadro de diálogo Rutina de servidor. Si la rutina se compila satisfactoriamente, aparece un recuadro de
mensaje. Pulse Aceptar para acusar la recepción del mensaje. La rutina se marca como "creada" en el
repositorio y está disponible para ser utilizada. Si la rutina es una Función de transformación, ésta se
visualiza en la lista de funciones disponibles cuando se edita una transformación. Si la rutina es una
Subrutina anterior/posterior, aparece en lista de las subrutinas disponibles cuando se edita una etapa
Aggregator, Transformer o suplementaria, o se definen propiedades del trabajo. Si la rutina no puede
compilarse, se muestran los errores generados.

Antes de empezar a investigar la causa del error, se recomienda mover la ventana Salida de compilación
al lado o debajo del recuadro de diálogo Rutina de servidor, ya que necesita ver ambas ventanas para
solucionar el error.

Para solucionar el error, efectúe una doble pulsación en la ventana Salida de la compilación. IBM
InfoSphere DataStage intenta encontrar la línea correspondiente del código que ha causado el error y lo
resalta en el recuadro de diálogo Rutina de servidor. Debe editar el código para eliminar todas las
sentencias incorrectas o para corregir posibles errores sintácticos.

Si el soporte multilingüístico está habilitado, busque múltiples signos interrogantes en la ventana Salida
de compilación. Normalmente indica que se ha producido un error en la correlación de juego de
caracteres.

Capítulo 6. Programación en IBM InfoSphere DataStage 141


Cuando haya modificado su código, pulse Guardar y, a continuación, Compilar. Si es necesario, prosiga
solucionando cualquier error que se haya podido producir hasta que la rutina se compile de forma
satisfactoria.

Cuando la rutina se haya compilado, puede utilizarla en otras áreas de InfoSphere DataStage o
comprobarla. Consulte “Comprobación de una rutina” para obtener más información.

Comprobación de una rutina


Antes de utilizar una rutina compilada, puede comprobarla utilizando el botón Probar en el recuadro de
diálogo Rutina de servidor. El botón Probar se activa si la rutina se ha compilado de forma satisfactoria.

Nota: El botón Probar no está disponible para una Subrutina anterior/posterior. Las rutinas de este tipo
no se pueden comprobar de forma aislada y deben ejecutarse como parte de un trabajo en ejecución.

Si pulsa Probar, aparecerá el recuadro de diálogo Probar rutina. Este recuadro de diálogo contiene una
cuadrícula y botones. La cuadrícula tiene una columna para cada argumento y una para el resultado de
la comprobación.

Puede añadir y editar filas en la cuadrícula para especificar valores para distintos casos de prueba. Para
obtener más información sobre cómo utilizar y editar una cuadrícula, consulte IBM InfoSphere DataStage
and QualityStage Designer Client Guide.

Para ejecutar una prueba con un conjunto de valores seleccionado, pulse en cualquier parte de la fila que
desea utilizar y pulse Ejecutar. Si desea ejecutar pruebas utilizando todos los valores de prueba, pulse
Ejecutar todos. La columna Resultado... se llena conforme se va completando cada prueba.

Para ver más detalles sobre una prueba en concreto, efectúe una doble pulsación sobre la celda
Resultado... de la prueba que desee ver. Se abre la ventana Salida de prueba, mostrando todos los
resultados de la prueba. Pulse Cerrar para cerrar esta ventana.

Si desea suprimir un conjunto de valores de prueba, pulse en cualquier parte de la fila que desea
eliminar y pulse Suprimir o elija Suprimir fila en el menú de atajos.

Cuando haya finalizado de probar la rutina, pulse Cerrar para cerrar el recuadro de diálogo Probar
rutina. Todos los valores de prueba que haya entrado se guardarán cuando cierre el recuadro de diálogo.

Utilización de Buscar y sustituir


Si desea buscar o sustituir un texto específico en el código, puede utilizar Buscar y Sustituir. Para iniciar
Buscar, pulse el botón Buscar en la barra de herramientas de la página Código. Aparecerá el recuadro de
diálogo Buscar.

Este recuadro de diálogo tiene los campos, opciones y botones siguientes:


v Texto de búsqueda. Contiene el texto que desea buscar. Especifique el texto correspondiente en este
campo. Si el texto estaba resaltado en el código antes de seleccionar Buscar, este campo muestra el
texto resaltado.
v Coincidencia de mayúsculas y minúsculas. Especifica si desea realizar una búsqueda en la que
coincidan mayúsculas y minúsculas. Este recuadro de selección está deseleccionado de forma
predeterminada. Seleccione este recuadro de selección para realizar una búsqueda que distinga entre
mayúsculas y minúsculas.
v Arriba y Abajo. Especifica la dirección de la búsqueda. El valor predeterminado es Abajo. Pulse
Arriba para realizar una búsqueda en la dirección opuesta.
v Buscar siguiente. Inicia la búsqueda. No estará disponible hasta que especifique el texto de búsqueda.
Siga pulsando Buscar siguiente hasta encontrar todas las apariciones del texto.

142 Guía del desarrollador de Server Job


v Cancelar. Cierra el recuadro de diálogo Buscar.
v Sustituir... Muestra el recuadro de diálogo Sustituir. Para obtener más información, consulte
“Sustitución de texto”.
v Ayuda. Invoca al sistema de Ayuda.

Sustitución de texto
Si desea sustituir texto en el código con una serie de texto alternativa, pulse Sustituir... en el recuadro de
diálogo Buscar. Cuando pulsa este botón, el recuadro de diálogo Buscar cambia al recuadro de diálogo
Sustituir.

Este recuadro de diálogo tiene los campos, opciones y botones siguientes:


v Texto de búsqueda. Contiene el texto que desea buscar y sustituir.
v Sustituir por. Contiene el texto que desea utilizar en lugar del texto de búsqueda.
v Coincidencia de mayúsculas y minúsculas. Especifica si desea realizar una búsqueda en la que
coincidan mayúsculas y minúsculas. Este recuadro de selección está deseleccionado de forma
predeterminada. Seleccione este recuadro de selección para realizar una búsqueda que distinga entre
mayúsculas y minúsculas.
v Arriba y Abajo. Especifica la dirección de la búsqueda y sustitución. El valor predeterminado es
Abajo. Pulse Arriba para realizar una búsqueda en la dirección opuesta.
v Buscar siguiente. Inicia la búsqueda y sustitución. Este botón no estará disponible hasta que
especifique el texto de búsqueda. Siga pulsando Buscar siguiente hasta encontrar todas las apariciones
del texto.
v Cancelar. Cierra el recuadro de diálogo Sustituir.
v Sustituir. Sustituye el texto de búsqueda por el texto alternativo.
v Sustituir todo. Realiza una sustitución global de todas las instancias del texto de búsqueda.
v Ayuda. Invoca al sistema de Ayuda.

Visualización y edición de una rutina


Puede ver y editar las funciones y subrutinas grabadas por el usuario en el proyecto. Para ver o
modificar una función o subrutina, selecciónela en el árbol de repositorio y efectúe uno de los pasos
siguientes:
v Elija Repositorio → Propiedades.
v Seleccione Propiedades en el menú de atajos.
v Efectúe una doble pulsación en el árbol de repositorio.

Aparecerá el recuadro de diálogo Rutina de Servidor. Puede editar cualquier campo u opción en
cualquiera de las páginas. Si efectúa cambios, deberá guardar, compilar y comprobar el código antes de
cerrar el recuadro de diálogo Rutina de Servidor. Consulte “Cómo guardar códigos” en la página 141
para obtener más información.

Cómo copiar una rutina


Para copiar una rutina existente, selecciónela en el árbol de repositorio y efectúe uno de los pasos
siguientes:
v Elija Repositorio → Crear copia.
v Seleccione Crear copia en el menú de atajos.

Capítulo 6. Programación en IBM InfoSphere DataStage 143


La rutina se copia y la nueva rutina se crea en la misma carpeta en el árbol de repositorio. De forma
predeterminada, el nombre de la copia se denomina CopyOfXXX, donde XXX es el nombre de la rutina
seleccionada. Aparece un recuadro de edición que permite renombrar la copia inmediatamente. Se debe
compilar la nueva rutina antes de utilizarla.

Cómo renombrar una rutina


Puede renombrar cualquiera de las rutinas existentes en el repositorio. Para renombrar un elemento,
selecciónelo en el árbol de repositorio y efectúe uno de los pasos siguientes:
v Vuelva a pulsar la rutina. Aparece un recuadro de edición y el usuario puede entrar un nombre
diferente o editar uno ya existente. Guarde el nombre nuevo pulsando Intro o pulsando fuera del
recuadro de edición.
v Elija Repositorio → Renombrar. Aparece un recuadro de edición y el usuario puede entrar un nombre
diferente o editar uno ya existente. Guarde el nombre nuevo pulsando Intro o pulsando fuera del
recuadro de edición.
v Seleccione Renombrar en el menú de atajos. Aparece un recuadro de edición y el usuario puede entrar
un nombre diferente o editar uno ya existente. Guarde el nombre nuevo pulsando Intro o pulsando
fuera del recuadro de edición.
v Efectúe una doble pulsación sobre la rutina. Aparece el recuadro de diálogo Rutina de servidor y
puede editar el campo Nombre de rutina. Pulse Guardar y, a continuación, Cerrar.

Definición de transformaciones personalizadas


Las transformaciones se utilizan en la etapa Transformer para convertir los datos a un formato que desee
utilizar en la despensa de datos final. Cada transformación especifica la función BASIC utilizada para
convertir los datos de un tipo a otro. Con IBM InfoSphere DataStage se proporciona varias
transformaciones incorporadas, que se describen en InfoSphere DataStage Programmer's Guide.

Si las transformaciones incorporadas no son adecuadas o si desea que una transformación específica actúe
sobre un elemento de datos específico, puede crear transformaciones personalizadas en el cliente del
Diseñador. La ventaja de crear una transformación personalizada con sólo entrar la expresión necesaria en
el editor de transformador es tal, que una vez definida, la transformación está disponible para ser
utilizada desde cualquier sitio del proyecto. También se puede exportar fácilmente a otros proyectos de
InfoSphere DataStage.

Para proporcionar aún más flexibilidad, también puede definir sus propias rutinas y funciones
personalizadas a partir de las cuales se crearán transformaciones personalizadas. Hay tres modos de
hacerlo:
v Entrar el código en InfoSphere DataStage (utilizando las funciones BASIC). Consulte “Creación de una
rutina” en la página 140.
v Crear una referencia a una rutina catalogada externamente. Consulte “Creación de una rutina” en la
página 140.
v Importar funciones ActiveX (OLE) externas. Consulte “Importación de funciones ActiveX (OLE)
externas” en la página 146.

Para crear una transformación personalizada:


1. En el árbol de repositorio, seleccione la carpeta Transformaciones y efectúe uno de los siguientes
pasos:
v Seleccione Archivo → Nuevo en el menú del cliente del Diseñador, o pulse el botón Nuevo en la
barra de herramientas. Aparecerá el recuadro de diálogo Nuevo. Pulse la carpeta Otros y seleccione
Transformación.

144 Guía del desarrollador de Server Job


v Pulse con el botón derecho del ratón y seleccione Nuevo → Otros → Transformación en el menú de
atajos.
Aparecerá el recuadro de diálogo Transformación. Este recuadro de diálogo tiene dos páginas:
v General. Se visualiza de forma predeterminada. Contiene información general sobre la
transformación.
v Detalles. Permite especificar elementos de datos de origen y de destino, la función y los
argumentos que se deben utilizar.
2. Escriba el nombre de la transformación en el campo Nombre de la transformación. El nombre que se
entre aquí debe ser exclusivo; dos transformaciones no pueden tener el mismo nombre. Tenga también
en cuenta, que la transformación no debe tener el mismo nombre que una función BASIC existente; si
lo tiene, se llamará a la función en lugar de la transformación cuando se ejecute el trabajo. Consulte
“Reglas de prioridad” en la página 137 para ver las consideraciones sobre los nombres de
componente.
3. De forma opcional, puede escribir una descripción breve de la transformación en el campo
Descripción breve.
4. De forma opcional, puede escribir una descripción detallada de la transformación en el campo
Descripción detallada. Una vez completada esta página, puede especificar cómo convertir los datos.
5. Pulse el separador Detalles.
6. De forma opcional, elija el elemento de datos que desee como elemento de datos de destino a parte de
la lista Elemento de datos de destino. (La utilización de un elemento de datos de origen y de destino
permite aplicar una escritura de datos más estricta a su transformación. Consulte IBM InfoSphere
DataStage and QualityStage Designer Client Guide para ver una descripción de los elementos de datos).
7. Especifique argumentos de origen para la transformación en la cuadrícula Argumento visible. Escriba
el nombre del argumento y, opcionalmente, elija el elemento de datos correspondiente de la lista.
Utilice el editor de expresiones del campo Definición para entrar una expresión que defina cómo
debe comportarse la transformación. El Editor de expresiones se describe en “Editor de expresiones de
IBM InfoSphere DataStage” en la página 122. El menú Sugerir operando es ligeramente diferente
cuando se utiliza el editor de expresiones para definir transformaciones personalizadas y proporciona
mandatos que resultan útiles al definir transformaciones.

Menú Sugerir operando: definición de transformaciones personalizadas


Macro de DS...
Función de DS...
Constante de DS...
Rutina de DS...
Argumento de transformación...
Variable del sistema...
Serie...
Función...
() Paréntesis
If Then Else

8. Pulse Aceptar. Aparecerá el recuadro de diálogo Guardar transformación como, que permite
seleccionar la carpeta en la que se guardará en el árbol de repositorio. Si es necesario, también puede
cambiar el nombre de la transformación. Pulse Guardar para guardar la transformación y cierre el
recuadro de diálogo Transformación.

A continuación, puede utilizar la nueva transformación desde dentro del Editor de transformador.

Capítulo 6. Programación en IBM InfoSphere DataStage 145


Nota: Si se ha habilitado el soporte multilingüístico, evite utilizar las funciones Iconv y Oconv integradas
para correlacionar datos a no ser que sea perfectamente consciente de las consecuencias de sus acciones.

Funciones ActiveX (OLE) externas


IBM InfoSphere DataStage ofrece la posibilidad de llamar a las funciones ActiveX (OLE) externas que se
han instalado en el sistema donde reside la capa de motor. Estas funciones pueden utilizarse
posteriormente cuando defina transformaciones personalizadas.

Para utilizar este recurso, necesita un servidor de automatización que exponga las funciones a través de
la interfaz IDispatch y que tenga una biblioteca de tipos asociados. Para ello, puede utilizar varias
herramientas, incluido Visual Basic.

El primer paso para utilizar las funciones externas es importarlas al repositorio. La acción de importar
una función externa crea una rutina de InfoSphere DataStage que contiene código que invoca la función
externa. El código utiliza una función BASIC de InfoSphere DataStage que sólo acepta determinados tipos
de datos. Estos tipos de datos se definen en el archivo DSOLETYPES.H en el directorio dsinclude de cada
proyecto.

Una vez importadas, podrá llamar a las funciones cuando defina una transformación personalizada.

Nota: Este recurso sólo está disponible en los servidores Windows.

Importación de funciones ActiveX (OLE) externas


Para importar funciones ActiveX (OLE):
1. En el cliente del Diseñador, seleccione Importar → Definiciones de la función externa.... Se abre el
asistente para Importar definiciones de funciones de transformación solicitando que se facilite el
nombre de la vía de acceso del archivo que contiene las transformaciones que se deben importar.
Normalmente se trata de un archivo DDL que debe haberse instalado en el sistema donde reside la
capa de motor.
2. Entre el nombre de la vía de acceso o localícelo y, a continuación, pulse Siguiente. El asistente solicita
el archivo DDL especificado para establecer las clases de automatización que contiene y las presenta
en una lista.
3. Seleccione una clase de automatización y pulse Siguiente. El asistente interroga a la clase de
automatización para obtener detalles de las funciones adecuadas que soporta. A continuación, las
visualiza.
4. Seleccione las funciones que desea importar. Pulse Siguiente. El asistente mostrará los detalles de la
importación propuesta.
5. Si está satisfecho con los detalles, pulse Importar. IBM InfoSphere DataStage empezará a generar las
rutinas necesarias y mostrará una barra de progreso. Al finalizar, se abre una ventana de resumen.
6. Pulse Finalizar para salir del asistente.

146 Guía del desarrollador de Server Job


Capítulo 7. Programación BASIC
Estos temas constituyen una guía de referencia del programador sobre el lenguaje de programación
BASIC de IBM InfoSphere DataStage.

El lenguaje BASIC de InfoSphere DataStage que se describe a continuación es el subconjunto de los


mandatos BASIC que se utilizan con más frecuencia en InfoSphere DataStage. No obstante, no está
limitado a las funciones que aquí se describen, sino que puede utilizar el rango completo de mandatos
BASIC de InfoSphere DataStage que se describen en IBM InfoSphere DataStage BASIC Reference Guide,
incluidas las matrices dinámicas. No obstante, deberá prestar especial atención a algunas áreas. Los
principales puntos a tener en cuenta son:
v No utilice mandatos, funciones, sentencias o subrutinas que requieran una entrada del usuario.
v Para detener un trabajo en ejecución, utilice la subrutina DSLogFatal. Si utiliza una sentencia Stop o
Abort, puede que el trabajo quede en una condición irrecuperable.
v No utilice la sentencia Print. En su lugar, utilice una llamada a DSLogInfo para grabar en el archivo
de registro de trabajo.
v No utilice la sentencia Execute para ejecutar mandatos del motor de servidor. En su lugar, utilice una
llamada a DSExecute.

La publicación IBM InfoSphere DataStage BASIC Reference Guide íntegra se proporciona en formato PDF
con InfoSphere DataStage.

Convenios de sintaxis
Las descripciones de sintaxis utilizan los siguientes convenios:
Convenio
Uso
Negrita
El tipo negrita indica funciones, sentencias, subrutinas, opciones, paréntesis, comas, etc., que
deben especificarse exactamente tal como aparecen.
Cursiva
La cursiva indica información variable que debe proporcionar como, por ejemplo, una expresión,
una serie de entrada, un nombre de variable o una lista de sentencias.
[] Los corchetes encierran elementos opcionales. No especifique estos corchetes.
[] Los corchetes con un tipo de letra cursiva y negrita deben especificarse como parte de la sintaxis.
{ Then | Else }
Dos palabras clave o cláusulas separadas por barras verticales y entre signos de llave indican que
puede elegir sólo una opción. No especifique los signos de llave ni la barra vertical.
... Los tres puntos indican que el último elemento de la sintaxis puede repetirse si es necesario.
@FM Marca de campo.
@IM Marca de elemento.
@SM Marca de subvalor.
@TM Marca de texto.
@VM Marca de valor.

© Copyright IBM Corp. 1997, 2010 147


El lenguaje BASIC
En esta sección se proporciona una visión general de los componentes fundamentales del lenguaje IBM
InfoSphere DataStage BASIC. Se describen las constantes, las variables, los tipos de datos y cómo se
combinan los datos con operadores aritméticos, de series, relacionales y lógicos para formar expresiones.

Constantes
Una constante es un valor que se fija durante la ejecución de un programa y puede reutilizarse en
distintos contextos. Una constante puede ser:
v Una serie de caracteres
v Una serie vacía
v Una serie numérica con formato de entero o coma flotante

Los caracteres ASCII del 0 al 10, y los caracteres del 251 al 255, inclusivos, no pueden incorporarse en las
constantes de tipo serie en los sistemas sin soporte multilingüístico (estos caracteres no pueden utilizarse
tampoco en los comentarios).

Variables
Las variables se utilizan para almacenar valores en la memoria temporalmente. Posteriormente podrá
utilizar los valores en varias operaciones.

Puede asignar un valor explícito a una variable, o asignarle el valor que es el resultado de las operaciones
efectuadas por el programa durante la ejecución. Las variables pueden cambiar de valor durante la
ejecución del programa. Al principio de la ejecución del programa, todas las variables están desasignadas.
Si se intenta emplear una variable desasignada, se genera un mensaje de error.

El valor de una variable puede ser:


v Ningún valor asignado
v Una serie
v Un entero o un número de coma flotante
v El valor nulo
v Una matriz dimensionada
v Una variable de archivo

IBM InfoSphere DataStage proporciona un conjunto de variables del sistema de sólo lectura que
almacenan datos del sistema como, por ejemplo, la fecha actual, la hora, el nombre de la vía de acceso,
etc. Puede acceder a ellas desde una rutina o una transformación.

Matrices dimensionadas
Una matriz es una variable de varios valores a la que se accede desde un nombre individual. Cada valor
es un elemento de la matriz. IBM InfoSphere DataStage utiliza dos tipos de matrices dimensionadas:
v Matrices unidimensionales o vectores
v Matrices bidimensionales o matrices

Los vectores tienen elementos almacenados en la memoria en una fila individual. Cada elemento está
indexado, es decir, tiene un número secuencial asignado. El índice del primer elemento es 1. Para
especificar un elemento del vector, utilice el nombre de variable seguido del índice del elemento entre
paréntesis. El índice puede ser una constante o una expresión, por ejemplo:
A(1) ;*especifica el primer elemento de la variable A
Cost(n + 1) ;* especifica una expresión para calcular el índice

148 Guía del desarrollador de Server Job


Las matrices tienen elementos almacenados en varias filas. Para especificar un elemento de una matriz,
debe proporcionar dos índices: el número de fila y el número de columna. Por ejemplo, en una matriz
con cuatro columnas y tres filas, los elementos se especifican utilizando estos índices:
1,1 1,2 1,3 1,4
2,1 2,2 2,3 2,4
3,1 3,2 3,3 3,4

La especificación completa utiliza el nombre de variable seguido de los índices entre paréntesis. Por
ejemplo:
Obj(3,1)
Widget(7,17)

Los vectores se tratan como si fueran matrices con una segunda dimensión 1. COST(35) y COST(35,1)
significan lo mismo.

Las dimensiones de una matriz se definen con la sentencia Dimension. También puede redimensionar
una matriz utilizando Dimension.

Expresiones
Una expresión define un valor. El valor se evalúa en el tiempo de ejecución. El resultado puede utilizarse
como entrada de una función, asignarse a una variable, etc. Una expresión simple puede constar de:
v Una serie o una constante numérica, por ejemplo, "porcentaje" o "42"
v Un nombre de variable
v Una función
v Una función definida por el usuario

Una expresión compleja puede contener una combinación de constantes, variables, operadores, funciones
y otras expresiones.

Funciones
Una función realiza manipulaciones matemáticas o de serie en los argumentos que se proporcionan y
devuelve un valor. Algunas funciones no tienen argumentos; la mayoría tienen uno o varios. Los
argumentos van siempre entre paréntesis, separados por comas, tal como se muestra en la sintaxis
general:
FunctionName (argumento, argumento)

Una expresión puede contener una función. Un argumento en una función puede ser una expresión que
incluya una función. Las funciones pueden realizar tareas:
v En las series numéricas, por ejemplo, cuando se calcula el seno de un ángulo que se pasa como
argumento (función Sin)
v En las series de caracteres, por ejemplo, cuando se suprimen los espacios en blanco y las tabulaciones
excedentes (función Trim)

Las funciones de transformación en IBM InfoSphere DataStage deben tener al menos un argumento que
contenga el valor de entrada que se va a transformar. Una definición de transformación puede utilizar
otros argumentos opcionales para seleccionar una determinada vía de acceso mediante la función de
transformación, si es necesario. Esto significa que una función individual puede encapsular la lógica de
varias transformaciones relacionadas. La función de transformación debe devolver el valor transformado
utilizando una sentencia Return (valor).

Sentencias
Las sentencias se utilizan para:

Capítulo 7. Programación BASIC 149


v Cambiar el control de programa. Las sentencias se ejecutan en el orden en el que se especifican, a
menos que una sentencia de control cambie el orden, por ejemplo, invocando una subrutina o
definiendo un bucle.
v Asignar un valor a una variable.
v Especificar el valor de una constante.
v Añadir comentarios a los programas.

Etiquetas de sentencias
Una etiqueta de sentencia es un identificador exclusivo de una línea de código. Una etiqueta de sentencia
consta de una serie de hasta 64 caracteres seguida de un carácter de dos puntos. La serie puede contener
caracteres alfanuméricos, puntos, signos de dólar y signos de porcentaje. Las etiquetas de sentencia son
sensibles a las mayúsculas y minúsculas. Una etiqueta de sentencia puede colocarse delante de una
sentencia o en su propia línea.

Subrutinas
Una subrutina es un conjunto autocontenido de instrucciones que realizan una tarea concreta. Una
subrutina puede tomar dos formas:
v Una subrutina incorporada está contenida en el programa y se accede a ella con una sentencia GoSub.
v Una subrutina externa se almacena en un archivo aparte y se accede a ella con una sentencia Call.

En términos generales, utilice una subrutina incorporada para el código que desea invocar muchas veces
desde el mismo programa; utilice una subrutina externa para el código que desee invocar desde varios
programas diferentes.

Hay varias subrutinas BASIC que son específicas de IBM InfoSphere DataStage. Sus nombres empiezan
por DS y se describen en “Subrutinas BASIC de IBM InfoSphere DataStage especiales”.

InfoSphere DataStage también se proporciona con varias subrutinas anteriores/posteriores, que se


ejecutan antes o después de un trabajo o una etapa activa. Puede definir sus propias subrutinas
anteriores/posteriores utilizando el cliente del Diseñador. Las subrutinas anteriores/posteriores deben
tener dos argumentos. El primero contiene el valor que especifica el usuario cuando se invoca la
subrutina desde un trabajo o una etapa; el segundo es el código de respuesta de la rutina. El código de
respuesta es 0 si no hay ningún error. Los demás valores indican que el trabajo se ha detenido.

Subrutinas BASIC de IBM InfoSphere DataStage especiales


InfoSphere DataStage proporciona algunas subrutinas de InfoSphere DataStage especiales para utilizarlas
en las subrutinas anteriores/posteriores o las transformaciones personalizadas. Ahora puede:
v Registrar sucesos en el archivo de registro del trabajo utilizando DSLogInfo, DSLogWarn, DSLogFatal
y DSTransformError
v Ejecutar mandatos del motor de servidor o de DOS utilizando DSExecute

Todas las subrutinas se invocan utilizando la sentencia Call.

Operadores
Un operador realiza una operación en una o varias expresiones (los operandos). Los operadores se
dividen en las categorías siguientes:
v Operadores aritméticos
v Operadores de serie para:
– Concatenar series con Cats o :
– Extraer subseries con [ ]
v Operadores relacionales
v Operadores de coincidencia de patrón

150 Guía del desarrollador de Server Job


v Operador If
v Operadores lógicos
v Operadores de asignación

Operadores aritméticos
Los operadores aritméticos combinan operandos mediante sumas, restas, etc. Las expresiones resultantes
pueden combinarse también con otras expresiones. Los operandos deben ser expresiones numéricas. Las
expresiones no numéricas se tratan como 0 y generan un aviso de tiempo de ejecución. Una variable de
serie de caracteres que contiene únicamente caracteres numéricos cuenta como una expresión numérica.
Por ejemplo, la siguiente expresión da como resultado el valor 66:
"22" + 44

En esta tabla se muestran los operadores aritméticos por orden de evaluación:

Operador Operación Ejemplo


- Negación -x
^ Exponenciación x^y
* Multiplicación x*y
/ División x/y
+ Suma x+y
- Resta x-y

Puede cambiar el orden de evaluación utilizando paréntesis. Las expresiones escritas entre paréntesis se
evalúan antes que las de fuera de los paréntesis.

Por ejemplo, esta expresión se evalúa como 112 + 6 + 2, o 120:


(14 * 8) + 12 / 2 + 2

Esta expresión se evalúa como 14 * 20 / 4, o 280 / 4, o 70:


14 * (8 + 12) / (2 + 2)

El resultado de una operación aritmética que incluya el valor nulo es un valor nulo.

Concatenación de series
El operador de concatenación, : o Cats, enlaza expresiones de serie para formar expresiones de serie
compuestas. Por ejemplo, si x tiene el valor Tarzan, esta expresión:
"Hello. " : "My Name is " : X : ". What’s yours?"

se evalúa en:
"Hello. My name is Tarzan. What’s yours?"

Si hay distintas operaciones de concatenación, estas se ejecutan normalmente de izquierda a derecha.


Puede cambiar el orden de evaluación utilizando paréntesis. Las expresiones entre paréntesis se evalúan
antes que las operaciones situadas fuera de los paréntesis.

Los operandos numéricos en las expresiones concatenadas se consideran valores de serie. Los operadores
aritméticos tienen una mayor prioridad que el operador de concatenación. Por ejemplo:
"There are " : "2" + "2" : "3" : " windows."

tiene el valor:
"There are 43 windows."

Capítulo 7. Programación BASIC 151


El resultado de cualquier operación de serie que comprenda el valor nulo es un valor nulo. Pero si se
hace referencia al valor nulo como una serie de caracteres que contiene únicamente el valor nulo (es decir,
como la serie CHAR(128)), este se considera información de serie de caracteres. Por ejemplo, esta
expresión se evalúa como valor nulo:
"A" : @NULL ;*concatenate A with @NULL system variable

Pero esta expresión:


"A" : @NULL.STR ;*concatenate A with @NULLSTR system variable

se evalúa en "A<CHAR128>".

Extracción de subseries
Una subserie es una serie dentro de una serie. Por ejemplo, tab y abla son ambas subseries de tabla.
Puede utilizar el operador [ ] para especificar una subserie utilizando esta sintaxis:
serie[ [
inicio, ] longitud ]

serie es la serie que contiene la subserie.

inicio es un número que especifica dónde se inicia la subserie. El primer carácter de la serie cuenta como
1. Si inicio es 0 o un número negativo, se supone que la posición inicial es 1. Si omite inicio, la posición
inicial se calcula según la fórmula siguiente:
longitud.serie - longitud.subserie + 1
v Subseries finales. Puede especificar una subserie final omitiendo inicio en la sintaxis. Por ejemplo, esta
especificación:
"1234567890" [5]
devuelve la subserie:
67890
v Subseries delimitadas. Puede extraer una subserie delimitada con esta sintaxis:
serie [
delimitador, instancia, campos
]
– serie es la serie que contiene la subserie.
– delimitador especifica el carácter que delimita la subserie.
– instancia especifica la instancia del delimitador donde se inicia la extracción.
– campos especifica el número de campos que se van a extraer.
Los delimitadores que marcan el inicio y el final de la extracción no se devuelven, pero si extrae
más de una serie, se devuelven los delimitadores provisionales. Esta sintaxis funciona de la misma
forma que la función Field.
v Asignación de una subserie a una variable. Todas las sintaxis de subserie se pueden utilizar junto con
el operador = para sustituir el valor que normalmente devuelve el operador [ ] por el valor asignado a
la variable. Por ejemplo:
A="12345"
A[3]=1212
devuelve el resultado 121212.
Esta sintaxis funciona de la misma forma que la función FieldStore.

Operadores relacionales
Los operadores relacionales comparan las series u otros datos. El resultado de la comparación puede ser
true ( 1 ) o false ( 0 ). Esta tabla muestra los operadores relacionales que puede utilizar:

152 Guía del desarrollador de Server Job


Operador Relación Ejemplo
Eq o = Igualdad X=Y
Ne o # o >< o <> Desigualdad X # Y, X <> Y
Lt o < Menor que X<Y
Gt o > Mayor que X>Y
Le o <= o =< o #> Menor que o igual a X <= Y
Ge o >= o => o #< Mayor que o igual a X >= Y

Las operaciones aritméticas se ejecutan antes de los operadores relacionales de una expresión. Por
ejemplo, la expresión:
X + Y < (T - 1) / Z

es verdadera si el valor de X más Y es menor que el valor de T menos 1 dividido por Z.

Las series se comparan carácter a carácter. La serie con el código de carácter más alto se considera mayor.
Si todos los códigos de carácter son iguales, las series se consideran iguales.

Un espacio se evalúa como menor que 0. Una serie con los espacios en blanco iniciales y finales se
considera mayor que la misma serie sin los espacios en blanco.

Una serie vacía siempre se compara como una serie de caracteres. No es igual al valor numérico 0.

Si dos series contienen caracteres numéricos, se comparan numéricamente. Por ejemplo:


"22" < "44" ’

devuelve true.

Tenga cuidado si utiliza la notación de potencias. Por ejemplo:


"23" > "2E1"

devuelve true.

A continuación, se proporcionan ejemplos de comparaciones que se evalúan en true en ASCII de 7 bits


con los convenios de clasificación estándar:
"AA" < "AB"
"FILENAME" = "FILENAME"
"X&" > "X#"
"CL " > "CL"
"kg" > "KG"
"SMYTH" < "SMYTHE"
B$ < "9/14/99" ;* donde B$ = "8/14/99"

No puede utilizar operadores relacionales para probar si hay un valor nulo. En su lugar, utilice la función
IsNull.

Operadores de coincidencia de patrón


Los operaciones de coincidencia de patrón comparan una serie con un patrón de formato. Si el soporte
multilingüístico está habilitado, el resultado de una operación de coincidencia depende del valor de
entorno local actual de los convenios Ctype y Numeric. Los operadores de coincidencia de patrón tienen
la sintaxis siguiente:
serie
Match patrón

Capítulo 7. Programación BASIC 153


serie es la serie que se va a comparar. Si la serie es un valor nulo, la coincidencia es false y se devuelve 0.

patrón es el patrón de formato y puede ser uno de los códigos siguientes:


Este código...
Coincide con este tipo de serie...
... Cero o más caracteres de cualquier tipo.
0X Cero o más caracteres de cualquier tipo.
nX n caracteres de cualquier tipo.
0A Cero o más caracteres alfabéticos.
nA n caracteres alfabéticos.
0N Cero o más caracteres numéricos.
nN n caracteres numéricos.
'serie ' Texto exacto escrito entre comillas simples o dobles.

Puede especificar una coincidencia negativa añadiendo ~ (tilde) delante del código. Por ejemplo, ~ 4A
coincide con una serie que no contiene cuatro caracteres alfabéticos. Si n tiene más de nueve dígitos, se
utiliza como serie literal.

Si la serie coincide con el patrón, la comparación devuelve 1; de lo contrario, devuelve 0.

Puede especificar varios patrones separándolos con marcas de valor. Por ejemplo, la expresión siguiente
es verdadera si la dirección tiene 16 caracteres alfabéticos o 4 caracteres numéricos seguidos de 12
caracteres alfabéticos; de lo contrario, es falsa:
address Matches "16A":
CHAR(253): "4N12A"

Una serie vacía coincide con los patrones siguientes: "0A", "0X", "0N", "...", "", '' o \\.

Operadores If
Un operador If asigna un valor que cumple las condiciones especificadas. Tiene la sintaxis siguiente:
variable =
If condición Then expresión
Else expresión

variable es la variable que se asigna.

If condición define la condición que determina qué valor se asigna.

Then expresión define el valor que se asigna si la condición es true.

Else expresión define el valor que se asigna si la condición es false.

El operador If es la única forma de la construcción If...Then...Else que puede utilizarse en una expresión.

Tenga en cuenta que la cláusula Else es necesaria en los siguientes ejemplos:


* Devolver A o B dependiendo del valor
de Column1:
If Column1 > 100 Then "A" Else "B"
* Añadir 1 o 2 al valor en Column2 dependiendo de lo que haya en
* Column3, y devolverlo:
Column2 + (If Column3 Matches "A..." Then 1 Else 2)

154 Guía del desarrollador de Server Job


Operadores lógicos
Los datos numéricos, los datos de serie y el valor nulo pueden funcionar como datos lógicos:
v El valor numérico 0 es false; todos los demás valores numéricos son true.
v Una serie vacía es false; las demás series de caracteres son true.
v El valor nulo SQL no es true ni false. Tiene el valor lógico nulo.

Los operadores lógicos prueban estas condiciones. Los operadores lógicos disponibles son:
v And (o el equivalente &)
v Or (o el equivalente !)
v Not (invierte un valor lógico)

Estos son los factores que determinan la prioridad de los operadores en las operaciones lógicas:
v Las operaciones aritméticas y relacionales tienen preferencia sobre las operaciones lógicas.
v Las operaciones lógicas se evalúan de izquierda a derecha.
v Las sentencias And y las sentencias Or tienen una prioridad igual.
v En las cláusulas If...Then...Else, el valor lógico nulo utiliza la acción false.

Operadores de asignación
Los operadores de asignación asignan valores a las variables. Esta tabla muestra los operadores de
asignación y sus usos:

Operador Sintaxis Descripción


= variable = expresión Asigna el valor de la expresión a la
variable.
+= variable += expresión Suma el valor de la expresión al valor
de la variable y reasigna el resultado a
la variable.
-= variable - = expresión Resta el valor de la expresión del
valor de la variable y reasigna el
resultado a la variable.
:= variable := expresión Concatena el valor de la variable y el
valor de la expresión y reasigna el
resultado a la variable.

Este ejemplo muestra una secuencia de operaciones en la misma variable. La primera sentencia asigna el
valor 5 a la variable X.
X = 5

La siguiente sentencia añade 5 al valor de X, y es equivalente a X = X + 5. El valor de X es ahora 10.


X += 5

La última sentencia resta 3 del valor de X, y es equivalente a X = X - 3. El valor de X es ahora 7.


X -= 3

Este ejemplo concatena una serie con la variable y es equivale a X=X:Y. Si el valor de X es `con' y el valor
de Y es `catenate':
X := Y

el nuevo valor de X es `concatenate'.

Capítulo 7. Programación BASIC 155


Tipos de datos en las funciones y sentencias de BASIC
No es necesario especificar tipos de datos en las funciones y sentencias. Todos los datos se almacenan
internamente como series de caracteres, y los tipos de datos se determinan en el momento de la
ejecución, según su contexto. Hay cuatro tipos principales de datos:
v Series de caracteres. Pueden representar datos alfabéticos, numéricos o alfanuméricos como, por
ejemplo, una dirección. La longitud de la serie está limitada únicamente por la memoria disponible.
v Datos numéricos. Se almacenan como números de coma flotante o como enteros. En la mayor parte de
los sistemas, el rango va de 10-307 a 10+307 con 15 dígitos decimales de precisión.
v El valor nulo. Representa los datos cuyo valor es desconocido, tal como se define en SQL.
v Variables de archivo. Las asigna la sentencia OpenSeq y no pueden manipularse ni formatearse de
ninguna forma.

Series BASIC vacías y valores nulos


Una serie vacía es una serie de caracteres de longitud cero. Representa datos conocidos que no tienen
ningún valor. Especifique una serie vacía con dos comillas dobles o simples adyacentes, o dos barras
inclinadas invertidas. Por ejemplo:
’ ’ o " " o \\

El valor nulo representa unos datos de valor desconocido, tal como se define en SQL.

El valor nulo se representa externamente, según sea necesario, mediante una serie de caracteres formada
por el byte único Char(128). En el tiempo de ejecución, se le asigna un tipo de datos nulo. Los programas
pueden hacer referencia al valor nulo con la variable del sistema @NULL. Para probar si un valor es el
valor nulo, utilice la función IsNull.

Si especifica un valor nulo en una función o en otra operación, siempre se devuelve un valor nulo. Por
ejemplo, si concatena un valor de serie con una serie vacía, se devuelve el valor de serie pero, si
concatena un valor de serie con el valor nulo, se devuelve el valor nulo:
A = @NULL
B = ""
C = "JONES"
X = C:B
Y = C:A

El valor obtenido de X es "JONES", pero Y es un valor nulo.

Campos
En las funciones de IBM InfoSphere DataStage como, por ejemplo, Field o FieldStore, puede definir
campos especificando subseries delimitadas. Para determinar qué constituye un campo, tenga en cuenta
lo siguiente:
v Una subserie seguida de un delimitador es un campo.
v Si una serie empieza por un delimitador, InfoSphere DataStage supone que hay un campo que contiene
una serie vacía delante del delimitador.
v Si una subserie final no termina con un delimitador, InfoSphere DataStage supone que hay uno.

Por ejemplo, si utiliza la serie ABC con dos puntos como delimitador, InfoSphere DataStage genera tres o
cuatro campos, de la siguiente manera:

Ejemplo Número de campos Explicación


A:B:C: 3 Cada campo termina con un
delimitador.

156 Guía del desarrollador de Server Job


Ejemplo Número de campos Explicación
A:B:C 3 InfoSphere DataStage supone que
hay un delimitador final.
:A:B:C: 4 InfoSphere DataStage supone que
hay un campo que contiene una serie
vacía antes del primer delimitador.
:A:B:C 4 InfoSphere DataStage supone que
hay un campo que contiene una serie
vacía antes del primer delimitador y
que hay un delimitador final.

Palabras reservadas
Estas palabras están reservadas y no deben utilizarse como nombres de variable en una transformación o
una rutina:
v And
v Cat
v Else
v End
v Eq
v Ge
v Get
v Go
v GoSub
v GoTo
v Gt
v If
v Include
v Le
v Locked
v Lt
v Match
v Matches
v Ne
v Next
v Or
v Rem
v Remove
v Repeat
v THEN
v Until
v While

Código fuente y código objeto


El código fuente es el formato de entrada original de la rutina escrita por el programador.

Capítulo 7. Programación BASIC 157


El código objeto es la salida compilada que IBM InfoSphere DataStage invoca como una subrutina o una
función.

Una línea de código fuente tiene la sintaxis siguiente:


[ etiqueta: ]
sentencia [ ; sentencia ] ...<Return>

Una línea de código fuente puede empezar con una etiqueta de sentencia. Siempre termina con Return.

Caracteres especiales
Los siguientes caracteres tienen un significado especial en las transformaciones y rutinas. Su uso está
restringido en las constantes numéricas y de tipo serie. Tenga en cuenta también que los caracteres ASCII
del 0 al 10 y del 251 al 255 no deben incorporarse en las constantes de tipo serie.
Carácter
Uso permitido
Espacio
Se utiliza en las constantes de tipo serie, o para formatear el código fuente.
Separador
Se utiliza en las constantes de tipo serie, o para formatear el código fuente.
= Se utiliza para indicar los operadores de igualdad o asignación.
+ Signo más. Se utiliza para indicar el operador de suma o el operador unario más.
- Signo menos. Se utiliza para indicar el operador de resta o el operador unario menos.
* Asterisco. Se utiliza para indicar el operador de multiplicación o un comentario en el código
fuente.
\ Barra inclinada invertida. Se utiliza para las series entrecomilladas.
/ Barra inclinada. Se utiliza para indicar el operador de división.
^ Flecha arriba. Se utiliza para indicar el operador de elevación a una potencia.
() Paréntesis. Se utilizan para encerrar argumentos en las funciones o dimensiones de matriz.
# Hash. Se utiliza para indicar el operador de no igual.
$ Signo del dólar. Está permitido en los nombres de variable y las etiquetas de sentencias, pero no
en las constantes numéricas.
[] Corchetes. Se utilizan para indicar el operador de extracción de subserie y para encerrar
determinadas expresiones.
, Coma. Se utiliza para separar argumentos en las funciones y subrutinas, o en las dimensiones de
matriz. No está permitida en las constantes numéricas.
. Punto. Se utiliza para indicar un separador decimal en las constantes numéricas.
"" Comillas dobles. Se utilizan para escribir series entre comillas.
'' Comillas simples. Se utilizan para escribir series entre comillas.
: Dos puntos. Se utiliza para indicar el operador de concatenación o el final de una etiqueta de
sentencia.
; Punto y coma. Se utiliza para indicar el final de una sentencia si desea incluir un comentario en
la misma línea.
& Carácter &. Se utiliza para indicar el operador Y relacional.
< Corchete angular izquierdo. Se utiliza para indicar el operador menor que.

158 Guía del desarrollador de Server Job


> Corchete angular derecho. Se utiliza para indicar el operador mayor que.
@ Signo de arroba. Reservado para su uso en variables del sistema.

Variables del sistema


IBM InfoSphere DataStage proporciona un conjunto de variables que contienen información útil del
sistema a la que puede acceder desde la transformación o rutina. Las variables del sistema son de sólo
lectura.
Nombre
Descripción
@DATE
La fecha interna en la que se inició el programa. Consulte la función Date.
@DAY El día del mes extraído del valor de @DATE.
@FALSE
El compilador sustituye el valor por 0.
@FM Una marca de campo, Char(254).
@IM Una marca de elemento, Char(255).
@INROWNUM
Contador de filas de entrada. Se utiliza en las restricciones y derivaciones en las etapas
Transformer.
@OUTROWNUM
Contador de filas de salida (por enlace). Se utiliza en las derivaciones en las etapas Transformer.
@LOGNAME
El nombre de inicio de sesión del usuario.
@MONTH
El actual extraído del valor de @DATE.
@NULL
Valor nulo.
@NULL.STR
Representación interna del valor nulo, Char(128).
@PATH
El nombre de vía de acceso del proyecto InfoSphere DataStage actual.
@SCHEMA
El nombre de esquema del proyecto InfoSphere DataStage actual.
@SM Una marca de subvalor, Char(252).
@SYSTEM. RETURN.CODE
Códigos de estado devueltos por los procesos o mandatos del sistema.
@TIME
La hora interna en la que se inició el programa. Consulte la función Time.
@TM Una marca de texto, Char(251).
@TRUE
El compilador sustituye el valor por 1.
@USERNO
Número de usuario.

Capítulo 7. Programación BASIC 159


@VM Una marca de valor, Char(253).
@WHO
Nombre del directorio del proyecto de InfoSphere DataStage actual.
@YEAR
El año actual extraído de @DATE.

Funciones y sentencias de BASIC

Directivas de compilador
Las directivas de compilador son sentencias que determinan cómo se compila una rutina o una
transformación.
Para hacer esto...
Utilice esto...
Añadir o sustituir un identificador
Sentencia $Define
Eliminar un identificador
Sentencia $Undefine
Especificar una compilación condicional
Sentencias $IfDef y $IfNDef
Incluir otros programas
Sentencia $Include

Declaración
Estas sentencias declaran matrices, funciones y subrutinas para su uso en las rutinas.
Para hacer esto...
Utilice esto...
Definir un área de almacenamiento en la memoria
Sentencia Common
Definir una función escrita por el usuario
Sentencia Deffun
Declarar el nombre y las dimensiones de una variable de matriz
Sentencia Dimension
Identificar una subrutina interna
Sentencia Subroutine

Control de trabajos
Estas funciones se pueden utilizar en una rutina de control de trabajo, que se define como parte de las
propiedades de un trabajo y permite que otros trabajos se ejecuten y sean controlados desde el primer
trabajo. Algunas de estas funciones también se pueden utilizar para obtener información de estado sobre
el trabajo actual; son útiles en expresiones de etapa activa y en subrutinas anteriores y posteriores a la
etapa.
Para hacer esto...
Utilice esto...

160 Guía del desarrollador de Server Job


Especificar el trabajo que desee controlar
DSAttachJob
Establecer parámetros para el trabajo que desee controlar
DSSetParam
Establecer límites para el trabajo que desee controlar
DSSetJobLimit
Solicitar que se ejecute un trabajo
DSRunJob
Esperar a que finalice un trabajo al que se ha llamado
DSWaitForJob
Obtener información sobre el proyecto actual
DSGetCustInfo
Obtener información sobre el trabajo controlado o trabajo actual
DSGetProjectInfo
Obtener información sobre una etapa en el trabajo controlado o trabajo actual
DSGetJobInfo
Obtener información sobre un enlace en un trabajo controlado o trabajo actual
DSGetStageInfo
Obtener información sobre los parámetros de un trabajo controlado
DSGetLinkInfo
Obtener el suceso de registro del registro de trabajos
DSGetParamInfo
Obtener una serie de sucesos de registro sobre el tema especificado del registro de sucesos
DSGetLogEntry
Obtener una lista de ID de suceso de registro para una ejecución determinada de la invocación de un
trabajo
DSGetLogEventIds
Obtener el suceso de registro más reciente, de un tipo especificado, del registro de trabajos
DSGetLogSummary
Registrar un suceso en el registro de trabajo de un trabajo distinto
DSLogEvent
Registrar un mensaje de error muy grave en el archivo de registro de un trabajo y terminar
anormalmente el trabajo
DSLogFatal
Registrar un mensaje de información en el archivo de registro de un trabajo
DSLogInfo
Poner un mensaje de información en el registro de trabajo de un trabajo actual de control de trabajo
DSLogToController
Registrar un mensaje de aviso en el archivo de registro de un trabajo
DSLogWarn
Generar una serie que describe el estado actual de un trabajo conectado válido
DSMakeJobReport
Insertar argumentos en la plantilla de mensaje
DSMakeMsg

Capítulo 7. Programación BASIC 161


Asegurar que un trabajo está en el estado correcto para ser ejecutado y validado
DSPrepareJob
Interactuar con el recurso de envío de correo del sistema
DSSendMail
Registrar un mensaje de aviso en el archivo de registro de un trabajo
DSTransformError
Convertir un estado de control de trabajo o código de error en un mensaje de texto explicativo
DSTranslateCode
Suspender un trabajo hasta que exista o no exista un archivo nombrado
DSWaitForFile
Comprobar si está catalogada una rutina de BASIC, en el VOC como elemento invocable o en el
espacio de catálogo
DSCheckRoutine
Ejecutar un mandato del motor de servidor o de DOS desde una subrutina anterior/posterior
DSExecute
Detener un trabajo controlado
DSStopJob
Devolver un descriptor de contexto de trabajo obtenido anteriormente de DSAttachJob
DSDetachJob
Establece un mensaje de estado que devolverá un trabajo como mensaje de terminación cuando
finalice
DSSetUserStatus
Especificar si un trabajo genera metadatos operativos cuando se ejecuta (altera temporalmente el valor
predeterminado del proyecto)
DSSetGenerateOpMetaData

Control del programa


Estas sentencias controlan el flujo del programa con la ejecución directa del programa mediante bucles,
subrutinas, etc.
Para hacer esto...
Utilice esto...
Iniciar un conjunto de sentencias Case
Begin Case (consulte Sentencia Case)
Especificar condiciones para el flujo del programa
Case (consulte Sentencia Case)
Finalizar un conjunto de sentencias Case
End Case (consulte Sentencia Case)
Finalizar un programa o un bloque de sentencias
Sentencia End
Llamar a una subrutina externa
Sentencia Call
Llamar a una subrutina interna
Sentencia GoSub
Especificar una condición para llamar a una subrutina interna
Sentencias On...GoSub

162 Guía del desarrollador de Server Job


Volver de una subrutina externa o interna
Sentencia Return
Definir el inicio de un bucle For...Next
For (consulte Sentencias For...Next)
Definir el final de un bucle For...Next
Next (consulte Sentencias For...Next)
Ir a la siguiente iteración de un bucle
Continue (consulte Sentencias For...Next)
Crear un bucle
Sentencias Loop...Repeat
Definir condiciones para que se detenga un bucle
While, Until (consulte Sentencias For...Next)
Salir de un bucle
Exit (consulte Sentencias For...Next)
Invocar una subrutina de una sentencia sin condiciones
Sentencia GoTo
Invocar una subrutina de una sentencia con condiciones
Sentencia On...GoTo
Especificar condiciones para el flujo del programa
Operador If...Then...Else

Proceso de archivo secuencial


Estas sentencias y funciones se utilizan para abrir, leer y cerrar archivos para el proceso secuencial.
Para hacer esto...
Utilice esto...
Abrir un archivo para el proceso secuencial
Sentencia OpenSeq
Leer una línea de un archivo abierto con OpenSeq
ReadSeq
Escribir una línea en un archivo abierto con OpenSeq
Función WriteSeq
Escribir una línea en un archivo abierto con OpenSeq y guardado en disco
Función WriteSeqF
Truncar un archivo abierto con OpenSeq
Función WEOFSeq
Cerrar un archivo abierto con OpenSeq
Sentencia CloseSeq
Buscar el estado de un archivo abierto con OpenSeq
Función Status

Verificación de series y formateo


Estas funciones realizan tareas de formateo de series:
Para hacer esto...
Utilice esto...

Capítulo 7. Programación BASIC 163


Comprobar si una serie es alfabética
Función Alpha
Verificar con una suma de comprobación de 16 bits
Función Checksum
Verificar con un código de comprobación de redundancia cíclica de 32 bits
Función CRC32
Entrecomillar una serie
Función DQuote
Delimita una serie con comillas simples
Función SQuote
Analizar una serie fonéticamente
Función Soundex
Convertir una serie a mayúsculas
Función UpCase
Convertir una serie a minúsculas
Función DownCase
Sustituir caracteres especificados en una variable
Función Convert
Sustituir caracteres especificados en una serie
Sentencia Convert
Sustituir o suprimir caracteres en una serie
Función Exchange
Comparar la igualdad de dos series
Función Compare
Calcular el número de caracteres en una serie
Función Len
Calcular la longitud de una serie en posiciones de visualización
Función LenDP
Recortar los espacios en blanco excedentes de una serie
Función Trim Función TrimB Función TrimF
Crear una serie formada sólo por espacios
Función Space

Extracción de subseries y formateo


Puede extraer y manipular las subseries y los campos utilizando estas funciones.
Para hacer esto...
Utilice esto...
Encontrar la columna inicial de una subserie
Función Index
Sustituir una o varias instancias de una subserie
Función Change
Devolver la posición de la columna antes o después de una subserie
Función Col1 Función Col2,
Contar el número de veces que una subserie aparece en una serie
Función Count

164 Guía del desarrollador de Server Job


Contar las subseries delimitadas en una serie
Función DCount
Sustituir una o varias instancias de una subserie
Función Ereplace
Devolver una subserie delimitada
Función Field
Sustituir, suprimir o insertar subseries en una serie
Función FieldStore
Doblar las series para crear subseries
Función Fold
Doblar las series para crear subseries utilizando las posiciones de visualización de los caracteres
Función FoldDP
Extraer los primeros n caracteres de una serie
Función Left
Extraer los últimos n caracteres de una serie
Función Right
Buscar una subserie que coincida con un patrón
Función MatchField
Repetir una serie para crear una serie nueva
Función Str
Buscar una matriz dinámica de una expresión
Sentencia LOCATE

Conversión de datos
Estas funciones realizan conversiones numéricas y de caracteres.
Para hacer esto...
Utilice esto...
Convertir valores de código ASCII en sus equivalentes EBCDIC
Función Ebcdic
Convertir valores de código EBCDIC en sus equivalentes ASCII
Función Ascii
Convertir un valor de código ASCII en su equivalente de carácter
Función Char
Convertir un carácter ASCII en su valor de código
Función Seq
Convertir valores hexadecimales en decimales
Función Xtd
Convertir valores decimales en hexadecimales
Función Dtx
Convertir un valor numérico en uno de coma flotante con la precisión especificada
Función FIX
Convertir un valor numérico en uno de coma flotante sin pérdida de precisión
Función REAL
Generar un carácter individual en formato Unicode
Función UniChar

Capítulo 7. Programación BASIC 165


Convertir un carácter Unicode en su valor decimal equivalente
Función UniSeq

Formateo de datos
Estas funciones pueden utilizarse para formatear los datos en horas, fechas, cantidades monetarias, etc.
Para hacer esto...
Utilice esto...
Convertir datos para la salida
Función Oconv
Convertir datos en la entrada
Función Iconv
Formatear datos para la salida
Función Fmt
Formatear datos por posición de visualización
“Función FmtDP” en la página 230

Funciones de entorno local


Estas funciones se utilizan para establecer o identificar el entorno local actual.
Para hacer esto...
Utilice esto...
Establecer un entorno local
SetLocale
Obtener un entorno local
Función GetLocale

Sentencia $Define
Define los identificadores que controlan la compilación del programa o proporciona el texto de
sustitución de un identificador. No está disponible en las expresiones.

Sintaxis
$Define
identificador [texto.sustitución]

El valor de identificador es el símbolo que se va a definir. Puede ser cualquier identificador válido.

El valor de texto.sustitución es una serie de caracteres que el compilador utiliza para sustituir identificador
en todos los casos en que aparece en el programa que contiene la sentencia $Define.

Comentarios

Especifique un espacio en blanco para separar el identificador del texto.sustitución. Los siguientes espacios
en blancos se consideran parte del texto.sustitución. Finalice el texto.sustitución con una nueva línea. No
incluya comentarios después del texto.sustitución o se incluirán como parte del texto de sustitución.

166 Guía del desarrollador de Server Job


Ejemplos

Este ejemplo muestra cómo puede utilizarse $Define en el tiempo de compilación para determinar si una
rutina opera en modalidad de depuración, y cómo se utilizan $IfDef y $IfNDef para controlar el flujo del
programa, según corresponda:
* Establece la
siguiente línea en $UnDefine para desactivar el código de depuración
$Define DebugMode
...
$IfDef DebugMode
* En modalidad de depuración, se registra cada vez mediante esta rutina.
Call DSLogInfo("Transform entered,arg1 = ":Arg1, "Test")
$EndIf

Este ejemplo muestra cómo puede utilizarse $Define para sustituir texto del programa por un
identificador simbólico.
* Da un nombre simbólico a los últimos 3 caracteres del
* argumento de entrada de la rutina de transformación.
$Define NameSuffix Arg1[3]
...
If NameSuffix = "X27" Then
* La acción se basa en un valor específico en los últimos 3 caracteres.
...End

Sentencias $IfDef y $IfNDef


Prueba un identificador para ver si está definido o no definido. No está disponible en las expresiones.

Sintaxis
{$IfDef | IfNDef}
identificador [ sentencias ]
$Else [ sentencias ]
$EndIf

identificador es el identificador que se prueba.

$Else especifica las sentencias alternativas que se ejecutan.

$EndIf finaliza el bloque de compilación condicional.

Comentarios

Con $IfDef, si el identificador está definido por una sentencia $Define anterior, todas las líneas de código
fuente del programa que aparecen entre la sentencia $IfDef y la sentencia $EndIf de cierre se compilan.
Con $IfNDef, las líneas se compilan si el identificador no está definido. Las sentencias $IfDef y $IfNDef
se pueden anidar hasta 10 niveles.

Ejemplo

Este ejemplo muestra cómo puede utilizarse $Define en el tiempo de compilación para determinar si una
rutina opera en modalidad de depuración, y cómo se utilizan $IfDef y $IfNDef para controlar el flujo del
programa, según corresponda:
* Establece la
siguiente línea en $UnDefine para desactivar el código de depuración
$Define DebugMode
...

Capítulo 7. Programación BASIC 167


$IfDef DebugMode
* En modalidad de depuración, se registra cada vez mediante esta rutina.
Call DSLogInfo("Transform entered,arg1 = ":Arg1, "Test")
$EndIf

Sentencia $Include
Inserta el código fuente contenido en un archivo aparte y lo compila con el programa principal. No está
disponible en las expresiones.

Sintaxis
$Include
programa

Comentarios

El archivo incluido debe estar en el subdirectorio del proyecto DSU_BP. Puede anidar sentencias
$Include.

Sentencia $Undefine
Elimina un identificador que se ha establecido utilizando la sentencia $Define. Si no se establece ningún
identificador, $Undefine no tiene ningún efecto. No está disponible en las expresiones.

Sintaxis
$Undefine
identificador

Operador []
Sintaxis
Extrae una subserie de una serie de caracteres. La segunda sintaxis actúa como la función Field. Los
corchetes del operador [ ] se muestran en negrita y cursiva en la sintaxis y deben especificarse.
serie [ [
inicio,] longitud ]
serie[ delimitador,
instancia, repeticiones ]

serie es la serie de caracteres. Si la serie es un valor nulo, el valor extraído también es nulo.

inicio es un número que define la posición inicial del primer carácter de la subserie. Un valor 0 o un valor
negativo se supone que es 1. Si especifica una posición inicial después del final de serie, se devuelve una
serie vacía.

longitud es el número de caracteres en la subserie. Si especifica 0 o un número negativo, se devuelve una


serie vacía. Si especifica más caracteres de los que quedan entre el inicio y el final de la serie, el valor
devuelto contiene sólo el número de caracteres que quedan en serie.

delimitador es un carácter que delimita el inicio y el final de la subserie. Si no se encuentra el delimitador


en la serie, se devuelve una serie vacía, salvo que instancia sea 1, en cuyo caso se devuelve la serie.

instancia especifica qué instancia del delimitador marca el final de la subserie. Un valor menor que 1 se
supone que es 1.

168 Guía del desarrollador de Server Job


repetición especifica el número de veces que se repite la extracción en la serie. Un valor menor que 1 se
supone que es 1. Se devuelve el delimitador con las sucesivas subseries.

Comentarios

Puede especificar una subserie formada por los n últimos caracteres de una serie utilizando la primera
sintaxis y omitiendo inicio.

Ejemplos

En el ejemplo siguiente (donde se utiliza la segunda sintaxis), el cuarto carácter # es el terminador de la


subserie que se va a extraer, y se extrae un campo:
A="###DHHH#KK"
B = A["#",4,1]

El resultado es B es igual a DHHH.

Las sintaxis siguientes especifican subseries que empiezan en la posición de carácter 1:


expression [ 0, length ]
expression [ -1, length ]

El ejemplo siguiente especifica una subserie de los cinco últimos caracteres:


"1234567890" [5]

El resultado es 67890.

Todas las sintaxis de subserie se pueden utilizar con el operador de asignación ( = ). El nuevo valor
asignado a la variable sustituye a la subserie especificada por el operador [ ]. Este uso no está disponible
en las expresiones. Por ejemplo:
A = ’12345’
A[3] = 1212

El resultado es A es igual a 121212.

Como no se ha especificado ningún argumento de longitud, A[3] sustituye los tres últimos caracteres de
A (345) por el nuevo valor asignado para esa subserie (1212).

Sentencia *
Inserta un comentario en un programa.

Sintaxis
* [texto.comentario]

Comentarios

Un comentario puede aparecer en cualquier lugar del programa, excepto en el texto de sustitución de un
identificador (consulte la sentencia $Define). Cada línea de comentarios completa debe empezar por un
asterisco (*). Si añade un comentario al final de una línea que contiene una sentencia ejecutable, debe
escribir un carácter de punto y coma (;) antes del asterisco.

Ejemplo

Este ejemplo contiene un comentario en línea y un comentario de línea completa.

Capítulo 7. Programación BASIC 169


MyVar = @Null ;*
establece la variable en un valor nulo
If IsNull(MyVar * 10) Then
* Será true, ya que toda operación aritmética que incluya un valor nulo
* da como resultado un valor nulo.
End

Función Abs
Devuelve el valor absoluto (sin signo) de un número.

Sintaxis
Abs
(número)

número es el número o la expresión que desea evaluar.

Comentarios

Una forma útil de eliminar el signo más o menos de una serie. Por ejemplo, si número es -6 o +6, Abs
devuelve 6. Si número es un valor nulo, se devuelve un valor nulo.

Ejemplo

Este ejemplo utiliza la función Abs para calcular el valor absoluto de un número:
AbsValue
= Abs(12.34) ;* devuelve 12.34
AbsValue = Abs(-12.34) ;* devuelve 12.34

Función Alpha
Comprueba si una serie es alfabética. Si el soporte multilingüístico está habilitado, el resultado de esta
función depende del valor de entorno local actual del convenio Ctype.

Sintaxis
Alpha
(serie)

serie es la serie o la expresión que desea evaluar.

Comentarios

Las series alfabéticas contienen sólo los caracteres de a-z o A-Z. Alpha devuelve 1 si la serie es alfabética,
un valor nulo si la serie es un valor nulo y 0 en los demás casos.

Ejemplos

Estos ejemplos muestran cómo comprobar que una serie contiene sólo caracteres alfabéticos:
Column1 = "ABcdEF%"
* el carácter "%" no es alfabético
Column2 = (If Alpha(Column1) Then "A" Else "B")
* Column2 se establece en "B"
Column1 = ""
* tenga en cuenta que la serie vacía no es un carácter alfabético
Column2 = (If Alpha(Column1) Then "A" Else "B")
* Column2 se establece en "B"

170 Guía del desarrollador de Server Job


Función Ascii
Convierte los valores de los caracteres de una serie del formato EBCDIC al formato ASCII.

Sintaxis
Ascii
(serie)

serie es la serie o la expresión que desea convertir. Si la serie es un valor nulo, se devuelve un valor nulo.

Comentarios

Las funciones Ascii y Ebcdic realizan operaciones complementarias.

Nota: Si el soporte multilingüístico está habilitado, esta función puede devolver datos no reconocidos
para la correlación de juego de caracteres actual.

Ejemplo

Este ejemplo muestra cómo se utiliza la función Ascii para comparar una serie de bytes EBCDIC:
EbcdicStr
= Char(193):Char(241) ;* letra A dígito 1 en EBCDIC
AsciiStr = Ascii(EbcdicStr) ;* convierte EBCDIC en ASCII
If AsciiStr = "A1" Then ;* se compara con la constante ASCII
... ;* ... se utiliza esta ramificación
EndIf

Sentencia de asignación
Las sentencias de asignación son =, +=, -= y :=. Asignan valores a las variables. No está disponible en las
expresiones.

Sintaxis
variable
= valor
variable += valor
variable -= valor
variable := valor

valor es el valor que desea asignar. Puede ser una expresión o una constante cualquiera, incluido el valor
nulo.

Comentarios

= asigna el valor a la variable.

+= añade el valor a la variable.

-= resta el valor de la variable.

:= concatena el valor al final de la variable.

Para asignar un valor nulo a una variable, utilice esta sintaxis:


variable = @NULL

Capítulo 7. Programación BASIC 171


Para asignar una serie de caracteres que contiene únicamente el carácter utilizado para representar el
valor nulo a una variable, utilice esta sintaxis:
variable = @NULL.STR

Funciones Bit
Las funciones Bit son BitAnd, BitOr, BitNot, BitSet, BitReset, BitTest y BitXOr. Realizan operaciones bit
a bit en los enteros.

Sintaxis
BitAnd | BitOr |
BitXOr (entero1, entero2)
BitSet | BitReset | BitTest (entero,
número.bit)
BitNot (entero [,número.bit])

entero1 y entero2 son los enteros que se van a comparar. Si alguno de los valores de entero es nulo, se
devuelve un valor nulo. Los lugares decimales se truncan antes de la evaluación.

entero es el entero que se va a evaluar. Si el entero es un valor nulo, se devuelve un valor nulo. Los
lugares decimales se truncan antes de la evaluación.

número.bit es el número del bit en el que se actúa. Los bits se cuentan de derecha a izquierda a partir de
0. Si número.bit es un valor nulo, el programa falla con un error de tiempo de ejecución.

Comentarios

Las funciones Bit operan en una palabra de complemento de a dos de 32 bits. No utilice estas funciones
si desea que el código sea portátil, ya que el valor de bit superior puede variar en otro hardware.

BitAnd compara dos enteros bit a bit. Para cada bit, devuelve el bit 1 si ambos bits son 1; de lo contrario,
devuelve el bit 0.

BitOr compara dos enteros bit a bit. Para cada bit, devuelve el bit 1 si uno de los bits o ambos son 1; de
lo contrario, devuelve el bit 0.

BitXOr compara dos enteros bit a bit. Para cada bit, devuelve el bit 1 si sólo uno de los dos bits es 1; de
lo contrario, devuelve el bit 0.

BitTest prueba si se ha establecido el bit especificado. Devuelve 1 si el bit se ha establecido; de lo


contrario, devuelve 0.

BitNot invierte los bits en un entero, es decir, cambia el bit 1 por el bit 0, y viceversa. Si se especifica
número.bit, se invierte ese bit; de lo contrario, se invierten todos los bits.

BitSet establece el bit especificado en 1. Si ya es 1, no se cambia.

BitReset restablece el bit especificado en 0. Si ya es 0, no se cambia.

Ejemplos

BitAnd
Result = BitAnd(6, 12) ;* Result is 4
* (bin) (dec) BitAnd (bin) (dec) gives (bin) (dec)
* 110 6 1100 12 100 4

172 Guía del desarrollador de Server Job


BitNot
Result = BitNot(6) ;* Result is -7
Result = BitNot(15, 0) ;* Result is 14
Result = BitNot(15, 1) ;* Result is 13
Result = BitNot(15, 2) ;* Result is 11
* (bin) (dec) BitNot bit# gives (bin) (dec)
* 110 6 (all) 1...1001 7
* 1111 15 0 1110 14
* 1111 15 1 1101 13
* 1111 15 2 1011 11

BitOr
Result = BitOr(6, 12) ;* Result is 14
* (bin) (dec) BitOr (bin) (dec) gives (bin) (dec)
* 110 6 1100 12 1110 14

BitReset
Result = BitReset(29, 0) ;* Result is 28
Result = BitReset(29, 3) ;* Result is 21
Result = BitReset(2, 1) ;* Result is 0
Result = BitReset(2, 0) ;* Result is 2
* (bin) (dec) BitReset bit# gives (bin) (dec)
* 11101 29 0 11100 28
* 11101 29 3 10101 21
* 10 2 1 00 0
* 10 2 0 10 2

BitSet
Result = BitSet(20, 0) ;* Result is 21
Result = BitSet(20, 3) ;* Result is 28
Result = BitSet(2, 0) ;* Result is 3
Result = BitSet(2, 1) ;* Result is 2
* (bin) (dec) BitReset bit# gives (bin) (dec)
* 10100 20 0 10101 21
* 10100 20 2 11100 28
* 10 2 0 11 3
* 10 2 1 10 2

BitTest
Result = BitTest(11, 0) ;* Result is 1
Result = BitTest(11, 1) ;* Result is 1
Result = BitTest(11, 2) ;* Result is 0
Result = BitTest(11, 3) ;* Result is 1
* (bin) (dec) BitTest bit# is:
* 1011 11 0 1
* 1011 11 1 1
* 1011 11 2 0
* 1011 11 3 1

BitXOr
Result = BitXor(6, 12) ;* Result is 10
* (bin) (dec) BitXOr (bin) (dec) gives (bin) (dec)
* 110 6 1100 12 1010 10

Funciones orientadas a los bytes


IBM InfoSphere DataStage proporciona cuatro funciones que pueden utilizarse para manipular series
internas a nivel de byte.
v Byte permite crear una serie byte a byte.
v ByteLen devuelve la longitud de una serie en bytes.

Capítulo 7. Programación BASIC 173


v ByteType determina la función interna de un determinado byte.
v ByteVal determina el valor de un determinado byte en una serie.

Nota: Utilice estas funciones con cuidado: si crea una serie no válida, puede producir resultados
inesperados cuando la procese otra función.

Función Byte
Devuelve un byte de un valor numérico de entrada.

Sintaxis
Byte
(expresión)

expresión es un valor de carácter en el rango del 0 al 255.

Comentarios

La función Byte puede utilizarse para crear una serie byte a byte, en lugar de carácter a carácter. Si el
soporte multilingüístico no está habilitado, la función Byte funciona como la función Char.

Función ByteLen
Devuelve la longitud de una serie interna en bytes, en lugar de en caracteres.

Sintaxis
ByteLen
(expresión)

expresión es la serie que se va a evaluar.

Comentarios

Si expresión es una serie vacía, el resultado es 0. Si expresión es un nulo SQL, el resultado es un nulo.

Función ByteType
Devuelve la función de un determinado byte en el código de carácter interno.

Sintaxis
ByteType
(valor)

valor es un valor de byte, del 0 al 255, cuya función debe determinarse. Si valor es un nulo SQL, se
devuelve un valor nulo.

Comentarios

El resultado se devuelve como uno de los valores siguientes:


Valor Significado
0 El byte final de un carácter de varios bytes
1 Un carácter de un solo byte

174 Guía del desarrollador de Server Job


2 El byte inicial de un carácter de dos bytes
3 El byte inicial de un carácter de tres bytes
4 Reservado (el byte inicial de un carácter de cuatro bytes)
5 Un delimitador del sistema
-1 El valor de entrada no está en el rango del 0 al 255

Función ByteVal
Devuelve el valor interno de un byte especificado en una serie.

ByteVal

Sintaxis
ByteVal (
serie [, número_byte ] )

serie contiene el byte que se va a evaluar. Una serie vacía o un valor nulo devuelve -1. Una serie que
tiene menos bytes que el número especificado en número_byte devuelve -1.

número_byte es el número del byte en la serie que se evalúa. Si se omite o es menor que 1, se utiliza 1.

Comentarios

El resultado se devuelve como un valor para el byte en el rango del 0 al 255.

Sentencia Call
Llama a una subrutina. No está disponible en las expresiones.

Sintaxis
Call
subrutina [ ( argumento [ ,
argumento ] ... ) ]

argumento es una variable, una expresión o una constante que desea pasar a la subrutina. Si hay varios
argumentos, deben ir separados por comas.

Comentarios

Call transfiere el control de programa del programa principal a una subrutina externa compilada. Utilice
una sentencia Return para devolver el control al programa principal.

El número de argumentos especificados en una sentencia Call debe ser igual al número de argumentos
especificados en la sentencia Subroutine que identifica la subrutina.

Las constantes se pasan por valor; las variables se pasan por referencia. Si desea pasar variables por
valor, delimítelas con paréntesis.

Nota: Si pasa las variables por valor, un cambio en la variable en la subrutina no afecta al valor de la
variable en el programa principal. Si pasa las variables por referencia, un cambio en la variable en la
subrutina también afecta a programa principal.

Capítulo 7. Programación BASIC 175


Ejemplo

Este ejemplo muestra cómo llamar a una rutina anterior/posterior denominada MyRoutineB desde otra
rutina denominada MyRoutineA:
Subroutine MyRoutineA(InputArg, ErrorCode)
ErrorCode = 0 ;* se establece el código de error local
* Cuando se invoca una rutina escrita por el usuario que se mantiene en el
* repositorio de DataStage, debe añadir un prefijo "DSU.".
* Asegúrese de proporcionar otra variable para el segundo argumento
* de la rutina invocada para mantenerlo aparte del suyo
* propio.
Call DSU.MyRoutineB("First argument", ErrorCodeB)
If ErrorCodeB <> 0 Then
... ;* la rutina invocada ha fallado; actúe según corresponda
Endif
Return

Sentencia Case
Altera la secuencia de ejecución en el programa de acuerdo con el valor de una expresión. No está
disponible en las expresiones.

Sintaxis
Begin Case Case
expresión sentencias [ Case
expresión sentencias ] ...
End Case

expresión es un valor que se utiliza para probar el caso. Si expresión es un valor nulo, se supone que es
false.

sentencias son las sentencias que se ejecutan si expresión es true.

Comentarios

Las sentencias Case pueden estar repetidas. Si el valor de expresión en la primera sentencia Case es true,
se ejecutan las sentencias siguientes. Si expresión es false, el programa cambia a la siguiente sentencia
Case. El proceso se repite hasta que se alcance una sentencia End Case.

Si más de una expresión es true, sólo se actúa en la primera. Si ninguna expresión es true, no se ejecuta
ninguna de las sentencias.

Para probar si una variable contiene un valor nulo, utilice esta sintaxis:
Case IsNull (expresión)

Para especificar un caso predeterminado para que se ejecute si las demás expresiones son false, utilice
una expresión que contenga el valor constante 1.

Ejemplo

Este ejemplo utiliza sentencias Case en el argumento de entrada para seleccionar el tipo de proceso que
se ejecuta en una rutina:
Function MyTransform(Arg1)
Begin Case
Case Arg1 = 1
Reply = "A"
Case Arg1 = 2
Reply = "B"

176 Guía del desarrollador de Server Job


Case Arg1 > 2 And Arg1 < 11
Reply = "C"
Case @True ;* los demás valores
Call DSTransformError("Bad arg":Arg1, "MyTransform"
Reply = ""
End Case
Return(Reply)

Sentencia Cats
Concatena dos series.

Sintaxis
Cats
(serie1, serie2)

serie1 y serie2 son las series que se concatenarán. Si alguna de las series es un valor nulo, se devuelve un
valor nulo.

Ejemplo
String1 = "ABC"
String2 = "1234"
Result = Cats(String1, String2)
* El resultado contiene "ABC1234"

Función Change
Sustituye una o varias instancias de una subserie.

Sintaxis
Change
(serie, subserie,
sustitución [,número
[,inicio]])

serie es la serie o la expresión en la que desea cambiar subseries. Si serie se evalúa en un valor nulo, se
devuelve el valor nulo.

subserie es la subserie que desea sustituir. Si está vacía, se devuelve el valor de serie (esta es la única
diferencia entre Change y Ereplace).

sustitución es la subserie de sustitución. Si sustitución es una serie vacía, se eliminan todas las apariciones
de subserie.

número especifica el número de instancias de subserie que hay que sustituir. Para cambiar todas las
instancias, utilice un valor menor que 1.

inicio especifica la primera instancia que hay que sustituir. Un valor menor que 1 toma el valor 1 de
forma predeterminada.

Comentarios

Un valor nulo para serie devuelve un valor nulo. Si utiliza un valor nulo para otra variable, se produce
un error de tiempo de ejecución.

Capítulo 7. Programación BASIC 177


Ejemplos

El siguiente ejemplo sustituye todas las apariciones de una subserie por otra:
MyString = "AABBCCBBDDBB"NewString = Change(MyString, "BB",
→ "xxx") * El resultado es "AAxxxCCxxxDDxxx"

El ejemplo siguiente sustituye sólo las dos primeras apariciones:


MyString = "AABBCCBBDDBB"NewString = Change (MyString, "BB",
→ "xxx", 2, 1)* El resultado es "AAxxxCCxxxDDBB"

El ejemplo siguiente elimina todas las apariciones de la subserie:


MyString = "AABBCCBBDDBB"NewString = Change (MyString, "BB",
→ "")* El resultado es "AACCDD"

Función Char
Genera un carácter ASCII a partir de su valor de código numérico.

Sintaxis
Char
(código)

código es el valor de código ASCII del carácter o una expresión que se evalúa en el código.

Comentarios

Tenga cuidado con los valores nulos. Si el código es un valor nulo, se devuelve un nulo. Si el código es 128,
el valor devuelto es CHAR(128), es decir, la variable del sistema @NULL.STR.

La función Char es la inversa de la función Seq.

Nota: Si el soporte multilingüístico está habilitado, los valores de código en el rango del 129 al 247
devuelve valores Unicode en el rango de x0081 a x00F7. Estos son caracteres de varios bytes equivalentes
a los mismos valores en el juego de caracteres ISO 8859 (Latin 1). Para generar los bytes específicos con
los valores del 129 al 247, utilice la función Byte.

Ejemplo

Este ejemplo utiliza la función Char para devolver el carácter asociado con el código de carácter
especificado:
MyChar = Char(65) ;* devuelve "A"
MyChar = Char(97) ;* devuelve "a"
MyChar = Char(32) ;* devuelve un espacio
MyChar = Char(544)
* devuelve un espacio (544 = 32 módulos 256)

Función Checksum
Devuelve un valor de suma de comprobación de una serie.

Sintaxis
Checksum
(serie)

178 Guía del desarrollador de Server Job


serie es la serie a la que desea añadir la suma de comprobación. Si la serie es un valor nulo, se devuelve el
valor nulo.

Ejemplo

En este ejemplo, se utiliza la función Checksum para devolver un número que es un código de
redundancia cíclica para la serie especificada:
MyString = "This is any arbitrary string value"
CheckValue = Checksum(MyString) ;* devuelve 36235

Sentencia CloseSeq
Cierra un archivo después del proceso secuencial.

Sintaxis
CloseSeq
variable.archivo [On Error sentencias ]

variable.archivo especifica un archivo abierto anteriormente con una sentencia OpenSeq.

On Error sentencias especifica las sentencias que se ejecutan si se produce un error muy grave durante el
proceso de la sentencia CloseSeq.

Comentarios

Cada referencia de archivo secuencial en una rutina debe ir precedida de una sentencia OpenSeq aparte
para el archivo. OpenSeq establece un bloqueo de registro de actualización en el archivo. De este modo,
se impide que ningún otro programa cambie el archivo mientras se procesa. CloseSeq restablece este
bloqueo después de procesar el archivo. Varias operaciones OpenSeq en el mismo archivo sólo generan
un bloqueo de registro de actualización, por lo que sólo debe incluir una sentencia CloseSeq por archivo.

Si se produce un error muy grave y no se ha especificado ninguna cláusula On Error:


v Aparece un mensaje de error.
v Se retrotrae alguna transacción no confirmada iniciada en el entorno de ejecución actual.
v Termina el programa actual.

Si se utiliza la cláusula On Error, el valor devuelto por la función Status es el número de error.

Función Col1
Devuelve la posición del carácter anterior a la subserie especificada en la función Field ejecutada más
recientemente.

Sintaxis
Col1 ( )

Comentarios

La posición del carácter se devuelve como un número. El valor devuelto es local para la rutina que
ejecuta la función Field. El valor de Col1 en la rutina se inicializa como 0.

Col1 devuelve un valor 0 si:


v No se ha ejecutado la función Field.

Capítulo 7. Programación BASIC 179


v La expresión de delimitador de la función Field es una serie vacía o el valor nulo.
v No se ha encontrado la serie.

Ejemplos

La función Field del ejemplo siguiente devuelve la subserie "CCC". Col1 ( ) devuelve 8, la posición del
delimitador (/) que precede a CCC.
* Extraer tercer campo delimitado por
"/".
SubString = Field("AAA/BBB/CCC", "/" ,3)
Position = Col1() ;* obtiene la posición del delimitador

En el ejemplo siguiente, la función Field devuelve una subserie de dos campos con el delimitador (.) que
los separa: 4.5. Col1 ( ) devuelve 6, la posición del delimitador que precede a 4.
* Obtener cuarto y quinto campo delimitado por ".".
SubString = Field("1.2.3.4.5.6", ".", 4, 2)
Position = Col1() ;* obtiene la posición del delimitador

Función Col2
Devuelve la posición del carácter que sigue a la subserie especificada en la función Field ejecutada más
recientemente.

Sintaxis
Col2 ( )

Comentarios

La posición del carácter se devuelve como un número. El valor devuelto es local para la rutina que
ejecuta la función Field. El valor de Col2 en la rutina se inicializa como 0. Cuando se devuelve el control
al programa de llamada, se restaura el valor guardado de Col2.

Col2 devuelve un valor 0 si:


v No se ha ejecutado la función Field.
v La expresión de delimitador de la función Field es una serie vacía o el valor nulo.
v No se ha encontrado la serie.

Ejemplos

La función Field del ejemplo siguiente devuelve la subserie "CCC". Col2 ( ) devuelve 12, la posición que
el delimitador (/) habría ocupado después de CCC si no se hubiera encontrado el final de la serie.
* Extraer tercer campo delimitado por
"/".
SubString = Field("AAA/BBB/CCC", "/" ,3)
Position = Col2() ;* devuelve el final de la serie de hecho

En el ejemplo siguiente, la función Field devuelve una subserie de dos campos con el delimitador (.) que
los separa: 4.5. Col2 ( ) devuelve 10, la posición del delimitador que sigue a 5.
* Obtener cuarto y quinto campo delimitado por ".".
SubString = Field("1.2.3.4.5.6", ".", 4, 2)
Position = Col2() ;* obtiene la posición del delimitador

En el ejemplo siguiente, Field devuelve toda la serie, ya que el delimitador (.) no se encuentra. Col2 ( )
devuelve 6, la posición tras el último carácter de la serie.

180 Guía del desarrollador de Server Job


*
* Intenta obtener primero el primer campo delimitado por ".",
* pero falla.
SubString = Field("9*8*7", ".", 1)
Position = Col2() ;* devuelve la longitud de la serie + 1

En el ejemplo siguiente, Field devuelve una serie vacía, ya que no existe una décima aparición de la
subserie en la serie. Col2 ( ) devuelve 0 porque no se ha encontrado la subserie.
* *
Intenta obtener primero el décimo campo delimitado por ".",
* pero falla.
SubString = Field("9*8*7*6*5*4", "*", 10)
Position = Col2 ;* devuelve 0

Sentencia Common
Define un área de almacenamiento común para las variables. No está disponible en las expresiones.

Sintaxis
Common
/nombre / variable [ ,variable] ...

/nombre/ es el nombre que identifica el área común y es significativo hasta 31 caracteres.

variable es el nombre de una variable que se almacena en el área común.

Comentarios

Todas las rutinas que tienen declarado el /nombre/ común pueden acceder a las variables del área
común. (Utilice la sentencia $Include para definir el área común en cada rutina). Las variables
correspondientes pueden tener distintos nombres en distintas rutinas, pero deben definirse en el mismo
orden. La sentencia Common debe preceder a cualquier referencia a las variables que denomina.

Las matrices se pueden dimensionar y denominar con una sentencia Common. Se pueden volver a
dimensionar más tarde con una sentencia Dimension, pero la sentencia Common debe aparecer antes de
la sentencia Dimension.

Ejemplo

Este ejemplo muestra dos rutinas que se comunican mediante un área común denominada MyCommon,
definida en un archivo aparte en el subdirectorio DSU_BP cuyo nombre está declarado por una sentencia
$Include:

El archivo DSU_BP \ MyCommon.H contiene:


Common
/MyCommon/ ComVar1, ;* variable individual
ComVar2(10) ;* matriz de 10 variables

Las rutinas se definen como anteriores/posteriores, de la siguiente manera:


Subroutine MyRoutineA(InputArg, ErrorCode)
$Include MyCommon.H
ErrorCode = 0
* Campos distribuidos para el argumento entrante en la matriz * común:
For n = 1 To 10
ComVar2(n) = Field(InputArg, ",", n)
If ComVar2(n) <> "" Then
ComVar1 = n ;* indicate highest one used
End

Capítulo 7. Programación BASIC 181


Next n
Call DSU.MyRoutineB("another arg", ErrorCodeB)
* Etc.
...
Return
Subroutine MyRoutineB(InputArg, ErrorCode)
$Include MyCommon.H
ErrorCode = 0
* Lee los valores fuera de la matriz común:
For n = 1 To ComVar1
MyVar = ComVar2(n)
* Realizar alguna acción...
...
Next n
Return

Función Compare
Compara dos series. Si el soporte multilingüístico está habilitado, el resultado de esta función depende
del valor de entorno local actual del convenio Collate.

Sintaxis
Compare
(serie1, serie2 [ ,
justificación ])

serie1 y serie2 son las series que se compararán.

El valor de justificación es L para una comparación justificada a la izquierda o R para una comparación
justificada a la derecha. Si no especifica L o R, el valor predeterminado es L. Cualquier otro valor genera
un aviso de tiempo de ejecución, y se devuelve 0.

Comentarios

El resultado de la comparación se devuelve como uno de los valores siguientes:

serie1 es menor que serie2.

0 serie1 es igual que serie2 o la expresión de justificación no es válida.

1 serie1 es mayor que serie2.

Utilice una comparación justificada a la derecha para las series numéricas; utilice una comparación
justificada a la izquierda para las series de texto. Tenga cuidado con las series mixtas. Por ejemplo, una
comparación justificada a la derecha de las series AB100 y AB99 indica que AB100 es mayor que AB99 ya
que 100 es mayor que 99. No obstante, una comparación justificada a la derecha de las series AC99 y
AB100 indica que AC99 es mayor ya que C es mayor que B.

Ejemplo

En el ejemplo siguiente, las series AB99 y AB100 se comparan con la opción de justificación a la derecha,
en la que "AB100" es mayor que "AB99":
On Compare("AB99", "AB100", "R") + 2 GoSub
LessThan,
EqualTo
GreaterThan

182 Guía del desarrollador de Server Job


Función Convert
Sustituye todas las instancias de los caracteres especificados en una serie por los caracteres de sustitución.

Sintaxis
Convert
(lista, nueva.lista, serie)

lista es la lista de caracteres que se van a sustituir. Si la lista es un valor nulo, genera un error de tiempo
de ejecución.

nueva.lista es la lista correspondiente de caracteres de sustitución. Si nueva.lista es un valor nulo, genera


un error de tiempo de ejecución.

La expresión serie se evalúa como la serie o un variable que contiene la serie. Si la serie es un valor nulo,
se devuelve el valor nulo.

Comentarios

Las dos listas de caracteres se corresponden. El primer carácter de nueva.lista sustituye a todas las
instancias del primer carácter de la lista, el segundo sustituye al segundo, etc. Si las dos listas no
contienen el mismo número de caracteres:
v Los caracteres de lista que no tengan caracteres correspondientes en nueva.lista se suprimen del
resultado.
v Los caracteres excedentes de nueva.lista se ignoran.

Ejemplo

Este es un ejemplo de Convert utilizado como función:


MyString ="NOW IS THE TIME"
ConvStr = Convert("TI", "XY", MyString)
* todas T => X, I => Y
* En este punto, ConvStr es: NOW YS XHE XYME
ConvStr = Convert("XY", "Z", ConvStr)
* todas X => Z, Y => ""
* En este punto, ConvStr es: NOW S ZHE ZME

Sentencia Convert
Sustituye todas las instancias de los caracteres especificados en una serie por los caracteres de sustitución.
No está disponible en las expresiones.

Sintaxis
Convert
lista To nueva.lista In
serie

lista es la lista de caracteres que se van a sustituir. Si lista es un valor nulo, genera un error de tiempo de
ejecución.

nueva.lista es la lista correspondiente de caracteres de sustitución. Si nueva.lista es un valor nulo, genera


un error de tiempo de ejecución.

La expresión serie se evalúa como la serie o un variable que contiene la serie. Si la serie es un valor nulo,
se devuelve el valor nulo.

Capítulo 7. Programación BASIC 183


Comentarios

Las dos listas de caracteres se corresponden. El primer carácter de nueva.lista sustituye a todas las
instancias del primer carácter de la lista, el segundo sustituye al segundo, etc. Si las dos listas no
contienen el mismo número de caracteres:
v Los caracteres de lista que no tengan caracteres correspondientes en nueva.lista se suprimen del
resultado.
v Los caracteres excedentes de nueva.lista se ignoran.

Ejemplo

Este es un ejemplo de Convert utilizado como sentencia, que convierte la serie:


MyString ="NOW IS THE TIME"
Convert "TI" To "XY" In MyString
* todas T => X, I => Y
* En este punto, MyString es: NOW YS XHE XYME
Convert "XY" To "Z" In MyString
* todas X => Z, Y => ""
* En este punto, MyString es: NOW S ZHE ZME

Función Count
Cuanta el número de veces que una subserie aparece en una serie.

Sintaxis
Count
(serie, subserie)

serie es la serie que desea buscar. Si la serie es un valor nulo, se devuelve el valor nulo.

subserie es la subserie que desea contar. Puede ser una serie de caracteres, una constante o una variable. Si
la subserie no aparece en la serie, se devuelve 0. Si la subserie es una serie vacía, se devuelve el número de
caracteres de la serie. Si la subserie es un valor nulo, se produce un error de tiempo de ejecución.

Comentarios

Cuando se cuenta una subserie completa, Count pasa al siguiente carácter y vuelve a empezar. Por
ejemplo, la sentencia siguiente cuenta sólo dos instancias de la subserie tt y devuelve 2 a la variable c:
c = Count (’tttt’, ’tt’)

Ejemplo
* La siguiente línea devuelve el
número de "A"
* en la serie (3).
MyCount = Count("ABCAGHDALL", "A")
* La siguiente línea devuelve 2 ya que las subseries solapadas
* no se cuentan.
MyCount = Count ("TTTT", "TT")

Función CRC32
Devuelve un valor de comprobación de redundancia cíclica de 32 bits para una serie.

Sintaxis
CRC32
(serie)

184 Guía del desarrollador de Server Job


serie es la serie a la que desea añadir el valor de CRC. Si la serie es un valor nulo, se devuelve el valor
nulo.

Ejemplo

En este ejemplo, se utiliza la función CRC para devolver un número que es un código de redundancia
cíclica para la serie especificada:
MyString = "This is any arbitrary string value"
CheckValue = CRC32(MyString) ;* devuelve 36235

Función de fecha
Devuelve una fecha con su formato de sistema interno.

Sintaxis
Date ( )

Comentarios

IBM InfoSphere DataStage almacena las fechas como el número de días antes o después del día 0,
utilizando el 31 de diciembre de 1967 como día 0. Por ejemplo:
Esta fecha...
Se almacena como...
10 de diciembre de 1967
-21
15 de noviembre de 1967
-46
31 de diciembre de 1967
0
15 de febrero de 1968
46
1 de enero de 1985
6575

Utilice la fecha interna siempre que necesite realizar conversiones de salida.

Ejemplo

Este ejemplo muestra cómo convertir la fecha actual en formato interno en una serie que represente el día
siguiente:
Tomorrow = Oconv(Date() + 1, "D4/YMD") ;* "1997/5/24"

Función DCount
Cuenta los campos delimitados de una serie.

Sintaxis
DCount
(serie, delimitador)

Capítulo 7. Programación BASIC 185


serie es la serie que en la que se realiza la búsqueda. Si la serie es una serie vacía, se devuelve 0. Si la serie
es un valor nulo, se devuelve el valor nulo.

delimitador es uno o varios caracteres que delimitan los campos que se van a contar. Si el delimitador es
una serie vacía, se devuelve el número de caracteres de la serie + 1. Si el delimitador es un valor nulo, se
produce un error de tiempo de ejecución. Dos delimitadores consecutivos en la serie se cuentan como un
campo.

Comentarios

DCount se diferencia de Count en que devuelve el número de valores separados por delimitadores en
lugar del número de apariciones de una serie de caracteres.

Ejemplo
* La siguiente línea devuelve el
número de subseries
* delimitadas por "A" en la serie (4)
MyCount = DCount("ABCAGHDALL", "A")
* La siguiente línea devuelve 3 ya que las subseries solapadas
* no se cuentan.
MyCount = DCount ("TTTT", "TT")

Sentencia Deffun
Define una función escrita por el usuario.

Sintaxis
Deffun
función [ ( [Mat] argumento [, [Mat]
argumento ...] ) ]
[Calling nombre.llamada]

función es el nombre de la función que se va a definir.

argumento es un argumento que se pasa a la función. Puede proporcionar hasta 254 argumentos. Para
pasar una matriz, especifique Mat antes del nombre de matriz.

Calling nombre.llamada especifica el nombre que se utiliza para llamar a la función. Si no especifica
ningún nombre, la función se invoca utilizando function.

Comentarios

Debe declarar una función escrita por el usuario antes de poder utilizarla en un programa. Puede definir
una función escrita por el usuario una sola vez en un programa. La definición de la función dos veces
genera un error muy grave.

Ejemplo

Este ejemplo muestra cómo definir una función de transformación denominada MyFunctionB, para que
se pueda invocar desde otra función de transformación denominada MyFunctionA:
Function MyFunctionA(Arg1)
* Cuando hace referencia a una función escrita por el usuario que se mantiene en el
* repositorio de DataStage, debe declararla como una función con el
* número correcto de argumentos y añadirle un prefijo "DSU.".
Deffun MyFunctionB(A) Calling "DSU.MyFunctionB"

186 Guía del desarrollador de Server Job


Sentencia Dimension
Define las dimensiones de una o varias matrices. No está disponible en las expresiones.

Sintaxis
Dimension
matriz (filas, columnas) [ ,
matriz (filas, columnas) ] ...
Dimension vector (máx) [ ,
vector (máx) ] ...

matriz es una matriz bidimensional que se va a dimensionar.

filas es el número máximo de filas en la matriz.

columnas es el número máximo de columnas en la matriz.

vector es una matriz unidimensional que se va a dimensionar.

máx es el número máximo de elementos en la matriz.

Comentarios

Las matrices se pueden volver a dimensionar en el tiempo de ejecución. Puede cambiar una matriz de
unidimensional a bidimensional y viceversa.

El hecho de volver a dimensionar una matriz afecta a los valores de los elementos de matriz tal como se
indica a continuación:
v Los elementos comunes con la misma dirección fila/columna en ambas matrices se conservan.
v Los nuevos elementos que no tenían ninguna dirección fila/columna en la matriz original se inicializan
como no asignados.
v Los elementos redundantes a los que ya no se puede hacer referencia en la nueva matriz se pierden, y
el espacio de memoria se devuelve al sistema operativo.

Si no hay suficiente memoria para la matriz, la sentencia Dimension falla y la siguiente función InMat
devuelve 1.

Para asignar valores a los elementos de la matriz, utilice la sentencia Mat y las sentencias de asignación.

Ejemplo

Este ejemplo muestra cómo puede dimensionarse una matriz dinámicamente en el tiempo de ejecución
basándose en los valores de los argumentos entrantes:
Subroutine MyRoutine(InputArg, ErrorCode)
ErrorCode = 0
* InputArg son 2 campos separados por comas, que se corresponden con las dimensiones
Rows = Field(InputArg, ",", 1)
Cols = Field(InputArg ",", 2)
Dimension MyMatrix(Rows, Cols)
If InMat = 1 Then
* No se ha podido obtener el espacio para la matriz; sale con estado de error.
Call DSLogWarn("Could not dimension matrix","MyRoutine")
ErrorCode = -1
Else
* Continúe.
...
End

Capítulo 7. Programación BASIC 187


Función Div
Divide un número por otro.

Sintaxis
Div
(dividendo, divisor)

dividendo es el número que se va a dividir. Si dividendo es un valor nulo, se devuelve el valor nulo.

divisor es el número por el que se divide. divisor no puede ser 0. Si divisor es un valor nulo, se devuelve el
valor nulo.

Comentarios

Utilice la función Mod para determinar el resto.

Ejemplos

Los siguientes ejemplos muestran el uso de la función Div:


Quotient = Div(100, 25)
;* el resultado es 4
Quotient = Div(100, 30) ;* el resultado es 3

Función DownCase
Convierte las letras mayúsculas de una serie a minúsculas. Si el soporte multilingüístico está habilitado,
el resultado de esta función depende del valor de entorno local actual del convenio Ctype.

Sintaxis
DownCase
(serie)

serie es la serie o expresión que desea cambiar a minúsculas. Si la serie es un valor nulo, se devuelve el
valor nulo.

Ejemplo

Este es un ejemplo de la función DownCase:


MixedCase = "ABC123abc"
LowerCase = DownCase(MyString) ;* el resultado es "abc123abc"

Función DQuote
Delimita una serie mediante comillas dobles.

Sintaxis
DQuote
(serie)

serie es la serie que se escribirá entre comillas. Si la serie es un valor nulo, se devuelve el valor nulo.

188 Guía del desarrollador de Server Job


Comentarios

Para especificar una serie entre comillas simples, utilice la función SQuote.

Ejemplo

Este es un ejemplo de la función DQuote que añade comillas dobles (") al principio y al final de una
serie:
ProductNo = 12345
QuotedStr = DQuote(ProductNo : "A")
* el resultado es "12345A"

DSAttachJob
Se conecta a un trabajo a fin de ejecutarlo en una secuencia de control de trabajos. Se devuelve un
descriptor de contexto que se utiliza para direccionar el trabajo. Sólo puede haber un descriptor de
contexto abierto para un trabajo determinado en cualquier momento dado.

Sintaxis
DescriptorContextoTrabajo = DSAttachJob (NombreTrabajo, ModalidadError)

DescriptorContextoTrabajo es el nombre de una variable para mantener el valor de retorno que utiliza
posteriormente cualquier otra función o rutina al hacer referencia al trabajo. No presuponga que este
valor es un entero.

NombreTrabajo es una serie que proporciona el nombre del trabajo al que se conectará.

ModalidadError es un valor que especifica cómo otras rutinas que utilizan el descriptor de contexto deben
notificar errores. Es una de las siguientes:
v DSJ.ERRFATAL Registra un mensaje muy grave y termina anormalmente el trabajo de control (valor
predeterminado).
v DSJ.ERRWARNING Registra un mensaje de aviso pero continúa.
v DSJ.ERRNONE No registra ningún mensaje - el emisor de la llamada tiene toda la responsabilidad (sin
embargo, se registrará anomalía del propio DSAttachJob).

Comentarios

Un trabajo no se puede conectar a sí mismo.

El parámetro NombreTrabajo puede especificar una versión exacta del trabajo en forma de trabajo%Reln.n.n
o la versión más reciente del trabajo con el formato trabajo. Si se libera el propio trabajo de control,
obtendrá la versión liberada más reciente del trabajo. Si el trabajo de control es una versión de desarrollo,
obtendrá la versión de desarrollo más reciente de trabajo.

Ejemplo

A continuación se muestra un ejemplo de conexión al Release 11 del trabajo Qsales:


Qsales_handle = DSAttachJob ("Qsales%Rel1",
→ DSJ.ERRWARN)

DSCheckRoutine
Comprueba si está catalogada una rutina de BASIC, en el VOC como elemento invocable o en el espacio
de catálogo.

Capítulo 7. Programación BASIC 189


Sintaxis
Encontrado = DSCheckRoutine(NombreRutina)

NombreRutina es el nombre de la rutina de BASIC que se comprobará.

Encontrado es un booleano. @False if NombreRutina not findable, else @True.

Ejemplo
rtn$ok = DSCheckRoutine("DSU.DSSendMail")
If(NOT(rtn$ok)) Then
* aquí manejo de errores
End.

DSDetachJob
Devuelve un DescriptorContextoTrabajo adquirido por DSAttachJob si no es necesario ningún control
adicional de un trabajo (permitiendo que otro trabajo se convierta en su controlador). No es necesario
llamar a esta función; de lo contrario, los trabajos conectados se desconectarán automáticamente cuando
finalice el trabajo de control.

Sintaxis
CódigoError = DSDetachJob (DescriptorContextoTrabajo)

DescriptorContextoTrabajo es el descriptor de contexto para el trabajo tal como se deriva de DSAttachJob.

CódigoError es 0 si DSStopJob es satisfactorio; de lo contrario puede ser uno de los siguientes:


v DSJE.BADHANDLE DescriptorContextoTrabajo no válido.

El único error posible es un intento de cerrar DSJ.ME. De lo contrario, la llamada siempre es satisfactoria.

Ejemplo

El mandato siguiente desconecta el descriptor de contexto del trabajo qsales:


Deterr = DSDetachJob (qsales_handle)

DSExecute
Ejecuta un mandato del motor, de DOS o de UNIX desde una subrutina anterior/posterior.

Sintaxis
Call DSExecute (TipoShell, Mandato, Salida, CódigoRetornoSistema)

TipoShell (entrada) especifica el tipo de mandato que desea ejecutar y es NT, UNIX o UV (para motor).

Mandato (entrada) es el mandato que se ejecutará. Mandato no debe solicitar entrada cuando se ejecute.

Salida (salida) es cualquier salida del mandato. Cada línea de salida aparece separada por una marca de
campo, @FM. La salida se añade al archivo de registro de trabajo como un mensaje informativo.

CódigoRetornoSistema (salida) es el código que indica el resultado satisfactorio del mandato. Un valor de 0
significa que el mandato se ha ejecutado satisfactoriamente. Un valor de 1 (para un mandato de DOS o
UNIX) indica que el mandato no se ha encontrado. Cualquier otro valor es un código de salida específico
del mandato.

190 Guía del desarrollador de Server Job


Comentarios

No utilice DSExecute desde una transformación; la sobrecarga de ejecutar un mandato para cada fila
procesada por una etapa degradará el rendimiento del trabajo.

DSGetCustInfo
Obtiene información notificada al final de la ejecución de determinadas etapas paralelas. La información
recopilada, y disponible para su interrogación, se especifica durante el tiempo de diseño. Por ejemplo, la
información de la etapa Transformer se especifica en el separador Desencadenantes del recuadro de
diálogo Propiedades de la etapa Transformer.

Sintaxis
Resultado = DSGetCustInfo (DescriptorContextoTrabajo, NombreEtapa, NombreInfoPers, TipoInfo)

DescriptorContextoTrabajo es el descriptor de contexto para el trabajo tal como se deriva de DSAttachJob o


puede ser DSJ.ME para hacer referencia al trabajo actual.

NombreEtapa es el nombre de la etapa que se interrogará. También puede ser DSJ.ME para hacer
referencia a la etapa actual, si es necesario.

NombreInfoPers es el nombre de la variable que se interrogará.

TipoInfo especifica la información necesaria y puede ser una de las opciones siguientes:

DSJ.CUSTINFOVALUE

DSJ.CUSTINFODESC

Resultado depende del TipoInfo especificado, de la forma siguiente:


v DSJ.CUSTINFOVALUE Serie: valor del elemento de información de personalización especificado.
v DSJ.CUSTINFODESC Serie: descripción del elemento de información de personalización especificado.

Resultado puede devolver también una condición de error de la forma siguiente:


v DSJE.BADHANDLE DescriptorContextoTrabajo no era válido.
v DSJE.BADTYPE TipoInfo no se ha reconocido.
v DSJE.NOTINSTAGE NombreEtapa era DSJ.ME y el emisor de la llamada no se está ejecutando dentro de
una etapa.
v DSJE.BADSTAGE NombreEtapa no hace referencia a una etapa conocida en el trabajo.
v DSJE.BADCUSTINFO NombreInfoPers no hace referencia a un elemento de información de
personalización conocido.

DSGetJobInfo
Proporciona un método de obtención de información sobre un trabajo, que se puede utilizar de forma
general así como para control de trabajos. Puede hacer referencia al trabajo actual o a un trabajo
controlado, dependiendo del valor de DescriptorContextoTrabajo.

Sintaxis
Resultado = DSGetJobInfo (DescriptorContextoTrabajo, TipoInfo)

DescriptorContextoTrabajo es el descriptor de contexto para el trabajo tal como se deriva de DSAttachJob o


puede ser DSJ.ME para hacer referencia al trabajo actual.
Capítulo 7. Programación BASIC 191
TipoInfo especifica la información necesaria y puede ser una de las opciones siguientes:

DSJ.JOBSTATUS

DSJ.JOBNAME

DSJ.JOBCONTROLLER

DSJ.JOBSTARTTIMESTAMP

DSJ.JOBWAVENO

DSJ.PARAMLIST

DSJ.STAGELIST

DSJ.USERSTATUS

DSJ.JOBCONTROL

DSJ.JOBPID

DSJ.JPBLASTTIMESTAMP

DSJ.JOBINVOCATIONS

DSJ.JOBINTERIMSTATUS

DSJ.JOBINVOCATIONID

DSJ.JOBDESC

DSJ.JOBFULLDESC

DSJ.STAGELIST2

DSJ.JOBELAPSED

DSJ.JOBEOTCOUNT

DSJ.JOBEOTTIMESTAMP

DSJ.JOBRTISERVICE

DSJ.JOBMULTIINVOKABLE

DSJ.JOBFULLSTAGELIST

Resultado depende del TipoInfo especificado, de la forma siguiente:


v DSJ.JOBSTATUS Entero. Estado actual de trabajo global. Los estados posibles que se pueden devolver
se dividen actualmente en dos categorías:
En primer lugar, un trabajo en curso se identifica mediante:
DSJS.RESET El trabajo ha finalizado una ejecución de restablecimiento.
DSJS.RUNFAILED El trabajo ha finalizado una ejecución normal con un error muy grave.

192 Guía del desarrollador de Server Job


DSJS.RUNNING Ejecución de trabajo - es el único estado que indica que el trabajo está realmente en
ejecución.
En segundo lugar, es posible que los trabajos que no estén en ejecución tengan los estados siguientes:
DSJS.RUNOK El trabajo ha finalizado una ejecución normal sin avisos.
DSJS.RUNWARN El trabajo ha finalizado una ejecución normal con avisos.
DSJS.STOPPED El trabajo ha sido detenido por la intervención del operador (no se puede determinar
el tipo de ejecución).
DSJS.VALFAILED El trabajo no ha podido realizar una ejecución de validación.
DSJS.VALOK - El trabajo ha finalizado una ejecución de validación sin avisos.
DSJS.VALWARN El trabajo ha finalizado una ejecución de validación con avisos.
v DSJ.JOBNAME Serie. Nombre real del trabajo al que hace referencia el descriptor de contexto del
trabajo.
v DSJ.JOBCONTROLLER Serie. Nombre del trabajo que controla el trabajo al que hace referencia el
descriptor de contexto del trabajo. Tenga en cuenta que puede tratarse de varios nombres de trabajo
separados por puntos si el trabajo está controlado por un trabajo que está a su vez controlado.
v DSJ.JOBSTARTTIMESTAMP Serie. Fecha y hora cuando se inició el trabajo en el motor con el formato
AAAA-MM-DD hh:nn:ss.
v DSJ.JOBWAVENO Entero. Número de ondas de ejecución última o actual.
v DSJ.PARAMLIST. Devuelve una lista de nombres de parámetros separados por coma.
v DSJ.STAGELIST. Devuelve una lista de nombres de etapas activas separados por coma.
v DSJ.USERSTATUS Serie. Lo que ha registrado la última llamada del trabajo de DSSetUserStatus, de lo
contrario una serie vacía.
v DSJ.JOBCONTROL Entero. Estado de control del trabajo actual, es decir, si se ha emitido una solicitud
de detención para el trabajo.
v DSJ.JOBPID Entero. ID de proceso de trabajo.
v DSJ.JOBLASTTIMESTAMP Serie. Fecha y hora cuando el trabajo finalizó por última vez una ejecución
en el motor con el formato AAAA-MM-DD HH:NN:SS.
v DSJ.JOBINVOCATIONS. Devuelve una lista de ID de invocación separados por coma.
v DSJ.JOBINTERIMSTATUS. Devuelve el estado de un trabajo después de que haya ejecutado todas las
etapas y trabajos controlados, pero antes de haber intentado ejecutar una subrutina posterior al trabajo.
(Está diseñado para ser utilizado por una subrutina posterior al trabajo para obtener el estado del
trabajo actual).
v DSJ.JOBINVOCATIONID. Devuelve el ID de invocación del trabajo especificado (utilizado en la macro
DSJobInvocationId en un diseño de trabajo para acceder al ID de invocación mediante el cual se invoca
el trabajo).
v DSJ.STAGELIST2. Devuelve una lista de nombres de etapas pasivas separadas por coma.
v DSJ.JOBELAPSED Serie. El tiempo transcurrido del trabajo en segundos.
v DSJ.JOBDESC Serie. La descripción del trabajo especificada en el recuadro de diálogo Propiedades del
trabajo.
v DSJ.JOBFULLDESSC Serie. La descripción completa especificada en el recuadro de diálogo Propiedades
del trabajo.
v DSJ.JOBRTISERVICE entero. Se establece en true (verdadero) si se trata de un trabajo de servicio web.
v DSJ.JOBMULTIINVOKABLE entero. Se establece en true (verdadero) si este trabajo da soporte a varias
invocaciones
v DSJ.JOBEOTCOUNT entero. Recuento de bloques EndOfTransmission procesados por este trabajo hasta
ahora.
v DSJ.JOBEOTTIMESTAMP indicación_fecha_y_hora. Fecha/Hora del último bloque EndOfTransmission
procesado por este trabajo.
v DSJ.FULLSTAGELIST. Devuelve una lista de todos los nombres de etapas separados por coma.

Capítulo 7. Programación BASIC 193


Resultado también puede devolver condiciones de error de la forma siguiente:

DSJE.BADHANDLE DescriptorContextoTrabajo no era válido.

DSJE.BADTYPE TipoInfo no se ha reconocido.

Comentarios

Cuando se hace referencia a un trabajo controlado, se puede utilizar DSGetJobInfo antes o después de
haber emitido un DSRunJob. Cualquier estado devuelto después de una llamada satisfactoria a DSRunJob
es una garantía de que está relacionado con esa ejecución del trabajo.

Ejemplos
El mandato siguiente solicita el estado de trabajo del trabajo qsales:
q_status = DSGetJobInfo(qsales_handle, DSJ.JOBSTATUS)

El mandato siguiente solicita el nombre real del trabajo actual:


whatname = DSGetJobInfo (DSJ.ME, DSJ.JOBNAME)

DSGetJobMetaBag
Devuelve una matriz dinámica que contiene las propiedades de MetaBag asociadas con el trabajo
nombrado.

Sintaxis
Resultado = DSGetJobMetaBag(NombreTrabajo, Propietario)
o
Call DSGetJobMetaBag(Resultado, NombreTrabajo, Propietario)

NombreTrabajo es el nombre del trabajo del proyecto actual para el que es necesaria la información. Si
NombreTrabajo no existe en el proyecto actual, Resultado se establecerá en una serie vacía.

Propietario es un nombre de propietario cuyas propiedades de metabag se devolverán. Si Propietario no es


un propietario válido dentro del trabajo actual, Resultado se establecerá en una serie vacía. Si Propietario es
una serie vacía, se devolverá una serie delimitada por marcas de campo de propietarios de propiedades
de metabag dentro del trabajo actual en Resultado.

Resultado devuelve una matriz dinámica de conjuntos de propiedades de metabag, de la forma siguiente:

RESULTADO<1> = NombreMetaPropiedad01 @VM ValorMetaPropiedad01

RESULTADO<..> = NombreMetaPropiedad.. @VM ValorMetaPropiedad..

RESULTADO<N>= NombreMetaPropiedadN @VM ValorMetaPropiedadN

Ejemplo

Lo siguiente devuelve las propiedades de metabag para el propietario propietariomb en el trabajo


"trabajoprueba":
linksmdata = DSGetJobMetaBag (trabajoprueba, propietariomb)

194 Guía del desarrollador de Server Job


DSGetLinkInfo
Proporciona un método de obtención de información sobre un enlace en una etapa activa, que se puede
utilizar de forma general así como para control de trabajos. Esta rutina puede hacer referencia a un
trabajo controlado o a un trabajo actual, en función del valor de DescriptorContextoTrabajo.

Sintaxis
Resultado = DSGetLinkInfo (DescriptorContextoTrabajo, NombreEtapa, NombreEnlace, TipoInfo)

DescriptorContextoTrabajo es el descriptor de contexto para el trabajo tal como se deriva de DSAttachJob o


puede ser DSJ.ME para hacer referencia al trabajo actual.

NombreEtapa es el nombre de la etapa activa que se interrogará. También puede ser DSJ.ME para hacer
referencia a la etapa actual, si es necesario.

NombreEnlace es el nombre de un enlace (entrada o salida) conectado a la etapa. También puede ser
DSJ.ME para hacer referencia al enlace actual (por ejemplo, cuando se utiliza en una expresión de
Transformer o función de transformación denominada desde código de enlace).

TipoInfo especifica la información necesaria y puede ser una de las opciones siguientes:

DSJ.LINKLASTERR

DSJ.LINKNAME

DSJ.LINKROWCOUNT

DSJ.LINKSQLSTATE

DSJ.LINKDBMSCODE

DSJ.LINKDESC

DSJ.LINKSTAGE

DSJ.INSTROWCOUNT

DSJ.LINKEOTROWCOUNT

Resultado depende del TipoInfo especificado, de la forma siguiente:


v DSJ.LINKLASTERR Serie: último mensaje de error (si hay alguno) notificado desde el enlace en
cuestión.
v DSJ.LINKNAME Serie: devuelve el nombre del enlace, resulta especialmente útil cuando se utiliza con
DescriptorContextoTrabajo = DSJ.ME y NombreEtapa = DSJ.ME y NombreEnlace = DSJ.ME para descubrir
su propio nombre.
v DSJ.LINKROWCOUNT Entero: número de filas que han pasado un enlace hasta ahora.
v DSJ.LINKSQLSTATE: el estado de SQL para el último error que se produce en este enlace.
v DSJ.LINKDBMSCODE: el código de DBMS para el último error que se produce en este enlace.
v DSJ.LINKDESC: descripción del enlace.
v DSJ.LINKSTAGE: nombre de la etapa en el otro extremo del enlace.
v DSJ.INSTROWCOUNT: lista de recuentos de fila, separados por coma, uno por instancia (trabajos
paralelos)
v DSJ.LINKEOTROWCOUNT: recuento de filas desde el último bloque EndOfTransmission.

Capítulo 7. Programación BASIC 195


Resultado también puede devolver condiciones de error de la forma siguiente:
v DSJE.BADHANDLE DescriptorContextoTrabajo no era válido.
v DSJE.BADTYPE TipoInfo no se ha reconocido.
v DSJE.BADSTAGE NombreEtapa no hace referencia a una etapa conocida en el trabajo.
v DSJE.NOTINSTAGE NombreEtapa era DSJ.ME y el emisor de la llamada no se está ejecutando dentro
de una etapa.
v DSJE.BADLINK NombreEnlace no hace referencia a un enlace conocido para la etapa en cuestión.

Comentarios

Cuando se hace referencia a un trabajo controlado, se puede utilizar DSGetLinkInfo antes o después de
haber emitido un DSRunJob. Cualquier estado devuelto después de una llamada satisfactoria a DSRunJob
es una garantía de que está relacionado con esa ejecución del trabajo.

Ejemplo

El mandato siguiente solicita el número de filas que se han pasado al enlace order_feed en la etapa de
cargador del trabajo qsales:
link_status = DSGetLinkInfo(qsales_handle, "cargador",
→ "order_feed", DSJ.LINKROWCOUNT)

DSGetLinkMetaData
Devuelve una matriz dinámica que contiene los metadatos de columna del enlace especificado.

Sintaxis
Resultado = DSGetLinkMetaData(Nombretrabajo, NombreEtapa, NombreEnlace)
o
Call DSGetLinkMetaData(Resultado, NombreTrabajo, NombreEtapa, NombreEnlace)

NombreTrabajo es el nombre del trabajo del proyecto actual para el que es necesaria la información. Si
NombreTrabajo no existe en el proyecto actual, la función devolverá una serie vacía.

NombreEtapa es el nombre de la etapa en el trabajo especificado que contiene el enlace para el cual es
necesaria la información. Si NombreEtapa no existe en el trabajo especificado, la función devolverá una
serie vacía.

NombreEnlace es el nombre del enlace en el trabajo especificado para el cual es necesaria la información. Si
NombreEnlace no existe en el trabajo especificado, la función devolverá una serie vacía.

Resultado devuelve una matriz dinámica de nueve campos, donde cada uno de ellos contendrá N valores
donde N es el número de columnas en el enlace.

Resultado<1,1...N> es el nombre de columna

Resultado<2,1...N> es 1 para columnas de clave primaria; de lo contrario, es 0

Resultado<3,1...N> es el tipo de SQL de columna. Consulte ODBC.H.

Resultado<4,1...N> es la precisión de columna

Resultado<5,1...N> es la escala de columna

Resultado<6,1...N> es la anchura de visualización de columna

196 Guía del desarrollador de Server Job


Resultado<7,1...N> es 1 para columnas con posibilidad de nulos; de lo contrario, es 0

Resultado<8,1...N> es la descripción de columna

Resultado<9,1...N> es la derivación de columna

Ejemplo

Lo siguiente devuelve los metadatos del enlace enlacei1 en la etapa etapasec del trabajo trabajoprueba:
linksmdata = DSGetLinkMetaData (trabajoprueba, etapasec, enlacei1)

DSGetLogEntry
Lee todos los detalles del suceso proporcionados en IDsuceso.

Sintaxis
DetalleSuceso = DSGetLogEntry (DescriptorContextoTrabajo, IDsuceso)

DescriptorContextoTrabajo es el descriptor de contexto para el trabajo tal como se deriva de DSAttachJob.

IDsuceso es un entero que identifica el suceso de registro específico para el que son necesarios los detalles.
Se obtiene utilizando la función DSGetNewestLogId.

DetalleSuceso es una serie que contiene subseries separadas por \. Las subseries tienen la forma siguiente:

Subserie1 Indicación de fecha y hora en formato AAAA-MM-DD HH:NN:SS

Subserie2 Información de usuario

Subserie3 Tipo de suceso - consulte DSGetNewestLogId

Subserie4 - n Mensaje de suceso

Si se produce un error, el error se notifica mediante uno de los siguientes códigos de resultado de entero
negativo:
v DSJE.BADHANDLE DescriptorContextoTrabajo no válido.
v DSJE.BADVALUE Error al acceder a IDsuceso.

Ejemplo

Los mandatos siguientes en primer lugar obtienen el IDsuceso para el suceso de registro necesario y a
continuación leen todos los detalles del suceso del suceso de registro identificado por LatestLogid en la
serie LatestEventString:
latestlogid =
→ DSGetNewestLogId(qsales_handle,DSJ.LOGANY)
LatestEventString =
→ DSGetLogEntry(qsales_handle,latestlogid)

DSGetLogEventIds
Devuelve una lista de ID de suceso de registro para una ejecución determinada de una invocación de
trabajo.

Capítulo 7. Programación BASIC 197


Sintaxis
ListaID = DSGetLogEventIds (DescriptorContextoTrabajo, NúmeroEjecución, FiltroTipoSuceso)

DescriptorContextoTrabajo es el descriptor de contexto para el trabajo tal como se deriva de DSAttachJob.

NúmeroEjecución identifica la ejecución de invocación de trabajo para la que se devuelven los ID de


suceso. Normalmente un valor de cero solicita los ID para la ejecución más reciente de la invocación de
trabajo. Para recuperar detalles para ejecuciones anteriores, proporcione valores negativos, como por
ejemplo -1 para obtener detalles sobre la ejecución anterior a la más reciente, -2 para obtener detalles
sobre la ejecución anterior a esa, y así sucesivamente. En los casos dónde conozca los números explícitos
de ejecución, puede recuperar detalles proporcionando el número de ejecución como un valor positivo.

FiltroTipoSuceso restringe los tipos de entrada de registro de suceso para los que se devuelven los ID. De
forma predeterminada se devuelven los ID para todas las entradas de registro. Incluya caracteres en la
serie del filtro para restringir las entradas de la forma siguiente:
I Informativo
W Aviso
F Muy grave
S Sucesos de inicio o finalización
B Sucesos de proceso por lotes o control
R Sucesos de depuración o restablecimiento
J Sucesos de rechazo

ListaID se devuelve como una lista de enteros positivos que identifican los sucesos de registro necesarios.
En caso de un error, ListaID también se puede devolver como un entero negativo, en cuyo caso contiene
uno de estos códigos de error:
DSJE.BADHANDLE
DescriptorContextoTrabajo no válido.
DSJE.BADTYPE
FiltroTipoSuceso no válido.
DSJE.BADVALUE
NúmeroEjecución no válido.

Comentarios

Para utilizar este método, es necesario que el programa haya adquirido anteriormente un descriptor de
contexto de trabajo llamando a DSAttachJob.

El número de ejecución para una invocación de trabajo se restablece cuando se compila el trabajo; por lo
tanto, no es posible utilizar este método para recuperar ID de suceso de trabajo para ejecuciones que se
han producido antes de la compilación más reciente del trabajo.

DSGetLogSummary
Devuelve una lista de detalles cortos de suceso de registro. Los detalles que se devuelven se determinan
mediante el establecimiento de algunos filtros. (Se debe tener cuidado al establecer los filtros; de lo
contrario, se puede devolver una gran cantidad de información.)

198 Guía del desarrollador de Server Job


Sintaxis
MatrizResumen = DSGetLogSummary (DescriptorContextoTrabajo, TipoSuceso, HoraInicio, HoraFinalización,
NúmeroMáx)

DescriptorContextotrabajo es el descriptor de contexto para el trabajo tal como se deriva de DSAttachJob.

TipoSuceso es el tipo de suceso registrado y es uno de los siguientes:


v DSJ.LOGINFO Mensaje de información
v DSJ.LOGWARNING Mensaje de aviso
v DSJ.LOGFATAL Error muy grave
v DSJ.LOGREJECT El enlace de rechazo estaba activo
v DSJ.LOGSTARTED Se ha iniciado el trabajo
v DSJ.LOGRESET Se ha restablecido el registro
v DSJ.LOGANY Cualquier categoría (el valor predeterminado)

HoraInicio es una serie con el formato AAAA-MM-DD HH:NN:SS o AAAA-MM-DD.

HoraFinalización es una serie con el formato AAAA-MM-DD HH:NN:SS o AAAA-MM-DD.

NúmeroMáx es un entero que restringe el número de sucesos a devolver. 0 significa ninguna restricción.
Utilice este valor con precaución.

MatrizResumen es una matriz dinámica de campos separados por @FM. Cada campo consta de un
conjunto de subseries separadas por \, donde cada campo representa un suceso separado, con las
subseries con el formato siguiente:

Subserie1 IDsuceso como por DSGetLogEntry

Subserie2 Indicación de fecha y hora con el formato AAAA-MM-DD HH:NN:SS

Subserie3 TipoSuceso - consulte DSGetNewestLogId

Subserie4 - n Mensaje de suceso

Si se produce un error, el error se notifica mediante uno de los siguientes códigos de resultado de entero
negativo:
v DSJE.BADHANDLE DescriptorContextoTrabajo no válido.
v DSJE.BADTYPE TipoSuceso no válido.
v DSJE.BADTIME HoraInicio u HoraFinalización no válido.
v DSJE.BADVALUE NúmeroMáx no válido.

Ejemplo

El mandato siguiente produce una matriz de sucesos activos de enlace de rechazo registrados para el
trabajo qsales entre el 18 de agosto de 1998 y el 18 de septiembre de 1998, hasta un máximo de MAXREJ
entradas:
RejEntries = DSGetLogSummary (qsales_handle,
→ DSJ.LOGREJECT, "1998-08-18 00:00:00", "1998-09-18
→ 00:00:00", MAXREJ)

DSGetNewestLogId
Obtiene el ID del suceso de registro más reciente en una categoría determinada o en cualquier categoría.

Capítulo 7. Programación BASIC 199


Sintaxis
IDsuceso = DSGetNewestLogId (DescriptorContextoTrabajo, TipoSuceso)

DescriptorContextoTrabajo es el descriptor de contexto para el trabajo tal como se deriva de DSAttachJob.

TipoSuceso es el tipo de suceso registrado y es uno de los siguientes:


v DSJ.LOGINFO Mensaje de información
v DSJ.LOGWARNING Mensaje de aviso
v DSJ.LOGFATAL Error muy grave
v DSJ.LOGREJECT El enlace de rechazo estaba activo
v DSJ.LOGSTARTED Se ha iniciado el trabajo
v DSJ.LOGRESET Se ha restablecido el registro
v DSJ.LOGANY Cualquier categoría (el valor predeterminado)

IDsuceso es un entero positivo que identifica el suceso de registro específico. En caso de un error, IDsuceso
también se puede devolver como un entero negativo, en cuyo caso contiene un código de error como el
siguiente:
v DSJE.BADHANDLE DescriptorContextoTrabajo no válido.
v DSJE.BADTYPE TipoSuceso no válido.

Ejemplo

El mandato siguiente obtiene un ID para el mensaje de aviso más reciente en el registro para el trabajo
qsales:
IDAviso = DSGetNewestLogId (qsales_handle,
→ DSJ.LOGWARNING)

DSGetParamInfo
Proporciona un método de obtener información sobre un parámetro, que se puede utilizar de forma
general así como para control de trabajo. Esta rutina puede hacer referencia a un trabajo controlado o al
trabajo actual, en función del valor de DescriptorContextoTrabajo.

Sintaxis
Resultado = DSGetParamInfo (DescriptorContextoTrabajo, NombreParám, TipoInfo)

DescriptorContextoTrabajo es el descriptor de contexto para el trabajo tal como se deriva de DSAttachJob


o puede ser DSJ.ME para hacer referencia al trabajo actual.

NombreParám es el nombre del parámetro que se interrogará.

TipoInfo especifica la información necesaria y puede ser uno de los valores siguientes:

DSJ.PARAMDEFAULT

DSJ.PARAMHELPTEXT

DSJ.PARAMPROMPT

DSJ.PARAMTYPE

DSJ.PARAMVALUE

200 Guía del desarrollador de Server Job


DSJ.PARAMDES.DEFAULT

DSJ.PARAMLISTVALUES

DSJ.PARAMDES.LISTVALUES

DSJ.PARAMPROMPT.AT.RUN

Resultado depende del TipoInfo especificado, de la forma siguiente:


v DSJ.PARAMDEFAULT Serie: valor predeterminado actual para el parámetro en cuestión. Consulte
también DSJ.PARAMDES.DEFAULT.
v DSJ.PARAMHELPTEXT Serie: texto de ayuda (si existe) para el parámetro en cuestión.
v DSJ.PARAMPROMPT Serie: solicitud (si existe) para el parámetro en cuestión.
v DSJ.PARAMTYPE Entero: describe el tipo de prueba de validación que se debe realizar en cualquier
valor que se establezca para este parámetro. Es uno de los siguientes:
DSJ.PARAMTYPE.STRING
DSJ.PARAMTYPE.ENCRYPTED
DSJ.PARAMTYPE.INTEGER
DSJ.PARAMTYPE.FLOAT (el parámetro puede contener puntos y E)
DSJ.PARAMTYPE.PATHNAME
DSJ.PARAMTYPE.LIST (debe ser un conjunto de series separadas por tabulador)
DSJ.PARAMTYPE.DATE (debe ser una serie con el formato AAAA-MM-DD)
DSJ.PARAMTYPE.TIME (debe ser una serie con el formato HH:MM)
v DSJ.PARAMVALUE Serie: valor actual del parámetro para el trabajo en ejecución o la última ejecución
de trabajo si el trabajo ha finalizado.
v DSJ.PARAMDES.DEFAULT Serie: valor predeterminado original del parámetro - puede ser distinto de
DSJ.PARAMDEFAULT si este último ha sido cambiado por un administrador desde que se instaló el
trabajo.
v DSJ.PARAMLISTVALUES Serie: lista separada por tabuladores de valores permitidos para el
parámetro. Consulte también DSJ.PARAMDES.LISTVALUES.
v DSJ.PARAMDES.LISTVALUES Serie: lista original separada por tabuladores de valores permitidos para
el parámetro - puede ser diferente de DSJ.PARAMLISTVALUES si este último ha sido cambiado por el
administrador desde que se instaló el trabajo.
v DSJ.PROMPT.AT.RUN Serie: 1 significa que se solicitará el parámetro cuando se ejecute el trabajo;
cualquier otro valor significa que no se solicitará (DSJ.PARAMDEFAULT Serie que se utilizará
directamente).

Resultado también puede devolver condiciones de error de la forma siguiente:


v DSJE.BADHANDLE DescriptorContextoTrabajo no era válido.
v DSJE.BADPARAM NombreParám no es un nombre de parámetro en el trabajo.
v DSJE.BADTYPE TipoInfo no se ha reconocido.

Comentarios

Cuando se hace referencia a un trabajo controlado, DSGetParamInfo se puede utilizar antes o después de
haber emitido un DSRunJob. Cualquier estado devuelto después de una llamada satisfactoria a DSRunJob
es una garantía de que está relacionado con esa ejecución del trabajo.

Ejemplo

El mandato siguiente solicita el valor predeterminado del parámetro de trimestre para el trabajo qsales:

Capítulo 7. Programación BASIC 201


Qs_quarter = DSGetparamInfo(qsales_handle, "trimestre",
→ DSJ.PARAMDEFAULT)

DSGetProjectInfo
Proporciona un método de obtención de información sobre el proyecto actual.

Sintaxis
Resultado = DSGetProjectInfo (TipoInfo)

TipoInfo especifica la información necesaria y puede ser una de las opciones siguientes:

DSJ.JOBLIST

DSJ.PROJECTNAME

DSJ.HOSTNAME

Resultado depende del TipoInfo especificado, de la forma siguiente:


v DSJ.JOBLIST Serie - lista de nombres separados por coma de todos los trabajos conocidos por el
proyecto (tanto si los trabajos están conectados actualmente como si no).
v DSJ.PROJECTNAME Serie - nombre del proyecto actual.
v DSJ.HOSTNAME Serie - nombre del host del motor que mantiene el proyecto actual.

Resultado puede devolver también una condición de error de la forma siguiente:


v DSJE.BADTYPE TipoInfo no se ha reconocido.

DSGetStageInfo
Proporciona un método de obtener información sobre una etapa, que se puede utilizar de forma general
así como para control de trabajos. Puede hacer referencia al trabajo actual, o un trabajo controlado, en
función del valor de DescriptorContextoTrabajo.

Sintaxis
Resultado = DSGetStageInfo (DescriptorContextoTrabajo, NombreEtapa, TipoInfo)

DescriptorContextoTrabajo es el descriptor de contexto para el trabajo tal como se deriva de DSAttachJob o


puede ser DSJ.ME para hacer referencia al trabajo actual.

NombreEtapa es el nombre de la etapa que se interrogará. También puede ser DSJ.ME para hacer
referencia a la etapa actual, si es necesario.

TipoInfo especifica la información necesaria y puede ser uno de los valores siguientes:

DSJ.LINKLIST

DSJ.STAGELASTERR

DSJ.STAGENAME

DSJ.STAGETYPE

DSJ.STAGEINROWNUM

202 Guía del desarrollador de Server Job


DSJ.VARLIST

DSJ.STAGESTARTTIMESTAMP

DSJ.STAGEENDTIMESTAMP

DSJ.STAGEDESC

DSJ.STAGEINST

DSJ.STAGECPU

DSJ.LINKTYPES

DSJ.STAGEELAPSED

DSJ.STAGEPID

DSJ.STAGESTATUS

DSJ.STAGEEOTCOUNT

DSJ.STAGEEOTTIMESTAMP

DSJ.CUSTINFOLIST

DSJ.STAGEEOTSTART

Resultado depende del TipoInfo especificado, de la forma siguiente:


v DSJ.LINKLIST - lista separada por comas de nombres de enlace en la etapa.
v DSJ.STAGELASTERR Serie - último mensaje de error (si hay alguno) notificado desde cualquier enlace
de la etapa en cuestión.
v DSJ.STAGENAME Serie - resulta especialmente útil cuando se utiliza con DescriptorContextoSerie =
DSJ.ME y NobreEtapa = DSJ.ME para descubrir su propio nombre.
v DSJ.STAGETYPE Serie - el nombre de tipo de etapa (por ejemplo, "Transformer", "BeforeJob").
v DSJ.STAGEINROWNUM Entero - el número de fila de entrada del enlace primario.
v DSJ.VARLIST - lista separada por comas de nombres de variables de etapa.
v DSJ.STAGESTARTTIMESTAMP - fecha/hora en la que esa etapa ha empezado su ejecución con el
formato AAAA-MM-DD HH:NN:SS.
v DSJ.STAGEENDTIMESTAMP - fecha/hora en la que esa etapa ha finalizado su ejecución con el
formato AAA-MM-DD HH:NN:SS.
v DSJ.STAGEDESC - descripción de etapa.
v DSJ.STAGEINST - lista separada por comas de ID de instancia (trabajos paralelos).
v DSJ.STAGECPU - porcentaje en entero de CPU utilizada.
v DSJ.LINKTYPES - lista separada por comas de tipos de enlace.
v DSJ.STAGEELAPSED - tiempo transcurrido en segundos.
v DSJ.STAGEPID - lista separada por comas de ID de proceso.
v DSJ.STAGESTATUS - estado de etapa.
v DSJ.STAGEEOTCOUNT - Recuento de bloques EndOfTransmission procesados por esta etapa hasta
ahora.
v DSJ.STAGEEOTTIMESTAMP - Fecha/hora del último bloque EndOfTransmission recibido por esta
etapa.

Capítulo 7. Programación BASIC 203


v DSJ.CUSTINFOLIST - información personalizada generada por etapas (trabajos paralelos).
v DSJ.STAGEEOTSTART - recuento de filas al inicio del bloque EndOfTransmission actual.

Resultado también puede devolver condiciones de error de la forma siguiente:


v DSJE.BADHANDLE DescriptorContextoTrabajo no era válido.
v DSJE.BADTYPE TipoInfo no se ha reconocido.
v DSJE.NOTINSTAGE NombreEtapa era DSJ.ME y el emisor de la llamada no se está ejecutando dentro de
una etapa.
v DSJE.BADSTAGE NombreEtapa no hace referencia a una etapa conocida en el trabajo.

Comentarios

Cuando se hace referencia a un trabajo controlado, se puede utilizar DSGetStageInfo antes o después de
emitir un DSRunJob. Cualquier estado devuelto después de una llamada satisfactoria a DSRunJob es una
garantía de que está relacionado con esa ejecución del trabajo.

Ejemplo

El mandato siguiente solicita el último mensaje de error para la etapa de cargador del trabajo qsales:
stage_status = DSGetStageInfo(qsales_handle, "cargador",
→ DSJ.STAGELASTERR)

DSGetStageLinks
Devuelve una lista delimitada por marcas de campo que contiene los nombres de todos los enlaces de
entrada/salida de la etapa especificada.

Sintaxis
Resultado = DSGetStageLinks(Nombretrabajo, NombreEtapa, Clave)
o
Call DSGetStageLinks(Resultado, NombreTrabajo, NombreEtapa, Clave)

NombreTrabajo es el nombre del trabajo del proyecto actual para el que es necesaria la información. Si
NombreTrabajo no existe en el proyecto actual, la función devolverá una serie vacía.

NombreEtapa es el nombre de la etapa en el trabajo especificado para la que es necesaria información. Si


NombreEtapa no existe en el trabajo especificado, la función devolverá una serie vacía.

Clave dependiendo del valor de la clave, la lista devuelta contendrá todos los enlaces de la etapa
(Clave=0), sólo los enlaces de entrada de la etapa (Clave=1) o sólo los enlaces de salida de la etapa
(Clave=2).

Resultado devuelve una lista delimitada por marcas de campo que contiene los nombres de los enlaces.

Ejemplo

Lo siguiente devuelve una lista de todos los enlaces de entrada en la etapa denominada "unión1" en el
trabajo "trabajoprueba":
linkslist = DSGetStageLinks (trabajoprueba, unión1, 1)

204 Guía del desarrollador de Server Job


DSGetStagesOfType
Devuelve una lista delimitada por marcas de campo que contiene los nombres de todas las etapas del
tipo especificado en el trabajo nombrado.

Sintaxis
Resultado = DSGetStagesOfType (NombreTrabajo, TipoEtapa)
o bien
Call DSGetStagesOfType (Resultado, NombreTrabajo, TipoEtapa)

NombreTrabajo es el nombre del trabajo del proyecto actual para el que es necesaria la información. Si
NombreTrabajo no existe en el proyecto actual, la función devolverá una serie vacía.

TipoEtapa es el nombre del tipo de etapa, como muestra el formulario de propiedades de tipo de etapa de
repositorio, como por ejemplo CTransformerStage o ORAOCI8. Si el TipoEtapa no existe en el proyecto
actual o no hay etapas de ese tipo en el trabajo especificado, la función devolverá una serie vacía.

Resultado devuelve una lista delimitada por marcas de campo que contiene los nombres de todas las
etapas del tipo especificado en un trabajo nombrado.

Ejemplo

Lo siguiente devuelve una lista de todas las etapas Aggregator en el trabajo paralelo "trabajoprueba":
stagelist = DSGetStagesOfType (trabajoprueba, PxAggregator)

DSGetStagesTypes
Devuelve una serie delimitada por marcas de campo de todos los tipos de etapas activas y pasivas que
existen dentro de un trabajo nombrado.

Sintaxis
Resultado = DSGetStageTypes(Nombretrabajo)
o
Call DSGetStageTypes(Resultado, Nombretrabajo)

NombreTrabajo es el nombre del trabajo del proyecto actual para el que es necesaria la información. Si
NombreTrabajo no existe en el proyecto actual, Resultado se establecerá en una serie vacía.

Resultado es una serie delimitada por marcas de campo de tipos de etapas dentro de NombreTrabajo.

Ejemplo

Lo siguiente devuelve una lista de todos los tipos de etapa en el trabajo "trabajoprueba":
stagetypelist = DSGetStagesOfType (trabajoprueba)

DSGetVarInfo
Proporciona un método de obtención de información sobre variables utilizado en las etapas Transformer.

Sintaxis
Resultado = DSGetVarInfo (DescriptorContextotrabajo, NombreEtapa, NombreVar, TipoInfo)

DescriptorContextoTrabajo es el descriptor de contexto para el trabajo tal como se deriva de DSAttachJob o


puede ser DSJ.ME para hacer referencia al trabajo actual.

Capítulo 7. Programación BASIC 205


NombreEtapa es el nombre de la etapa que se interrogará. También puede ser DSJ.ME para hacer
referencia a la etapa actual, si es necesario.

NombreVar es el nombre de la variable que se interrogará.

TipoInfo especifica la información necesaria y puede ser una de las opciones siguientes:

DSJ.VARVALUE

DSJ.VARDESCRIPTION

Resultado depende del TipoInfo especificado, de la forma siguiente:


v DSJ.VARVALUE Serie: el valor de la variable especificada.
v DSJ.VARDESCRIPTION Serie: descripción de la variable especificada.

Resultado puede devolver también una condición de error de la forma siguiente:


v DSJE.BADHANDLE DescriptorContextoTrabajo no era válido.
v DSJE.BADTYPE TipoInfo no se ha reconocido.
v DSJE.NOTINSTAGE NombreEtapa era DSJ.ME y el emisor de la llamada no se está ejecutando dentro de
una etapa.
v DSJE.BADVAR NombreVar no se ha reconocido.
v DSJE.BADSTAGE NombreEtapa no hace referencia a una etapa conocida en el trabajo.

DSIPCPageProps
Devuelve el tamaño (en KB) del almacenamiento intermedio de envío y recepción de una etapa IPC (o
servicio web).

Sintaxis
Resultado = DSGetIPCStageProps (NombreTrabajo, NombreEtapa)
o
Call DSGetIPCStageProps (Resultado, Nombretrabajo, NombreEtapa)

NombreTrabajo es el nombre del trabajo del proyecto actual para el que es necesaria la información. Si
NombreTrabajo no existe en el proyecto actual, Resultado se establecerá en una serie vacía.

NombreEtapa es el nombre de una etapa IPC en el trabajo especificado para la que es necesaria
información. Si NombreEtapa no existe o si no es una etapa IPC dentro de NombreTrabajo, el Resultado se
establecerá en una serie vacía.

Resultado es una matriz que contiene los campos siguientes:


v el tamaño (en kilobytes) del almacenamiento intermedio de envío y recepción de la etapa IPC (o
servicio web) NombreEtapa dentro de NombreTrabajo.
v el valor de tiempo de espera excedido en segundos de la etapa IPC (o servicio web) NombreEtapa
dentro de NombreTrabajo.

Ejemplo

Lo siguiente devuelve el tamaño y tiempo de espera excedido de la etapa "IPC1" en el trabajo


"trabajoprueba":
buffersize = DSGetIPCStageProps (trabajoprueba, IPC1)

206 Guía del desarrollador de Server Job


DSLogEvent
Registra un mensaje de suceso en un trabajo distinto del actual. (Utilice DSLogInfo, DSLogFatal o
DSLogWarn para registrar un suceso en el trabajo actual.)

Sintaxis
CódigoError = DSLogEvent (DescriptorContextoTrabajo, TipoSuceso, MsjSuceso)

DescriptorContextoTrabajo es el descriptor de contexto para el trabajo tal como se deriva de DSAttachJob.

TipoSuceso es el tipo de suceso registrado y es uno de los siguientes:


v DSJ.LOGINFO Mensaje de información
v DSJ.LOGWARNING Mensaje de aviso

MsjSuceso es una serie que contiene el mensaje del suceso.

CódigoError es 0 si no hay ningún error. De lo contrario, contiene uno de los errores siguientes:
v DSJE.BADHANDLE DescriptorContextoTrabajo no válido.
v DSJE.BADTYPE TipoSuceso (especialmente, tenga en cuenta que no puede colocar un mensaje muy
grave en el registro de otro trabajo).

Ejemplo

El mandato siguiente, cuando se incluye en el trabajo msales, añade el mensaje "ventas mensuales
finalizadas" al registro para el trabajo qsales:
Logerror = DsLogEvent (qsales_handle, DSJ.LOGINFO,
→ "ventas mensuales finalizadas")

DSLogFatal
Registra un mensaje de error muy grave en el archivo de registro de un trabajo y termina el trabajo.

Sintaxis
Call DSLogFatal (Mensaje, NombreProgLlamada)

Mensaje (entrada) es el mensaje de aviso que desea registrar. Mensaje recibe automáticamente como prefijo
el nombre de la etapa actual y la subrutina anterior/posterior de llamada.

NombreProgLlamada (entrada) es el nombre de la subrutina anterior/posterior que llama a la subrutina


DSLogFatal.

Comentarios

DSLogFatal graba un mensaje de error muy grave en el archivo de registro del trabajo y termina
anormalmente el trabajo. DSLogFatal nunca vuelve a la subrutina anterior/posterior de llamada, de
forma que se debe utilizar con precaución. Si un trabajo se detiene con un error muy grave, se debe
restablecer utilizando el cliente del Director antes de poder volver a ejecutarlo.

En una subrutina anterior/posterior, es mejor registrar un mensaje de aviso (utilizando DSLogWarn) y


salida con un código de retorno distinto de cero, lo que permite que InfoSphere DataStage detenga el
trabajo limpiamente.

DSLogFatal no se debe utilizar en una transformación. Se utiliza DSTransformError en su lugar.

Capítulo 7. Programación BASIC 207


Ejemplo
Call DSLogFatal("No se puede abrir el archivo", "MiRutina")

DSLogInfo
Registra un mensaje de información en el archivo de registro de un trabajo.

Sintaxis
Call DSLogInfo (Mensaje, NombreProgLlamada)

Mensaje (entrada) es el mensaje de información que desea registrar. Mensaje recibe automáticamente como
prefijo el nombre de la etapa actual y del programa de llamada.

NombreProgLlamada (entrada) es el nombre de la transformación o subrutina anterior/posterior que llama


a la subrutina DSLogInfo.

Comentarios
DSLogInfo graba el texto del mensaje en el archivo de registro del trabajo como un mensaje de
información y vuelve a la rutina de llamada o transformación. Si se llama a DSLogInfo durante la fase de
prueba para una rutina recientemente creada en el repositorio, los dos argumentos se visualizan en la
ventana de resultados.

Se puede grabar un número ilimitado de mensajes de información en el archivo de registro del trabajo.
Sin embargo, si se producen muchos mensajes, es posible que el trabajo se ejecute lentamente y que el
cliente del Director tarde algún tiempo en mostrar el archivo de registro del trabajo.

Ejemplo
Call DSLogInfo("Transformando: ":Arg1, "MiTransformación")

DSLogToController
Esta rutina se puede utilizar para poner un mensaje informativo en el archivo de registro del trabajo que
controla este trabajo, si hay alguno. Si no hay ninguno, la llamada simplemente se ignora.

Sintaxis
Call DSLogToController(SerieMsj)

SerieMsj es el texto que se registrará. El suceso de registro es de tipo Información.

Comentarios

Si el trabajo actual no está bajo control, se realiza una salida silenciosa.

Ejemplo
Call DSLogToController("Se registra en el padre")

DSLogWarn
Inicia un mensaje de aviso en el archivo de registro de un trabajo.

Sintaxis
Call DSLogWarn (Mensaje, NombreProgLlamada)

208 Guía del desarrollador de Server Job


Mensaje (entrada) es el mensaje de aviso que desea registrar. Mensaje recibe automáticamente como prefijo
el nombre de la etapa actual y la subrutina anterior/posterior de llamada.

NombreProgLlamada (entrada) es el nombre de la subrutina anterior/posterior que llama a la subrutina


DSLogWarn.

Comentarios

DSLogWarn graba el mensaje en el archivo de registro del trabajo como aviso y devuelve la subrutina
anterior/posterior de llamada. Si el trabajo tiene un límite de aviso definido para el mismo, cuando el
número de avisos alcanza ese límite, la llamada no devuelve el valor de retorno y el trabajo termina
anormalmente.

DSLogWarn no se debe utilizar en una transformación. Se utiliza DSTransformError en su lugar.

Ejemplo
If InputArg > 100 Then
Call DSLogWarn("La entrada debe ser =< 100; received
":InputArg,"MiRutina")
End Else
* Continuar procesando a menos que el trabajo termine anormalmente
End

DSMakeJobReport
Genera un informe que describe el estado completo de un trabajo conectado válido.

Sintaxis
TextoInforme = DSMakeJobReport(DescriptorContextoTrabajo, NivelInforme, SeparadorLíneas)

DescriptorContextoTrabajo es la serie tal como se ha devuelto de DSAttachJob.

NivelInforme especifica el tipo de informe y es uno de los siguientes:


v 0 - informe básico. Serie de texto que contiene fecha de inicio/finalización, tiempo transcurrido y
estado de trabajo.
v 1 - detalle de etapa/enlace. Como el informe básico, pero también contiene información sobre etapas
individuales y enlaces dentro del trabajo.
v 2 - serie de texto que contiene el informe XML completo.

De manera predeterminada, el XML generado no contendrá una instrucción de proceso


<?xml-stylesheet?>. Si es necesaria una hoja de estilo, especifique un NivelInforme de 2 y añada el
nombre del URL de hoja de estilo necesario, es decir, 2;URLHojaEstilo. Esto inserta una instrucción de
proceso en el XML generado con el formato:
<?xml-stylesheet type=text/xsl" href="URLHojaEstilo"?>

SeparadorLíneas es la serie utilizada para separar líneas del informe. Los valores especiales reconocidos
son:
v "CRLF" => CHAR(13):CHAR(10)
v "LF" => CHAR(10)
v "CR" => CHAR(13)

El valor predeterminado es CRLF si se trata de Windows, de lo contrario LF.

Capítulo 7. Programación BASIC 209


Comentarios

Si se proporciona un descriptor de contexto de trabajo incorrecto, o se encuentra cualquier otro error, la


información se añade a TextoInforme.

Ejemplo
h$ = DSAttachJob("MiTrabajo", DSJ.ERRNONE)
rpt$ = DSMakeJobReport(h$,0,"CRLF")

DSMakeMsg
Inserta argumentos en una plantilla de mensaje. Opcionalmente, buscará un ID de plantilla en el archivo
de mensajes de InfoSphere DataStage y utilizará cualquier plantilla de mensaje devuelta en lugar de la
proporcionada a la rutina.

Sintaxis
TextoCompleto = DSMakeMsg(Plantilla, ListaArg)

TextoCompleto es el mensaje con parámetros sustituidos

Plantilla es la plantilla de mensaje, en la que %1, %2, etc. se sustituirán por valores en la posición
equivalente en ListaArg. Si la serie de plantilla empieza con un número seguido de "\", se asume que
forma parte de un ID de mensaje que se buscará en el archivo de mensajes de InfoSphere DataStage.

Nota: si una señal de argumento va seguida de "[E]", se asume que el valor de ese argumento es un
código de error de control de trabajo y se insertará una explicación del mismo en lugar de "[E]".
(Consulte la función DSTranslateCode.)

ListaArg es la matriz dinámica, un campo por argumento que se sustituirá.

Comentarios
Se llama a esta rutina desde el código de control de trabajo creado por JobSequence Generator. Es
básicamente un interludio para llamar a DSRMessage que oculta cualquier inclusión de tiempo de
ejecución.

También realizará sustitución de parámetros de trabajo local en el texto del mensaje. Es decir, si se llama
desde dentro de un trabajo, busca subseries como por ejemplo "#xyz#" y las sustituye por el valor del
parámetro de trabajo denominado "xyz".

Ejemplo
t$ = DSMakeMsg("Error al llamar a DSAttachJob(%1)<L>%2",
→jb$:@FM:DSGetLastErrorMsg())

DSPrepareJob
Se utiliza para asegurar que un trabajo compilado está en el estado correcto para ser ejecutado o
validado.

Sintaxis
DescriptorContextoTrabajo = DSPrepareJob(DescriptorContextoTrabajo)

DescriptorContextoTrabajo es el descriptor de contexto, tal como lo devuelve DSAttachJob(), del trabajo que
se preparará.

210 Guía del desarrollador de Server Job


DescriptorContextoTrabajo es el descriptor de contexto original o uno nuevo. Si se devuelve como 0, se
produce un error y se registra un mensaje.

Ejemplo
h$ = DSPrepareJob(h$)

DSRunJob
Inicia la ejecución de un trabajo. Tenga en cuenta que esta llamada es asíncrona; la solicitud se pasa al
motor de tiempo de ejecución, pero no se informa de su progreso.

Sintaxis
CódigoError = DSRunJob (DescriptorContextoTrabajo, ModalidadEjecución)

DescriptorContextoTrabajo es el descriptor de contexto para el trabajo tal como se deriva de DSAttachJob.

RunMode es el nombre de la modalidad en la que se ejecutará el trabajo y es una de las siguientes:


v DSJ.RUNNORMAL (Valor predeterminado) Ejecución de trabajo estándar.
v DSJ.RUNRESET El trabajo se restablecerá.
v DSJ.RUNVALIDATE El trabajo sólo se validará.
v DSJ.RUNRESTART La secuencia de trabajos reiniciable debe reiniciarse con los valores de parámetros
del trabajo original.

CódigoError es 0 si DSRunJob es satisfactorio; de lo contrario puede ser uno de los enteros negativos
siguientes:
v DSJE.BADHANDLE DescriptorContextoTrabajo no válido.
v DSJE.BADSTATE El trabajo no está en el estado correcto (compilado, no en ejecución).
v DSJE.BADTYPE ModalidadEjecución no es una modalidad conocida.

Comentarios

Si el trabajo de control se ejecuta en modalidad de validación, cualquier llamada de DSRunJob actuará


como si ModalidadEjecución fuera DSJ.RUNVALIDATE, independientemente del valor real.

Un trabajo en modalidad de validación ejecutará su rutina JobControl (si existe) en lugar de comprobar
solamente su existencia, como es el caso para las rutinas anteriores/posteriores. Esto permite examinar el
registro de qué trabajo ha iniciado en modalidad de validación.

Después de llamar a DSRunJob, el descriptor de contexto del trabajo controlado se descarga. Si es


necesario ejecutar el mismo trabajo de nuevo, debe utilizar DSDetachJob y DSAttachJob para establecer
un nuevo descriptor de contexto. Tenga en cuenta que también necesitará utilizar DSWaitForJob, ya que
no puede se conectar a un trabajo mientras está en ejecución.

Ejemplo

El mandato siguiente inicia el trabajo qsales en modalidad estándar:


RunErr = DSRunJob(qsales_handle, DSJ.RUNNORMAL)

Capítulo 7. Programación BASIC 211


DSSendMail
Esta rutina es una interfaz a un programa sendmail que se asume que existe en algún lugar de la vía de
búsqueda del usuario actual (en el host de la capa de motor). Oculta las distintas interfaces de llamada a
diversos programas sendmail y proporciona una sencilla interfaz para enviar texto. Por ejemplo:

Sintaxis
Respuesta = DSSendMail(Parámetros)

Parámetros es un conjunto de parámetros nombre:valor, separados por un carácter de marcador o "\n".

Los nombres que se reconocen actualmente (sin distinguir entre mayúsculas y minúsculas) son los
siguientes:
v "De" Dirección de correo del remitente, por ejemplo, Aqui@Enalgúnlugar.com
Sólo se puede dejar en blanco si el archivo de plantilla local no contiene una señal "%from%".
v "Para" Dirección de correo del destinatario, por ejemplo, Tu@Enalgúnlugar.com
Sólo se puede dejar en blanco si el archivo de plantilla local no contiene una señal "%to%".
v "Asunto" Algo que poner en la línea del asunto del mensaje.
Hace referencia a la señal "%subject%". Si se deja como "", se creará una línea de asunto estándar, junto
con las líneas de "From InfoSphere DataStage job: jobname"
v "Servidor" Nombre de host a través del cual se enviará el correo.
Se puede omitir en sistemas (por ejemplo, Unix) donde el nombre de host SMTP se puede configurar, y
se configura, externamente, en cuyo caso el archivo de plantilla local presumiblemente no contendrá
una señal "%server%".
v "Cuerpo" Cuerpo del mensaje.
Se puede omitir. Se enviará un mensaje vacío. Si se utiliza, debe ser el último parámetro, para permitir
la obtención de varias líneas en el mensaje, utilizando "\n" para saltos de línea. Hace referencia a la
señal "%body%".

Nota: Es posible que el texto del cuerpo contenga las señales "%report% o %fullreport% en cualquier
lugar dentro del mismo, lo que hará que se inserte en ese punto un informe en el estado de trabajo
actual. Un informe completo contiene información de etapa y enlace así como estado de trabajo.

Respuesta. Las respuestas posibles son:


v DSJE.NOERROR (0) OK
v DSJE.NOPARAM Falta nombre de parámetro - el campo no tiene el aspecto 'nombre:valor'
v DSJE.NOTEMPLATE No se puede encontrar archivo de plantilla
v DSJE.BADTEMPLATE Error en archivo de plantilla

Comentarios

La rutina busca un archivo local en el directorio actual de proyectos, con un nombre conocido. Es decir,
una plantilla para describir exactamente cómo ejecutar el mandato sendmail local.

Ejemplo
code = DSSendMail("De:yo@aquí\nPara:Tu@allí\nAsunto:Hola\nCuerpo:Línea1\nLínea2")

DSSetDisableJobHandler
Enable or disable job-level message handling.

212 Guía del desarrollador de Server Job


Syntax
ErrCode = DSSetDisableJobHandler (JobHandle, value)

JobHandle is the handle for the job as derived from DSAttachJob.

value is TRUE to disable job-level message handling, or FALSE to enable job-level message handling.

ErrCode is 0 if DSSetDisableJobHandler is successful, otherwise it is one of the following negative


integers:
v DSJE.BADHANDLE Invalid JobHandle.
v DSJE.BADVALUE value is not appropriate for that parameter type.

Example

The following command disables job-level message handling for the qsales job:
GenErr = DSSetDisableJobHandler (qsales_handle, TRUE)

DSSetDisableProjectHandler
Enable or disable project-level message handling.

Syntax
ErrCode = DSSetDisableProjectHandler (ProjectHandle, value)

ProjectHandle is the value returned from DSOpenProject.

value is TRUE to disable project-level message handling, or FALSE to enable project-level message
handling.

ErrCode is 0 if DSSetDisableProjectHandler is successful, otherwise it is one of the following negative


integers:
v DSJE.BADHANDLE Invalid ProjectHandle.
v DSJE.BADVALUE value is not appropriate for that parameter type.

Example

The following command disables project-level message handling for the qsales project:
GenErr = DSSetDisableProjectHandler (qsales_handle, TRUE)

DSSetGenerateOpMetaData
Se utiliza para especificar si el trabajo genera metadatos operativos. Altera temporalmente el valor
predeterminado para el proyecto.

Sintaxis
CódigoError = DSSetGenerateOpMetaData (DescriptorContextoTrabajo, valor)

DescriptorContextoTrabajo es el descriptor de contexto para el trabajo tal como se deriva de DSAttachJob.

valor es TRUE para generar metadatos operativos, FALSE para no generar metadatos operativos.

CódigoError es 0 si DSRunJob es satisfactorio; de lo contrario puede ser uno de los enteros negativos
siguientes:

Capítulo 7. Programación BASIC 213


v DSJE.BADHANDLE DescriptorContextoTrabajo no válido.
v DSJE.BADTYPE valor es incorrecto.

Ejemplo

El mandato siguiente hace que el trabajo qsales genere metadatos operativos independientemente de lo
que especifique el valor predeterminado del proyecto:

GenErr = DSSetGenerateOpMetaData(qsales_handle, TRUE)

DSSetJobLimit
De manera predeterminada, un trabajo controlado hereda los límites de filas o avisos del trabajo de
control. Sin embargo, la función DSSetJobLimit los puede alterar temporalmente.

Sintaxis
CódigoError = DSSetJobLimit (DescriptorTrabajoContexto, TipoLímite, ValorLímite)

DescriptorContextoTrabajo es el descriptor de contexto para el trabajo tal como se deriva de DSAttachJob.

TipoLímite es el nombre del límite que se aplicará al trabajo en ejecución y es uno de los siguientes:
v DSJ.LIMITWARN Trabajo que se detendrá después de ValorLímite sucesos de aviso.
v DSJ.LIMITROWS Etapas que se limitarán a ValorLímite filas.

ValorLímite es un entero que especifica el valor en el que se establecerá el límite. Establézcalo en 0 para
especificar un número ilimitado de avisos.

CódigoError es 0 si DSSetJobLimit es satisfactorio; de lo contrario, es uno de los siguientes valores


negativos:
v DSJE.BADHANDLE DescriptorContextoTrabajo no válido
v DSJE.BADSTATE El trabajo no está en el estado correcto (compilado, no en ejecución).
v DSJE.BADTYPE TipoLímite no es una condición de límite conocida.
v DSJE.BADVALUE ValorLímite no es adecuado para el tipo de condición de limitación.

Ejemplo

El mandato siguiente establece un límite de 10 avisos en el trabajo qsales antes de que se detenga:
LimitErr = DSSetJobLimit(qsales_handle,
→ DSJ.LIMITWARN, 10)

DSSetParam
Especifica los valores de parámetro del trabajo antes de ejecutar un trabajo. Cualquier parámetro que no
se establezca adoptará el valor predeterminado.

Sintaxis
CódigoError = DSSetParam (DescriptorContextoTrabajo, NombreParám, ValorParám)

DescriptorContextoTrabajo es el descriptor de contexto para el trabajo tal como se deriva de DSAttachJob.

NombreParám es una serie que proporciona el nombre del parámetro.

ValorParám es una serie que proporciona el valor del parámetro.


214 Guía del desarrollador de Server Job
CódigoError es 0 si DSSetParam es satisfactorio; de lo contrario, puede ser uno de los siguientes enteros
negativos:
v DSJE.BADHANDLE DescriptorContextoTrabajo no válido
v DSJE.BADSTATE El trabajo no está en el estado correcto (compilado, no en ejecución).
v DSJE.BADPARAM NombreParám no es un parámetro conocido del trabajo.
v DSJE.BADVALUE ValorParám no es adecuado para este tipo de parámetro.

Ejemplo

Los mandatos siguientes establecen el parámetro de trimestre en 1 y el parámetro de fecha de inicio en


1/1/97 para el trabajo qsales:
paramerr = DSSetParam (qsales_handle, "trimestre", "1")
paramerr = DSSetParam (qsales_handle, "fecha de inicio",
→ "1997-01-01")

DSSetUserStatus
Se aplica sólo al trabajo actual y no toma un parámetro DescriptorContextoTrabajo. La puede utilizar
cualquier trabajo en una rutina de control de trabajo o posterior para establecer un código de terminación
para la interrogación por parte de otro trabajo. De hecho, el código se puede establecer en cualquier
punto del trabajo y el último valor es el que se tomará en cualquier momento. Por lo tanto, para estar
seguro de obtener el código de terminación real para un trabajo, el emisor de la llamada debe utilizar en
primer lugar DSWaitForJob y DSGetJobInfo, comprobando si hay un estado de finalización satisfactorio.

Esta rutina se define como una subrutina, no como función, porque no hay posibles errores.

Sintaxis
Call DSSetUserStatus (EstadoUsuario)

EstadoUsuario La serie es cualquier mensaje de terminación definido por el usuario. La serie se registrará
como parte de un suceso de "control" adecuado en el registro del trabajo de llamada y se almacenará para
su recuperación por parte de DSGetJobInfo, sobrescribiendo la serie almacenada anterior.

Esta serie no debe ser un entero negativo; de lo contrario es posible que no se distinga de un error
interno en llamadas a DSGetJobInfo.

Ejemplo

El mandato siguiente establece un código de terminación de "trabajo de venta finalizado":


Call DSSetUserStatus("trabajo de venta finalizado")

DSStopJob
Esta rutina sólo se debe utilizar después de haber emitido un DSRunJob. Inmediatamente envía una
solicitud de detención al motor de tiempo de ejecución. La llamada es asíncrona. Si necesita saber que el
trabajo se ha detenido realmente, debe llamar a DSWaitForJob o utilizar la sentencia de Suspensión y
buscar DSGetJobStatus. Tenga en cuenta que la solicitud de detención se envía independientemente del
estado actual del trabajo.

Sintaxis
CódigoError = DSStopJob (DescriptorContextoTrabajo)

DescriptorContextoTrabajo es el descriptor de contexto para el trabajo tal como se deriva de DSAttachJob.

Capítulo 7. Programación BASIC 215


CódigoError es 0 si DSStopJob es satisfactorio; de lo contrario puede ser uno de los siguientes:
v DSJE.BADHANDLE DescriptorContextoTrabajo no válido.

Ejemplo

El siguiente mandato solicita que se detenga el trabajo qsales:


stoperr = DSStopJob(qsales_handle)

DSTransformError
Registra un mensaje de aviso en un archivo de registro del trabajo. Se llama a esta función desde
transformaciones solamente.

Sintaxis
Call DSTransformError (Mensaje, NombreTransformación)

Mensaje (entrada) es el mensaje de aviso que desea registrar. Mensaje recibe automáticamente como prefijo
el nombre de la etapa actual y la transformación de llamada.

NombreTransformación (entrada) es el nombre de la transformación que llama a la subrutina


DSTransformError.

Comentarios

DSTransformError graba el mensaje (y otra información) en el archivo de registro del trabajo como aviso
y vuelve a la transformación. Si el trabajo tiene un límite de aviso definido para el mismo, cuando el
número de avisos alcanza ese límite, la llamada no devuelve el valor de retorno y el trabajo termina
anormalmente.

Además del mensaje de aviso, DSTransformError registra los valores de todas las columnas en las filas
actuales para todos los enlaces de entrada y salida conectados a la etapa actual.

Ejemplo
Function MySqrt(Arg1)
If Arg1 < 0 Then
Call DSTransformError("Valor negativo:"Arg1, "MySqrt")
Return("0") ;*la transformación produce 0 en este caso
End
Result = Sqrt(Arg1) ;* de lo contrario devuelve la raíz cuadrada
Return(Result)

DSTranslateCode
Convierte un estado de control de trabajo o código de error en un mensaje de texto explicativo.

Sintaxis
Ans = DSTranslateCode(Código)

Código es:
v Si Código > 0, se presupone que es un estado de trabajo.
v Si Código < 0, se presupone que es un código de error.
v (No se debe pasar nunca 0 y devolverá "ningún error")

Ans es el mensaje asociado con el código.

216 Guía del desarrollador de Server Job


Comentarios

Si Código no se reconoce, se notificará Ans.

Ejemplo
code$ = DSGetLastErrorMsg()
ans$ = DSTranslateCode(code$)

DSWaitForFile
Suspende un trabajo hasta que existe o no existe un archivo nombrado.

Sintaxis
Respuesta = DSWaitForFile(Parámetros)

Parámetros es la vía de acceso completa del archivo que se debe esperar. No se realiza ninguna
comprobación respecto a si se trata de una vía de acceso razonable (por ejemplo, si existen todos los
directorios de la vía de acceso). Un nombre de vía de acceso que empieza con "-" indica un distintivo
para comprobar la no-existencia de la vía de acceso. No forma parte del nombre de vía de acceso.

Los parámetros también pueden finalizar con el formato "timeout:NNNN" (o "timeout=NNNN"). Esto
indica un tiempo no predeterminado que se debe esperar antes de abandonar. Existen varios formatos
posibles, y no distinguen entre mayúsculas y minúsculas:
v nnn número de segundos a esperar (a partir de ahora)
v nnnS ídem
v nnnM número de minutos que se debe esperar (desde ahora)
v nnnH número de horas que se debe esperar (desde ahora)
v nn:nn:nn esperar hasta esta hora en 24HH:NN:SS. Si se ha pasado esta hora o nn:nn, esperará hasta el
día siguiente.

El tiempo de espera predeterminado es el mismo que "12H".

El formato puede opcionalmente terminar con "/nn", lo que indica un tiempo de retardo de sondeo en
segundos. Si se omite, se utiliza un tiempo de sondeo predeterminado.

Respuesta puede ser:


v DSJE.NOERROR (0) OK - El archivo ahora existe o no existe, dependiendo del distintivo.
v DSJE.BADTIME Formato de tiempo de espera no reconocido
v DSJE.NOFILEPATH Falta vía de acceso de archivo
v DSJE.TIMEOUT Se ha esperado demasiado

Ejemplos
Respuesta = DSWaitForFile("C:\ftp\incoming.txt timeout:2H")

(espera 7200 segundos a que exista el archivo en C: antes de abandonar.)


Respuesta = DSWaitForFile("-incoming.txt timeout=15:00")

(espera hasta las 3 de la tarde a que NO exista el archivo en el directorio local.)


Respuesta = DSWaitForFile("incoming.txt timeout:3600/60")

(espera 1 hora a que exista un archivo local, comprobándolo una vez por minuto.)

Capítulo 7. Programación BASIC 217


DSWaitForJob
Esta función sólo es válida si el trabajo actual ha emitido un DSRunJob en los DescriptorContextoTrabajo
proporcionados. Devuelve el valor de retorno si el/un trabajo se ha iniciado desde que finalizó el último
DSRunJob.

Sintaxis
CódigoError = DSWaitForJob (DescriptorContextoTrabajo)

DescriptorContextoTrabajo es la serie devuelta de DSAttachJob. Si contiene comas, es un conjunto


delimitado por comas de descriptores de contexto de trabajo, que representa una lista de trabajos a todos
los cuales se debe esperar.

CódigoError es 0 sino hay ningún error, de lo contrario los posibles valores de error (<0) son:
v DSJE.BADHANDLE DescriptorContextoTrabajo incorrecto.
v DSJE.WRONGJOB El trabajo para este DescriptorContextoTrabajo no se ha ejecutado desde dentro de
este trabajo.

CódigoError es >0 => el descriptor de contexto del trabajo ha finalizado desde una espera de varias
trabajos.

Comentarios

DSWaitForJob esperará un único trabajo o varios trabajos.

Ejemplo

Para esperar el retorno del trabajo qsales:


WaitErr = DSWaitForJob(qsales_handle)

Función Dtx
Convierte un entero decimal en hexadecimal.

Sintaxis
Dtx
(número [ ,tamaño] )

número es el número decimal que se va a convertir. Si el número es un valor nulo, se devuelve un nulo.

tamaño es el número mínimo de caracteres en el valor hexadecimal. El valor devuelto se rellena con ceros
iniciales, según sea necesario. Si el tamaño es un valor nulo, se produce un error de tiempo de ejecución.

Ejemplo

Este es un ejemplo de la función Dtx que se utiliza para convertir un número decimal en una
representación de serie hexadecimal:
MyNumber = 47
MyHex = Dtx(MyNumber) ;* devuelve "2F"
MyHex = Dtx(MyNumber, 4) ;* devuelve "002F"

218 Guía del desarrollador de Server Job


Función Ebcdic
Convierte los valores de los caracteres de una serie del formato ASCII al formato EBCDIC.

Sintaxis
Ebcdic
(serie)

serie es la serie o la expresión que desea convertir. Si la serie es un valor nulo, se produce un error de
tiempo de ejecución.

Comentarios

Las funciones Ebcdic y Ascii realizan operaciones complementarias.

Nota: Si el soporte multilingüístico está habilitado, esta función puede devolver datos no reconocidos
para la correlación de juego de caracteres actual.

Ejemplo

Este ejemplo muestra cómo se utiliza la función Ebcdic para convertir una serie de bytes ASCII:
AsciiStr = "A1"
EbcdicStr = Ebcdic(AsciiStr) ;* convierte todos los bytes a EBCDIC
* (La letra A es el decimal 193, el dígito 1 es el decimal 241 en EBCDIC)
If EbcdicStr = Char(193):Char(241) Then
... ;* ... por lo tanto, se utiliza esta ramificación
EndIf

Sentencia End
Indica el final de un programa, una subrutina o bloque de sentencias.

Sintaxis
End
End Case

Comentarios

Utilice una sentencia End en el medio de un programa para finalizar una sección de una sentencia If u
otras sentencias condicionales.

Utilice End Case para finalizar un conjunto de sentencias Case.

Ejemplos

Este ejemplo ilustra el uso de una sentencia End con varias formas de la construcción If...Then en una
rutina:
Function MyTransform(Arg1, Arg2, Arg3)
* Las cláusulas Then y Else ocupan una línea cada una:
If Arg1 Matches "A..."
Then Reply = 1
Else Reply = 2
* Cláusulas multilínea:
If Len(arg1) > 10 Then
Reply += 1
Reply = Arg2 * Reply
End Else

Capítulo 7. Programación BASIC 219


Reply += 2
Reply = (Arg2 - 1) * Reply
End
* Otro estilo de las cláusulas multilínea:
If Len(Arg1) > 20
THEN Reply += 2
Reply = Arg3 * Reply
End
Else
Reply += 4
Reply = (Arg3 - 1) * Reply
End
Return(Reply)

Este ejemplo utiliza una sentencia End Case con una sentencia Case:
Function MyTransform(Arg1)
Begin Case
Case Arg1 = 1
Reply = "A"
Case Arg1 = 2
Reply = "B"
Case Arg1 > 2 And Arg1 < 11
Reply = "C"
Case @True ;* los demás valores
Call DSTransformError("Bad arg":Arg1, "MyTransform"
Reply = ""
End Case
Return(Reply)

Sentencia Equate
Compara un valor con un símbolo o una serie literal durante la compilación. No está disponible en las
expresiones.

Sintaxis
Equate
símbolo To valor [ ,símbolo
To valor] ...
Equate símbolo Literally valor [
,símbolo Literally valor] ...

símbolo es el nombre de comparación que desea dar a un valor en el programa. El valor de símbolo no
puede ser un número.

valor es el valor que desea identificar mediante símbolo. El valor debe ir entre comillas.

To especifica que el valor es un tipo cualquiera de expresión.

Literally (o Lit) especifica que el valor es una serie literal.

Comentarios

Puede comparar el símbolo sólo una vez; de lo contrario, obtiene un error de compilador.

Ejemplo

El ejemplo siguiente muestra cómo utilizar Equate...To y Equate...Literally para establecer símbolos en el
código:

220 Guía del desarrollador de Server Job


Function MyFunction(Arg1, Arg2)
Equate Option1 To "O1"
Equate Option2 To "O2"
Equate TestOption Literally "If Arg1 = "
TestOption Option1 Then ;* el código se convierte en: If Arg1 = "1 Then
Ans = ...
End
TestOption Option2 Then ;* el código se convierte en: If Arg1 = "O2" Then
Ans = ...
End
Return(Ans)

Función Ereplace
Sustituye una o varias instancias de una subserie.

Sintaxis
Ereplace
(serie, subserie, sustitución [
,número [ ,inicio] ] )

serie es la serie o la expresión.

subserie es la subserie que desea sustituir. Si la subserie es una serie vacía, se devuelve el valor de la serie.

sustitución es la subserie de sustitución. Si sustitución es una serie vacía, se eliminan todas las apariciones
de subserie.

número especifica el número de instancias de subserie que hay que sustituir. Para cambiar todas las
instancias, utilice un valor menor que 1.

inicio especifica la primera instancia que hay que sustituir. Un valor menor que 1 toma el valor 1 de
forma predeterminada.

Comentarios

Un valor nulo para serie devuelve un valor nulo. Si utiliza un valor nulo para otra variable, se produce
un error de tiempo de ejecución.

Ejemplos

El siguiente ejemplo sustituye todas las apariciones de una subserie por otra:
MyString = "AABBCCBBDDBB"
NewString = Ereplace(MyString, "BB", "xxx")
* El resultado es "AAxxxCCxxxDDxxx"

El ejemplo siguiente sustituye sólo las dos primeras apariciones:


MyString = "AABBCCBBDDBB"
NewString = Ereplace(MyString, "BB", "xxx", 2, 1)
* El resultado es "AAxxxCCxxxDDBB"

El ejemplo siguiente elimina todas las apariciones de la subserie:


MyString = "AABBCCBBDDBB"
NewString = Ereplace(MyString, "BB", "")
* El resultado es "AACCDD"

Capítulo 7. Programación BASIC 221


Función Exchange
Sustituye un carácter en una serie.

Sintaxis
Exchange
(serie, buscar.carácter,
sustituir.carácter)

serie es la serie o la expresión que contiene el carácter que desea sustituir. Una serie nula devuelve un
valor nulo.

buscar.carácter es el valor hexadecimal del carácter que se busca. Si buscar.carácter es un valor nulo,
Exchange falla y genera un error de tiempo de ejecución.

sustituir.carácter es el valor hexadecimal del carácter de sustitución. Si el valor de sustituir.carácter es FF,


buscar.carácter se suprime de la serie. Si sustituir.carácter es un valor nulo, Exchange falla y genera un error
de tiempo de ejecución.

Comentarios

Exchange sustituye todas las apariciones del carácter especificado.

Si el soporte multilingüístico está habilitado, Exchange utiliza los dos primeros bytes de buscar.carácter y
sustituir.carácter. Los caracteres se evalúan de la siguiente manera:

Bytes Se evalúan como...


De 00 a FF De 00 a FF
De 00 a FA Caracteres Unicode de 0000 a FA
De FB a FE Delimitadores del sistema

Ejemplo

En el ejemplo siguiente, 41 es el valor hexadecimal del carácter "A" y 2E es el valor hexadecimal del
carácter de punto (.):
MyString = Exchange("ABABC", "41", "2E")
* el resultado es ".B.BC"
* La línea anterior es funcionalmente equivalente a:
* MyString = Convert("A", ".", "ABABC")

Función Exp
Devuelve el valor de "e" elevado a la potencia especificada.

Sintaxis
Exp
(potencia)

potencia es un número o una expresión numérica que especifica la potencia. Un valor nulo devuelve un
valor nulo. Si la potencia es demasiado alta o baja, se genera un mensaje de aviso y se devuelve 0.

222 Guía del desarrollador de Server Job


Comentarios

El valor de "e" es aproximadamente 2,71828. La fórmula utilizada para realizar el cálculo es:
Exp
valor de función = 2.71828**(potencia)

Ejemplo

Este ejemplo utiliza la función Exp para devolver "e" elevado a una potencia:
* Se
define el ángulo en radianes.
MyAngle = 1.3
* Se calcula la secante hiperbólica.
MyHSec = 2 / (Exp(MyAngle) + Exp(-MyAngle))

Función Field
Devuelve las subseries delimitadas de una serie.

Sintaxis
Field
(serie, delimitador,
instancia [ ,número] )

serie es la serie que contiene la subserie. Si la serie es un valor nulo, se devuelve el valor nulo.

delimitador es el carácter que delimita la subserie. Si delimitador es una serie vacía, se devuelve la serie. Si
la serie no contiene un delimitador, se devuelve una serie vacía, salvo que instancia sea 1, en cuyo caso se
devuelve la serie. Si el delimitador es un valor nulo, se produce un error de tiempo de ejecución. Si se
devuelve más de una subserie, se devuelven los delimitadores con las subseries.

instancia especifica qué instancia del delimitador termina la subserie. Si instancia es menor que 1, se supone
1. Si la serie no contiene la instancia, se devuelve una serie vacía. Si la instancia es un valor nulo, se
produce un error de tiempo de ejecución.

El número especifica el número de subseries delimitadas que se devolverán. Si el número es una serie vacía
o menor que 1, se supone 1. Si el número es un valor nulo, se produce un error de tiempo de ejecución.

Ejemplos

En el siguiente ejemplo, la variable MyString se establece en los datos entre la tercera y la cuarta
aparición del delimitador "#":
MyString = Field("###DHHH#KK","#", 4) ;* devuelve "DHHH"

En el siguiente ejemplo, SubString se establece en "" ya que el delimitador "/" no aparece en la serie:
MyString = "London+0171+NW2+AZ"
SubString = Field(Mystring, "/", 1) ;* devuelve ""

En el siguiente ejemplo, SubString se establece en "0171+NW2", ya que se han solicitado dos campos
utilizando el delimitador "+" (el segundo y el tercer campo):
MyString = "London+0171+NW2+AZ"
SubString = Field(Mystring, "+", 2, 2)
* devuelve "0171+NW2"

Capítulo 7. Programación BASIC 223


Función FieldStore
Modifica las series de caracteres insertando, suprimiendo o sustituyendo los campos separados por los
delimitadores especificados.

Sintaxis
FieldStore
(serie, delimitador,
inicio, número,
nuevos.campos)

serie es la serie que se va a modificar. Si la serie es un valor nulo, se devuelve el valor nulo.

delimitador delimita los campos y puede ser un carácter ASCII individual cualquiera. Si delimitador es
nulo, se produce un error de tiempo de ejecución.

inicio es el número del campo que inicia la modificación.


v Si inicio es mayor que el número de campos de serie, la serie se rellena con campos vacíos antes de
iniciar el proceso.
v Si inicio es nulo, se produce un error de tiempo de ejecución.

número es el número de campos de nuevos.campos que se insertan en la serie.


v Si el número es positivo, se sustituirá el número indicado de campos de serie por el número indicado de
primeros campos de nuevos.campos.
v Si el número es negativo, se sustituirán el número indicado de campos de serie por todos los campos de
nuevos.campos.
v Si el número es 0, se insertarán todos los campos de nuevos.campos en la serie antes del campo indicado
por inicio.
v Si el número es nulo, se produce un error de tiempo de ejecución.

nuevos.campos es una serie o una expresión que contiene los nuevos campos que se utilizarán. Si
nuevos.campos es nulo, se produce un error de tiempo de ejecución.

Ejemplo

Los siguientes ejemplos muestran varias formas de sustituir subseries en una serie:
MyString = "1#2#3#4#5"
String = Fieldstore(MyString, "#", 2, 2, "A#B")
* El código anterior da como resultado: "1#A#B#4#5"
String2 = Fieldstore(MyString, "#", 2, -2, "A#B")
* El código anterior da como resultado: "1#A#B#4#5"
String3 = Fieldstore(MyString, "#", 2, 0, "A#B")
* El código anterior da como resultado: "1#A#B#2#3#4#5"
String4 = Fieldstore(MyString, "#", 1, 4, "A#B#C#D")
* El código anterior da como resultado: "A#B#C#D#5"
String5 = Fieldstore(MyString, "#", 7, 3, "A#B#C#D")
* El código anterior da como resultado: "1#2#3#4#5##A#B#"

224 Guía del desarrollador de Server Job


Función FIX
Utilice la función FIX para convertir un valor numérico en un número de coma flotante con una precisión
especificada. FIX permite controlar la exactitud del cálculo eliminando los datos excesivos o poco fiables
de los resultados numéricos. Por ejemplo, una aplicación bancaria que calcula la acumulación de intereses
de las cuentas de los clientes no necesita manejar créditos expresados en fracciones de céntimos. Una
aplicación de ingeniería tiene que descartar los dígitos que rebasan el grado de fiabilidad aceptado para
los cálculos.

Sintaxis
FIX (número [ ,precisión [ ,modalidad ] ] )

La expresión número se evalúa como el valor numérico que se convertirá.Si número se evalúa como valor
nulo, se devuelve el valor nulo.

La expresión precisión se evalúa como el número de dígitos de precisión del número de coma flotante. La
precisión predeterminada es 4.

El distintivo modalidad indica cuántos dígitos sobrantes se manejan. Si modalidad es 0 o no se especifica,


los dígitos sobrantes se redondean. Si modalidad es un valor distinto de 0, los dígitos sobrantes se truncan.

Ejemplos

El ejemplo siguiente calcula un valor con la precisión predeterminada 4:


REAL.VALUE = 37.73629273
PRINT FIX (REAL.VALUE)

Esta es la salida del programa:


37.7363

El ejemplo siguiente calcula el mismo valor con dos dígitos de precisión. El primer resultado se redondea,
y el segundo se trunca:
PRINT FIX (REAL.VALUE, 2)
PRINT FIX (REAL.VALUE, 2, 1)

Esta es la salida del programa:


37.74
37.73

Función Fmt
Formatea los datos de la salida.

Sintaxis
Fmt
(serie, formato)

serie es la serie que se va a formatear. Si la serie es un valor nulo, se devuelve el valor nulo.

formato es una expresión que define cómo se formateará la serie. Si el formato es nulo, la función Fmt
falla. Para ver la sintaxis detallada, consulte Expresión de formato.

Capítulo 7. Programación BASIC 225


Comentarios

La expresión de formato proporciona un patrón para formatear la serie. Puede especificar:


v La longitud del campo de salida
v Un carácter de relleno para rellenar el campo
v Si el campo está justificado a la derecha o a la izquierda
v Un formato numérico, monetario o de fecha
v Una máscara para que actúe como plantilla del campo

Expresión de formato
Define cómo se formatea la serie.

Sintaxis
[longitud] [relleno]
justificación [edición] [máscara
]

Longitud de salida
El número de posiciones de caracteres en el campo de salida se especifica utilizando el parámetro de
longitud. Debe especificar longitud a menos que especifique máscara. (Puede especificar longitud y
máscara.)
v Si serie es menor que longitud, se rellena con caracteres de relleno.
v Si serie es mayor que longitud, la serie se divide en campos mediante una marca de texto, CHAR(251),
que se inserta cada longitud caracteres. Cada campo se rellena con caracteres de relleno hasta longitud.

Carácter de relleno
El parámetro fill se especifica para definir el carácter de relleno que se utiliza para rellenar el campo de
salida al tamaño especificado por length. El carácter de relleno predeterminado es un espacio. Si desea
emplear un carácter numérico o las letras L, R, T o Q como carácter de relleno, deberá escribirlo entre
comillas simples.

Justificación
La justificación de la salida se especifica utilizando el parámetro de justificación, que debe ser uno de los
códigos siguientes:

L Justificar a al izquierda e interrumpir al final del campo.

R Justificar a al derecha e interrumpir al final del campo.

T Justificar a la izquierda e interrumpir en espacio (especialmente indicado para los campos de texto).

U Justificar a la izquierda e interrumpir en longitud del campo.

Formatos numérico y monetario


El parámetro edit permite especificar códigos que dan formato a una serie como una salida numérica o
monetaria:

226 Guía del desarrollador de Server Job


Código
Descripción
n[m] n es un número del 0 al 9 que especifica el número de lugares decimales que se muestran. Si
especifica 0 para n, el valor se redondea al entero más próximo. La salida se rellena con ceros o se
redondea al enésimo lugar decimal, si es necesario.
m especifica cómo desescalar el valor:
v Un valor de 0 desescala el valor según la precisión actual.
v Un valor del 1 al 9 desescala del valor en m menos la precisión actual.
Si no especifica m, el valor predeterminado es 0. La precisión predeterminada es 4.
$ Antepone a la salida numérica como prefijo un signo de dólar.
F Antepone a la salida numérica como prefijo un signo de franco.
, Inserta una coma para separar los millares.
Z Suprime los ceros iniciales. Devuelve una serie vacía si el valor es 0.
E Delimita los números negativos con corchetes angulares.
C Anexa cr a los números negativos.
D Anexa db a los números positivos.
B Anexa db a los números negativos.
L Anexa el signo menos a los números negativos.
N Suprime el signo menos en los números negativos.
J Trunca un número, en lugar de redondearlo.
S Si está habilitado el soporte multilingüístico, antepone el carácter de yen/yuan al valor.

Las opciones E, M, C, D y N definen representaciones numéricas de uso monetario, mediante prefijos o


sufijos. Si el soporte multilingüístico está habilitado, estas opciones alteran temporalmente los convenios
numéricos y monetarios establecidos para el entorno local actual.

Salida enmascarada
Puede especificar una plantilla de formato para la salida utilizando el parámetro máscara. Por ejemplo, un
patrón de formato 10L##-##-#### formatea la serie 31121999 en 31-12-1999. Una máscara puede incluir los
caracteres que desee, pero estos caracteres tienen un significado especial:
#n Especifica que los datos se visualizan en un campo de n caracteres de relleno. Si la expresión de
formato no especifica un carácter de relleno, se utiliza un espacio.
%n Especifica que los datos se visualizan en un campo de n ceros.
*n Especifica que los datos se visualizan en un campo de n asteriscos.

Los demás caracteres seguidos de n insertan dichos caracteres en la salida n veces.

Si desea utilizar números o caracteres especiales como literales, debe aplicar la función de escape al
carácter especial con una barra inclinada invertida ( \ ).

máscara debe ir entre paréntesis a efectos de claridad, en cuyo caso también debe escribir entre paréntesis
la máscara completa. Por ejemplo:

((###) ###-####)

Capítulo 7. Programación BASIC 227


La función Status devuelve el resultado de la edición, de la siguiente manera:
0 El código de edición es satisfactorio.
1 La serie o la expresión no es válida.
2 El código de edición no es válido.

Formateo de números exponenciales


Estos códigos están disponibles para formatear expresiones exponenciales:
Q o QR
Justificar a la derecha una expresión exponencial e interrumpir en longitud del campo.
QL Justificar a la izquierda una expresión exponencial e interrumpir en longitud del campo.
nEm Si se usa con la justificación Q, QR o QL, n es el número de dígitos fraccionarios, y m especifica
el exponente. Cada uno puede ser un número de 0 a 9.
n.m Si se usa con la justificación Q, QR o QL, n es el número de dígitos que preceden al separador
decimal, y m es el número de dígitos fraccionarios. Cada uno puede ser un número de 0 a 9.
Z Si se utiliza con el formato Q, solo se suprimen los ceros fraccionarios finales, y se suprime el
exponente cero.

Ejemplos
Los siguientes ejemplos muestran el efecto de varios códigos Fmt. En cada caso, el resultado se muestra
como una serie, para que estén visibles todos los espacios significativos.
Expresión de formato
Valor formateado
X = Fmt("1234567", "14R2")
X = "1234567.00"
X = Fmt("1234567", "14R2$,"
X = " $1,234,567.00"
X = Fmt("12345", "14*R2$,"
X = "****$12,345.00"
X = Fmt("1234567", "14L2"
X = "1234567.00"
X = Fmt("0012345", "14R")
X = "0012345"
X = Fmt("0012345", "14RZ")
X = "12345"
X = Fmt("00000", "14RZ")
X = " "
X = Fmt("12345", "14’0’R")
X = "00000000012345"
X = Fmt("ONE TWO THREE", "10T")
X = "ONE TWO ":T:"THREE"
X = Fmt("ONE TWO THREE", "10R")
X = "ONE TWO TH":T:"REE "
X = Fmt("AUSTRALIANS", "5T")
X = "AUSTR":T:"ALIAN":T:"S "

228 Guía del desarrollador de Server Job


X = Fmt("89", "R#####")
X = " 89"
X = Fmt("6179328323", "L###-#######")
X = "617-9328323"
X = Fmt("123456789", "L#3-#3-#3")
X = "123-456-789"
X = Fmt("123456789", "R#5")
X = "56789"
X = Fmt("67890", "R#10")
X = " 67890"
X = Fmt("123456789", "L#5")
X = "12345"
X = Fmt("12345", "L#10")
X = "12345 "
X = Fmt("123456", "R##-##-##")
X = "12-34-56"
X = Fmt("555666898", "20*R2$,")
X = "*****$555,666,898.00"
X = Fmt("DAVID", "10.L")
X = "DAVID....."
X = Fmt("24500", "10R2$Z")
X = " $24500.00"
X = Fmt("0.12345678E1", "9*Q")
X = "*1.2346E0"
X = Fmt("233779", "R")
X = "233779"
X = Fmt("233779", "R0")
X = "233779"
X = Fmt("233779", "R00")
X = "2337790000"
X = Fmt("233779", "R2")
X = "233779.00"
X = Fmt("233779", "R20")
X = "2337790000.00"
X = Fmt("233779", "R24")
X = "233779.00"
X = Fmt("2337.79", "R")
X = "2337.79"
X = Fmt("2337.79", "R0"
X = "2338"
X = Fmt("2337.79", "R00")
X = "23377900"
X = Fmt("2337.79", "R2")
X = "2337.79"

Capítulo 7. Programación BASIC 229


X = Fmt("2337.79", "R20")
X = "23377900.00"
X = Fmt("2337.79", "R24")
X = "2337.79"
X = Fmt("2337.79", "R26")
X = "23.38"

Función FmtDP
En la modalidad de soporte multilingüístico, formatea los datos en las posiciones de visualización en
lugar de por longitud de caracteres.

Sintaxis
FmtDP
(serie, formato [,
nombrecorrelación] )

serie es la serie que se va a formatear. Si la serie es un valor nulo, se devuelve el valor nulo. Los caracteres
que no se pueden correlacionar en la serie se supone que tienen una longitud de visualización de 1.

formato es una expresión que define cómo se formateará la serie. Si el formato es nulo, FmtDP falla. Para
ver la sintaxis detallada, consulte Expresión de formato.

nombrecorrelación es el nombre de una correlación de juego de caracteres que se utiliza para el formateo. Si
no se especifica el nombrecorrelación, se utiliza el valor predeterminado actual para el proyecto o el trabajo.

Comentarios

FmtDP está especialmente indicada para su uso con juegos de caracteres de varios bytes. Si el soporte
multilingüístico no está habilitado, la función FmtDP funciona como una función Fmt equivalente.

Función Fold
Dobla las series para crear subseries.

Sintaxis
Fold
(serie, longitud)

serie es la serie que se va a doblar.

longitud es la longitud de las subseries en caracteres.

Comentarios

Utilice la función Fold para dividir una serie en un número de subseries separadas por marcas de campo.

El valor de serie se separa en subseries de longitud igual o menor que longitud. El valor de serie se separa
por los espacios en blanco, si es posible, y de lo contrario se separa en subseries de la longitud
especificada.

Si serie se evalúa como valor nulo, se devuelve el valor nulo. Si longitud es menor que 1, se devuelve una
serie vacía. Si longitud es el valor nulo, Fold falla y el programa termina con un mensaje de error de
tiempo de ejecución.

230 Guía del desarrollador de Server Job


Ejemplo
A=Fold("This is a folded string", 5)

Establece A e:
ThisFis a FfoldeFdFstrinFg

Donde F es la marca de campo.

Función FoldDP
En la modalidad de soporte multilingüístico, dobla las series para crear subseries utilizando las
posiciones de visualización de los caracteres.

Sintaxis
FoldDP
(serie, longitud [ ,
nombrecorrelación ] )

serie es la serie que se va a doblar.

longitud es la longitud de las subseries en posiciones de visualización.

nombrecorrelación es el nombre de una correlación de juego de caracteres que se utiliza para el formateo. Si
no se especifica el nombrecorrelación, se utiliza el valor predeterminado actual para el proyecto o el trabajo.

Comentarios
La función FoldDP está especialmente indicada para su uso con juegos de caracteres de varios bytes. Si el
soporte multilingüístico no está habilitado, la función FoldDP funciona como una función Fold
equivalente.

Sentencias For...Next
Cree un bucle de programa For...Next. No está disponible en las expresiones.

Sintaxis
For
variable = inicio To fin
[Step incremento]
[sentencias.bucle]
[Continue|Exit]
[ {While | Until} condición]
[sentencias.bucle]
[Continue]
Next [variable]

For variable identifica el inicio del bucle.

inicio To fin especifica el valor de inicio y de fin del contador que define cuántas veces se va a repetir el
programa en bucle.

Step incremento especifica la cantidad que aumenta el contador cuando se alcanza una sentencia Next.

sentencias.bucle son las sentencias que se ejecutan en el bucle.

Continue inicia la siguiente iteración del bucle desde un punto en el bucle.

Capítulo 7. Programación BASIC 231


Exit sale del bucle desde un punto en el bucle.

While...Continue es un bucle interior. Si condición se evalúa en true, el bucle interior continúa


ejecutándose. Si condición se evalúa en false, el bucle interior finaliza. La ejecución del programa continúa
con la sentencia que figura a continuación de la sentencia Next. Si condición se evalúa como un valor
nulo, la condición es falsa.

Until...Continue es un bucle interior. Si condición se evalúa en false, el bucle interior continúa


ejecutándose. Cuando condición se evalúa en true, el bucle finalizará y la ejecución del programa
continuará con la sentencia que figura tras la sentencia Next.

condición define la condición para ejecutar un bucle While o Until. condición puede ser una sentencia
cualquiera que utilice una cláusula Then...Else, pero la cláusula Then...Else no se incluye. En su lugar,
cuando la sentencia condicional ejecuta la cláusula Else, condición se evalúa en false; cuando la sentencia
condicional ejecuta la cláusula Then, condición se evalúa en true. La cláusula Locked no está soportada en
este contexto.

Next variable especifica el final del bucle. variable es la variable que se utiliza para definir el bucle con la
sentencia For. Su uso es opcional, pero se recomienda para mejorar la legibilidad del programa, en
concreto, si utiliza bucles anidados.

Comentarios

Puede utilizar varias cláusulas While y Until en un bucle For...Next. Si anida bucles For...Next, cada
bucle debe tener un nombre de variable exclusivo como contador. Si una sentencia Next no tiene ninguna
sentencia For correspondiente, genera un error de compilador.

Ejemplo

Este ejemplo utiliza sentencias For...Next para crear una serie que contiene tres instancias de los números
del 5 al 1, donde cada serie está separada de la otra por un guión. El bucle externo utiliza una variable
de contador de bucle que disminuye en 1 cada vez que pasa por el bucle.
String = "" ;* debe configurarse
el valor inicial
For Outer = 5 To 1 Step -1 ;* 5 repeticiones externas
For Inner = 1 To 3 ;* 5 repeticiones internas
String = String : Outer
Next Inner
String = String : "-" ;* se añade un guión
Next Outer
* La serie será parecida a: 555-444-333-222-111-.

Sentencia Function
Identifica una función escrita por el usuario y especifica el número y los nombres de los argumentos que
se le pasarán. No está disponible en las expresiones.

Sintaxis
Function
[nombre] [ argumento1 [,
argumento2] ...]

nombre es el nombre de la función escrita por el usuario y puede ser cualquier nombre de variable válido.

argumento1 y argumento2 son los nombres formales de los argumentos que se van a pasar a la función.
Los nombres formales hacen referencia a los nombres reales de los parámetros que se utilizan en el
programa de llamada (véase los ejemplos). Puede especificar hasta 254 argumentos. La función de

232 Guía del desarrollador de Server Job


llamada en el programa principal debe especificar el mismo número de argumentos que la sentencia
Function.

Comentarios

Una función escrita por el usuario puede contener una sola sentencia Function, que debe ser la primera
línea no comentada.

Un argumento adicional está oculto para que la función escrita por el usuario pueda utilizarlo para
devolver un valor. La función escrita por el usuario conserva un argumento adicional para que se
devuelva un valor mediante la sentencia Return. Si utiliza la sentencia Return en una función escrita por
el usuario y no especifica un valor para devolver, se devuelve una serie vacía.

Llamada a la función escrita por el usuario

El programa de llamada debe contener una sentencia Deffun que defina la función escrita por el usuario
antes de invocarla. La función escrita por el usuario debe estar catalogada en un catálogo local o el
catálogo del sistema, o debe ser un registro del mismo archivo de objeto que el programa de llamada.

Si la función definida por el usuario se invoca a sí misma recursivamente, debe incluir una sentencia
Deffun antes de la llamada recursiva. Por ejemplo:
Function Cut(expression, character)
Deffun Cut (A1,A2)
If character # ’’ Then
...
Return (Cut (expression, character [2,999999]))
End Else
Return (expression)
End
End

Ejemplos

En este ejemplo, una función definida por el usuario denominada Short compara la longitud de dos
argumentos y devuelve el más corto:
Function Short(A,B)
AL = Len(A)
BL = Len(B)
If AL < BL Then Result = A Else Result = B
Return(Result)

En este ejemplo, se define una función llamada MyFunc con los nombres de argumento A, B y C. A
continuación, figura un ejemplo de la sentencia DefFun que declara y utiliza la función MyFunc. Los
nombres de argumento A, B y C hacen referencia a los valores de X, Y y Z, lo que permite calcular el
valor asignado a T.
Function MyFunc(A, B, C)
Z = ...
Return (Z)
...
End
DefFun MyFunc(X, Y, Z)
T = MyFunc(X, Y, Z)
End

Este ejemplo muestra cómo llamar a una función de transformación denominada MyFunctionB desde
otra función de transformación denominada MyFunctionA:
Function MyFunctionA(Arg1)
* Cuando hace referencia a una función escrita por el usuario que se mantiene en el
* repositorio de DataStage, debe declararla como una función con el

Capítulo 7. Programación BASIC 233


* número correcto de argumentos y añadirle un prefijo "DSU.".
Deffun MyFunctionB(A) Calling "DSU.MyFunctionB"
Ans = MyFunctionB(Arg1)
* Añada su propia transformación al valor en Ans...
...

Función GetLocale
En la modalidad de soporte multilingüístico, recupera el valor de entorno local actual para una
determinada categoría.

Sintaxis
$Include UNIVERSE.INCLUDE UVNLSLOC.H
nombre = GetLocale (categoría)

El valor de categoría es una de las siguientes señales de inclusión:


Señal Significado
UVLC$TIME
Hora y fecha
UVLC$NUMERIC
Numérico
UVLC$MONETARY
Moneda
UVLC$CTYPE
Tipo de carácter
UVLC$COLLATE
Secuencia de ordenación

Comentarios

GetLocale devuelve una de las siguientes señales de error si no puede recuperar el valor de entorno
local:
Error Significado
LCE$NOLOCALES
El soporte multilingüístico no está habilitado para IBM InfoSphere DataStage.
LCE$BAD.CATEGORY
No se reconoce la categoría especificada.

Sentencia GoSub
Transfiere el control de programa a una subrutina interna. No está disponible en las expresiones.

Sintaxis
GoSub etiqueta.sentencia [ : ]

etiqueta.sentencia define dónde se inicia puede ser cualquier etiqueta válida definida en el programa.

: identifica el texto anterior como una etiqueta de sentencia para que el programa sea más legible.

234 Guía del desarrollador de Server Job


Comentarios

Para transferir el control de nuevo al programa principal, utilice una sentencia Return o Return To:
v Return transfiere el control de programa a la sentencia situada a continuación de la sentencia GoSub.
v Return To etiqueta transfiere el control de programa a una ubicación en el programa especificada por
etiqueta.

Un programa puede llamar a una subrutina el número de veces que desee. Puede anidar subrutinas hasta
256 niveles.

Ejemplo

Este ejemplo utiliza GoSub para invocar una subrutina interna en una función de transformación de IBM
InfoSphere DataStage. La sentencia Return hace que se reanude la ejecución en la sentencia que va
inmediatamente después de la sentencia GoSub. Es necesario utilizar GoTo tal como se muestra para que
el control no fluya accidentalmente a la subrutina.
Function MyTransform(Arg1)
* Utiliza sólo una subrutina si la entrada es un número positivo:
If Arg1 > 0 Then GoSub MyRoutine
Reply = Arg1
GoTo ExitFunction ;* se utiliza GoTo para evitar un error
MyRoutine:
Arg1 = SQRT(Arg1) ;* utiliza la raíz cuadrada
Return ;* devuelve el control a la sentencia
ExitFunction:
Return(Reply)

Sentencia GoTo
Transfiere el control de programa a la sentencia especificada. No está disponible en las expresiones.

Sintaxis
GoTo
etiqueta.sentencia [ : ]

etiqueta.sentencia especifica la sentencia de destino.

: identifica el texto anterior como una etiqueta de sentencia para que el programa sea más legible.

Comentarios

Si la sentencia referenciada es ejecutable, se ejecuta y el programa continúa. Si no es ejecutable, el


programa continúa en la primera sentencia ejecutable después de la referenciada.

Ejemplo

Este ejemplo utiliza la sentencia GoTo para ramificarse a las etiquetas de línea de una rutina. Tenga en
cuenta que este tipo de proceso es a menudo más claro que la utilización de una construcción Begin
Case.
Function MyTransform(Arg1)
* Evalúa el argumento y se ramifica a la etiqueta correspondiente.
If Arg1 = 1 Then GoTo Label1 Else GoTo Label2
Label1:
Reply = "A"
GoTo LastLabel

Capítulo 7. Programación BASIC 235


Label2:
Reply = "B"
LastLabel:
Return(Reply)

Función Iconv
Convierte una serie al formato de almacenamiento interno.

Sintaxis
Iconv
(serie, código [ @VM
código
] ... )

serie se evalúa como la serie que se va a convertir. Si la serie es un valor nulo, se devuelve el valor nulo.

código es un código de conversión y debe escribirse entre comillas. Varios códigos de conversión deben ir
separados por marcas de valor. Si hay varios códigos, se aplican de izquierda a derecha. El segundo
código convierte la salida del primero, etc. Si código es un valor nulo, genera un error de tiempo de
ejecución.

Comentarios

La función Status devuelve el resultado de la conversión, de la siguiente manera:


0 La conversión ha sido satisfactoria.
1 La serie no era válida. Se devuelve una serie vacía, a menos que serie fuera un valor nulo, en
cuyo caso se devuelve un valor nulo.
2 La conversión no era válida.
3 La conversión ha sido satisfactoria, pero puede que los datos de entrada no sean válidos, por
ejemplo, una fecha que no existe como, por ejemplo, el 31 de septiembre.

Ejemplos
Conversiones ASCII
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MY (ASCII):
Expresión de conversión
Valor interno
X = Iconv("ABCD", "MY")
X = 41424344
X = Iconv("0123", "MY")
X = 30313233

Conversiones de fecha
Los siguientes ejemplos muestran el efecto de varios códigos de conversión D (Fecha):
Expresión de conversión
Valor interno
X = Iconv("31 DEC 1967", "D")
X = 0

236 Guía del desarrollador de Server Job


X = Iconv("27 MAY 97", "D2")
X = 10740
X = Iconv("05/27/97", "D2/")
X = 10740
X = Iconv("27/05/1997", "D/E")
X = 10740
X = Iconv("1997 5 27", "D YMD")
X = 10740
X = Iconv("27 MAY 97", "D DMY")
X = 10740
X = Iconv("5/27/97", "D/MDY")
X = 10740
X = Iconv("27 MAY 1997", "D DMY")
X = 10740
X = Iconv("97 05 27", "DYMD")
X = 10740

Conversiones de grupo
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión G (Grupo):
Expresión de conversión
Valor interno
X = Iconv("27.05.1997", "G1.2")
X = "05.1997"
X = Iconv("27.05.1997", "G.2")
X = "27.05"

Conversiones de longitud
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión L (Longitud):
Expresión de conversión
Valor interno
X = Iconv("QWERTYUIOP", "L0")
X = 10
X = Iconv("QWERTYUIOP", "L7")
X = ""
X = Iconv("QWERTYU", "L7")
X = "QWERTYU"
X = Iconv("QWERTYUOP", "L3,5")
X = ""
X = Iconv("QWER", "L3,5")
X = "QWER"

Conversiones de caracteres enmascarados


Los siguientes ejemplos muestran el efecto de algunos códigos de conversión de caracteres enmascarados
(MCA, MC/A, MCD, MCL, MCN, MC/N, MCP, MCT, MCU y MCX):

Capítulo 7. Programación BASIC 237


Expresión de conversión
Valor interno
X = Iconv("John Smith 1-234", "MCA")
X = "JohnSmith"
X = Iconv("John Smith 1-234","MC/A")
X = " 1-234"
X = Iconv("4D2", "MCD")
X = "1234"
X = Iconv("4D2", "MCDX")
X = "1234"
X = Iconv("John Smith 1-234", "MCL")
X = "john smith 1-234"
X = Iconv("John Smith 1-234", "MCN")
X = "1234"
X = Iconv("John Smith 1-234", "MC/N")
X = "John Smith -"
X = Iconv("John^CSmith^X1-234", "MCP")
X = "John.Smith.1-234"
X = Iconv("john SMITH 1-234", "MCT")
X = "John Smith 1-234"
X = Iconv("john smith 1-234", "MCU")
X = "JOHN SMITH 1-234"
X = Iconv("1234", "MCX")
X = "4D2"
X = Iconv("1234", "MCXD")
X = "4D2"

Conversiones decimales enmascaradas


Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MD (Decimal enmascarada):
Expresión de conversión
Valor interno
X = Iconv("9876.54", "MD2")
X = 987654
X = Iconv("987654", "MD0")
X = 987654
X = Iconv("$1,234,567.89", "MD2$,")
X = 123456789
X = Iconv("123456.789", "MD33")
X = 123456789
X = Iconv("12345678.9", "MD32")
X = 1234567890
X = Iconv("F1234567.89", "MD2F")
X = 123456789
X = Iconv("1234567.89cr", "MD2C")
X = -123456789

238 Guía del desarrollador de Server Job


X = Iconv("1234567.89 ", "MD2D")
X = 123456789
X = Iconv("1,234,567.89 ", "MD2,D")
X = 123456789
X = Iconv("9876.54", "MD2-Z")
X = 987654
X = Iconv("$####1234.56", "MD2$12#")
X = 123456
X = Iconv("$987.654 ", "MD3,$CPZ")
X = 987654
X = Iconv("####9,876.54", "MD2,ZP12#")
X = 987654

Conversiones a izquierda y derecha enmascarada


Los siguientes ejemplos muestran el efecto de algunos códigos de conversión ML y MR (Izquierda y
derecha enmascarada):
Expresión de conversión
Valor interno
X = Iconv("$1,234,567.89", "ML2$,")
X = 123456789
X = Iconv(".123", "ML3Z")
X = 123
X = Iconv("123456.789", "ML33")
X = 123456789
X = Iconv("12345678.9", "ML32")
X = 1234567890
X = Iconv("1234567.89cr", "ML2C")
X = -123456789
X = Iconv("1234567.89db", "ML2D")
X = 123456789
X = Iconv("1234567.89-", "ML2M")
X = -123456789
X = Iconv("<1234567.89>", "ML2E")
X = -123456789
X = Iconv("1234567.89**", "ML2(*12)")
X = 123456789
X = Iconv("**1234567.89", "MR2(*12)")
X = 123456789

Conversiones de numerales
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión NR (Numeral romano):
Expresión de conversión
Valor interno
X = Iconv("mcmxcvii", "NR")
X = 1997

Capítulo 7. Programación BASIC 239


X = Iconv("MCMXCVmm", "NR")
X = 1997000

Conversiones de coincidencia de patrón


Los siguientes ejemplos muestran el efecto de algunos códigos de conversión P (Coincidencia de patrón):
Expresión de conversión
Valor interno
X = Iconv("123456789", "P(3N-3A-3X);(9N)")
X = "123456789"
X = Iconv("123-ABC-A7G", "P(3N-3A-3X);(9N)")
X = "123-ABC-A7G"
X = Iconv("123-45-6789", "P(3N-2N-4N)")
X = "123-45-6789"

Conversiones Radix
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MX, MO y MB (Radix):
Expresión de conversión
Valor interno
X = Iconv("400", "MX")
X = 1024
X = Iconv("434445", "MX0C")
X = "CDE"
X = Iconv("2000", "MO")
X = 1024
X = Iconv("103104105", "MO0C")
X = "CDE"
X = Iconv("10000000000", "MB")
X = 1024
X = Iconv("010000110100010001000101", "MB0C")
X = "CDE"

Conversiones de comprobación de rango


El siguiente ejemplo muestra el efecto del código de conversión R (Comprobación de rango):
Expresión de conversión
Valor interno
X = Iconv("123", "R100,200")
X = 123

Conversiones Soundex
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión S (Soundex):
Expresión de conversión
Valor interno
X = Iconv("GREEN", "S")
X = "G650"

240 Guía del desarrollador de Server Job


X = Iconv("greene", "S")
X = "G650"
X = Iconv("GREENWOOD", "S")
X = "G653"
X = Iconv("GREENBAUM", "S")
X = "G651"

Conversiones de hora
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MT (Hora):
Expresión de conversión
Valor interno
X = Iconv("02:46", "MT")
X = 9960
X = Iconv("02:46:40am", "MTHS")
X = 10000
X = Iconv("02:46am", "MTH")
X = 9960
X = Iconv("02.46", "MT.")
X = 9960
X = Iconv("02:46:40", "MTS")
X = 10000

Sentencias If...Else
Ejecutan una o varias sentencias de manera condicional. Puede utilizar una sintaxis de una sola línea o
varias líneas en un bloque. No está disponible en las expresiones.

Sintaxis
If
condición Else sentencia
If condición Else
sentencias
End

condición es un valor numérico o una comparación cuyo valor determina el flujo del programa. Si la
condición es false, se ejecutan las sentencias.

sentencias son las sentencias que se ejecutan si condición es false.

Comentarios

Si desea ejecutar más de una sentencia cuando condición es false, utilice la sintaxis multilínea.

Ejemplo
Function MyTransform(Arg1, Arg2, Arg3)
* La cláusula Else ocupa sólo una línea:
Reply = 0 ;* valor predeterminado
If Arg1 Matches "A..."
Else Reply = 2
* Cláusula Else multilínea:
If Len(arg1) > 10 Else
Reply += 2

Capítulo 7. Programación BASIC 241


Reply = (Arg2 - 1) * Reply
End
* Otro estilo de la cláusula Else multilínea:
If Len(Arg1) > 20
Else
Reply += 4
Reply = (Arg3 - 1) * Reply
End
Return(Reply)

Sentencias If...Then...Else
Defina varios bloques de sentencias y las condiciones que determinan qué bloque se ejecuta. Puede
utilizar una sintaxis de una sola línea o varias líneas en un bloque. No está disponible en las expresiones.

Sintaxis
If
condición Then sentencias
[Else sentencias]
If condición
Then sentencias End [Else sentencias End]

condición es un valor numérico o una comparación cuyo valor determina el flujo del programa. Si
condición es true, se utiliza la cláusula Then. Si condición es false, se utiliza la cláusula Else. Si condición es
un valor nulo, se evalúa en false.

sentencias son las sentencias que se ejecutan dependiendo del valor de condición.

Comentarios

Puede anidar sentencias If...Then...Else. Si las sentencias Then o Else están escritas en varias líneas,
deberá emplear una sentencia End como la última sentencia.

Ejemplo
Function MyTransform(Arg1, Arg2, Arg3)
* Las cláusulas Then y Else ocupan una línea cada una:
If Arg1 Matches "A..."
Then Reply = 1
Else Reply = 2
* Cláusulas multilínea:
If Len(arg1) > 10 Then
Reply += 1
Reply = Arg2 * Reply
End Else
Reply += 2
Reply = (Arg2 - 1) * Reply
End
* Otro estilo de las cláusulas multilínea:
If Len(Arg1) > 20
THEN Reply += 2
Reply = Arg3 * Reply
End
Else
Reply += 4
Reply = (Arg3 - 1) * Reply
End
Return(Reply)

242 Guía del desarrollador de Server Job


Sentencias If...Then
Ejecutan una o varias sentencias de manera condicional. Puede utilizar una sintaxis de una sola línea o
varias líneas en un bloque. No está disponible en las expresiones.

Sintaxis
If
condición Then sentencia
If condiciónThen
sentenciasEnd

condición es un valor numérico o una comparación cuyo valor determina el flujo del programa. Si la
condición es true, se ejecutan las sentencias.

sentencias son las sentencias que se ejecutan si la condición es true.

Comentarios

Si desea ejecutar más de una sentencia cuando condición es true, utilice la sintaxis multilínea.

Ejemplo

Este ejemplo ilustra las distintas formas de la construcción If...Then que pueden utilizarse en una rutina:
Function MyTransform(Arg1, Arg2, Arg3)
* La cláusula Then ocupa sólo una línea:
Reply = 0 ;* valor predeterminado
If Arg1 Matches "A..."
Then Reply = 1
* Cláusula Then multilínea:
If Len(arg1) > 10 Then
Reply += 1
Reply = Arg2 * Reply
End

* Otro estilo de la cláusula Then multilínea:


If Len(Arg1) > 20
THEN Reply += 2
Reply = Arg3 * Reply
End
Return(Reply)

Operador If...Then...Else
Asigna un valor que cumple las condiciones especificadas.

Operador If...Then...Else

Sintaxis
variable =
If condición Then expresión
Else expresión

variable es la variable que se asigna.

If condición define la condición que determina qué valor se asigna.

Then expresión define el valor que se asigna si la condición es true.

Capítulo 7. Programación BASIC 243


Else expresión define el valor que se asigna si la condición es false.

Comentarios

El operador If es la única forma de la construcción If...Then...Else que puede utilizarse en una expresión.

Ejemplo

Tenga en cuenta que la cláusula Else es necesaria.


* Devolver A o B dependiendo del valor
de Column1:
If Column1 > 100 Then "A" Else "B"
* Añadir 1 o 2 al valor en Column2 dependiendo de lo que haya en
* Column3, y devolverlo:
Column2 + (If Column3 Matches "A..." Then 1 Else 2)

Función Index
Devuelve la posición inicial de una subserie.

Sintaxis
Index
(serie, subserie,
instancia)

serie es la serie o la expresión que contiene la subserie. Si serie es un valor nulo, se devuelve 0.

subserie es la subserie que desea encontrar. Si subserie es una serie vacía, se devuelve 1. Si subserie es un
valor nulo, se devuelve 0.

instancia especifica qué instancia de la subserie se va a ubicar. Si no se encuentra la instancia, se devuelve


0. Si la instancia es un valor nulo, genera un error de tiempo de ejecución.

Ejemplos

Los siguientes ejemplos muestran varias formas de buscar la posición de una subserie en una serie:
MyString = "P1234XXOO1299XX00P1"
Position = Index(MyString, 1, 2)
* El código anterior devuelve el índice del segundo carácter "1" (10).
Position = Index(MyString, "XX", 2)
* El código anterior devuelve el índice inicial de la segunda subserie "XX"
* (14).
Position = Index(MyString, "xx", 2)
* El código anterior devuelve 0, ya que no se produce la subserie "xx".
Position = Index(MyString, "XX", 3)
* El código anterior devuelve 0, ya que no se puede encontrar la
* tercera aparición de la subserie "XX" *.

Función InMat
Recupera las dimensiones de una matriz o determina si una sentencia Dimension ha fallado debido a
que la memoria es insuficiente. No está disponible en las expresiones.

Sintaxis
InMat
[(matriz)]

244 Guía del desarrollador de Server Job


matriz es el nombre de la matriz cuyas dimensiones desea recuperar.

Comentarios

Si especifica una matriz, InMat devuelve las dimensiones de la matriz. Si no especifica una matriz, InMat
devuelve 1 si la sentencia Dimension anterior ha fallado debido a la falta de memoria disponible.

Ejemplo

Este ejemplo muestra cómo probar si una sentencia Dimension ha asignado suficiente memoria:
Dim MyArray(2000)
If InMat() = 1 Then
Call DSLogFatal("Could not allocate array",
→ "MyRoutine")
End

Función Int
Devuelve la parte entera de una expresión numérica.

Sintaxis
Int
(expresión)

expresión es una expresión numérica. Después de la evaluación, la parte de fracción del valor se trunca y
se devuelve la parte entera. Si la expresión es un valor nulo, se devuelve un nulo.

Ejemplo

Este ejemplo muestra la parte entera de una expresión devuelta por la función Int:
MyValue = 2.3
IntValue = Int(MyValue) ;* la respuesta es 2
IntValue = Int(-MyValue) ;* la respuesta es -2
IntValue = Int(MyValue / 10) ;* la respuesta es 0

Función IsNull
Prueba si una variable contiene un valor nulo.

Sintaxis
IsNull
(variable)

variable es la variable que se prueba. Si variable contiene un valor nulo, se devuelve 1; de lo contrario, se
devuelve 0.

Comentarios

Esta es la única manera de probar si es un valor nulo, ya que el valor nulo no es igual a ningún valor,
incluido él mismo.

Ejemplo

Este ejemplo muestra cómo probar una expresión que se está estableciendo en el valor nulo:

Capítulo 7. Programación BASIC 245


MyVar =
@Null ;* establece la variable en el valor nulo
If IsNull(MyVar * 10) Then
* Será true, ya que toda operación aritmética que incluya un valor nulo
* da como resultado un valor nulo.
End

Función Left
Extrae una subserie del principio de una serie.

Sintaxis
Left
(serie, n)

serie es la serie que contiene la subserie. Si la serie es un valor nulo, se devuelve el valor nulo.

n es el número de caracteres que se extraen del principio de la serie. Si n es un valor nulo, genera un
error de tiempo de ejecución.

Ejemplos

Estos ejemplos extraen los tres caracteres más a la izquierda de una serie:
MyString = "ABCDEF"
MySubStr = Left(MyString, 3) ;* la respuesta es "ABC"
MySubStr = Left("AB", 3) ;* la respuesta es "AB"

Función Len
Devuelve el número de caracteres de una serie.

Sintaxis
Len
(serie)

serie es la serie cuyos caracteres se cuentan. Se cuentan todos los caracteres, incluidos los espacios y los
espacios en blanco finales. Si serie es un valor nulo, se devuelve 0.

Ejemplos

Estos ejemplos determinan la longitud de una serie o de un número cuando se expresa como una serie:
MyStr = "PORTLAND, OREGON"
StrLen = Len(MyStr) ;* la respuesta es 16
NumLen = Len(12345.67) ;* la respuesta es 8 (observe
;* el separador decimal)

Función LenDP
En la modalidad de soporte multilingüístico, devuelve la longitud de una serie en posiciones de
visualización.

Sintaxis
LenDP
(serie [, nombrecorrelación ])

246 Guía del desarrollador de Server Job


serie es la serie que se va a medir. Los caracteres que no se pueden correlacionar en la serie se supone que
tienen una longitud de visualización de 1.

nombrecorrelación es el nombre de la correlación que define el juego de caracteres que se utiliza en la serie.
Si se omite el nombrecorrelación, se utiliza la correlación de juego de caracteres predeterminada para el
proyecto o el trabajo.

Comentarios

Si el soporte multilingüístico no está habilitado, esta función funciona como la función Len y devuelve el
número de caracteres de la serie.

Función Ln
Calcula el logaritmo natural del valor de una expresión, empleando la base "e".

Sintaxis
Ln
(expresión)

expresión es la expresión numérica que se evalúa. Si la expresión es 0 o un valor negativo, se devuelve 0 y


se emite un aviso. Si la expresión es un valor nulo, se devuelve un nulo.

Comentarios

El valor de "e" es aproximadamente 2,71828.

Ejemplo

Este ejemplo muestra cómo grabar una transformación para convertir un número en su logaritmo de base
10 utilizando la función Ln:
Function Log10(Arg1)
If Not(Num(Arg1)) Then
Call DSTransformError("Non-numeric ":Arg1, "Log10")
Ans = 0 ;* o un valor predeterminado adecuado
End Else
Ans = Ln(Arg1) / Ln(10)
End
Return(Ans)

Sentencia LOCATE
Utilice una sentencia LOCATE para buscar en expresión en matriz.dinámica y devolver un valor con una de
las indicaciones siguientes:
v La ubicación en que se ha encontrado expresión en matriz.dinámica.
v La ubicación en que se debe insertar expresión en matriz.dinámica si no se ha encontrado.

La búsqueda puede iniciarse en cualquier punto de matriz.dinámica.

Sintaxis

LOCATE expresión IN matriz.dinámica [ < númcampo [ ,númvalor] > ] [,inicio] [BY sec] SETTING
variable {THEN sentencias [ELSE sentencias] | ELSE sentencias}

Capítulo 7. Programación BASIC 247


El valor de expresión se evalúa como la serie que se buscará en matriz.dinámica. Si expresión o
matriz.dinámica se evalúa como valor nulo, variable se establece en 0 y se ejecutan las sentencias ELSE. Si
expresión y matriz.dinámica se evalúan como series vacías, variable se establece en 1 y se ejecutan las
sentencias THEN.

Los valores de númcampo, númvalor y númsubvalor son expresiones de delimitador y especifican:


v La ubicación en que se debe iniciar la búsqueda en matriz.dinámica.
v El tipo de elemento que se busca.

El valor de inicio se evalúa como un número que especifica el campo, valor o subvalor a partir del cual se
debe iniciar la búsqueda.

Las expresiones de delimitador especifican el nivel de búsqueda, e inicio especifica la posición inicial de la
búsqueda.

Si alguna expresión de delimitador o inicio se evalúa como valor nulo, la sentencia LOCATE falla y el
programa termina con un mensaje de error de tiempo de ejecución.

En variable se almacena el índice de expresión. El valor de variable devuelve un número de campo, valor o
subvalor, según las expresiones de delimitador empleadas. El valor de variable se establece en un número
que representa uno de los elementos siguientes:
v El índice del elemento que contiene expresión, si se encuentra ese elemento.
v Un índice que se puede utilizar en una función INSERT para crear un elemento nuevo con el valor
especificado por expresión.

Comentarios

Durante la búsqueda, los campos se procesan como campos de un solo valor aunque contengan marcas
de valor o subvalor. Los valores se procesan como valores únicos, aunque contengan marcas de subvalor.

La búsqueda se detiene cuando se da una de las condiciones siguientes:


v Se encuentra un campo que contiene expresión.
v Se llega al final de la matriz dinámica.
v Se encuentra un campo superior o inferior, según se haya especificado en sec.

Si los elementos de la búsqueda están ordenados en una de las secuencias ASCII ascendentes o
descendentes que figuran a continuación, puede utilizar la expresión BY sec para finalizar la búsqueda. La
búsqueda finaliza en la posición donde se debe insertar expresión para mantener la secuencia ASCII, en
lugar de al final de la lista de elementos especificados.

Utilice los valores siguientes de sec para describir la secuencia ASCII de la búsqueda:
"AL" o "A"
Ascendente y justificada a la izquierda (ordenación alfanumérica estándar)
"AR" Ascendente y justificada a la derecha
"DL" o "D"
Descendente y justificada a la izquierda (ordenación alfanumérica estándar)
"DR" Descendente y justificada a la derecha

La especificación de sec no vuelve a ordenar los elementos de matriz.dinámica; indica las condiciones de
terminación de la búsqueda. Si se utiliza una expresión seq y los elementos no se encuentran en la
secuencia indicada por seq, es posible que no se encuentre un elemento con el valor de expresión. Si sec se
evalúa como valor nulo, la sentencia falla y el programa termina.

248 Guía del desarrollador de Server Job


Las sentencias ELSE se ejecutan si no se encuentra expresión. El formato de la sentencia ELSE es el mismo
que se utiliza en la sentencia IF...THEN.

Si el soporte multilingüístico está habilitado, la sentencia LOCATE con una expresión BY sec utiliza el
convenio de clasificación especificado por el entorno local actual.

Ejemplos

Se muestra una marca de campo junto a F, se muestra una marca de valor junto a V y se muestra una
marca de subvalor junto a S.
Q=’X’:@SM:"$":@SM:’Y’:@VM:’Z’:@SM:4:@SM:2:@VM:’B’:@VM
PRINT "Q= ":Q
LOCATE "$" IN Q <1> SETTING WHERE ELSE PRINT ’ERROR’
PRINT "WHERE= ",WHERE
LOCATE "$" IN Q <1,1> SETTING HERE ELSE PRINT ’ERROR’
PRINT "HERE= ", HERE
NUMBERS=122:@FM:123:@FM:126:@FM:130:@FM
PRINT "BEFORE INSERT, NUMBERS= ",NUMBERS
NUM= 128
LOCATE NUM IN NUMBERS <2> BY "AR" SETTING X ELSE
NUMBERS = INSERT(NUMBERS,X,0,0,NUM)
PRINT "AFTER INSERT, NUMBERS= ",NUMBERS
END

Esta es la salida del programa:


Q= XS$SYVZS4S2VBV
ERROR
WHERE= 5
HERE= 2
BEFORE INSERT, NUMBERS= 122F123F126F130FAFTER INSERT, NUMBERS= 122F128F123F126F130F

Sentencias Loop...Repeat
Define un bucle de programa. No está disponible en las expresiones.

Sintaxis
Loop
[sentencias]
[Continue | Exit]
[While | Until condición Do]
[sentencias]
[Continue | Exit]
Repeat

Loop define el inicio del bucle de programa.

sentencias son las sentencias que se ejecutan en el bucle.

Continue especifica que el bucle actual se interrumpe y se reinicia en este punto.

Exit especifica que el programa abandona el bucle actual.

While condición Do especifica que el bucle se repite siempre que condición sea true. Cuando condición es
false, el bucle se detiene y la ejecución del programa continúa con la sentencia que figura tras la sentencia
Repeat. Si condición es un valor nulo, se supone que es false.

Capítulo 7. Programación BASIC 249


Until condición Do especifica que el bucle se repite siempre que condición sea false. Cuando condición es
true, el bucle se detiene y la ejecución del programa continúa con la sentencia que figura tras la sentencia
Repeat. Si condición es un valor nulo, se supone que es false.

Repeat define el fin del bucle.

Comentarios

Puede utilizar varias cláusulas While y Until en un bucle Loop...Repeat. Puede anidar bucles
Loop...Repeat. Si una sentencia Repeat no tiene ninguna sentencia Loop correspondiente, genera un error
de compilador.

Ejemplo
Este ejemplo muestra cómo pueden utilizarse las sentencias Loop...Repeat. La sentencia Loop...Repeat
interior hace el bucle 10 veces, establece el valor del distintivo en false y sale prematuramente utilizando
la sentencia Exit. El bucle exterior sale inmediatamente después de comprobar el valor del distintivo.
Check = @True
Counter = 0 ;* inicializa variables
Loop ;* bucle exterior
Loop While Counter < 20 ;* bucle interior
Counter += 1 ;* contador de incrementos
If Counter = 10 Then ;* si la condición es True...
Check = @False ;* establece el valor del distintivo en False...
Exit ;* y sale del bucle interior.
End
Repeat
Until Not(Check) ;* sale del bucle exterior cuando la comprobación se establece en False
Repeat

Sentencia Mat
Asigna valores a los elementos de una matriz. No está disponible en las expresiones.

Sintaxis
Mat
matriz = expresión

matriz es una matriz denominada y dimensionada a la que desea asignar valores.

expresión puede ser un valor único o el nombre de una matriz dimensionada. Si expresión es un valor
único, el valor se asigna a todos los elementos de la matriz. Si es una matriz, los valores se asignan a la
matriz, elemento a elemento, independientemente de si coinciden las dimensiones de las dos matrices.
Los valores excedentes se descartan; los elementos excedentes permanecen sin asignar.

Comentarios

No puede utilizar la sentencia Mat para asignar valores a elementos específicos de una matriz.

Ejemplos

Este ejemplo muestra cómo asignar el mismo valor a todos los elementos de una matriz:
Dim MyArray(10)
Mat MyArray = "Empty"

Este ejemplo muestra cómo asignar los elementos de una matriz a los de otra matriz:

250 Guía del desarrollador de Server Job


Dim Array1(4)
Dim Array2(2,2)
For n = 1 To 4
Array1(n) = n ;* Array1(1) = 1, Array1(2) = 2, etc.
Next n
Mat Array2 = Mat Array1
* Los resultados son: Array2(1,1) = 1, Array2(1,2) = 2
* Array2(2,1) = 3, Array2(2,2) = 4

Función MatchField
Busca en una serie y devuelve la parte de la misma que coincide con un elemento de patrón.

Sintaxis
MatchField
(serie, patrón,
elemento)

serie es la serie que en la que se realiza la búsqueda. Si la serie no coincide con ningún patrón o es un
valor nulo, se devuelve una serie vacía.

patrón es uno o varios elementos de patrón que describen la serie, y puede ser cualquiera de los códigos
de patrón utilizados por el operador Match. Si el patrón es un valor nulo, se devuelve una serie vacía.

elemento es un número, n, que especifica que se devuelve la parte de la serie que coincide con el enésimo
elemento del patrón. Si el elemento es un valor nulo, genera un error de tiempo de ejecución.

Comentarios

patrón debe contener elementos que describen todos los caracteres de la serie. Por ejemplo, la sentencia
siguiente devuelve una serie vacía porque el patrón no cubre la subserie "AB" al final de la serie:
MatchField ("XYZ123AB", "3X3N", 1)

La siguiente sentencia describe la serie completa y devuelve un valor "XYZ", que es 3X, la subserie que
coincide con el primer elemento del patrón:
MatchField ("XYZ123AB", "3X3N...", 1)

Ejemplos

Q se evalúa en BBB:
Q = MatchField("AA123BBB9","2A0N3A0N",3)

zip se evalúa en 01234:


addr = ’20 GREEN ST. NATICK, MA.,01234’
zip = MatchField(ADDR,"0N0X5N",3)

col se evalúa en BLUE:


inv = ’PART12345 BLUE AU’
col = MatchField(INV,"10X4A3X",2)

En los ejemplos siguientes, la serie no coincide con el patrón y se devuelve una serie vacía:
XYZ=MatchField(’ABCDE1234’,"2N3A4N",1)
XYZ=ABC=MatchField(’1234AB’,"4N1A",2)
ABC=

Capítulo 7. Programación BASIC 251


Función Mod
Devuelve el resto de una operación de división.

Sintaxis
Mod
(dividendo, divisor)

dividendo es el número que se va a dividir. Si dividendo es un valor nulo, se devuelve el valor nulo.

divisor es el número por el que se divide. divisor no puede ser 0. Si divisor es un valor nulo, se devuelve el
valor nulo.

Comentarios

La función Mod calcula el resto mediante la fórmula:


Mod (X, Y) = X - (Int (X / Y) * Y)

Utilice la función Div para devolver el resultado de una operación de división.

Ejemplos
Los siguientes ejemplos muestran el uso de la función Mod:
Remainder = Mod(100, 25) ;*
el resultado es 0
Remainder = Mod(100, 30) ;* el resultado es 10

Sentencia Nap
Detiene un programa el número de milisegundos especificado. No está disponible en las expresiones.

Sintaxis
Nap
[milisegundos]

milisegundos es el número de milisegundos que se detiene. El valor predeterminado es 1. Si milisegundos es


un valor nulo, la sentencia Nap se omite.

Comentarios

No utilice la sentencia Nap en una transformación, ya que ralentizará la ejecución del trabajo de IBM
InfoSphere DataStage.

Ejemplo

Este ejemplo muestra la sentencia Nap que se invoca desde una rutina anterior/posterior de InfoSphere
DataStage para sondear la existencia de un recurso, con un breve intervalo de espera entre los sondeos:
If NumTimesWaited < RepeatCount Then
NumTimesWaited += 1
Nap 500 ;* esperar 500 milisegundos = 1/2 segundo
End

252 Guía del desarrollador de Server Job


Función Neg
Devuelve el inverso de un número.

Sintaxis
Neg
(número)

número es el número que desea invertir.

Ejemplo

El siguiente ejemplo muestra un uso de la función Neg, equivalente al operador unario menos:
MyNum = 10
* La siguiente línea puede ser más clara que la construcción
* equivalente, que es: -(MyNum + 75) / 100
MyExpr = Neg(MyNum + 75) / 100

Función Not
Invierte el resultado lógico de una expresión.

Sintaxis
Not
(expresión)

expresión es la expresión cuyo resultado se invierte. Si la expresión es true, se devuelve 0; si es false, se


devuelve 1. Si la expresión es un valor nulo, se devuelve un nulo.

Comentarios

La expresión es false si se evalúa en 0 o si es una serie vacía. Para los demás valores (excepto el valor
nulo), es true.

Ejemplos

A continuación, se proporcionan algunos ejemplos del uso de la función Not para invertir el valor real de
las expresiones:
Value1 = 5
Value2 = 5
Boolean = Not(Value1 - Value2);* Booleano = 1, es decir, True
Boolean = Not(Value1 + Value2);* Booleano = 0, es decir, False
Boolean = Not(Value1 = Value2);* Booleano = 0, es decir, False

Sentencia Null
No realiza ninguna acción ni genera ningún código de objeto.

Sintaxis
Nula

Comentarios

La sentencia Null actúa como una vía muerta en un programa. Por ejemplo, puede emplearla con la
cláusula Else si no desea que se efectúe ninguna operación cuando se ejecute la cláusula Else.

Capítulo 7. Programación BASIC 253


Ejemplo

El siguiente ejemplo muestra el uso de la sentencia Null para dejar claro que una determinada
ramificación de una sentencia Case no realiza ninguna acción:
Begin Case
Case Arg1 = ’A’
* ... realizar alguna acción para el primer caso.
Case Arg1 = ’B’
* ... realizar alguna acción para el segundo caso.
Case @True
* ... en los demás casos, no realizar ninguna acción.
Null
End Case

Función Num
Determina si una serie es numérica. Si el soporte multilingüístico está habilitado, el resultado de esta
función depende del valor de entorno local actual del convenio Numeric.

Sintaxis
Num
(expresión)

expresión es la expresión que se prueba. Si la expresión es un número, una serie numérica o una serie
vacía, se devuelve un valor 1. Si es un valor nulo, se devuelve un valor nulo; de lo contrario, se devuelve
0.

Comentarios

Las series que contienen puntos utilizados como separadores decimales se consideran numéricas. No
obstante, las series que contienen otros caracteres utilizados para formatear cantidades numéricas o
monetarias como, por ejemplo, comas, signos de dólar, etc., no se consideran numéricas.

Ejemplos
Los siguientes ejemplos muestran la función Num que se utiliza para determinar si una variable contiene
un número:
Arg1 = "123.45
Boolean = Num(Arg1) ;* devuelve 1, es decir, True
Arg2 = "Section 4"
Boolean = Num(Arg2) ;* devuelve 0, es decir, False
Arg3 = " "
Boolean = Num(Arg3) ;* False (el espacio no es un carácter numérico)
Arg4 = ""
Boolean = Num(Arg4) ;* True (la serie vacía es numérica)

Función Oconv
Convierte una expresión a un formato de salida.

Sintaxis
Oconv
(expresión, conversión [@VM
conversión] ...)

expresión es una serie almacenada en formato interno que desea convertir a un formato de salida. Si la
expresión es un valor nulo, se devuelve un nulo.

254 Guía del desarrollador de Server Job


conversión son uno o varios códigos de conversión que especifican cómo se formatea la serie. Separe los
distintos códigos con una marca de valor. Si conversión es un valor nulo, genera un error de tiempo de
ejecución.

Comentarios

Si especifica varios códigos, se aplican de izquierda a derecha. El primer código se aplica a la expresión, el
siguiente código se aplica al resultado de la primera conversión, y así sucesivamente.

La función Status utiliza los siguientes valores para indicar el resultado de una función Oconv:
0 La conversión ha sido satisfactoria.
1 Se ha pasado una serie no válida a la función Oconv. O bien se ha devuelto la serie original o, si
la serie era un valor nulo, se ha devuelto un valor nulo.
2 La conversión no era válida.

Ejemplos
Conversiones ASCII
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MY (ASCII).
Expresión de conversión
Valor externo
X = Oconv("41424344", "MY")
X = "ABCD"
X = Oconv("30313233", "MY")
X = "0123"

Conversiones de fecha
Los siguientes ejemplos muestran el efecto de varios códigos de conversión D (Fecha):
Expresión de conversión
Valor externo
X = Oconv(0, "D")
X = "31 DEC 1967"
X = Oconv(10740, "D2")
X = "27 MAY 97"
X = Oconv(10740, "D2/")
X = "05/27/97"
X = Oconv(10740, "D/E")
X = "27/05/1997"
X = Oconv(10740, "D-YJ")
X = "1997-147"
X = Oconv(10740, "D2*JY")
X = "147*97"
X = Oconv(10740, "D YMD")
X = "1997 5 27"
X = Oconv(10740, "D MY[A,2]")
X = "MAY 97"

Capítulo 7. Programación BASIC 255


X = Oconv(10740, "D DMY[,A3,2]")
X = "27 MAY 97"
X = Oconv(10740, "D/MDY[Z,Z,2]")
X = "5/27/97"
X = Oconv(10740, "D DMY[,A,]")
X = "27 MAY 1997"
X = Oconv(10740, "DYMD[2,2,2]")
X = "97 05 27"
X = Oconv(10740, "DQ")
X = "2"
X = Oconv(10740, "DMA")
X = "MAY"
X = Oconv(10740, "DW")
X = "2"
X = Oconv(10740, "DWA")
X = "TUESDAY"

Conversiones de grupo
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión G (Grupo):
Expresión de conversión
Valor externo
X = Oconv("27.05.1997", "G1.2")
X = "05.1997"
X = Oconv("27.05.1997", "G.2")
X = "27.05"

Conversiones de longitud
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión L (Longitud):
Expresión de conversión
Valor externo
X = Oconv("QWERTYUIOP", "L0")
X = 10
X = Oconv("QWERTYUIOP", "L7")
X = ""
X = Oconv("QWERTYU", "L7")
X = "QWERTYU"
X = Oconv("QWERTYUOP", "L3,5")
X = ""
X = Oconv("QWER", "L3,5")
X = "QWER"

Conversiones de caracteres enmascarados


Los siguientes ejemplos muestran el efecto de algunos códigos de conversión de caracteres enmascarados
(MCA, MC/A, MCD, MCL, MCN, MC/N, MCP, MCT, MCU y MCX):

256 Guía del desarrollador de Server Job


Expresión de conversión
Valor externo
X = Oconv("John Smith 1-234", "MCA")
X = "JohnSmith"
X = Oconv("John Smith 1-234", "MC/A")
X = " 1-234"
X = Oconv("1234", "MCD")
X = "4D2"
X = Oconv("1234", "MCDX")
X = "4D2"
X = Oconv("John Smith 1-234", "MCL")
X = "john smith 1-234"
X = Oconv("John Smith 1-234", "MCN")
X = "1234"
X = Oconv("John Smith 1-234", "MC/N")
X = "John Smith -"
X = Oconv("John^CSmith^X1-234", "MCP")
X = "John.Smith.1-234"
X = Oconv("john SMITH 1-234", "MCT")
X = "John Smith 1-234"
X = Oconv("john smith 1-234", "MCU")
X = "JOHN SMITH 1-234"
X = Oconv("4D2", "MCX")
X = "1234"
X = Oconv("4D2", "MCXD")
X = "1234"

Conversiones decimales enmascaradas


Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MD (Decimal
enmascarada):
Expresión de conversión
Valor externo
X = Oconv(987654, "MD2")
X = "9876.54"
X = Oconv(987654, "MD0")
X = "987654"
X = Oconv(123456789, "MD2$,")
X = "$1,234,567.89"
X = Oconv(987654, "MD24$")
X = "$98.77"
X = Oconv(123456789, "MD2[’f’,’.’,’,’]")
X = "f1.234.567,89"
X = Oconv(123456789, "MD2,[’’,’’,’’,’SEK’]")
X = "1,234,567.89SEK"

Capítulo 7. Programación BASIC 257


X = Oconv(-123456789, "MD2<[’#’,’.’,’,’]")
X = "#<1.234.567,89>"
X = Oconv(123456789, "MD33")
X = "123456.789"
X = Oconv(1234567890, "MD32")
X = "12345678.9"
X = Oconv(123456789, "MD2F")
X = "F1234567.89"
X = Oconv(-123456789, "MD2C")
X = "1234567.89cr"
X = Oconv(123456789, "MD2D")
X = "1234567.89 "
X = Oconv(123456789, "MD2,D")
X = "1,234,567.89 "
X = Oconv(1234567.89, "MD2P")
X = "1234567.89"
X = Oconv(123, "MD3Z")
X = ".123"
X = Oconv(987654, "MD2-Z")
X = "9876.54"
X = Oconv(12345.678, "MD20T")
X = "12345.67"
X = Oconv(123456, "MD2$12#")
X = "$####1234.56"
X = Oconv(987654, "MD3,$CPZ")
X = "$987.654 "
X = Oconv(987654, "MD2,ZP12#")
X = "####9,876.54"

Conversiones a izquierda y derecha enmascarada


Los siguientes ejemplos muestran el efecto de algunos códigos de conversión ML y MR (Izquierda y
derecha enmascarada):
Expresión de conversión
Valor externo
X = Oconv(123456789, "ML2$,")
X = "$1,234,567.89"
X = Oconv(123, "ML3Z")
X = ".123"
X = Oconv(123456789, "ML33")
X = "123456.789"
X = Oconv(1234567890, "ML32")
X = "12345678.9"
X = Oconv(-123456789, "ML2C")
X = "1234567.89cr"

258 Guía del desarrollador de Server Job


X = Oconv(123456789, "ML2D")
X = "1234567.89db"
X = Oconv(-123456789, "ML2M")
X = "1234567.89-"
X = Oconv(-123456789, "ML2E")
X = "<1234567.89>"
X = Oconv(123456789, "ML2(*12)")
X = "1234567.89**"
X = Oconv(123456789, "MR2(*12)")
X = "**1234567.89"

Conversiones de numerales
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión NR (Numeral romano):
Expresión de conversión
Valor externo
X = Oconv(1997, "NR")
X = "mcmxcvii"
X = Oconv(1997000, "NR")
X = "MCMXCVmm"

Conversiones de coincidencia de patrón


Los siguientes ejemplos muestran el efecto de algunos códigos de conversión P (Coincidencia de patrón):
Expresión de conversión
Valor externo
X = Oconv("123456789", "P(3N-3A-3X);(9N)")
X = "123456789"
X = Oconv("123-ABC-A7G", "P(3N-3A-3X);(9N)")
X = "123-ABC-A7G"
X = Oconv("ABC-123-A7G", "P(3N-3A-3X);(9N)")
X = ""
X = Oconv("123-45-6789", "P(3N-2N-4N)")
X = "123-45-6789"
X = Oconv("123-456-789", "P(3N-2N-4N)")
X = ""
X = Oconv("123-45-678A", "P(3N-2N-4N)")
X = ""

Conversiones Radix
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MX, MO y MB (Radix):
Expresión de conversión
Valor externo
X = Oconv("1024", "MX")
X = "400"
X = Oconv("CDE", "MX0C")
X = "434445"

Capítulo 7. Programación BASIC 259


X = Oconv("1024", "MO")
X = "2000"
X = Oconv("CDE", "MO0C")
X = "103104105"
X = Oconv("1024", "MB")
X = "10000000000"
X = Oconv("CDE", "MB0C")
X = "010000110100010001000101"

Conversiones de comprobación de rango


Los siguientes ejemplos muestran el efecto del código de conversión R (Comprobación de rango):
Expresión de conversión
Valor externo
X = Oconv(123, "R100,200")
X = 123
X = Oconv(223, "R100,200")
X = ""
X = Oconv(3.1E2, "R100,200;300,400")
X = 3.1E2

Conversiones de hora
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MT (Hora):
Expresión de conversión
Valor externo
X = Oconv(10000, "MT")
X = "02:46"
X = Oconv(10000, "MTHS")
X = "02:46:40am"
X = Oconv(10000, "MTH")
X = "02:46am"
X = Oconv(10000, "MT.")
X = "02.46"
X = Oconv(10000, "MTS")
X = "02:46:40"

Sentencias On...GoSub
Transfiere el control de programa a una subrutina interna. No está disponible en las expresiones.

Sintaxis
On
índice GoSub etiqueta.sentencia1 [,
etiqueta.sentencia2] ...

On índice especifica una expresión que actúa como índice en la lista de etiquetas de sentencia. El valor de
índice determina a qué etiqueta de sentencias se mueve el control de programa. Durante la ejecución, se
evalúa índice y se redondea a un entero. Si el valor es 1 o menor, se ejecuta la subrutina definida por

260 Guía del desarrollador de Server Job


etiqueta.sentencia1. Si el valor es 2, se ejecuta la subrutina definida por etiqueta.sentencia2, y así
sucesivamente. Si el valor es mayor que el número de subrutinas definidas, se ejecuta la última subrutina.
Un valor nulo genera un error de tiempo de ejecución.

GoSub etiqueta.sentencia1, etiqueta.sentencia2 especifica una lista de etiquetas de sentencia a las que se
puede mover el control de programa. Si una etiqueta de sentencia no existe, genera un error de
compilador.

Comentarios

Utilice una sentencia Return en la subrutina para devolver el control de programa a la sentencia situada
a continuación de las sentenciasOn...GoSub.

Las sentencias On...GoSub pueden escribirse en varias líneas. Finalice cada línea con una coma, excepto
la última.

Ejemplo

Este ejemplo utiliza On...GoSub para invocar una subrutina de un conjunto de subrutinas internas en
una función de transformación de IBM InfoSphere DataStage, dependiendo de un argumento entrante. La
sentencia Return hace que se reanude la ejecución en la sentencia que va inmediatamente después de la
sentencia GoSub. Es necesario utilizar GoTo tal como se muestra para que el control no fluya
accidentalmente a las subrutinas internas.
Function MyTransform(Arg1, Arg2)
Reply = "" ;* respuesta predeterminada
* Utiliza la subrutina particular dependiendo del valor del argumento:
On Arg2 GoSub BadValue, GoodValue1, GoodValue2, BadValue
GoTo ExitFunction ;* se utiliza GOTO para evitar un error
BadValue:
Call DSTransformError("Invalid arg2 ":Arg2, MyTransform")
Return ;* devuelve el control a continuación de On...GoSub
GoodValue1:
Reply = Arg1 * 99
Return ;* devuelve el control a continuación de On...GoSub
GoodValue2:
Reply = Arg1 / 27
Return ;* devuelve el control a continuación de On...GoSub
ExitFunction:
Return(Reply)

Sentencia On...GoTo
Mueve el control de programa a la etiqueta especificada. No está disponible en las expresiones.

Sintaxis
On índice GoTo etiqueta.sentencia1
[, etiqueta.sentencia2] ...

On índice especifica una expresión que actúa como índice en la lista de etiquetas de sentencia. El valor de
índice determina a qué etiqueta de sentencias se mueve el control de programa. Durante la ejecución, se
evalúa índice y se redondea a un entero. Si el valor es 1 o menor, se ejecuta la sentencia definida por
etiqueta.sentencia1. Si el valor es 2, se ejecuta la sentencia definida por etiqueta.sentencia2, y así
sucesivamente. Si el valor es mayor que el número de sentencias definidas, se ejecuta la última sentencia.
Un valor nulo genera un error de tiempo de ejecución.

GoTo etiqueta.sentencia1, etiqueta.sentencia2 especifica una lista de etiquetas de sentencia a las que se puede
mover el control de programa. Si una etiqueta de sentencia no existe, genera un error de compilador.

Capítulo 7. Programación BASIC 261


Comentarios

Las sentencias On...GoTo pueden escribirse en varias líneas. Finalice cada línea con una coma, excepto la
última.

Ejemplo

Este ejemplo utiliza On...GoTo para invocar una subrutina de un conjunto de etiquetas en una función de
transformación de IBM InfoSphere DataStage, dependiendo de un argumento entrante:
Function MyTransform(Arg1, Arg2)
Reply = "" ;* respuesta predeterminada
* GoTo a la etiqueta particular, dependiendo del valor del argumento:
On Arg2 GoTo BadValue, GoodValue1, GoodValue2, BadValue
* Tenga en cuenta que el control no vuelve nunca a la línea siguiente.
BadValue:
Call DSTransformError("Invalid arg2 ":Arg2, MyTransform")
GoTo ExitFunction
GoodValue1:
Reply = Arg1 * 99
GoTo ExitFunction
GoodValue2:
Reply = Arg1 / 27
* Descarta hasta el final de la función:
ExitFunction:
Return(Reply)

Sentencia OpenSeq
Abre un archivo para el proceso secuencial. No está disponible en las expresiones.

OpenSeq

Sintaxis
OpenSeq
nombrevía To variable.archivo
[On Error sentencias ]
[Locked sentencias]
[Then sentencias [Else sentencias]]
[Else sentencias]

nombrevía es el nombre de la vía de acceso del archivo que se va a abrir. Si el archivo no existe, la
sentencia OpenSeq falla. Si nombrevía es un valor nulo, genera un error de tiempo de ejecución.

To variable.archivo asigna el archivo a una variable.archivo. Todas las sentencias utilizadas para procesar el
archivo deben hacer referencia al mismo utilizando variable.archivo. Si variable.archivo es un valor nulo,
genera un error muy grave.

On Error sentencias especifica las sentencias que se ejecutan si hay un error muy grave mientras se está
procesando el archivo. Se produce un error muy grave si el archivo no se puede abrir o si variable.archivo
es un valor nulo.

Locked sentencias especifica las sentencias que se ejecutan si el archivo está bloqueado por otro usuario. Si
no especifica una cláusula Locked y existe un bloqueo de conflicto, el programa espera hasta que se
libere el bloqueo.

Then sentencias especifica las sentencias que se ejecutan después de abrir el archivo.

Else sentencias especifica las sentencias que se ejecutan si no se puede acceder al archivo o no existe.

262 Guía del desarrollador de Server Job


Comentarios

Cada referencia de archivo secuencial de un programa BASIC debe ir precedida de una sentencia
OpenSeq aparte para el archivo. OpenSeq establece un bloqueo de registro de actualización en el
archivo. De este modo, se impide que ningún otro programa cambie el archivo mientras se procesa.
Restablezca este bloqueo utilizando una sentencia CloseSeq después de procesar el archivo. Varias
operaciones OpenSeq en el mismo archivo sólo generan un bloqueo de registro de actualización, por lo
que sólo debe incluir una sentencia CloseSeq por archivo.

Si se produce un error muy grave y no se ha especificado ninguna cláusula On Error:


v Aparece un mensaje de error.
v Se retrotrae alguna transacción no confirmada iniciada en el entorno de ejecución actual.
v Termina el programa actual.

Si se utiliza la cláusula On Error, el valor devuelto por la función Status es el número de error.

Ejemplo

Este es un ejemplo donde se abre un archivo secuencial para comprobar su existencia:


OpenSeq ".\ControlFiles\File1" To PathFvar Locked
FilePresent = @True
End Then
FilePresent = @True
End Else
FilePresent = @False
End

Operadores de coincidencia de patrón


Compara una serie con un patrón de formato. Si el soporte multilingüístico está habilitado, el resultado
de una operación de coincidencia depende del valor de entorno local actual de los convenios Ctype y
Numeric.

Sintaxis
serie
Match[es] patrón

serie es la serie que se va a comparar. Si la serie es un valor nulo, la coincidencia es false y se devuelve 0.

patrón es el patrón de formato y puede ser uno de los códigos siguientes:


Este código...
Coincide con este tipo de serie...
... Cero o más caracteres de cualquier tipo.
0X Cero o más caracteres de cualquier tipo.
nX n caracteres de cualquier tipo.
0A Cero o más caracteres alfabéticos.
nA n caracteres alfabéticos.
0N Cero o más caracteres numéricos.
nN n caracteres numéricos.
'serie ' Texto exacto escrito entre comillas simples o dobles.

Capítulo 7. Programación BASIC 263


Comentarios

Puede especificar una coincidencia negativa añadiendo ~ (tilde) delante del código. Por ejemplo, ~ 4A
coincide con una serie que no contiene cuatro caracteres alfabéticos. Si n tiene más de nueve dígitos, se
utiliza como serie literal.

Si la serie coincide con el patrón, la comparación devuelve 1; de lo contrario, devuelve 0.

Puede especificar varios patrones separándolos con marcas de valor. Por ejemplo, la expresión siguiente
es verdadera si la dirección tiene 16 caracteres alfabéticos o 4 caracteres numéricos seguidos de 12
caracteres alfabéticos; de lo contrario, es falsa:
address Matches "16A":
CHAR(253): "4N12A"

Una serie vacía coincide con los patrones siguientes: "0A", "0X", "0N", "...", "", '' o \\.

Función Pwr
Eleva el valor de un número a la potencia especificada.

Sintaxis
Pwr
(número, potencia)

número es una expresión que se evalúa en el número que se va a elevar a la potencia. Si el número es un
valor nulo, se devuelve un nulo.

potencia especifica la potencia a la que se eleva el número. Si la potencia es un valor nulo, se devuelve el
valor nulo. Si la potencia no es un entero, número no puede ser negativo.

Comentarios

En el caso de un desbordamiento o subdesbordamiento, se imprime un aviso y se devuelve 0.

Ejemplo

Este es un ejemplo del uso de la función Pwr:


OppSide = Sqrt(Pwr(Side1, 2) + Pwr(Side2, 2))

Sentencia Randomize
Genera una secuencia repetible de números aleatorios en un rango especificado. No está disponible en las
expresiones.

Sintaxis
Randomize
(expresión)

expresión se evalúa como un número, n. El rango en el que se selecciona el número aleatorio es de 0 a (n


-1). Por ejemplo, si n es 100, el número aleatorio está en el rango del 0 al 99. Si no se indica ninguna
expresión o si la expresión es un valor nulo, se utiliza la hora del día interna y la secuencia es distinta cada
vez que se ejecuta el programa.

264 Guía del desarrollador de Server Job


Comentarios

Utilice la función Rnd en lugar de Randomize si desea generar una secuencia de números aleatorios no
repetible.

Ejemplo

Este es un ejemplo de cómo una rutina puede utilizar la sentencia Randomize para establecer la semilla
inicial para que la función Rnd genere un conjunto específico de números aleatorios:
Randomize 1
For n = 1 To NumRecords
* Produce series como "ID00", "ID01", "ID57", etc.
RandomId = "ID" : Fmt(Rnd(100), "R%2")
* ... realizar alguna acción con los ID generados.
Next n

ReadSeq
Lee una línea de datos en un archivo abierto para el proceso secuencial. No está disponible en las
expresiones.

Sintaxis
ReadSeq
variable From variable.archivo[On
Error sentencias]
{[Then sentencias [Else
sentencias ] | [Else sentencias ]}

ReadSeq variable lee los datos desde la posición actual en el archivo hasta una línea nueva y los asignan
a variable.

From variable.archivo identifica el archivo que se va a leer. variable.archivo debe haberse asignado en una
sentencia OpenSeq anterior. Si variable.archivo es un valor nulo, o si el archivo no se encuentra o no está
abierto, genera un error de tiempo de ejecución.

On Error sentencias especifica las sentencias que se ejecutan si hay un error muy grave mientras se está
procesando el archivo. Se produce un error muy grave si el archivo no se puede abrir o si variable.archivo
es un valor nulo.

Then sentencias especifica las sentencias que se ejecutan después de leer la línea del archivo.

Else sentencias especifica las sentencias que se ejecutan si no se puede leer el archivo o si se encuentra el
fin del archivo.

Comentarios

La sentencia OpenSeq establece un puntero a la primera línea del archivo. A continuación, ReadSeq:
1. Lee los datos desde la posición actual en el archivo hasta una línea nueva.
a. Asigna los datos a una variable.
b. Restablece el puntero a la posición que se encuentra a continuación de la línea nueva.
c. Descarta la nueva línea.

Si la conexión entre el cliente y el sistema donde reside la capa de motor excede el tiempo de espera,
ReadSeq no devuelve ningún byte del almacenamiento intermedio y se debe volver a intentar la
operación.

Capítulo 7. Programación BASIC 265


La función Status devuelve los valores siguientes tras una operación de ReadSeq:
0 La lectura ha sido satisfactoria.
1 Se ha encontrado un fin del archivo.
2 Se ha excedido el tiempo de espera de la conexión.
-1 El archivo no estaba abierto.

Los demás valores son un número de error que indica que se ha utilizado la cláusula On Error. Si se
produce un error muy grave y no se ha especificado la cláusula On Error:
v Aparece un mensaje de error.
v Se retrotrae alguna transacción no confirmada iniciada en el entorno de ejecución actual.
v Termina el programa actual.

Ejemplo

El siguiente ejemplo muestra la ReadSeq que se utiliza para procesar cada línea de un archivo secuencial:
OpenSeq PathName To FileVar Else
Call DSLogWarn("Cannot open ":PathName, MyRoutine)
GoTo ErrorExit
End
Loop
ReadSeq FileLine From FileVar
On Error
Call DSLogWarn("Error from ":PathName:
→" status=":Status(), "MyRoutine")
GoTo ErrorExit
End
THEN * ... se procesa la línea que acabamos de leer
End Else
Exit ;* al final del archivo
End
Repeat
CloseSeq FileVar

Función REAL
Utilice la función REAL para convertir número en un número de coma flotante sin pérdida de precisión. Si
número se evalúa como valor nulo, se devuelve el valor nulo.

Sintaxis
REAL (número)

Sentencia Return
Finaliza una subrutina y devuelve el control al programa o la sentencia de llamada. No está disponible en
las expresiones.

Sintaxis
Return [To
etiqueta.sentencia]

To etiqueta.sentencia se utiliza con una subrutina interna iniciada con GoSub para especificar que el
control de programa vuelve a la etiqueta de sentencia especificada. Si no hay ninguna cláusula To, el
control vuelve a la sentencia que hay después de la sentencia GoSub. Si la etiqueta.sentencia no existe,
genera un error de compilador.

266 Guía del desarrollador de Server Job


Comentarios

Cuando una sentencia Return finaliza una subrutina externa llamada con una sentencia Call, todos los
archivos abiertos por la subrutina se cierran, excepto los archivos abiertos para variables comunes.

Sentencia Return (valor)


Devuelve un valor de una función escrita por el usuario. No está disponible en las expresiones.

Sintaxis
Return
(expresión)

El valor de expresión se evalúa como el valor que desea que devuelva la función escrita por el usuario. Si
no especifica una expresión, se devuelve una serie vacía.

Comentarios

Puede utilizar la sentencia Return (valor) únicamente en las funciones escritas por el usuario. Si la
emplea en un programa o una subrutina, genera un error.

Ejemplo

Este ejemplo muestra el uso de la sentencia Return (valor), donde las sentencias Function y Deffun se
utilizan para invocar una transformación denominada "MyFunctionB" desde otra función de
transformación denominada "MyFunctionA":
Function MyFunctionA(Arg1)
* Cuando hace referencia a una función escrita por el usuario que se mantiene en el
* repositorio de DataStage, debe declararla como una función con el
* número correcto de argumentos y añadirle un prefijo "DSU.".
Deffun MyFunctionB(A) Calling "DSU.MyFunctionB"
Ans = MyFunctionB(Arg1)
* Añada su propia transformación al valor en Ans...
...
Return(Ans)

Función Right
Extrae una subserie del final de una serie.

Sintaxis
Right
(serie, n)

serie es la serie que contiene la subserie. Si la serie es un valor nulo, se devuelve el valor nulo.

n es el número de caracteres que se extraen del final de la serie. Si n es un valor nulo, genera un error de
tiempo de ejecución.

Ejemplos

Estos ejemplos extraen los tres caracteres más a la derecha de una serie:
MyString = "ABCDEF"
MySubStr = Right(MyString, 3) ;* la respuesta es "DEF"
MySubStr = Right("AB", 3) ;* la respuesta es "AB"

Capítulo 7. Programación BASIC 267


Función Rnd
Genera un número aleatorio. No está disponible en las expresiones.

Sintaxis
Rnd
(expresión)

expresión se evalúa como un número, n. El rango en el que se selecciona el número aleatorio es de 0 a (n


-1). Por ejemplo, si n es 100, el número aleatorio está en el rango del 0 al 99. Si la expresión es un número
negativo, se genera un número negativo aleatorio. Si la expresión es 0, se devuelve 0. Si la expresión es un
valor nulo, genera un error de tiempo de ejecución.

Comentarios

Para generar secuencias repetibles de números aleatorios, utilice la sentencia Randomize en lugar de
Rnd.

Ejemplo

Este es un ejemplo de cómo una rutina puede utilizar la sentencia Randomize para establecer la semilla
inicial para que la función Rnd genere un conjunto específico de números aleatorios:
Randomize 1
For n = 1 To NumRecords
* Produce series como "ID00", "ID01", "ID57", etc.
RandomId = "ID" : Fmt(Rnd(100), "R%2")
* ... realizar alguna acción con los ID generados.
Next n

Función Seq
Convierte un carácter ASCII en su valor de código numérico.

Sintaxis
Seq
(carácter)

carácter es el carácter ASCII que se va a convertir. Si carácter es un valor nulo, se devuelve un nulo.

Comentarios

La función Seq es la inversa de la función Char.

Ejemplo

Este ejemplo utiliza la función Seq para devolver el número asociado con el primer carácter de una serie:
MyVal
= Seq("A") ;* devuelve 65
MyVal = Seq("a") ;* devuelve 97
MyVal = Seq(" 12") ;* devuelve 32 - el primer carácter es un espacio
MyVal = Seq("12") ;* devuelve 49 - el primer carácter es el dígito "1"

SetLocale
En la modalidad de soporte multilingüístico, establece un entorno local para una determinada categoría.

268 Guía del desarrollador de Server Job


Sintaxis
$Include UNIVERSE.INCLUDE
UVNLSLOC.Hnombre = SetLocale
(categoría, valor)

El valor de categoría es una de las siguientes señales de inclusión:


Señal Significado
UVLC$TIME
Hora y fecha
UVLC$NUMERIC
Numérico
UVLC$MONETARY
Moneda
UVLC$CTYPE
Tipo de carácter
UVLC$COLLATE
Secuencia de ordenación

valor es un nombre de entorno local.

Comentarios

El éxito de la función SetLocale debe probarse con la función Status, que devuelve uno de los siguientes
valores:
Valor Significado
0 La llamada es satisfactoria.
LCE$NOLOCALES
El soporte multilingüístico no está habilitado para IBM InfoSphere DataStage.
LCE$BAD.LOCALE
valor no es un nombre de entorno local válido.
LCE$BAD.CATEGORY
No se reconoce la categoría especificada.

Ejemplo
* Switch local time convention to Japanese
SetLocale (UVLC$TIME, "JP-JAPANESE")
If Status() <> 0 Then
...
End

Sentencia Sleep
Detiene un programa el número de segundos especificado. No está disponible en las expresiones.

Sintaxis
Sleep
[segundos]

segundos es el número de segundos que se detiene. Si no se especifica segundos o es un valor nulo, se


utiliza el valor 1.

Capítulo 7. Programación BASIC 269


Comentarios

No utilice la sentencia Sleep en una transformación, ya que ralentizará la ejecución del trabajo de IBM
InfoSphere DataStage.

Ejemplo

Este ejemplo muestra la rutina Sleep que se invoca desde una rutina anterior/posterior de InfoSphere
DataStage para sondear la existencia de un recurso, con un breve intervalo de espera entre los sondeos:
If NumTimesWaited < RepeatCount Then
NumTimesWaited += 1
Sleep 60 ;* 60 segundos = 1 minuto
End

Función Soundex
Genera códigos que pueden utilizarse para comparar series de caracteres basándose en cómo suenan.

Sintaxis
Soundex
(serie)

serie es la serie que se va a analizar. Sólo se tienen en cuenta los caracteres alfabéticos de la serie. Si la
serie es un valor nulo, se devuelve el valor nulo.

Comentarios

La función Soundex devuelve un código fonético formado por la primera letra de la serie seguida de un
número. Las palabras que suenan igual, por ejemplo, rayar y rallar, generan el mismo código fonético.

Ejemplo

Los siguientes ejemplos muestran los valores de Soundex para varias series:
MySnd =
Soundex("Greenwood") ;* devuelve "G653"
MySnd = Soundex("Greenwod") ;* devuelve "G653"
MySnd = Soundex("Green") ;* devuelve "G650"
MySnd = Soundex("") ;* devuelve ""

Función Space
Devuelve una serie que contiene el número especificado de espacios en blanco.

Sintaxis
Space
(espacios)

espacios especifica el número de espacios de la serie. Si espacios es un valor nulo, genera un error de
tiempo de ejecución.

Ejemplo

Este es un ejemplo de la función Space que se utiliza para generar una serie con un número variable de
espacios:

270 Guía del desarrollador de Server Job


MyStr = Space(20 - Len(Arg1)):Arg1
* se rellena con espacios a la izquierda

Función Sqrt
Devuelve la raíz cuadrada de un número.

Sintaxis
Sqrt
(número)

número es 0 o un número positivo. Un número negativo genera un error de tiempo de ejecución. Si el


número es un valor nulo, se devuelve un nulo.

Ejemplo

Este es un ejemplo del uso de la función Sqrt:


OppSide = Sqrt(Side1 ^ 2 + Side2 ^ 2)

Función SQuote
Delimita una serie mediante comillas simples.

Sintaxis
SQuote
(serie)

serie es la serie que se escribirá entre comillas. Si serie es un valor nulo, se devuelve un valor nulo sin
comillas.

Ejemplo

Este es un ejemplo de la función SQuote que añade caracteres de comilla simple (') al principio y al final
de una serie:
ProductNo = 12345
QuotedStr = SQuote(ProductNo : "A")
* el resultado es "12345A"

Función Status
Devuelve un código que proporciona información sobre cómo se ha ejecutado la función anterior.

Sintaxis
Status ( )

Comentarios

El valor devuelto por Status varía según la función que notifique. En las descripción de las funciones se
incluye una lista de los valores posibles. Puede utilizar Status después de las siguientes funciones:
v Fmt
v Iconv
v Oconv
v OpenSeq

Capítulo 7. Programación BASIC 271


v ReadSeq
v WriteSeq
v WriteSeqf

Ejemplos

A continuación, se proporciona un ejemplo de cómo se utiliza la función Status para comprobar la


operación correcta de una llamada a la función Iconv:
InDate =
Iconv(ExtDate, "D2") ;* convertir la fecha al formato interno
ConvStatus = Status()
Begin Case
Case ConvStatus = 0
* ... la conversión ha sido satisfactoria
Case ConvStatus = 1
* ... la conversión ha fallado - ExtDate no se puede analizar como fecha
Case ConvStatus = 2
* ... la conversión ha fallado - la conversión "D2" no es válida (poco probable)
Case ConvStatus = 3
* ... la conversión ha sido satisfactoria, pero puede que ExtDate no sea
* válida, por ejemplo, si contiene la serie "31/02/97"
End Case

A continuación, se proporciona un ejemplo de cómo se utiliza la función Status para comprobar la


operación correcta de una llamada a la función Fmt:
FormattedNum = Fmt(IntNum, "R2$") ;* formatear un
número
FmtStatus = Status()
Begin Case
Case FmtStatus = 0
* ... el formateo ha sido satisfactorio
Case FmtStatus = 1
* ... el formateo ha fallado - IntNum no se puede convertir en un número
Case FmtStatus = 2
* ... el formateo ha fallado - el formato "R2$" no es válido (poco probable)
End Case

Función Str
Forma una serie repitiendo la serie de entrada el número de veces especificado.

Sintaxis
Str
(serie, repetición)

serie es la serie que se repetirá. Si la serie es un valor nulo, se devuelve el valor nulo.

repetición es el número de veces que se repite la serie. Si repetición es un número negativo, se devuelve una
serie vacía. Si repetición es un valor nulo, genera un error de tiempo de ejecución.

Ejemplo

Este es un ejemplo de la función Str que se utiliza para generar una serie con un número variable de
espacios:
MyStr = Str("A", 20 - Len(Arg1)):Arg1
* se rellena con varias "A" a la izquierda

272 Guía del desarrollador de Server Job


Sentencia Subroutine
Marca el inicio de una subrutina externa. No está disponible en las expresiones.

Sintaxis
Subroutine
[nombre] ( argumento1[
,argumento2 ]... )

nombre es un nombre que identifica la subrutina de forma que permite leer el programa más fácilmente.

argumento1 y argumento2 son los nombres de las variables que se utilizan para pasar argumentos entre el
programa de llamada y la subrutina. Una subrutina utilizada en una transformación debe tener uno o
varios argumentos; una subrutina anterior o una subrutina posterior debe contener dos argumentos.

Comentarios
La sentencia Subroutine debe ser la primera línea no comentada de la subrutina. Cada subrutina puede
contener una sola sentencia Subroutine. La sentencia Call que invoca la subrutina debe especificar el
mismo número de argumentos que la sentencia Subroutine.

Ejemplo

Este ejemplo muestra cómo una rutina anterior/posterior debe declararse como una subrutina. El cliente
del Diseñador lo comprobará automáticamente cuando cree una nueva rutina anterior/posterior.
Subroutine MyRoutine(InputArg, ErrorCode)
* Los usuarios pueden especificar el valor de serie que deseen cuando utilizan
* MyRoutine desde el Diseñador de trabajos. Aparecerá
* en la variable denominada InputArg.
* La rutina controla el progreso del trabajo estableciendo
* el valor de ErrorCode, que es un argumento de salida.
* Un valor distinto de cero detendrá la etapa o el trabajo.
ErrorCode = 0 ;* respuesta predeterminada
* Realice algún proceso...
...
Return

Función Time
Devuelve la hora interna del sistema.

Sintaxis
Time ( )

Comentarios

La hora interna se obtiene del sistema en el que reside la capa de motor y se devuelve como el número
de segundos transcurridos desde la medianoche hasta la milésima más próxima de un segundo.

Ejemplo

Este es un ejemplo de la hora del reloj del sistema actual que se asigna a una variable:
TimeInSecs
= Int(Time()) ;* elimina las partes fraccionarias

Capítulo 7. Programación BASIC 273


Función TimeDate
Devuelve la hora y la fecha del sistema. Si el soporte multilingüístico está habilitado, el resultado de esta
función depende del valor de entorno local actual del convenio Time.

Sintaxis
TimeDate ( )

Comentarios

La hora y la fecha se devuelven con el siguiente formato:

hh:mm:ss dd mmm aaaa

hh son las horas (basadas en el reloj de 24 horas).

mm son los minutos.

ss son los segundos.

dd es el día.

mmm es una abreviatura de tres letras para el mes.

aaaa es el año.

Ejemplo

Este es un ejemplo de cómo un formato legible por las personas de la fecha y la hora del sistema actual
puede asignarse a una variable y manipularse:
NowStr = TimeDate() ;*
por ej. "09:59:51 03 JUN 1997"
* extraer sólo la hora
NowTimeStr = Field(NowStr, " ", 1, 1)
* extraer el resto como la fecha
NowDateStr = Field(NowStr, " ", 2, 3)

Funciones trigonométricas
Las funciones trigonométricas devuelven el valor trigonométrico especificado por la función. Todas tienen
una sintaxis parecida.

Sintaxis general
TrigFunc
(número)

TrigFunc es una de las funciones trigonométricas: Cos, Sin, Tan, ACos, ASin, ATan, CosH, TanH o SinH.

número es el número o la expresión que desea evaluar. Si el número es un valor nulo, se devuelve un valor
nulo. Si el número es un ángulo, los valores fuera del rango del 0 al 360 se interpretan como el módulo
360. Los valores superiores a 1E17 generan un mensaje de aviso, y se devuelve 0.

274 Guía del desarrollador de Server Job


Comentarios

Cos devuelve el coseno de un ángulo. número es el número de grados del ángulo. Cos es el inverso de
ACos.

Sin devuelve el seno de un ángulo. número es el número de grados del ángulo. Sin es el inverso de ASin.

Tan devuelve la tangente de un ángulo. número es el número de grados del ángulo. Tan es el inverso de
ATan.

ACos devuelve el arcocoseno de número en grados. ACos es el inverso de Cos.

ASin devuelve el arcoseno de número en grados. ASin es el inverso de Sin.

ATan devuelve la arcotangente de número en grados. ATan es el inverso de Tan.

CosH devuelve el coseno hiperbólico de un ángulo. número es el número de grados del ángulo.

SinH devuelve el seno hiperbólico de un ángulo. número es el número de grados del ángulo.

TanH devuelve la tangente hiperbólica de un ángulo. número es el número de grados del ángulo.

Ejemplos

Este ejemplo muestra que la función ACos es la inversa de la función Cos:


Angle = 45
NewAngle = Acos(Cos(Angle)) ;* NewAngle debe ser 45 también

Este ejemplo muestra que la función ASin es la inversa de la función Sin:


Angle = 45
NewAngle = Asin(Sin(Angle)) ;* NewAngle debe ser 45 también

Este ejemplo muestra que la función ATan es la inversa de la función Tan:


Angle = 45
NewAngle = Atan(Tan(Angle)) ;* NewAngle debe ser 45 también

Este ejemplo utiliza la función Cos para calcular la secante de un ángulo:


Angle = 45 ;* define el ángulo en grados
Secant = 1 / Cos(Angle) ;* calcula la secante

Este ejemplo utiliza la función CosH para calcular la secante hiperbólica de un ángulo:
Angle = 45 ;* define el ángulo en grados
HSecant = 1 / Cosh(Angle) ;* calcula la secante hiperbólica

Este ejemplo utiliza la función Sin para calcular la cosecante de un ángulo:


Angle = 45 ;* define el ángulo en grados
CoSecant = 1 / Sin(Angle) ;* calcula la cosecante

Este ejemplo utiliza la función SinH para calcular la cosecante hiperbólica de un ángulo:
Angle = 45 ;* define el ángulo en grados
HCoSecant = 1 / Sinh(Angle)
* calcula la cosecante hiperbólica

Este ejemplo utiliza la función Tan para calcular la cotangente de un ángulo:


Angle = 45 ;* define el ángulo en grados
CoTangent = 1 / Tan(Angle) ;* calcula la cotangente

Capítulo 7. Programación BASIC 275


Este ejemplo utiliza la función TanH para calcular la cotangente hiperbólica de un ángulo:
Angle = 45 ;* define el ángulo en grados
HCoTangent = 1 / Tanh(Angle)
* calcula la cotangente hiperbólica

Función Trim
Recorta los caracteres no deseados de una serie.

Sintaxis
Trim
(serie)
Trim (serie, carácter [
,opción] )

serie es una serie que contiene caracteres no deseados. Si la serie es un valor nulo, se devuelve el valor
nulo.

carácter especifica el carácter que se va a recortar (que no sea un espacio o una tabulación). Si el carácter
es un valor nulo, genera un error de tiempo de ejecución.

opción especifica el tipo de operación de recorte, y puede ser uno de los valores siguientes:

L Elimina las apariciones iniciales del carácter.

T Elimina las apariciones finales del carácter.

B Elimina las apariciones iniciales y finales del carácter.

R Elimina las apariciones iniciales y finales del carácter y reduce las apariciones a una sola aparición.

A Elimina todas las apariciones del carácter.

F Elimina las tabulaciones y los espacios en blanco iniciales.

E Elimina las tabulaciones y los espacios en blanco finales.

D Elimina las tabulaciones y los espacios en blanco iniciales y finales y reduce los espacios y las
tabulaciones a solo un espacio y una tabulación.

Si no se especifica la opción o es un valor nulo, se supone que es R.

Comentarios

En la primera sintaxis, varias apariciones de espacios y tabulaciones se reducen a una individual, y se


elimina la totalidad de tabulaciones y espacios iniciales y finales.

Ejemplos

A continuación, se muestran algunos ejemplos de varias formas de la función Trim:


MyStr = Trim(" String with whitespace ")
* ...devuelve "String with whitespace"
MyStr = Trim("..Remove..redundant..dots....", ".")
* ...devuelve "Remove.redundant.dots"

276 Guía del desarrollador de Server Job


MyStr = Trim("Remove..all..dots....", ".", "A")
* ...devuelve "Removealldots"
MyStr = Trim("Remove..trailing..dots....", ".", "T")
* ...devuelve "Remove..trailing..dots"

Función TrimB
Recorta los espacios finales de una serie.

Sintaxis
TrimB
(serie)

serie es la serie que contiene los espacios finales. Si la serie es un valor nulo, se devuelve el valor nulo.

Ejemplo
MyStr = TrimB(" String with whitespace ")
* ...devuelve "(" String with whitespace"

Función TrimF
Recorta las tabulaciones y los espacios iniciales de una serie.

Sintaxis
TrimF
(serie)

serie es la serie que contiene los espacios iniciales. Si la serie es un valor nulo, se devuelve el valor nulo.

Ejemplo
MyStr = TrimF(" String with whitespace ")
* ...devuelve "String with whitespace"

Función UniChar
En la modalidad de soporte multilingüístico, genera un carácter individual en formato Unicode.

Sintaxis
UniChar
(expresión)

expresión es el valor decimal de un carácter Unicode, en el rango de 0 a 65535.

Comentarios

Si expresión tiene un valor fuera del rango especificado, UniChar devuelve una serie vacía. Si expresión un
nulo SQL, se devuelve un nulo SQL.

Función UniSeq
En la modalidad de soporte multilingüístico, convierte un carácter Unicode en su valor decimal
equivalente.

Capítulo 7. Programación BASIC 277


Sintaxis
UniSeq
(expresión)

expresión es un carácter Unicode que se va a convertir en su valor decimal.

Comentarios

Compárese con la función Seq, que convierte caracteres ASCII en sus equivalentes decimales.

Función UpCase
Cambia las letras minúsculas de una serie a mayúsculas. Si el soporte multilingüístico está habilitado, el
resultado de esta función depende del valor de entorno local actual del convenio Ctype.

Sintaxis
UpCase
(serie)

serie es la serie cuyas letras desea cambiar a mayúsculas.

Ejemplo

Este es un ejemplo de la función UpCase:


MixedCase = "ABC123abc"
UpperCase = UpCase(MyString) ;* el resultado es "ABC123ABC"

Función WEOFSeq
Graba una marca de fin del archivo en un archivo secuencial abierto.

Sintaxis
WEOFSeq
variable.archivo [On Error sentencias ]

variable.archivo especifica el archivo secuencial. variable.archivo es el nombre de variable asignado al


archivo por la sentencia OpenSeq anterior.

On Error sentencias especifica la acción que se realiza si se produce un error muy grave. Se produce un
error muy grave si el archivo no se abre o si variable.archivo es un valor nulo. Si no especifica una cláusula
On Error, el trabajo termina anormalmente y se graba un error en el archivo de registro del trabajo.

Comentarios

La marca de fin del archivo trunca el archivo en la posición actual del puntero. Una sentencia ReadSeq
posterior utilizará la cláusula Else.

Ejemplo

El siguiente ejemplo abre un archivo secuencial y lo trunca grabando inmediatamente una marca de fin
del archivo:

278 Guía del desarrollador de Server Job


OpenSeq PathName To FileVar Then
WeofSeq FileVar
End Else
Call DSLogFatal("Cannot open file ":Pathname,"Routine1")
GoTo ErrorExit
End

Función WriteSeq
Escribe una nueva línea en un archivo que está abierto para el proceso secuencial y avanza un puntero a
la siguiente posición en el archivo.

Sintaxis
WriteSeq
línea To variable.archivo
[On Error sentencias]
{[Then sentencias [Else
sentencias ] | [Else sentencias ]}

línea es la línea que se graba en el archivo secuencial. WriteSeq graba una línea nueva al final de la línea.

To variable.archivo especifica el archivo secuencial. variable.archivo es el nombre de variable asignado al


archivo por la sentencia OpenSeq anterior.

On Error sentencias especifica la acción que se realiza si se produce un error muy grave. Se produce un
error muy grave si el archivo no se abre o si variable.archivo es un valor nulo. Si no especifica una cláusula
On Error, el trabajo termina anormalmente y se graba un mensaje de error en el archivo de registro del
trabajo.

Then sentencias especifica la acción que realiza el programa después de que se grabe una línea en el
archivo. Si no especifica una cláusula Then, debe especificar una cláusula Else.

Else sentencias especifica la acción que realiza el programa si la línea no se puede grabar en el archivo,
por ejemplo, si el archivo no existe. Si no especifica una cláusula Else, debe especificar una cláusula
Then.

Comentarios

La línea se graba en la posición actual dentro del archivo y, a continuación, el puntero se avanza a la
siguiente posición después de la línea nueva. Los datos existentes en el archivo se sobrescriben, a menos
que el puntero esté al final del archivo.

Puede utilizar la función Status después de WriteSeq para determinar si la operación ha sido
satisfactoria. Status devuelve 0 si el archivo estaba bloqueado, -2 si el archivo no estaba bloqueado y un
código de error si se ha tomado la cláusula On Error.

Ejemplo

El siguiente ejemplo graba una línea individual en un archivo secuencial truncándolo y grabando en él
inmediatamente después de abrirlo:
OpenSeq PathName To FileVar Then
WeofSeq FileVar ;* write end-of-file mark immediately
WriteSeq "First line" To FileVar Else
On Error
Call DSLogWarn("Error from ":PathName:"
→ status=":Status(), "MyRoutine")
GoTo ErrorExit
End

Capítulo 7. Programación BASIC 279


Call DSLogFatal("Cannot write to ":Pathname,
→ "MyRoutine")
GoTo ErrorExit
End
End Else
Call DSLogFatal("Cannot open file ":Pathname, "MyRoutine")
GoTo ErrorExit
End

Función WriteSeqF
Escribe una nueva línea en un archivo que está abierto para el proceso secuencial, avanza un puntero a la
siguiente posición en el archivo y guarda el archivo en un disco.

Sintaxis
WriteSeqF
línea To variable.archivo
[On Error sentencias]
{[Then sentencias [Else
sentencias]] | [Else sentencias]}

línea es la línea que se graba en el archivo secuencial. WriteSeqF graba una línea nueva al final de la
línea.

To variable.archivo especifica el archivo secuencial. variable.archivo es el nombre de variable asignado al


archivo por la sentencia OpenSeq anterior.

On Error sentencias especifica la acción que se realiza si se produce un error muy grave. Se produce un
error muy grave si el archivo no se abre o si variable.archivo es un valor nulo. Si no especifica una cláusula
On Error, el trabajo termina anormalmente y se graba un mensaje de error en el archivo de registro del
trabajo.

Then sentencias especifica la acción que realiza el programa después de que se grabe una línea en el
archivo. Si no especifica una cláusula Then, debe especificar una cláusula Else.

Else sentencias especifica la acción que realiza el programa si la línea no se puede grabar en el archivo,
por ejemplo, si el archivo no existe. Si no especifica una cláusula Else, debe especificar una cláusula
Then.

Comentarios

WriteSeqF trabaja de la misma forma que WriteSeq, excepto que cada línea se graba directamente en el
disco, en lugar de guardarse en el almacenamiento intermedio y grabarse luego por lotes. Una sentencia
WriteSeqF después de varias sentencias WriteSeq graba todas las líneas del almacenamiento intermedio
en el disco.

Nota: Utilice la sentencia WriteSeqF sólo para registrar operaciones, ya que un aumento de la E/S de
disco disminuye el rendimiento del programa.

Puede utilizar la función Status después de WriteSeqF para determinar si la operación ha sido
satisfactoria. Status devuelve 0 si el archivo estaba bloqueado, -2 si el archivo no estaba bloqueado y un
código de error si se ha tomado la cláusula On Error.

Ejemplo

El siguiente ejemplo se añade a un archivo secuencial al leer hasta el final del mismo e imponer la
grabación de una línea más:

280 Guía del desarrollador de Server Job


OpenSeq PathName To FileVar Then
Loop
ReadSeq Dummy From FileVar Else Exit ;* en el fin del archivo
Repeat
WriteSeqF "Extra line" To FileVar Else
On Error
Call DSLogWarn("Error from ":PathName:"
→ status=":Status(), "MyRoutine")
GoTo ErrorExit
End
Call DSLogFatal("Cannot write to ":Pathname, "MyRoutine")
GoTo ErrorExit
End
End Else
Call DSLogFatal("Cannot open file ":Pathname, "MyRoutine")
GoTo ErrorExit
End

Función Xtd
Convierte una serie hexadecimal a decimal.

Sintaxis
Xtd
(serie)

serie es la serie numérica que desea convertir.

Ejemplo
Este es un ejemplo de la función Xtd que se utiliza para convertir un número decimal en una
representación de serie hexadecimal:
MyHex = "2F"
MyNumber = Xtd(MyHex) ;* devuelve 47

Códigos de conversión
Los códigos de conversión especifican cómo se formatean los datos para la salida o el almacenamiento
interno. Se especifican en una función Iconv o Oconv. A continuación, se proporciona una lista de los
códigos que puede utilizar.

Extracción de caracteres de los campos:

G Extracción de valores de campo MCA Extracción de caracteres alfabéticos de un campo MC/A


Extracción de caracteres no alfabéticos de un campo MCN Extracción de caracteres numéricos de un
campo MC/N Extracción de caracteres no numéricos de un campo MCM Extracción de caracteres de
varios bytes de soporte multilingüístico de un campo MC/M Extracción de caracteres de un solo byte de
soporte multilingüístico de un campo P Extracción de datos que coinciden con un patrón R Extracción de
un valor numérico que entra dentro de un rango

Proceso previo de los datos:

L Limitación de la longitud de los datos devueltos S Generación de códigos para comparar las palabras
por su sonido

Proceso de texto:

Capítulo 7. Programación BASIC 281


MCU Conversión de letras minúsculas a mayúsculas MCL Conversión de letras mayúsculas a minúsculas
MCT Conversión de las palabras del campo a mayúsculas iniciales MCP Conversión de caracteres no
imprimibles en un punto NLS Conversión de series entre el formato interno y externo utilizando una
correlación de juego de caracteres

Formateo de números, fechas, horas y monedas:

MD Formateo de números como cantidades monetarias o numéricas ML Justificación a la izquierda y


formateo de números MR Justificación a la derecha y formateo de números MP Empaquetamiento de
números decimales, dos por byte, para el almacenamiento D Conversión de fechas MT Conversión de
horas TI Conversión de horas en formato interno al convenio local predeterminado NR Conversión de
numerales romanos en numerales árabes NL Conversión de caracteres alternativos dependientes del
entorno local en numerales árabes MM Formateo de datos de moneda

Conversiones Radix:

MX Conversión de números hexadecimales en decimales MCD Conversión de números decimales en


hexadecimales MCX Conversión de números hexadecimales en decimales MO Conversión de números
octales en decimales MB Conversión de números binarios en decimales MY Conversión de números
hexadecimales en sus equivalentes ASCII MUOC Conversión de números hexadecimales en valores de
caracteres Unicode

Los códigos de conversión se describen más detalladamente en las siguientes páginas de referencia. Los
códigos de conversión aparecen en orden alfabético.

D
Convierte fechas en formato de almacenamiento y viceversa. Cuando el soporte multilingüístico está
habilitado, el formato de fecha predeterminado del entorno local altera temporalmente el formato de
fecha predeterminado establecido en el archivo msg.text.

Sintaxis
D
[años.dígitos] [delimitador
omisión] [separador]
[formato.opciones
[ modificadores ] ] [ E ] [ L ]

años.dígitos indica el número de dígitos del año que aparecerán en la salida. El valor predeterminado es 4.
En la entradaaños.dígitos se ignora. Si la fecha de entrada no tiene ningún año, el año se obtiene de la
fecha del sistema.

delimitador es un carácter no numérico individual que se utiliza como delimitador de campo si la


conversión primero debe realizar una extracción de grupo para obtener la fecha interna. No puede ser el
delimitador del sistema.

omisión debe acompañar el uso de delimitador y es el número de campos delimitados que se omitirán para
extraer la fecha.

separador es el carácter que se utiliza para separar el día, el mes y el año en la salida. Si no especifica
separador, la fecha se convierte al formato 01 DEC 1999. En la entrada, separador se ignora. Si el soporte
multilingüístico está habilitado y no especifica años.dígitos ni separador, el formato de fecha
predeterminado es 01 DEC 1999.

formato.opciones está formado por hasta seis opciones que definen cómo se genera la fecha en la salida (se
ignoran en la entrada). Cada opción de formato puede tener un modificador asociado que se describe

282 Guía del desarrollador de Server Job


más adelante. Las opciones de formato sólo pueden utilizarse en determinadas combinaciones, tal como
se describe a continuación. Las opciones son las siguientes:
v Y [ n ] genera el número de años en la salida como n dígitos.
v YA genera sólo el nombre del año del calendario chino en la salida. Si el soporte multilingüístico está
habilitado, utiliza el campo YEARS del entorno local Hora/Fecha.
v M genera sólo el mes como un número del 1 al 12 en la salida.
v MA genera sólo el nombre del mes en la salida. Si el soporte multilingüístico está habilitado, utiliza el
campo MONS del entorno local Hora/Fecha. Puede utilizar cualquier combinación de letras
mayúsculas y minúsculas para el mes; IBM InfoSphere DataStage coteja la combinación con el campo
ABMONS. Sino, el campo MONS.
v MB genera el nombre del mes abreviado en la salida. Si el soporte multilingüístico está habilitado,
utiliza el campo ABMONS del entorno local Hora/Fecha; de lo contrario, utiliza los tres primeros
caracteres del nombre del mes.
v MR genera el número de mes en números romanos en la salida.
v D genera el día del mes como un número del 1 al 31 en la salida.
v W genera el día de la semana como un número del 1 al 7 en la salida, siendo lunes el día 1. Si el
soporte multilingüístico está habilitado, utiliza el campo DAYS del entorno local Hora/Fecha, siendo
domingo el día 1.
v WA genera el día por nombre en la salida. Si el soporte multilingüístico está habilitado, utiliza el
campo DAYS del entorno local Hora/Fecha, salvo que lo modifiquen los modificadores de formato, f1,
f2, etc.
v WB genera el nombre del día abreviado en la salida. Si el soporte multilingüístico está habilitado,
utiliza el campo ABDAYS del entorno local Hora/Fecha.
v Q genera el trimestre del año como un número del 1 al 4 en la salida.
v J genera el día del año como un número del 1 al 366 en la salida.
v N genera el número de año de la era actual en la salida. Si el soporte multilingüístico está habilitado,
utiliza el campo ERA STARTS del entorno local Hora/Fecha.
v NA genera el nombre de la era correspondiente al año actual en la salida. Si el soporte multilingüístico
está habilitado, utiliza los campos ERA NAMES o ERA STARTS del entorno local Hora/Fecha.
v Z genera el nombre del huso horario en la salida.

A continuación, se muestra qué opciones de formato pueden utilizarse juntas:


Utilice esta opción...
Con estas opciones...
S M, MA, D, J, [modificadores]
YA M, MA, D, [modificadores]
L Y, YA, D, [modificadores]
MA Y, YA, D, [modificadores]
MB Y, YA, D, [modificadores]
D Y, M, [modificadores]
N Y, M, MA, MB, D, WA, [modificadores]
N/D Y, M, MA, MB, D, WA, [modificadores]
W Y, YA, M, MA, D
WA Y, YA, M, MA, D
WB Y, YA, M, MA, D
Q

Capítulo 7. Programación BASIC 283


J Y, [modificadores]
Z [modificadores]

Los [ modificadores ] modifican los formatos de salida de los datos especificados por opciones.formato.
Puede especificar hasta seis modificadores, separados por comas. Las comas indican con qué
opción.formato está asociado cada modificador; por lo tanto, debe incluir todas las comas, aunque sólo
desee especificar un modificador (vea los ejemplos). Pueden ser los siguientes valores:
v n muestra n caracteres. Se utiliza con las opciones numéricas D, M, Y, W, Q y J. Se utiliza con las
opciones de texto MA, MB, WA, WB, YA, N y "text".
v A[n] muestra el mes como n caracteres alfabéticos. Se utiliza con las opciones Y, M, W y N.
v Z[n] suprime los ceros iniciales y aparece como n dígitos. Funciona como n con las opciones numéricas.
v E conmuta los formatos de fecha día/mes/año y mes/día/año.
v L muestra los nombres de mes y día en minúsculas. El valor predeterminado es en mayúsculas.

Valor devuelto por la función Status

Si especifica una fecha no válida en este código, devuelve una fecha interna válida, pero señala la
anomalía asignando un valor 3 a la función Status. Por ejemplo, 02/29/99 se interpreta como 03/01/99, y
09/31/93 se interpreta como 10/01/93. Si la fecha de entrada es un valor nulo, se asigna un valor 3 a
Status y no se realiza ninguna conversión.

Ejemplos

Los siguientes ejemplos muestran el efecto de varios códigos de conversión D con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("31 DEC 1967", "D")
X = 0
X = Iconv("27 MAY 97", "D2")
X = 10740
Iconv("05/27/97", "D2/")
X = 10740
X = Iconv("27/05/1997", "D/E")
X = 10740
X = Iconv("1997 5 27", "D YMD")
X = 10740
X = Iconv("27 MAY 97", "D DMY[,A3,2]")
X = 10740
X = Iconv("5/27/97", "D/MDY[Z,Z,2]")
X = 10740
X = Iconv("27 MAY 1997", "D DMY[,A,]")
X = 10740
X = Iconv("97 05 27", "DYMD[2,2,2]")
X = 10740

Los siguientes ejemplos muestran el efecto de varios códigos de conversión D con la función Oconv:
Expresión de conversión
Valor externo

284 Guía del desarrollador de Server Job


X = Oconv(0, "D")
X = "31 DEC 1967"
X = Oconv(10740, "D2")
X = "27 MAY 97"
X = Oconv(10740, "D2/")
X = "05/27/97"
X = Oconv(10740, "D/E")
X = "27/05/1997"
X = Oconv(10740, "D-YJ")
X = "1997-147"
X = Oconv(10740, "D2*JY")
X = "147*97"
X = Oconv(10740, "D YMD")
X = "1997 5 27"
X = Oconv(10740, "D MY[A,2]")
X = "MAY 97"
X = Oconv(10740, "D DMY[,A3,2]")
X = "27 MAY 97"
X = Oconv(10740, "D/MDY[Z,Z,2]")
X = "5/27/97"
X = Oconv(10740, "D DMY[,A,]")
X = "27 MAY 1997"
X = Oconv(10740, "DYMD[2,2,2]")
X = "97 05 27"
X = Oconv(10740, "DQ")
X = "2"
X = Oconv(10740, "DMA")
X = "MAY"
X = Oconv(10740, "DW")
X = "2"
X = Oconv(10740, "DWA")
X = "TUESDAY"

G
Extrae uno o varios valores delimitados de un campo.

Sintaxis
G [
omisión ] campos de delimitador

El valor de omisión indica el número de campos que se omitirán; si no se especifica, se supone que es 0 y
no se omite ningún campo.

delimitador es un carácter no numérico que se utiliza como separador de campos. No debe utilizar las
variables del sistema @IM, @FM, @VM, @ SM y @TM como delimitadores.

Capítulo 7. Programación BASIC 285


campos es el número de valores contiguos que se van a extraer.

Ejemplos

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión G con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("27.05.1997", "G1.2")
X = "05.1997"
X = Iconv("27.05.1997", "G.2")
X = "27.05"

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión G con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("27.05.1997", "G1.2")
X = "05.1997"
X = Oconv("27.05.1997", "G.2")
X = "27.05"

L
Extrae datos que cumplen unos criterios de longitud.

Sintaxis
L [ n [ ,m ] ]

n por sí solo es el número máximo de caracteres que deben contener los datos para poder devolverse. Si
contiene más de n caracteres, se devuelve una serie vacía. Si no especifica n, o si n es 0, se devuelve la
longitud de los datos.

n, m especifica un rango. Si los datos contiene los caracteres del n al m, se devuelven; de lo contrario, se
devuelve una serie vacía.

Ejemplos

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión L con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("QWERTYUIOP", "L0")
X = 10
X = Iconv("QWERTYUIOP", "L7")
X = ""
X = Iconv("QWERTYU", "L7")
X = "QWERTYU"
X = Iconv("QWERTYUOP", "L3,5")
X = ""
X = Iconv("QWER", "L3,5")
X = "QWER"

286 Guía del desarrollador de Server Job


Los siguientes ejemplos muestran el efecto de algunos códigos de conversión L con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("QWERTYUIOP", "L0")
X = 10
X = Oconv("QWERTYUIOP", "L7")
X = ""
X = Oconv("QWERTYU", "L7")
X = "QWERTYU"
X = Oconv("QWERTYUOP", "L3,5")
X = ""
X = Oconv("QWER", "L3,5")
X = "QWER"

MB
Convierte números binarios en decimales o en un valor ASCII para el almacenamiento, o viceversa para
la salida.

Sintaxis
MB [ 0C ]

0C convierte el número octal en su carácter ASCII equivalente en la entrada, y viceversa en la salida.

Comentarios

Los caracteres distintos de 0 y 1 generan un error.

Ejemplos

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MB con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("10000000000", "MB")
X = 1024
X = Iconv("010000110100010001000101", "MB0C")
X = "CDE"

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MB con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("1024", "MB")
X = "10000000000"
X = Oconv("CDE", "MB0C")
X = "010000110100010001000101"

Capítulo 7. Programación BASIC 287


MCA
Extrae todos los caracteres alfabéticos de un campo.

Sintaxis
MCA

Ejemplos

El siguiente ejemplo muestra el efecto de un código de conversión MCA con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("John Smith 1-234", "MCA")
X = "JohnSmith"

El siguiente ejemplo muestra el efecto de un código de conversión MCA con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("John Smith 1-234", "MCA")
X = "JohnSmith"

MC/A
Extrae todos los caracteres no alfabéticos de un campo.

Sintaxis
MC/A

Ejemplos

El siguiente ejemplo muestra el efecto de un código de conversión MC/A con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("John Smith 1-234", "MC/A")
X = " 1-234"

El siguiente ejemplo muestra el efecto de un código de conversión MC/A con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("John Smith 1-234", "MC/A")
X = " 1-234"

MCD
Convierte números decimales en hexadecimales.

Sintaxis
MCD

288 Guía del desarrollador de Server Job


Ejemplos

El siguiente ejemplo muestra el efecto de un código de conversión MCD con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("4D2", "MCD")
X = "1234"

El siguiente ejemplo muestra el efecto de un código de conversión MCD con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("1234", "MCD")
X = "4D2"

MCL
Convierte todas las letras mayúsculas a minúsculas.

Sintaxis
MCL

Ejemplos

El siguiente ejemplo muestra el efecto de un código de conversión MCL con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("John Smith 1-234", "MCL")
X = "john smith 1-234"

El siguiente ejemplo muestra el efecto de un código de conversión MCL con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("John Smith 1-234", "MCL")
X = "john smith 1-234"

MCM
Se utiliza si el soporte multilingüístico está habilitado. Extrae todos los caracteres de varios bytes de
soporte multilingüístico del campo. Si la modalidad de soporte multilingüístico está inhabilitada, el
código devuelve el valor 2, que indica un código de conversión no válido.

Sintaxis
MCM

Ejemplo

El siguiente ejemplo muestra el efecto de un código de conversión MCM con la función Iconv:
IF SYSTEM(NL$ON)
THEN
Multibyte.Characters = ICONV(Input.String, "MCM")
END

Capítulo 7. Programación BASIC 289


Oconv se comporta de la misma forma que Iconv.

MC/M
Se utiliza si el soporte multilingüístico está habilitado. Extrae todos los caracteres de un solo byte del
campo. Si la modalidad de soporte multilingüístico está inhabilitada, el código devuelve el valor 2, que
indica un código de conversión no válido.

MC/M

Sintaxis
MC/M

Ejemplo

El siguiente ejemplo muestra el efecto de un código de conversión MC/M con la función Iconv:
IF SYSTEM(NL$ON)
THEN
Singlebyte.Characters = ICONV(Input.String, "MC/M")
END

Oconv se comporta de la misma forma que Iconv.

MCN
Extrae todos los caracteres numéricos de un campo.

Sintaxis
MCN

Ejemplos

El siguiente ejemplo muestra el efecto de un código de conversión MCN con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("John Smith 1-234", "MCN")
X = "1234"

El siguiente ejemplo muestra el efecto de un código de conversión MCN con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("John Smith 1-234", "MCN")
X = "1234"

MC/N
Extrae todos los caracteres no numéricos de un campo.

Sintaxis
MC/N

290 Guía del desarrollador de Server Job


Ejemplos

El siguiente ejemplo muestra el efecto de un código de conversión MC/N con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("John Smith 1-234", "MC/N")
X = "John Smith -"

El siguiente ejemplo muestra el efecto de un código de conversión MC/N con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("John Smith 1-234", "MC/N")
X = "John Smith -"

MCP
Convierte los caracteres no imprimibles en un punto.

Sintaxis
MCP

Ejemplos

El siguiente ejemplo muestra el efecto de un código de conversión MCP con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("John^CSmith^X1-234", "MCP")
X = "John.Smith.1-234"

El siguiente ejemplo muestra el efecto de un código de conversión MCP con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("John^CSmith^X1-234", "MCP")
X = "John.Smith.1-234"

MCT
Convierte las palabras de una serie en palabras con mayúsculas iniciales.

Sintaxis
MCT

Ejemplos

El siguiente ejemplo muestra el efecto de un código de conversión MCT con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("john SMITH 1-234", "MCT")
X = "John Smith 1-234"

Capítulo 7. Programación BASIC 291


El siguiente ejemplo muestra el efecto de un código de conversión MCT con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("john SMITH 1-234", "MCT")
X = "John Smith 1-234"

MCU
Convierte todas las letras minúsculas a mayúsculas.

Sintaxis
MCU

Ejemplos

El siguiente ejemplo muestra el efecto de un código de conversión MCU con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("john smith 1-234", "MCU")
X = "JOHN SMITH 1-234"

El siguiente ejemplo muestra el efecto de un código de conversión MCU con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("john smith 1-234", "MCU")
X = "JOHN SMITH 1-234"

MCX
Convierte números hexadecimales en decimales.

Sintaxis

MCX

Ejemplos

El siguiente ejemplo muestra el efecto de un código de conversión MCX con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("1234", "MCX")
X = "4D2"

El siguiente ejemplo muestra el efecto de un código de conversión MCX con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("4D2", "MCX")
X = "1234"

292 Guía del desarrollador de Server Job


MD
Formatea los números como cantidades monetarias o numéricas, o convierte números formateados al
formato de almacenamiento interno. Si se incluyen las opciones $, F, I o Y, la conversión es monetaria.

Si el soporte multilingüístico está habilitado y la conversión es monetaria, el separador de millares y el


separador decimal se obtienen del convenio MONETARY del entorno local. Si la conversión es numérica,
se obtienen del convenio NUMERIC. Las opciones <, -, C y D definen números para uso monetario y
alteran temporalmente los valores del convenio MONETARY.

Sintaxis
MD n
[ m ] [ opciones ]

n es un número del 0 al 9 que indica el número de lugares decimales que se utilizan en la salida. Si n es
0, la salida no contiene ningún separador decimal.

El valor de m especifica el factor de escala. En la entrada, el separador decimal se desplaza m posiciones


a la derecha antes del almacenamiento. En la salida, el separador decimal se desplaza m posiciones a la
izquierda. Por ejemplo, si m es 2 en una conversión de entrada y los datos de entrada son 123, estos se
almacenarían como 12300. Si m es 2 en una conversión de salida y los datos almacenados son 123, estos
se mostrarían en la salida como 1.23. Si m no se especifica, se supone que es igual que n. Los números se
redondean o se rellenan con ceros, según sea necesario

El valor de opciones puede ser cualquiera de los siguientes:


v , especifica una coma como delimitador de millares. Para especificar otro carácter como delimitador de
millares, utilice la expresión del convenio.
v $ antepone como prefijo un signo de moneda local al número. Si el soporte multilingüístico está
habilitado, el signo se deriva del convenio MONETARY del entorno local.
v $ antepone como prefijo un signo de franco al número.
v I se utiliza con Oconv y especifica que se utiliza el símbolo monetario internacional correspondiente al
entorno local. Cuando se utiliza con Iconv, especifica que se elimina.
v Y se utiliza con Oconv. Se utiliza el carácter de yen/yuan.
v - especifica un signo menos como sufijo para las cantidades negativas; a las cantidades positivas se
añade un espacio en blanco como sufijo.
v < especifica que las cantidades negativas están delimitadas con corchetes para la salida; a las
cantidades positivas se añade un espacio en blanco como prefijo y como sufijo.
v C añade el sufijo CR a las cantidades negativas; a las cantidades positivas se añade un sufijo de dos
espacios en blanco.
v D añade el sufijo DB a las cantidades negativas; a las cantidades positivas se añade un sufijo de dos
espacios en blanco.
v P especifica que no se realiza ningún escalado si los datos de entrada ya contienen un separador
decimal.
v Z genera 0 como una serie vacía.
v T truca los datos, en lugar de redondearlos.
v fx añade una máscara de formateo en la salida y la elimina en la entrada. f es un número del 1 al 99
que indica el número máximo de caracteres de máscara que se eliminan o se añaden. x es el carácter
que se utiliza como máscara de formateo. Si no utiliza la opción fx y los datos contienen una máscara
de formateo, se genera una serie vacía. Las máscaras de formateo se describen en Expresión de
formato.
v intl es una expresión que se utiliza para especificar un convenio para el formateo monetario o
numérico.

Capítulo 7. Programación BASIC 293


v convention es una expresión que se utiliza para especificar un convenio para el formateo monetario o
numérico.
La expresión convention tiene la sintaxis siguiente:
[ prefijo,millares,decimal,sufijo ]

Nota: Cada elemento de la expresión del convenio es opcional, pero debe especificar los delimitadores
y las comas en la posición correcta. Por ejemplo, para especificar sólo millares, escriba [,millares,, ].
– prefijo especifica un prefijo para el número. Si prefijo contiene espacios, comas o corchetes de cierre,
delimítelos con comillas.
– millares especifica el delimitador de millares.
– decimal especifica el delimitador de decimales.
– sufijo especifica un sufijo para el número. Si sufijo contiene espacios, comas o corchetes de cierre,
delimítelos con comillas.

Ejemplos
Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MD (decimal enmascarado)
con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("9876.54", "MD2")
X = 987654
X = Iconv("987654", "MD0")
X = 987654
X = Iconv("$1,234,567.89", "MD2$,")
X = 123456789
X = Iconv("123456.789", "MD33")
X = 123456789
X = Iconv("12345678.9", "MD32")
X = 1234567890
X = Iconv("F1234567.89", "MD2F")
X = 123456789
X = Iconv("1234567.89cr", "MD2C")
X = -123456789
X = Iconv("1234567.89 ", "MD2D")
X = 123456789
X = Iconv("1,234,567.89 ", "MD2,D")
X = 123456789
X = Iconv("9876.54", "MD2-Z")
X = 987654
X = Iconv("$####1234.56", "MD2$12#")
X = 123456
X = Iconv("$987.654 ", "MD3,$CPZ")
X = 987654
X = Iconv("####9,876.54", "MD2,ZP12#")
X = 987654

294 Guía del desarrollador de Server Job


Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MD (Decimal enmascarada)
con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv(987654, "MD2")
X = "9876.54"
X = Oconv(987654, "MD0")
X = "987654"
X = Oconv(123456789, "MD2$,")
X = "$1,234,567.89"
X = Oconv(987654, "MD24$")
X = "$98.77"
X = Oconv(123456789, "MD2[’f’,’.’,’,’]")
X = "f1.234.567,89"
X = Oconv(123456789, "MD2,[’’,’’,’’,’SEK’]"
X ="1,234,567.89SEK"
X = Oconv(-123456789, "MD2<[’#’,’.’,’,’]")
X = #<1.234.567,89>"
X = Oconv(123456789, "MD33")
X = "123456.789"
X = Oconv(1234567890, "MD32")
X = "12345678.9"
X = Oconv(123456789, "MD2F")
X = "F1234567.89"
X = Oconv(-123456789, "MD2C")
X = "1234567.89cr"
X = Oconv(123456789, "MD2D")
X = "1234567.89 "
X = Oconv(123456789, "MD2,D")
X = "1,234,567.89 "
X = Oconv(1234567.89, "MD2P")
X = "1234567.89"
X = Oconv(123, "MD3Z")
X = ".123"
X = Oconv(987654, "MD2-Z")
X = "9876.54"
X = Oconv(12345.678, "MD20T")
X = "12345.67"
X = Oconv(123456, "MD2$12#")
X = "$####1234.56"
X = Oconv(987654, "MD3,$CPZ")
X = "$987.654 "
X = Oconv(987654, "MD2,ZP12#")
X = "####9,876.54"

Capítulo 7. Programación BASIC 295


ML & MR
Justifica y formatea cantidades monetarias y numéricas. ML especifica la justificación a la izquierda; MR
especifica la justificación a la derecha. Si se incluyen las opciones F o $, la conversión es monetaria.

Si el soporte multilingüístico está habilitado y la conversión es monetaria, el separador de millares y el


separador decimal se obtienen del convenio MONETARY del entorno local. Si la conversión es numérica,
se obtienen del convenio NUMERIC. Las opciones <, -, C y D definen números para uso monetario y
alteran temporalmente los valores del convenio MONETARY.

ML y MR

Sintaxis
ML | MR [
n [ m ] opciones [ (
fx ) ]

n es un número del 0 al 9 que indica el número de lugares decimales que se utilizan en la salida. Si n es
0, la salida no contiene ningún separador decimal.

El valor de m especifica el factor de escala. En la entrada, el separador decimal se desplaza m posiciones


a la derecha antes del almacenamiento. En la salida, el separador decimal se desplaza m posiciones a la
izquierda. Por ejemplo, si m es 2 en una conversión de entrada y los datos de entrada son 123, estos se
almacenarían como 12300. Si m es 2 en una conversión de salida y los datos almacenados son 123, estos
se mostrarían en la salida como 1.23. Si m no se especifica, se supone que es igual que n. Los números se
redondean o se rellenan con ceros, según sea necesario

El valor de opciones puede ser cualquiera de los siguientes:


v , especifica una coma como delimitador de millares. Para especificar otro carácter como delimitador de
millares, utilice la expresión del convenio.
v C añade el sufijo CR a las cantidades negativas; a las cantidades positivas se añade un sufijo de dos
espacios en blanco.
v D añade el sufijo DB a las cantidades negativas; a las cantidades positivas se añade un sufijo de dos
espacios en blanco.
v Z genera 0 como una serie vacía.
v M especifica un signo menos como sufijo para las cantidades negativas. A las cantidades positivas se
añade un espacio en blanco como sufijo.
v E especifica que las cantidades negativas están delimitadas con corchetes para la salida; a las
cantidades positivas se añade un espacio en blanco como prefijo y como sufijo.
v N suprime el signo menos en los números negativos.
v $ antepone como prefijo un signo de moneda local al número antes de la justificación. Si el soporte
multilingüístico está habilitado, el signo se deriva del convenio MONETARY del entorno local. Para
añadir otro símbolo monetario como prefijo, utilice la expresión intl.
v $ antepone como prefijo un signo de franco al número.
v ( fx ) añade una máscara de formateo en la salida y la elimina en la entrada. x es un número del 1 al
99 que indica el número máximo de caracteres de máscara que se eliminan o se añaden. f es un código
que especifica el carácter que se utiliza como máscara de formateo, y es uno de los siguientes:
– # especifica una máscara de blancos.
– * especifica una máscara de asteriscos.
– % especifica una máscara de ceros.
v intl es una expresión que se utiliza para personalizar la salida conforme a distintos convenios
internacionales, y permite los caracteres de varios bytes.

296 Guía del desarrollador de Server Job


La expresión intl tiene la sintaxis siguiente:
[ prefijo,millares,decimal,sufijo ]

Nota: Cada elemento de la expresión del convenio es opcional, pero debe especificar los delimitadores
y las comas en la posición correcta. Por ejemplo, para especificar sólo millares, escriba [,millares,, ].
– prefijo especifica un prefijo para el número. Si prefijo contiene espacios, comas o corchetes de cierre,
delimítelos con comillas.
– millares especifica el delimitador de millares. Si millares contiene espacios, comas o corchetes de
cierre, delimítelos con comillas.
– decimal especifica el delimitador de decimales. Si decimal contiene espacios, comas o corchetes de
cierre, delimítelos con comillas.
– sufijo especifica un sufijo para el número. Si sufijo contiene espacios, comas o corchetes de cierre,
delimítelos con comillas.

Las series literales también pueden escribirse entre paréntesis. Las máscaras de formateo se describen en
Expresión de formato.

Ejemplos

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión ML y MR con el convenio
Iconv:
Expresión de conversión
Valor interno
X = Iconv("$1,234,567.89", "ML2$,")
X = 123456789
X = Iconv(".123", "ML3Z")
X = 123
X = Iconv("123456.789", "ML33")
X = 123456789
X = Iconv("12345678.9", "ML32")
X = 1234567890
X = Iconv("1234567.89cr", "ML2C")
X = -123456789
X = Iconv("1234567.89db", "ML2D")
X = 123456789
X = Iconv("1234567.89-", "ML2M")
X = -123456789
X = Iconv("<1234567.89>", "ML2E")
X = -123456789
X = Iconv("1234567.89**", "ML2(*12)")
X = 123456789
X = Iconv("**1234567.89", "MR2(*12)")
X = 123456789

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión ML y MR con la función
Oconv:
Expresión de conversión
Valor externo

Capítulo 7. Programación BASIC 297


X = Oconv(123456789, "ML2$,")
X = "$1,234,567.89"
X = Oconv(123, "ML3Z")
X = ".123"
X = Oconv(123456789, "ML33")
X = "123456.789"
X = Oconv(1234567890, "ML32")
X = "12345678.9"
X = Oconv(-123456789, "ML2C")
X = 1234567.89cr"
X = Oconv(123456789, "ML2D")
X = " "1234567.89db"
X = Oconv(-123456789, "ML2M")
X = "1234567.89-"
X = Oconv(-123456789, "ML2E")
X = "<1234567.89>"
X = Oconv(123456789, "ML2(*12)")
X = "1234567.89**"
X = Oconv(123456789, "MR2(*12)")
X = "**1234567.89"

MM
En la modalidad de soporte multilingüístico, formatea los datos de moneda utilizando el convenio
MONETARY actual.

MM

Sintaxis
MM [
n ] [ I [ L ] ]

n es el número de lugares decimales que se generan o se almacenan.

I formatea los datos utilizando el símbolo de moneda internacional de tres caracteres especificado en el
convenio MONETARY del entorno local actual, un punto como separador decimal y una coma como
separador de millares.

Si añade L, los datos se formatean utilizando el separador de millares y el separador decimal con el
convenio MONETARY del entorno local actual. I y L se ignoran para las conversiones de entrada
mediante Iconv.

Comentarios

Si especifica MM sin ningún argumento, la conversión utiliza los separadores decimales y de millares y el
símbolo de moneda especificados en el convenio MONETARY del entorno local actual.

298 Guía del desarrollador de Server Job


MO
Convierte números octales en decimales o en un valor ASCII para el almacenamiento, o viceversa para la
salida.

Sintaxis
MO [ 0C ]

0C convierte el número octal en su carácter ASCII equivalente en la entrada, y viceversa en la salida.

Comentarios

Los caracteres fuera del rango 0-7 pueden generar un error.

Ejemplos

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión M0 con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("2000", "MO")
X = 1024
X = Iconv("103104105", "MO0C")
X = "CDE"

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión M0 con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("1024", "MO")
X = "2000"
X = Oconv("CDE", "MO0C")
X = "103104105"

MP
Empaqueta dos números decimales por byte para el almacenamiento y los desempaqueta para la salida.

Sintaxis
MP

Comentarios

Los signos + iniciales se omiten. Los signos - iniciales hacen que se almacene una D hexadecimal en la
mitad inferior del último dígito interno. Si hay un número de mitades empaquetadas impar, se añaden
cuatro bits iniciales 0. El rango de bytes de datos en el formato interno expresado en hexadecimal es de
00 a 99 y de 0D a 9D.

Esta conversión sólo acepta como entrada dígitos decimales, de 0 al 9, y los signos más y menos; de lo
contrario, la conversión falla.

Los números decimales empaquetados deben desempaquetarse para la salida o no se podrán mostrar.

Capítulo 7. Programación BASIC 299


MT
Convierte datos al y desde el formato de hora.

MT

Sintaxis
MT [ H ] [
S ] [ separador]

MT sin opciones especifica que la hora está en formato de 24 horas, omitiendo los segundos, con un
separador de dos puntos entre horas y minutos, por ejemplo, 23:59.

H especifica un formato de salida de 12 horas con el sufijo AM o PM.

S incluye los segundos en la hora de salida.

separador es un carácter no numérico que especifica el separador utilizado entre las horas, los minutos y
los segundos en la salida.

Comentarios

En la salida, MT define el formato de salida externo de la hora.

En la entrada, MT especifica sólo que los datos son una hora, y las opciones H y S se ignoran. Si la fecha
de entrada no tiene minutos ni segundos, se supone que son 0. Para los formatos de 12 horas, utilice el
sufijo AM, A, PM o P para indicar que la hora es anterior o posterior al mediodía. Si se especifica una
hora superior a 12, se supone que se utiliza un reloj de 24 horas. 12:00 AM es la medianoche y 12:00 PM
es el mediodía. La hora se almacena como el número de segundos desde la medianoche. El valor de
medianoche es 0.

Ejemplos

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MT con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("02:46", "MT")
X = 9960
X = Iconv("02:46:40am", "MTHS")
X = 10000
X = Iconv("02:46am", "MTH")
X = 9960
X = Iconv("02.46", "MT.")
X = 9960
X = Iconv("02:46:40", "MTS")
X = 10000

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MT con la función
Oconv:
Expresión de conversión
Valor interno

300 Guía del desarrollador de Server Job


X = Oconv("02:46", "MT")
X = "02:46"
X = Oconv("02:46:40am", "MTHS")
X = "02:46:40am"
X = Oconv("02:46am", "MTH")
X = "02:46am"
X = Oconv("02.46", "MT.")
X = "02.46"
X = Oconv("02:46:40", "MTS")
X = "02:46:40"

MUOC
Devuelve el valor de almacenamiento interno de una serie como series hexadecimales de cuatro dígitos.

Sintaxis
MUOC

Comentarios
En la salida, utilizando Oconv, la serie proporcionada se devuelve con cada carácter convertido en su
valor de almacenamiento interno hexadecimal de cuatro dígitos.

En la entrada, utilizando Iconv, la serie proporcionada se trata como grupos de cuatro dígitos
hexadecimales y se devuelve el valor de almacenamiento interno. Un grupo formado por menos de
cuatro dígitos se rellena con ceros a la izquierda.

Ejemplo
X = UniChar(222):UniChar(240):@FM
XInt = Oconv(X, ’MX0C’)
Y = Oconv(X, ’NLSISO8859-1’)
YExt = Oconv(Y, ’MX0C’)
Yint = OCONV(X, ’MU0C’)

Las variables contienen:


Xint (Internal form in hex bytes): C39EC3B0FE
Yext (External form in hex bytes): DEF03F
Yint (Internal form in UNICODE ): 00DE00F0F8FE

MX
Convierte números hexadecimales en decimales o en un valor ASCII para el almacenamiento, o viceversa
para la salida.

Sintaxis
MX [ 0C ]

0C convierte el número hexadecimal en su carácter ASCII equivalente en la entrada, y viceversa en la


salida.

Comentarios

Los caracteres fuera de los rangos 0-9, A-F o a-f generan un error.

Capítulo 7. Programación BASIC 301


Ejemplos

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MX con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("400", "MX")
X = 1024
X = Iconv("434445", "MX0C")
X = "CDE"

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MX con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("1024", "MX")
X = "400"
X = Oconv("CDE", "MX0C")
X = "434445"

MY
Convierte caracteres ASCII en valores hexadecimales en la entrada, y viceversa en la salida.

Sintaxis
MY

Comentarios

Los caracteres fuera de los rangos 0-9, A-F o a-f generan un error.

Ejemplos

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MY con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("ABCD", "MY")
X = 41424344
X = Iconv("0123", "MY")
X = 30313233

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión MY con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("41424344", "MY")
X = "ABCD"
X = Oconv("30313233", "MY")
X = "0123"

302 Guía del desarrollador de Server Job


NL
En la modalidad de soporte multilingüístico, convierte los números de un juego de caracteres locales en
numerales árabes.

Sintaxis
NL

Ejemplo

El siguiente ejemplo muestra el efecto del código de conversión NL con las funciones Oconv e Iconv.

Convertir a efectos de visualización:


Internal.Number = 1275
External.Number = OCONV(Internal.Number, "NL")

Convertir a efectos aritméticos:


Internal.Number = ICONV(External.Number, "NL")

NLS
En la modalidad de soporte multilingüístico, convierte entre el juego de caracteres interno y el juego de
caracteres externo.

Sintaxis
NLS
nombrecorrelación

nombrecorrelación es el nombre de la correlación de juego de caracteres que se utiliza para la conversión.

Comentarios

En la salida que se utiliza la función Oconv, el código de conversión NLS correlaciona una serie del
juego de caracteres interno con el juego de caracteres externo especificado en nombrecorrelación.

En la entrada que se utiliza la función Iconv, el código de conversión NLS supone que la serie
proporcionada está en el juego de caracteres especificado por nombrecorrelación, y la correlaciona con el
juego de caracteres interno. Si nombrecorrelación está establecido en Unicode, la serie proporcionada se
supone que está formada por caracteres Unicode de 2 bytes. Si hay un número impar de bytes en la serie,
el último byte se sustituye por el carácter de sustitución de Unicode y el valor devuelto por la función
Status se establece en 3.

NR
Convierte numerales árabes en numerales romanos en la salida, y viceversa en la entrada.

Sintaxis
NR

Capítulo 7. Programación BASIC 303


Comentarios

Estos son los valores equivalentes de los numerales romanos y árabes:

Romano Arábigo
i 1
v 5
x 10
l 50
c 100
p 500
m 1000
V 5000
X 10000
L 50000
C 100000
D 500000
L 1000000

Ejemplos

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión NR con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("mcmxcvii", "NR")
X = 1997
X = Iconv("MCMXCVmm", "NR")
X = 1997000

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión NR con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv(1997, "NR")
X = "mcmxcvii"
X = Oconv(1997000, "NR")
X = "MCMXCVmm"

P
Extrae datos que coinciden con un patrón.

Sintaxis
P
(patrón) [ ; (patrón) ...
]

304 Guía del desarrollador de Server Job


patrón especifica el patrón con el que coinciden los datos y debe ir entre paréntesis. Puede ser uno de los
códigos siguientes:
v nN coincide con n caracteres numéricos. Si n es 0, se establece la coincidencia con cualquier número de
caracteres numéricos.
v nA coincide con n caracteres alfabéticos. Si n es 0, se establece la coincidencia con cualquier número de
caracteres alfabéticos.
v nX coincide con n caracteres alfanuméricos. Si n es 0, se establece la coincidencia con cualquier número
de caracteres alfanuméricos.

literal es una serie literal con la que deben coincidir los datos.

; separa una serie de patrones.

Comentarios

Si los datos no coinciden con ninguno de los patrones, se devuelve una serie vacía.

Ejemplos

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión P con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("123456789", "P(3N-3A-3X);(9N)")
X = "123456789"
X = Iconv("123-ABC-A7G", "P(3N-3A-3X);(9N)")
X = "123-ABC-A7G"
X = Iconv("123-45-6789", "P(3N-2N-4N)")
X = "123-45-6789"

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión P con la función Oconv:
Expresión de conversión
Valor externo
X = Oconv("123456789", "P(3N-3A-3X);(9N)")
X = "123456789"
X = Oconv("123-ABC-A7G", "P(3N-3A-3X);(9N)")
X = "123-ABC-A7G"
X = Oconv("ABC-123-A7G", "P(3N-3A-3X);(9N)")
X = ""
X = Oconv("123-45-6789", "P(3N-2N-4N)")
X = "123-45-6789"
X = Oconv("123-456-789", "P(3N-2N-4N)")
X = ""
X = Oconv("123-45-678A",
"P(3N-2N-4N)") X = ""

Capítulo 7. Programación BASIC 305


R
Recupera datos de un rango.

Sintaxis
Rn,m [ ; n,m ... ]

n especifica el límite inferior del rango.

m especifica el límite superior del rango.

; separa varios rangos.

Comentarios

Si los datos no cumplen las especificaciones del rango, se devuelve una serie vacía.

Ejemplos

El siguiente ejemplo muestra el efecto del código de conversión R (Comprobación de rango) con la
función Iconv.
Expresión de conversión
Valor interno
X = Iconv("123", "R100,200")
X = 123

El siguiente ejemplo muestra el efecto del código de conversión R (Comprobación de rango) con la
función Oconv.
Expresión de conversión
Valor externo
X = Oconv(123, "R100,200")
X = 123
X = Oconv(223, "R100,200")
X = ""
X = Oconv(3.1E2, "R100,200;300,400")
X = 3.1E2

S
Genera códigos fonéticos que pueden utilizarse para comparar palabras basándose en cómo suenan.

Sintaxis
S

Comentarios

El código fonético está formado por la primera letra de la palabra seguida de un número. Las palabras
que suenan igual, por ejemplo, rayar y rallar, generan el mismo código fonético.

306 Guía del desarrollador de Server Job


Ejemplos

Los siguientes ejemplos muestran el efecto de algunos códigos de conversión S con la función Iconv:
Expresión de conversión
Valor interno
X = Iconv("GREEN", "S")
X = "G650
X = Iconv("greene", "S")
X = "G650"
X = Iconv("GREENWOOD", "S"
X = "G653"
X = Iconv("GREENBAUM", "S")
X = "G651"

TI
En la modalidad de soporte multilingüístico, convierte las horas del formato interno al formato del
convenio del entorno local predeterminado.

Sintaxis
TI

Ejemplo

El siguiente ejemplo muestra el efecto del código de conversión TI con la función Oconv:
Internal.Time = TIME()International.Time = OCONV(Internal.Time,
→ "TI")

Capítulo 7. Programación BASIC 307


308 Guía del desarrollador de Server Job
Capítulo 8. Transformaciones y rutinas incorporadas
Estos temas describen las transformaciones y rutinas incorporadas suministradas con IBM InfoSphere
DataStage.

Cuando edita una etapa Transformer, puede convertir los datos utilizando una de las transformaciones
incorporadas que se proporcionan con InfoSphere DataStage. De manera alternativa, puede convertir los
datos utilizando sus propias transformaciones personalizadas. Las transformaciones personalizadas
permiten convertir los datos utilizando funciones o rutinas.

Para obtener más información sobre la edición de una etapa Transformer, consulte “Etapas Transformer”
en la página 108. Para obtener detalles sobre cómo grabar una subrutina escrita por el usuario o una
transformación personalizada, consulte Capítulo 6, “Programación en IBM InfoSphere DataStage”, en la
página 135. Para ver una lista completa de las funciones BASIC soportadas, consulte Capítulo 7,
“Programación BASIC”, en la página 147.

Transformaciones incorporadas
Puede ver las definiciones de las transformaciones incorporadas utilizando el cliente del Diseñador.

El uso de IBM InfoSphere DataStage en un entorno de soporte multilingüístico tiene implicaciones para
algunas de las transformaciones de datos y de tipo de datos. Si el soporte multilingüístico está habilitado,
deberá comprobar las descripciones de las transformaciones en el cliente del Diseñador antes de
utilizarlas, para asegurarse de que funcionan correctamente.

Transformaciones de serie
Transformación Tipo de entrada Tipo de salida Carpeta Descripción
CAPITALS Serie Serie Built-in/String El primer carácter de cada
palabra del argumento se
sustituye por el equivalente
en mayúsculas, si procede.
Toda secuencia de caracteres
entre caracteres de espacio se
toma como una palabra, por
ejemplo: CAPITALS("monday
feb 14th") => "Monday Feb
14th"
DIGITS Serie Serie Built-in/String Devuelve una serie de la que
se han eliminado todos los
caracteres distintos a los
dígitos del 0 al 9, por
ejemplo:
DIGITS("123abc456") =>
"123456"
LETTERS Serie Serie Built-in/String Devuelve una serie de la que
se han eliminado todos los
caracteres excepto las letras,
por ejemplo:
LETTERS("123abc456") =>
"abc"

© Copyright IBM Corp. 1997, 2010 309


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
StringDecode Véase la Serie sdk/String Carga una matriz a efectos de
descripción búsqueda. La matriz contiene
pares de nombre=valor. En la
primera llamada, la matriz se
guarda; en todas las llamadas
se busca el nombre
proporcionado en la matriz y
se devuelve el valor
correspondiente. Toma como
argumentos una clave de
búsqueda y una matriz, y
devuelve una serie.
StringIsSpace Serie Serie sdk/String Devuelve 1 si la serie sólo
consta de uno o más
espacios.
StringLeftJust Serie Serie sdk/String Elimina los espacios iniciales
de la entrada y devuelve una
serie con la misma longitud
que la entrada. No reduce los
espacios entre caracteres que
no son espacios en blanco.
StringRightJust Serie Serie sdk/String Elimina los espacios finales
de la entrada y devuelve una
serie con la misma longitud
que la entrada. No reduce los
espacios entre caracteres que
no son espacios en blanco.
StringUpperFirst Serie Serie sdk/String Devuelve la serie de entrada
con mayúsculas iniciales en
cada palabra.

Transformaciones de fecha
Transformación Tipo de entrada Tipo de salida Carpeta Descripción
MONTH.FIRST MONTH.TAG Fecha Built-in/Dates Devuelve una fecha interna
numérica correspondiente al
primer día de un mes con el
formato MONTH.TAG
(AAAA-MM), por ejemplo:

MONTH.FIRST("1993-02") =>
9164

donde 9164 es la
representación interna del 1
de febrero de 1993.

310 Guía del desarrollador de Server Job


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
MONTH.LAST MONTH.TAG Fecha Built-in/Dates Devuelve una fecha interna
numérica correspondiente al
último día de un mes con el
formato MONTH.TAG
(AAAA-MM), por ejemplo:

MONTH.LAST("1993-02") =>
9191

donde 9191 es la
representación interna del 28
de febrero de 1993.
QUARTER.FIRST QUARTER.TAG Fecha Built-in/Dates Devuelve una fecha interna
numérica correspondiente al
primer día de un trimestre
con el formato
QUARTER.TAG (AAAAQn),
por ejemplo:

QUARTER.FIRST ("1993Q2") =>


9133

donde 9133 es la
representación interna del 1
de enero de 1993.
QUARTER.LAST QUARTER.TAG Fecha Built-in/Dates Devuelve una fecha interna
numérica correspondiente al
último día de un trimestre
con el formato
QUARTER.TAG (AAAAQn),
por ejemplo:

QUARTER.LAST("1993Q2") =>
9222

donde 9222 es la
representación interna del 31
de marzo de 1993.
TIMESTAMP. Indicación de fecha Fecha Built-in/Dates Convierte el formato de
TO.DATE y hora indicación de fecha y hora
(AAAA-MM-DD HH:MM:SS)
en un formato de fecha
interna, por ejemplo:

TIMESTAMP.TO.DATE("1996-
12-05 13:46:21") => "10567"
TAG.TO.DATE DATE.TAG Fecha Built-in/Dates Convierte una serie con el
formato AAAA-MM-DD en
una fecha interna numérica,
por ejemplo:

TAG.TO.DATE("1993-02-14")
=> 9177

Capítulo 8. Transformaciones y rutinas incorporadas 311


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
WEEK.FIRST WEEK.TAG Fecha Built-in/Dates Devuelve una fecha interna
numérica correspondiente al
primer día (Lunes) de una
semana con el formato
WEEK.TAG (AAAAWnn), por
ejemplo:

WEEK.FIRST("1993W06") =>
9171

donde 9171 es la
representación interna del 8
de febrero de 1993.
WEEK.LAST WEEK.TAG Fecha Built-in/Dates Devuelve una fecha interna
numérica correspondiente al
último día (Domingo) de una
semana con el formato
WEEK.TAG (AAAAWnn), por
ejemplo:

WEEK.LAST("1993W06") =>
9177

donde 9177 es la
representación interna del 14
de febrero de 1993.
YEAR.FIRST YEAR.TAG Fecha Built-in/Dates Devuelve una fecha interna
numérica correspondiente al
primer día de un año con el
formato YEAR.TAG (AAAA),
por ejemplo:

YEAR.FIRST("1993") => 9133

donde 9133 es la
representación interna del 1
de enero de 1993.
YEAR.LAST YEAR.TAG Fecha Built-in/Dates Devuelve una fecha interna
numérica correspondiente al
último día de un año con el
formato YEAR.TAG (AAAA),
por ejemplo:

YEAR.LAST("1993") => 9497

donde 9497 es la
representación interna del 31
de diciembre de 1993.

312 Guía del desarrollador de Server Job


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
TIMESTAMP. Indicación de fecha Hora Built-in/Dates Convierte el formato de
TO.TIME y hora TIMESTAMP (AAAA-MM-DD
HH:MM:SS) en un formato de
hora interna. Por ejemplo:

TIMESTAMP.TO.TIME("1996-
12-05 13:46:21") =>
"49581"

donde 49581 es la
representación interna del 5
de diciembre de 1996, 1:46
p.m. y 21 segundos.
TIMESTAMP Fecha Indicación de fecha y Built-in/Dates Convierte el formato de fecha
hora interna en el formato
TIME-STAMP
(AAAA-MM-DD HH:MM:SS).
Por ejemplo:

TIMESTAMP("10567") =>
"1996-12- 05 00:00:00"

donde 10567 es la
representación interna del 5
de diciembre de 1996.
DATE.TAG Fecha DATE.TAG Built-in/Dates Convierte una fecha interna
numérica en una serie con el
formato DATE.TAG
(AAAA-MM-DD), por
ejemplo:

DATE.TAG(9177) =>
"1993-02-14"
TAG.TO.WEEK DATE.TAG WEEK.TAG Built-in/Dates Convierte una serie con el
formato DATE.TAG
(AAAA-MM-DD) al formato
WEEK.TAG (AAAAWnn), por
ejemplo:

TAG.TO.WEEK("1993-02-14")
=> "1993W06"
WEEK.TAG Fecha WEEK.TAG Built-in/Dates Convierte una fecha con
formato de fecha interna en
una serie WEEK.TAG
(AAAAWnn), por ejemplo:

WEEK.TAG(9177) =>
"1993W06"
MONTH.TAG Fecha MONTH.TAG Built-in/Dates Convierte una fecha interna
numérica en una serie con el
formato MONTH.TAG
(AAAA-MM), por ejemplo:

MONTH.TAG(9177) =>
"1993-02"

Capítulo 8. Transformaciones y rutinas incorporadas 313


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
TAG.TO.MONTH DATE. TAG MONTH.TAG Built-in/Dates Convierte una serie con el
formato DATE.TAG
(AAAA-MM-DD) al formato
MONTH.TAG (AAAA-MM),
por ejemplo:

TAG.TO.MONTH("1993-02014")
=> "1993-02"
QUARTER.TAG Fecha QUARTER.TAG Built-in/Dates Convierte una fecha interna
numérica en una serie con el
formato QUARTER.TAG
(AAAAQn), por ejemplo:

QUARTER.TAG(9177) =>
"1993Q2"
TAG.TO. QUARTER DATE.TAG QUARTER.TAG Built-in/Dates Convierte una serie con el
formato DATE.TAG
(AAAA-MM-DD) al formato
QUARTER.TAG (AAAAQn),
por ejemplo:

TAG.TO.QUARTER("1993-02-
14") => "1993Q2"
MONTH.TO. MONTH.TAG QUARTER.TAG Built-in/Dates Convierte una serie con el
QUARTER formato MONTH.TAG
(AAAA-MM) al formato
QUARTER.TAG (AAAAQn),
por ejemplo:

MONTH.TO.QUARTER("1993-
02") => "1993Q1"
YEAR.TAG Fecha YEAR.TAG Built-in/Dates Convierte una fecha con
formato de fecha interna al
formato YEAR.TAG (AAAA),
por ejemplo:

YEAR.TAG(9177) => "1993"


TAG.TO.YEAR DATE.TAG YEAR.TAG Built-in/Dates Convierte una serie con el
formato DATE.TAG
(AAAA-MM-DD) al formato
YEAR.TAG (AAAA), por
ejemplo:

TAG.TO.YEAR("1993-02-14")
=> "1993"
MONTH.TO.YEAR MONTH.TAG YEAR.TAG Built-in/Dates Convierte una serie con el
formato MONTH.TAG
(AAAA-MM) al formato
YEAR.TAG (AAAA), por
ejemplo:

MONTH.TO.YEAR("1993-02")
=> "1993"

314 Guía del desarrollador de Server Job


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
QUARTER.TO. QUARTER.TAG YEAR.TAG Built-in/Dates Convierte una serie con el
YEAR formato QUARTER.TAG
(AAAAQn) al formato
YEAR.TAG (AAAA), por
ejemplo:

QUARTER.TO.YEAR("1993Q2")
=> "1993"
DateCurrent - Serie sdk/date Devuelve la fecha/hora
DateTime actual con el formato
AAAA-MM-DD
HH:MM:SS.SSS.
DateCurrent - Serie sdk/date Devuelve la fecha/hora
GMTTime actual en GMT con el formato
AAAA-MM-DD
HH:MM:SS.SSS.
DateCurrent - Número sdk/date Devuelve la hora de Internet
SwatchTime o Swatch actual.
DateDaysSince - Serie sdk/date Convierte los días desde 1900
1900To TimeStamp al formato AAAAMMDD
HH:MM:SS:SSS.
DateDaysSince - Serie sdk/date Convierte los días desde 1970
1970To TimeStamp al formato AAAAMMDD
HH:MM:SS:SSS.

Las siguientes transformaciones aceptan series de fecha de entrada con uno de los formatos siguientes:
v Una fecha delimitada cualquiera que especifique Día Mes Año (por ejemplo, 4/19/1999, 4.19.1999, 4/19/99,
4.19.99)
v Fechas de mes alfa (por ejemplo, Abr 08 1999, Abr 08 99)
v Fechas no delimitadas con formato Año Mes Día (por ejemplo, 19990419, 990419)
v Fechas del calendario juliano (por ejemplo, 99126, 1999126)
DateGenericGetDay Serie Serie sdk/date/ Devuelve el valor Día de la
generic fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
DateGeneric Serie Serie sdk/date/ Devuelve el valor Mes de la
GetMonth generic fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
DateGenericGetTime Serie Serie sdk/date/ Devuelve el valor Hora de la
generic fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
DateGeneric Serie Serie sdk/date/ Devuelve el valor Hora de la
GetTimeHour generic fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
DateGenericGetTime Serie Serie sdk/date/ Devuelve el valor Minutos de
Minute generic la fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.

Capítulo 8. Transformaciones y rutinas incorporadas 315


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
DateGenericGetTime Serie Serie sdk/date/ Devuelve el valor Segundos
Second generic de la fecha proporcionada
con el formato AAAAMMDD
HH:MM:SS:SSS.
DateGenericGetYear Serie Serie sdk/date/ Devuelve el valor Año de la
generic fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
DateGeneric Serie Serie sdk/date/ Devuelve una fecha de
ToInfCLI generic entrada adecuada para la
carga utilizando Informix
CLI.
DateGeneric Serie Serie sdk/date/ Devuelve una fecha de
ToInfCLIWithTime generic entrada con un formato
adecuado para la carga
utilizando Informix CLI con
HH:MM:SS:SSS al final.
DateGeneric Serie Fecha sdk/date/ Devuelve la fecha de entrada
ToInternal generic con un formato interno de
IBM InfoSphere DataStage.
DateGeneric Serie Fecha sdk/date/ Devuelve la fecha de entrada
ToInternalWithTime generic con un formato interno de
InfoSphere DataStage con
HH:MM:SS.SSS al final.
DateGeneric Serie Serie sdk/date/ Devuelve la fecha de entrada
ToODBC generic con un formato adecuado
para la carga utilizando la
etapa ODBC.
DateGeneric Serie Serie sdk/date/ Devuelve la fecha de entrada
ToODBCWithTime generic con un formato adecuado
para la carga utilizando la
etapa ODBC con
HH:MM:SS.SSS al final.
DateGeneric Serie Serie sdk/date/ Devuelve una fecha de
ToOraOCI generic entrada con un formato
adecuado para la carga
utilizando Oracle OCI.
DateGeneric Serie Serie sdk/date/ Devuelve la fecha de entrada
ToOraOCIWithTime generic con un formato adecuado
para la carga utilizando
Oracle OCI con HH:MM:SS al
final.
DateGeneric Serie Serie sdk/date/ Devuelve la fecha de entrada
ToSybaseOC generic con un formato adecuado
para la carga utilizando
Sybase Open Client.
DateGeneric Serie Serie sdk/date/ Devuelve la fecha de entrada
ToSybaseOC generic con un formato adecuado
WithTime para la carga utilizando
Sybase Open Client con
HH:MM:SS.SSS al final.

316 Guía del desarrollador de Server Job


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
DataGeneric Serie Serie sdk/date/ Devuelve la fecha de entrada
ToTimeStamp generic con un formato AAAAMMDD
HH:MM:SS:SSS.
DateGeneric Serie, Serie Serie sdk/date/ Compara dos fechas y
DateDiff generic devuelve el número de días
de diferencia.
DateGeneric Serie Serie sdk/date/ Compara la fecha de entrada
DaysSince1900 generic con 1899-12-31 a las 12 de la
noche y devuelve el número
de días de diferencia.
DateGeneric Serie Serie sdk/date/ Compara la fecha de entrada
DaysSince1970 generic con 1969-12-31 a las 12 de la
noche y devuelve el número
de días de diferencia.
DateGeneric Serie Serie sdk/date/ Compara la fecha de entrada
DaysSinceToday generic con hoy a las 12 de la noche
y devuelve el número de días
de diferencia.
DateGenericIsDate Serie Serie sdk/date/ Devuelve 1 si la entrada es
generic una fecha válida; de lo
contrario, devuelve 0.

Las siguientes transformaciones aceptan series de fecha de entrada delimitada con el formato [AA]AA MM DD
utilizando un delimitador cualquiera. Las series también pueden contener una entrada de hora con el formato
HH:MM:SS:SSS, HH:MM:SS o HH:MM.
DateYearFirst Serie Serie sdk/date/ Devuelve el valor Día de la
GetDay YearFirst fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
DateYearFirst Serie Serie sdk/date/ Devuelve el valor Mes de la
GetMonth YearFirst fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
DateYearFirst Serie Serie sdk/date/ Devuelve el valor Hora de la
GetTime YearFirst fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
DateYearFirst Serie Serie sdk/date/ Devuelve el valor Hora de la
GetTimeHour YearFirst fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
DateYearFirst Serie Serie sdk/date/ Devuelve el valor Minutos de
GetTimeMinute YearFirst la fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.
DateYearFirst Serie Serie sdk/date/ Devuelve el valor Segundos
GetTimeSecond YearFirst de la fecha proporcionada
con el formato AAAAMMDD
HH:MM:SS:SSS.
DateYearFirst Serie Serie sdk/date/ Devuelve el valor Año de la
GetYear YearFirst fecha proporcionada con el
formato AAAAMMDD
HH:MM:SS:SSS.

Capítulo 8. Transformaciones y rutinas incorporadas 317


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
DateYearFirst Serie Serie sdk/date/ Devuelve una fecha de
ToInfCLI YearFirst entrada con un formato
adecuado para la carga
utilizando Informix CLI.
DateYearFirst Serie Serie sdk/date/ Devuelve una fecha de
ToInfCLIWithTime YearFirst entrada con un formato
adecuado para la carga
utilizando Informix CLI con
HH:MM:SS.SSS al final.
DateYearFirst Serie Fecha sdk/date/ Devuelve la fecha de entrada
ToInternal YearFirst con un formato interno de
InfoSphere DataStage.
DateYearFirst Serie Fecha sdk/date/ Devuelve la fecha de entrada
ToInternalWithTime YearFirst con un formato interno de
InfoSphere DataStage con
HH:MM:SS.SSS al final.
DateYearFirst Serie Serie sdk/date/ Devuelve la fecha de entrada
ToODBC YearFirst con un formato adecuado
para la carga utilizando la
etapa ODBC.
DateYearFirst Serie Serie sdk/date/ Devuelve la fecha de entrada
ToODBCWithTime YearFirst con un formato adecuado
para la carga utilizando la
etapa ODBC con
HH:MM:SS.SSS al final.
DateYearFirst Serie Serie sdk/date/ Devuelve la fecha de entrada
ToOraOCI YearFirst con un formato adecuado
para la carga utilizando
Oracle OCI.
DateYearFirst Serie Serie sdk/date/ Devuelve la fecha de entrada
ToOraOCIWithTime YearFirst con un formato adecuado
para la carga utilizando
Oracle OCI con HH:MM:SS al
final.
DateYearFirst Serie Serie sdk/date/ Devuelve la fecha de entrada
ToSybaseOC YearFirst con un formato adecuado
para la carga utilizando
Sybase Open Client.
DateYearFirst Serie Serie sdk/date/ Devuelve la fecha de entrada
ToSybaseOC YearFirst con un formato adecuado
WithTime para la carga utilizando
Sybase Open Client con
HH:MM:SS.SSS al final.
DataYearFirst Serie Serie sdk/date/ Devuelve la fecha de entrada
ToTimeStamp YearFirst con un formato AAAAMMDD
HH:MM.SS:SSS.
DateYearFirstDiff Serie, Serie Serie sdk/date/ Compara dos fechas y
YearFirst devuelve el número de días
de diferencia.
DateYearFirst Serie Serie sdk/date/ Compara la fecha de entrada
DaysSince1900 YearFirst con 1899-12-31 a las 12 de la
noche y devuelve el número
de días de diferencia.

318 Guía del desarrollador de Server Job


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
DateYearFirst Serie Serie sdk/date/ Compara la fecha de entrada
DaysSince1970 YearFirst con 1969-12-31 a las 12 de la
noche y devuelve el número
de días de diferencia.
DateYearFirst Serie Serie sdk/date/ Compara la fecha de entrada
DaysSinceToday YearFirst con hoy a las 12 de la noche
y devuelve el número de días
de diferencia.
DateYearFirstIsDate Serie Serie sdk/date/ Devuelve 1 si la entrada es
YearFirst una fecha válida; de lo
contrario, devuelve 0.

Transformaciones de tipo de datos


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
DataTypeAsciiPic9 Serie Número sdk/Data Type Convierte ASCII PIC
9(n) en un entero.
DataTypeAsciiPic9V9 Serie Número sdk/Data Type Convierte ASCII PIC
9(n) con un supuesto
lugar decimal en un
número con un lugar
decimal real.
DataTypeAscii Serie Número sdk/Data Type Convierte ASCII PIC
Pic9V99 9(n) con dos
supuestos lugares
decimales en un
número con dos
lugares decimales
reales.
DataTypeAscii Serie Número sdk/Data Type Convierte ASCII PIC
Pic9V999 9(n) con tres
supuestos lugares
decimales en un
número con tres
lugares decimales
reales.
DataTypeAscii Serie Número sdk/Data Type Convierte ASCII PIC
Pic9V9999 9(n) con cuatro
supuestos lugares
decimales en un
número con cuatro
lugares decimales
reales.
DataTypeAscii Serie Serie sdk/Data Type Convierte una serie
toEbcdic ASCII en EBCDIC.
DataTypeEbcdicPic9 Serie Número sdk/Data Type Convierte EBCDIC
PIC 9(n) en un entero.
DataTypeEbcdic Serie Número sdk/Data Type Convierte EBCDIC
Pic9V9 PIC 9(n) con un
supuesto lugar
decimal en un número
con un lugar decimal
real.

Capítulo 8. Transformaciones y rutinas incorporadas 319


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
DataTypeEbcdic Serie Número sdk/Data Type Convierte EBCDIC
Pic9V99 PIC 9(n) con dos
supuestos lugares
decimales en un
número con dos
lugares decimales
reales.
DataTypeEbcdic Serie Número sdk/Data Type Convierte EBCDIC
Pic9V999 PIC 9(n) con tres
supuestos lugares
decimales en un
número con tres
lugares decimales
reales.
DataTypeEbcdic Serie Número sdk/Data Type Convierte EBCDIC
Pic9V9999 PIC 9(n) con cuatro
supuestos lugares
decimales en un
número con cuatro
lugares decimales
reales.
DataTypeEbcdic Serie Serie sdk/Data Type Convierte una serie
toAscii EBCDIC en ASCII.
DataTypePic9 Serie Número sdk/Data Type Convierte ASCII o
EBCDIC PIC 9(n) en
un entero.
DataTypePic9V9 Serie Número sdk/Data Type Convierte ASCII o
EBCDIC PIC 9(n) con
un supuesto lugar
decimal en un número
con un lugar decimal
real.
DataTypePic9V99 Serie Número sdk/Data Type Convierte ASCII o
EBCDIC PIC 9(n) con
dos supuestos lugares
decimales en un
número con dos
lugares decimales
reales.
DataTypePic9V999 Serie Número sdk/Data Type Convierte ASCII o
EBCDIC PIC 9(n) con
tres supuestos lugares
decimales en un
número con tres
lugares decimales
reales.
DataTypePic9 Serie Número sdk/Data Type Convierte ASCII o
V9999 EBCDIC PIC 9(n) con
cuatro supuestos
lugares decimales en
un número con cuatro
lugares decimales
reales.
DataTypePicComp Serie Número sdk/Data Type Convierte COBOL PIC
COMP en un entero.

320 Guía del desarrollador de Server Job


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
DataTypePicComp1 Serie Número sdk/Data Type Convierte COBOL PIC
COMP-1 en un
número real.
DataTypePicComp2 Serie Número sdk/Data Type Convierte COBOL PIC
COMP-2 en un
número real.
DataTypePicComp3 Serie Número sdk/Data Type Convierte un decimal
empaquetado con
signo COBOL PIC
COMP-3 en un entero.
DataTypePicComp3 Serie Número sdk/Data Type Convierte un decimal
Sin signo empaquetado sin
signo COBOL PIC
COMP-3 en un entero.
DataTypePicComp3 Serie Número sdk/Data Type Convierte un decimal
UnsignedFast empaquetado sin
signo COBOL PIC
COMP-3 en un entero.
DataTypePicComp3 Serie Número sdk/Data Type Convierte un decimal
V9 empaquetado con
signo COBOL PIC
COMP-3 con un
supuesto lugar
decimal en un número
con un lugar decimal
real.
DataTypePicComp3 Serie Número sdk/Data Type Convierte un decimal
V99 empaquetado con
signo COBOL PIC
COMP-3 con dos
supuestos lugares
decimales en un
número con dos
lugares decimales
reales.
DataTypePicComp3 Serie Número sdk/Data Type Convierte un decimal
V999 empaquetado con
signo COBOL PIC
COMP-3 con tres
supuestos lugares
decimales en un
número con tres
lugares decimales
reales.
DataTypePicComp3 Serie Número sdk/Data Type Convierte un decimal
V9999 empaquetado con
signo COBOL PIC
COMP-3 con cuatro
supuestos lugares
decimales en un
número con cuatro
lugares decimales
reales.

Capítulo 8. Transformaciones y rutinas incorporadas 321


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
DataTypePicComp Serie Número sdk/Data Type Convierte un binario
Sin signo sin signo en un
entero.
DataTypePicS9 Serie Número sdk/Data Type Convierte un tipo de
datos COBOL PIC
S9(n) decimal derecho
dividido en zonas en
formato ASCII o
EBCDIC en un entero.

Transformaciones de gestión de claves


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
KeyMgtGetMaxKey Serie, Serie sdk/KeyMgt Utiliza una columna, una
Serie, tabla, una etapa ODBC y
Serie, un número del 1 al 99
Serie como descriptor de
contexto exclusivo (en el
trabajo). Devuelve el
valor máximo de la
columna especificada. Se
utiliza normalmente para
la gestión de claves.
KeyMgtGetNextValue Serie literal Serie sdk/KeyMgt Genera números
secuenciales.
KeyMgtGetNextValue Serie literal Serie sdk/KeyMgt Genera números
Concurrent secuenciales en un
entorno simultáneo.

Transformaciones de medidas: área


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
MeasureAreaAcresToSqFeet Serie Serie sdk/Measure/ Convierte acres en
Area pies cuadrados.
MeasureAreaAcresToSqMeters Serie Serie sdk/Measure/ Convierte acres en
Area metros cuadrados.
MeasureAreaSqFeetToAcres Serie Serie sdk/Measure/ Convierte pies
Area cuadrados en acres.
MeasureAreaSqFeetToSqInches Serie Serie sdk/Measure/ Convierte pies
Area cuadrados en
pulgadas cuadradas.
MeasureAreaSqFeetToSqMeters Serie Serie sdk/Measure/ Convierte pies
Area cuadrados en metros
cuadrados.
MeasureAreaSqFeetToSqMiles Serie Serie sdk/Measure/ Convierte pies
Area cuadrados en millas
cuadradas.
MeasureAreaSqFeetToSqYards Serie Serie sdk/Measure/ Convierte pies
Area cuadrados en yardas
cuadradas.

322 Guía del desarrollador de Server Job


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
MeasureAreaSqInchesToSqFeet Serie Serie sdk/Measure/ Convierte pulgadas
Area cuadradas en pies
cuadrados.
MeasureAreaSqInchesToSqMeters Serie Serie sdk/Measure/ Convierte pulgadas
Area cuadradas en metros
cuadrados.
MeasureAreaSqMeterToAcres Serie Serie sdk/Measure/ Convierte metros
Area cuadrados en acres.
MeasureAreaSqMetersToSqFeet Serie Serie sdk/Measure/ Convierte metros
Area cuadrados en pies
cuadrados.
MeasureAreaSqMetersToSqInches Serie Serie sdk/Measure/ Convierte metros
Area cuadrados en
pulgadas cuadradas.
MeasureAreaSqMetersToSqMiles Serie Serie sdk/Measure/ Convierte metros
Area cuadrados en millas
cuadradas.
MeasureAreaSqMetersToSqYards Serie Serie sdk/Measure/ Convierte metros
Area cuadrados en yardas
cuadradas.
MeasureAreaSqMilesToSqFeet Serie Serie sdk/Measure/ Convierte millas
Area cuadradas en pies
cuadrados.
MeasureAreaSqMilesToSqMeters Serie Serie sdk/Measure/ Convierte millas
Area cuadradas en metros
cuadrados.
MeasureAreaSqYardsToSqFeet Serie Serie sdk/Measure/ Convierte yardas
Area cuadradas en pies
cuadrados.
MeasureAreaSqYardsToSqMeters Serie Serie sdk/Measure/ Convierte yardas
Area cuadradas en metros
cuadrados.

Transformaciones de medidas: distancia


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
MeasureDistance Serie Serie sdk/Measure/ Convierte pies en
FeetToInches Distance pulgadas.
MeasureDistance Serie Serie sdk/Measure/ Convierte pies en
FeetToMeters Distance metros.
MeasureDistance Serie Serie sdk/Measure/ Convierte pies en
FeetToMiles Distance millas.
MeasureDistance Serie Serie sdk/Measure/ Convierte pies en
FeetToYards Distance yardas.
MeasureDistance Serie Serie sdk/Measure/ Convierte pulgadas
InchesToFeet Distance en pies.
MeasureDistance Serie Serie sdk/Measure/ Convierte pulgadas
InchesToMeters Distance en metros.
MeasureDistance Serie Serie sdk/Measure/ Convierte pulgadas
InchesToMiles Distance en millas.

Capítulo 8. Transformaciones y rutinas incorporadas 323


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
MeasureDistance Serie Serie sdk/Measure/ Convierte pulgadas
InchesToYards Distance en yardas.
MeasureDistance Serie Serie sdk/Measure/ Convierte metros en
MetersToFeet Distance pies.
MeasureDistance Serie Serie sdk/Measure/ Convierte metros en
MetersToInches Distance pulgadas.
MeasureDistance Serie Serie sdk/Measure/ Convierte metros en
MetersToMile Distance millas.
MeasureDistance Serie Serie sdk/Measure/ Convierte metros en
MetersToYard Distance yardas.
MeasureDistance Serie Serie sdk/Measure/ Convierte millas en
MilesToFeet Distance pies.
MeasureDistance Serie Serie sdk/Measure/ Convierte millas en
MilesToInches Distance pulgadas.
MeasureDistance Serie Serie sdk/Measure/ Convierte millas en
MilesToMeters Distance metros.
MeasureDistance Serie Serie sdk/Measure/ Convierte millas en
MilesToYards Distance yardas.
MeasureDistance Serie Serie sdk/Measure/ Convierte yardas en
YardsToFeet Distance pies.
MeasureDistance Serie Serie sdk/Measure/ Convierte yardas en
YardsToInches Distance pulgadas.
MeasureDistance Serie Serie sdk/Measure/ Convierte yardas en
YardsToMeters Distance metros.
MeasureDistance Serie Serie sdk/Measure/ Convierte yardas en
YardsToMiles Distance millas.

Transformaciones de medidas: temperatura


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
MeasureTemp Serie Serie sdk/Measure/ Convierte grados
CelsiusToFahrenheit Temp centígrados en grados
fahrenheit.
MeasureTemp Serie Serie sdk/Measure/ Convierte grados
FahrenheitToCelsius Temp fahrenheit en grados
centígrados.

Transformaciones de medidas: tiempo


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
MeasureTime Serie Serie sdk/Measure/Time Convierte días en
DaysToSeconds segundos.
MeasureTime Serie Serie sdk/Measure/Time Convierte horas en
HoursToSeconds segundos.

324 Guía del desarrollador de Server Job


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
MeasureTime Serie Serie sdk/Measure/Time Devuelve 1 si la
IsLeapYear entrada de año de 4
dígitos es un año
bisiesto; de lo
contrario, devuelve 0.
MeasureTime Serie Serie sdk/Measure/Time Convierte minutos en
MinutesTo Seconds segundos.
MeasureTime Serie Serie sdk/Measure/Time Convierte segundos
SecondsToDays en días.
MeasureTime Serie Serie sdk/Measure/Time Convierte segundos
SecondsToHours en horas.
MeasureTimeSeconds Serie Serie sdk/Measure/Time Convierte segundos
ToMinutes en minutos.
MeasureTime Serie Serie sdk/Measure/Time Convierte segundos
SecondsToWeeks en semanas.
MeasureTime Serie Serie sdk/Measure/Time Convierte segundos
SecondsToYears en años.
MeasureTime Serie Serie sdk/Measure/Time Convierte semanas en
WeeksToSeconds segundos.
MeasureTime Serie Serie sdk/Measure/Time Convierte años
YearsToSeconds estándar en segundos.

Transformaciones de medidas: volumen


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
MeasureVolume Serie Serie sdk/Measure/Volume Convierte barriles
BarrelsLiquid estadounidenses
ToCubicFeet (líquido) en pies
cúbicos.
MeasureVolume Serie Serie sdk/Measure/Volume Convierte barriles
BarrelsLiquid estadounidenses
ToGallons (líquido) en galones
estadounidenses.
MeasureVolume Serie Serie sdk/Measure/Volume Convierte barriles
BarrelsLiquid estadounidenses
ToLiters (líquido) en litros.
MeasureVolume Serie Serie sdk/Measure/Volume Convierte barriles
BarrelsPetrol estadounidenses
ToGallons (petróleo) en galones
estadounidenses.
MeasureVolume Serie Serie sdk/Measure/Volume Convierte barriles
BarrelsPetrol estadounidenses
ToLiters (petróleo) en litros.
MeasureVolume Serie Serie sdk/Measure/Volume Convierte barriles
BarrelsPetrol estadounidenses
ToCubicFeet (petróleo) en pies
cúbicos.
MeasureVolume Serie Serie sdk/Measure/Volume Convierte pies
CubicFeet cúbicos en barriles
ToBarrelsLiquid estadounidenses
(líquido).

Capítulo 8. Transformaciones y rutinas incorporadas 325


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
MeasureVolume Serie Serie sdk/Measure/Volume Convierte pies
CubicFeet cúbicos en barriles
ToBarrelsPetrol estadounidenses
(petróleo).
MeasureVolume Serie Serie sdk/Measure/Volume Convierte pies
CubicFeet cúbicos en galones
ToGallons estadounidenses.
MeasureVolume Serie Serie sdk/Measure/Volume Convierte pies
CubicFeet cúbicos en litros.
ToLiters
MeasureVolume Serie Serie sdk/Measure/Volume Convierte pies
CubicFeet cúbicos en galones
ToImpGallons imperiales.
MeasureVolume Serie Serie sdk/Measure/Volume Convierte galones
GallonsTo estadounidenses en
BarrelsLiquid barriles
estadounidenses
(líquido).
MeasureVolume Serie Serie sdk/Measure/Volume Convierte galones
GallonsTo estadounidenses en
BarrelsPetrol barriles
estadounidenses
(petróleo).
MeasureVolume Serie Serie sdk/Measure/Volume Convierte galones
GallonsTo estadounidenses en
CubicFeet pies cúbicos.
MeasureVolume Serie Serie sdk/Measure/Volume Convierte galones
GallonsToLiters estadounidenses en
litros.
MeasureVolume Serie Serie sdk/Measure/Volume Convierte litros en
LitersTo barriles
BarrelsLiquid estadounidenses
(líquido).
MeasureVolume Serie Serie sdk/Measure/Volume Convierte litros en
LitersTo barriles
BarrelsPetrol estadounidenses
(petróleo).
MeasureVolume Serie Serie sdk/Measure/Volume Convierte litros en
LitersTo pies cúbicos.
CubicFeet
MeasureVolume Serie Serie sdk/Measure/Volume Convierte litros en
LitersToGallons galones
estadounidenses.
MeasureVolume Serie Serie sdk/Measure/Volume Convierte litros en
LitersToGallons galones imperiales.
MeasureVolume Serie Serie sdk/Measure/Volume Convierte galones
ImpGallons imperiales en pies
ToCubicFeet cúbicos.
MeasureVolume Serie Serie sdk/Measure/Volume Convierte galones
ImpGallons imperiales en litros.
ToLiters

326 Guía del desarrollador de Server Job


Transformaciones de medidas: peso
Transformación Tipo de entrada Tipo de salida Carpeta Descripción
MeasureWeightGrains Serie Serie sdk/Measure/ Convierte granos en
ToGrams Weight gramos.
MeasureWeightGrams Serie Serie sdk/Measure/ Convierte gramos en
ToGrains Weight granos.
MeasureWeightGrams Serie Serie sdk/Measure/ Convierte gramos en
ToOunces Weight onzas.
MeasureWeightGrams Serie Serie sdk/Measure/ Convierte gramos en
ToPennyWeight Weight masa de un penique.
MeasureWeightGrams Serie Serie sdk/Measure/ Convierte gramos en
ToPounds Weight libras.
MeasureWeightKilograms Serie Serie sdk/Measure/ Convierte
ToLongTons Weight kilogramos en
toneladas largas.
MeasureWeightKilograms Serie Serie sdk/Measure/ Convierte
ToShortTons Weight kilogramos en
toneladas cortas.
MeasureWeightLongTons Serie Serie sdk/Measure/ Convierte toneladas
ToKilograms Weight largas en
kilogramos.
MeasureWeightLongTons Serie Serie sdk/Measure/ Convierte toneladas
ToPounds Weight largas en libras.
MeasureWeightOunces Serie Serie sdk/Measure/ Convierte onzas en
ToGrams Weight gramos.
MeasureWeightPennyWeight Serie Serie sdk/Measure/ Convierte masa de
ToGrams Weight un penique en
gramos.
MeasureWeightPounds Serie Serie sdk/Measure/ Convierte libras en
ToGrams Weight gramos.
MeasureWeightPounds Serie Serie sdk/Measure/ Convierte libras en
ToLongTons Weight toneladas largas.
MeasureWeightPounds Serie Serie sdk/Measure/ Convierte libras en
ToShortTons Weight toneladas cortas.
MeasureWeightShortTons Serie Serie sdk/Measure/ Convierte toneladas
ToKilograms Weight cortas en
kilogramos.
MeasureWeightShortTons Serie Serie sdk/Measure/ Convierte toneladas
ToPounds Weight cortas en libras.

Transformaciones numéricas
Transformación Tipo de entrada Tipo de salida Carpeta Descripción
NumericIsSigned Serie Serie sdk/Numeric Devuelve 0 si la
entrada es no
numérica o cero, 1
para números
positivos y -1 para los
números negativos.

Capítulo 8. Transformaciones y rutinas incorporadas 327


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
NumericRound0 Serie Serie sdk/Numeric Devuelve el número
entero más próximo
al número de entrada.
NumericRound1 Serie Serie sdk/Numeric Devuelve el número
de entrada con una
cifra decimal más
próximo.
NumericRound2 Serie Serie sdk/Numeric Devuelve el número
de entrada con dos
cifras decimales más
próximo.
NumericRound3 Serie Serie sdk/Numeric Devuelve el número
de entrada con tres
cifras decimales más
próximo.
NumericRound4 Serie Serie sdk/Numeric Devuelve el número
de entrada con cuatro
cifras decimales más
próximo.

Transformaciones del procesador de filas


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
RowProcCompareWith Serie Serie sdk/RowProc Compara el valor
PreviousValue actual con el valor
anterior. Devuelve 1
si son iguales; de lo
contrario, devuelve
0. Sólo puede
utilizarse en un
lugar en un trabajo.
RowProcGetPreviousValue Serie Serie sdk/RowProc Devuelve el valor
anterior que se ha
pasado a esta
transformación y
conserva la entrada
actual para la
siguiente referencia.
Sólo puede
utilizarse en un
lugar en un trabajo.
RowProcRunningTotal Serie Serie sdk/RowProc Devuelve la suma
en ejecución de la
entrada. Sólo puede
utilizarse en un
lugar en un trabajo.

328 Guía del desarrollador de Server Job


Transformaciones del programa de utilidad
Transformación Tipo de entrada Tipo de salida Carpeta Descripción
UtilityAbortToLog Serie - sdk/Utility Hace que el trabajo
termine y graba el
mensaje
proporcionado en el
registro de errores
graves del cliente del
Director. Sólo está
indicada a efectos de
desarrollo.
UtilityRunJob Serie, Matriz sdk/Utility Ejecuta el trabajo
serie delimitada, especificado y
número, devuelve estadísticas
número de la ejecución del
trabajo. El trabajo se
especifica por el
nombre de trabajo,
una lista de
parámetros
delimitados por el
carácter |, un límite
de fila y un límite de
aviso. Las estadísticas
se devuelven en una
matriz.
UtilityGetRunJobInfo Salida del Serie sdk/Utility Extrae información de
programa de la salida de
utilidad RunJob, UtilityRunJob. Utiliza
Serie, como argumentos la
Serie salida de
UtilityRunJob, una
acción y (de manera
opcional) un nombre
de enlace. Las
acciones posibles son:

LinkCount
JobName
JobCompletionStatus
StartTimeEndTime
UtilityMessageToLog Serie - sdk/Utility Graba el mensaje
proporcionado por el
usuario en el registro
en el cliente del
Director.
UtilityPrintColumn Serie - sdk/Utility Graba un valor de
ValueToLog columna en el registro
en el cliente del
Director.

Capítulo 8. Transformaciones y rutinas incorporadas 329


Transformación Tipo de entrada Tipo de salida Carpeta Descripción
UtilityPrintHexValueToLog Serie - sdk/Utility Convierte el valor
suministrado y lo
procesa como una
serie. Convierte cada
carácter de la serie en
su equivalente
hexadecimal ASCII y
lo graba en el registro
en el cliente del
Director.
UtilityWarningToLog Serie - - Graba el mensaje
proporcionado como
un aviso en el registro
en el cliente del
Director.
UtilityHashLookup Serie, Serie sdk/Utility Ejecuta una búsqueda
Serie, en una tabla hash.
Serie Utiliza como
argumentos el nombre
de la tabla hash, el
valor de la clave hash
y la posición de
columna. Devuelve el
registro.

Rutinas incorporadas
Hay tres tipos de rutinas que se suministran con IBM InfoSphere DataStage:
v Subrutinas incorporadas anteriores/posteriores. Estas rutinas se almacenan en la carpeta Rutinas →
Incorporadas → Anteriores/posteriores en el árbol de repositorio. Se compilan y están listas para su uso
como una subrutina anterior o posterior a la etapa o como una rutina anterior o posterior al trabajo.
v Ejemplos de funciones de transformación. Estas rutinas se almacenan en la carpeta Rutinas →
Ejemplos → Funciones en el árbol de repositorio y se utilizan en las transformaciones incorporadas que
se proporcionan con InfoSphere DataStage. Puede copiar estas rutinas y utilizarlas como base para sus
propias funciones de transformación escritas por el usuario.
v Funciones de transformación utilizadas por las transformaciones SDK. Estas son las rutinas que
utilizan las transformaciones SDK del mismo tipo. Se almacenan en Rutina → sdk. El editor de
expresiones no ofrece estas rutinas y deberá utilizar la transformación que tenga prioridad en la rutina
(tal como se describe en “Transformaciones incorporadas” en la página 309).

Puede ver las definiciones de estas rutinas utilizando el cliente del Diseñador, pero no puede editarlas. Si
es necesario, puede copiarlas y renombrarlas, así como editar las copias para trabajar en ellas.

Subrutinas anteriores y posteriores incorporadas


Hay varias subrutinas anteriores y posteriores incorporadas que se suministran con IBM InfoSphere
DataStage:
v DSSendMail. Esta rutina es un interludio al programa de correo de envío local.
v DSWaitForFile. Esta rutina se llama para suspender un trabajo hasta que, o bien exista un trabajo
denominado, o bien no exista.

330 Guía del desarrollador de Server Job


v DSJobReport. Esta rutina se puede llamar al final de un trabajo para grabar un informe de trabajo en
un archivo. La rutina toma un argumento que comprende dos o tres elementos separados por puntos y
comas como se explica a continuación:
– Tipo de informe. 0, 1 o 2 para especificar detalles del informe. El tipo 0 produce una serie de texto
que contiene hora de inicio/fin, tiempo transcurrido y estado del trabajo. El tipo 1 es un informe
básico pero también contiene información acerca de etapas y enlaces individuales dentro del trabajo.
El tipo 2 produce una serie de texto que contiene un informe XML completo.
– Directorio. Especifica el directorio en el que se escribirá el informe.
– Hoja de estilo XSL. Opcionalmente, especifica una hoja de estilo XSL para formatear un informe
XML.
Si el trabajo tenía un identificador de alias, a continuación, el informe se graba como
alias_nombreTrabajo.txt o alias_nombreTrabajo.xml, en función del tipo de informe. Si el trabajo no tiene
un, el informe se graba como nombreTrabajo_AAAAMMDD_HHMMSS.txt o
nombreTrabajo_AAAAMMDD_HHMMSS.xml, en función del tipo de informe.
v ExecDOS. Esta rutina ejecuta un mandato mediante un shell MS-DOS. El mandato ejecutado se
especifica en el argumento de entrada de la rutina.
v ExecDOSSilent. Como ExecDOS, pero no grana la línea de mandatos en el registro de trabajo.
v ExecTCL. Esta rutina ejecuta un mandato mediante un shell de motor de InfoSphere Information
Server. El mandato ejecutado se especifica en el argumento de entrada de la rutina.
v ExecSH. Esta rutina ejecuta un mandato mediante un shell Korn de UNIX.
v ExecSHSilent. Como ExecSH, pero no graba la línea de mandatos en el registro de trabajo.

Estas rutinas aparecen en la lista de rutinas incorporadas disponibles cuando edita los campos Subrutina
anterior a la etapa o Subrutina posterior a la etapa en una etapa Aggregator, Transformer o
suplementaria, o los campos Subrutina anterior al trabajo o Subrutina posterior al trabajo en el
recuadro de diálogo Propiedades del trabajo.

También puede copiar estas rutinas y utilizar el código como base para sus propias subrutinas
anteriores/posteriores.

Si el soporte multilingüístico está habilitado, deberá estar informado sobre cualquier requisito de
correlación cuando utilice las rutinas ExecDOS y ExecSH (o ExecDOSSilent y ExecSHSilent). Si estas
rutinas utilizan datos en determinados juegos de caracteres, será su responsabilidad correlacionar los
datos desde o hacia Unicode.

Funciones de transformación de ejemplo


Estas son las funciones de transformación de ejemplo que se proporcionan con IBM InfoSphere
DataStage:
v ConvertMonth. Transforma una entrada MONTH.TAG. El resultado depende del valor del segundo
argumento:
– F (el primer día del mes) genera DATE.TAG.
– L (el último día del mes) genera DATE.TAG.
– Q (el trimestre que contiene el mes) genera QUARTER.TAG.
– Y (el año que contiene el mes) genera YEAR.TAG.
v ConvertQuarter. Transforma una entrada QUARTER.TAG. El resultado depende del valor del segundo
argumento:
– F (el primer día del mes) genera DATE.TAG.
– L (el último día del mes) genera DATE.TAG.
– Y (el año que contiene el mes) genera YEAR.TAG.

Capítulo 8. Transformaciones y rutinas incorporadas 331


v ConvertTag. Transforma una entrada DATE.TAG. El resultado depende del valor del segundo
argumento:
– I (número de día interno) genera una Fecha.
– W (la semana que contiene la fecha) genera WEEK.TAG.
– M (el mes que contiene la fecha) genera MONTH.TAG.
– Q (el trimestre que contiene la fecha) genera QUARTER.TAG.
– Y (el año que contiene la fecha) genera YEAR.TAG.
v ConvertWeek. Transforma una entrada WEEK.TAG en una fecha interna correspondiente a un día
específico de la semana. El resultado depende del valor del segundo argumento:
– 0 genera un lunes.
– 1 genera un martes.
– 2 genera un miércoles.
– 3 genera un jueves.
– 4 genera un viernes.
– 5 genera un sábado.
– 6 genera un domingo.
Si la entrada no parece ser un WEEK.TAG válido, se registra un error y se devuelve 0.
v ConvertYear. Transforma una entrada YEAR.TAG. El resultado depende del valor del segundo
argumento:
– F (el primer día del año) genera DATE.TAG.
– L (el último día del año) genera DATE.TAG.
v QuarterTag. Transforma una entrada de fecha en una serie QUARTER.TAG (AAAAQn).
v Timestamp. Transforma una indicación de fecha y hora (una serie con el formato AAAA-MM-DD
HH:MM:SS) o una entrada de fecha. El resultado depende del valor del segundo argumento:
– TIMESTAMP genera una indicación de fecha y hora igual a 00:00:00 a partir de una fecha.
– DATE genera una fecha interna a partir de una indicación de fecha y hora (se omite la parte de
hora).
– TIME genera una hora interna a partir de una indicación de fecha y hora (se omite la parte de
fecha).
v WeekTag. Transforma una entrada de fecha en una serie WEEK.TAG (AAAAWnn).

332 Guía del desarrollador de Server Job


Capítulo 9. Almacenamiento en la memoria caché de disco de
la etapa Hashed File
Antes del Release 5.1, la etapa Hashed File sólo tenía un método para almacenar filas en la memoria
caché para la lectura (enlaces de referencia) y la grabación (enlaces de salida). Este método se
denominaba almacenamiento en memoria caché privada de enlaces (y anteriormente, almacenamiento en
memoria caché de etapas). Este mecanismo de memoria caché es una memoria caché privada por enlace.
Como resultado, cada enlace de un trabajo que utiliza una etapa Hashed File debe asignar y gestionar
recursos para dar soporte a la memoria caché. El compartimiento está permitido en un trabajo con una
secuencia de datos individual, pero no entre trabajos o varias secuencias de datos en un trabajo. Esto da
como resultado un uso significativo de recursos y unos tiempos de arranque poco eficaces (en el caso de
los enlaces de referencia).

Asimismo, como los almacenamientos intermedios de memoria caché de grabación generan filas hasta
que se llega al umbral, las filas en la memoria caché no se reflejan en la base de datos hasta que la
memoria caché se desecha. Esto supone un problema para los diseños de trabajo que utilizan el mismo
archivo hash para las actualizaciones y las búsquedas de referencia.

IBM InfoSphere DataStage ofrece la opción de


v Almacenar los bloques en la memoria caché del servidor
v Permitir que varios enlaces hagan referencia al mismo archivo hash
v Hacer que las inserciones y las actualizaciones estén visibles para todos los procesos que tengan abierto
el archivo

El almacenamiento centralizado en memoria caché compartida de disco del sistema, de aquí en adelante
denominado almacenamiento en memoria caché del sistema, reduce el uso de los recursos del sistema, al
implementar sólo una memoria caché que puede configurarse completamente y que da soporte a la
lectura y la grabación.

El release 6.0 introdujo una opción adicional denominada almacenamiento en memoria caché pública de
enlaces. Esta opción permite que varias secuencias de datos de un trabajo utilicen el mismo archivo de
memoria caché. El almacenamiento en memoria caché pública de enlaces se desarrolló para aprovechar el
motor paralelo de InfoSphere DataStage que maximiza la eficacia con un multiprocesador simétrico
(SMP) cuando utiliza un archivo de búsqueda.

Las funciones que dan soporte al almacenamiento en memoria caché de disco se describen en InfoSphere
DataStage Programmer's Guide.

En estos temas se describen los mandatos de usuario, así como las prestaciones que se ofrecen al
administrador de InfoSphere DataStage para ajustar varios valores de configuración del sistema para
maximizar el rendimiento basándose en la configuración de hardware y los pasos de InfoSphere
DataStage.

Funcionalidad
El almacenamiento en memoria caché de disco proporciona la funcionalidad y las ventajas siguientes:
v Da soporte a la actualización compartible o al acceso a archivos de grabación en una secuencia de
datos individual en un trabajo (almacenamiento en la memoria caché privada de enlaces)
v Da soporte a la actualización compartible o al acceso a archivos de grabación con
– varias secuencias de datos en un trabajo individual
– varios trabajos

© Copyright IBM Corp. 1997, 2010 333


– un trabajo que se ejecuta con el motor paralelo en SMP
mientras se mantienen los archivos almacenados en la memoria caché (almacenamiento en la
memoria caché pública de enlaces)
v Da soporte a la actualización compartible o al acceso a archivos de grabación en los trabajos de un
sistema mientras se mantienen los archivos almacenados en la memoria caché (almacenamiento en la
memoria caché del sistema)
v Permite la explotación de las prestaciones de SMP que permiten varias secuencias de datos simultáneas
(almacenamiento en la memoria caché pública de enlaces)
v Da soporte al acceso rápido en memoria a los datos por parte de una aplicación, incluidos los datos
actualizados o que se acaban de crear
v Da soporte únicamente al acceso en memoria a los datos actualizados o que se acaban de crear por
otros procesos
v Da soporte a los elementos ajustables que permiten al administrador configurar los algoritmos de
memoria caché de disco para cumplir la configuración del sistema y el tamaño esperado de los
archivos

La siguiente funcionalidad no está soportada:


v El almacenamiento en memoria caché de archivos con un tamaño mayor de medio terabyte
v El almacenamiento en memoria caché del sistema de archivos de tipo 1, 19, 25 ('árbol B') o 27
(particionado)
v El almacenamiento en memoria caché de los archivos existentes con valores de separación (tamaños de
bloque) distintos de 1, 2, 4, 8, 16, 32 o 64
v Designación automática de archivos como almacenados en la memoria caché del sistema
v Utilización de los programas de utilidad (copia de seguridad, restauración, cambio de tamaño y arreglo
de archivo) en los archivos designados para que se utilicen en la memoria caché del sistema

Terminología
En este documento se utiliza la siguiente terminología:
Término
Significado
bloque
Un grupo de registros o filas. El motor del servidor pone los registros que ejecutan hash en el
mismo número de grupo en un bloque. El tamaño del bloque viene determinado por el valor
SEPARATION de CREATE.FILE.
almacenamiento intermedio de conjunto de bloques
Una unidad de memoria en los segmentos compartidos del disco con un tamaño de n k más el
tamaño de la estructura de cabecera del conjunto de bloques. n puede ser 4, 8, 16 o 32.
cadena libre de conjunto de bloques
La cadena de almacenamientos intermedios de conjuntos de bloques sin utilizar disponible en
alguno de los segmentos de disco compartido configurados.
memoria caché
Un subsistema en el que los datos que se utilizan con frecuencia están disponibles para un acceso
rápido.
daemon de memoria caché
Un proceso asíncrono en segundo plano que realiza las grabaciones de estado de grabación
diferida.

334 Guía del desarrollador de Server Job


cadena de archivos de memoria caché
Un conjunto de entradas de archivo de memoria caché que están utilizadas (un archivo abierto) o
sin utilizar.
entrada de archivo de memoria caché
Una estructura que define un archivo de motor de servidor y la información relacionada con su
estado.
número de dispositivo
Un número exclusivo asociado con la partición (un dispositivo) en la que reside el i-node.
Consulte también número de i-node.
segmentos de memoria compartida de disco
Los segmentos a los que se asigna la memoria caché del sistema de IBM InfoSphere DataStage.
Esta área se divide posteriormente en entradas de conjunto de bloques.
archivo
Un archivo nativo del motor de servidor que se crea con el mandato CREATE.FILE.
desecho
La hora a la que se libera un conjunto de bloques asignado actualmente, y puede obtenerse de un
archivo y utilizarse para otro conjunto de bloques del mismo archivo o de otro diferente.
estado incoherente
El estado de un archivo en el que algunas grabaciones generadas por una aplicación, pero no
todas, se han grabado físicamente en disco antes de que la aplicación termine sin un archivo de
cierre correcto.
número de i-node
Un número exclusivo asociado con cada nombre de archivo. Este número se utiliza para buscar
una entrada en la tabla de i-nodes que proporciona información sobre el tipo, el tamaño y la
ubicación del archivo, así como el ID de usuario del propietario del archivo. Consulte también
número de dispositivo.
bloque de desbordamiento
Un bloque o un conjunto de bloques exclusivo en el que la parte de desbordamiento de los
campos de un registro se almacena si todos los campos de datos del registro no entran en su
grupo.
pid Un identificador exclusivo de un proceso.
lectura previa
El acto de leer uno o varios bloques de un archivo en la memoria caché antes de generar una
solicitud para el bloque.
HEAPCHUNK público
Un conjunto consecutivo de conjuntos de bloques (bset) asignado como una unidad (128 K) a un
servidor de archivos hash para una parte de una memoria caché pública de enlaces.
semáforo
Una estructura de sistema operativo que permite a los procesos modularse entre ellos en una
hebra individual mediante un procedimiento.
multiproceso simétrico (SMP)
El proceso de programas de varios procesadores que comparten un sistema operativo y una
memoria comunes. Una copia individual del sistema operativo está a cargo de todos los
procesadores. En SMP, los recursos de hardware se comparten normalmente entre los
procesadores.
grabación diferida
Un bloque que hay actualmente en un conjunto de bloques que se ha modificado respecto a la

Capítulo 9. Almacenamiento en la memoria caché de disco de la etapa Hashed File 335


imagen en disco y está visible para las demás aplicaciones, aunque no se ha actualizado en el
archivo de disco. El archivo está en un estado incoherente hasta que se hayan grabado todos los
bloques de grabación diferida.

Secuencias de datos múltiples


En IBM InfoSphere DataStage, se producen secuencias de datos múltiples en uno de estos tres estados:
v Cuando se procesan secuencias de datos múltiples en el mismo trabajo
v Cuando se procesa un origen de datos individual de gran tamaño en varios conjuntos particionados
utilizando el motor paralelo de InfoSphere DataStage
v Cuando se ejecutan varios trabajos que hacen referencia al mismo archivo

Para aumentar la eficacia de los procesos, puede procesar varias secuencias de datos con un solo archivo
de búsqueda común almacenado en memoria caché.

Directrices para elegir un tipo de memoria caché


Utilice las siguientes directrices cuando seleccione el tipo de memoria caché que desea utilizar:
Para Utilice:
Compartir entre archivos de referencia y de salida en una secuencia de datos individual
Almacenamiento en la memoria caché privada de enlaces
Compartir entre varias secuencias de datos o en un contenedor que se ejecuta con el motor paralelo
Almacenamiento en la memoria caché pública de enlaces
Compartir entre varios trabajos que se ejecutan simultáneamente o en paralelo utilizando el mismo
archivo de referencia o de salida
Almacenamiento en la memoria caché del sistema

Preparación de la memoria caché privada de enlaces


En el cliente del Administrador, seleccione un proyecto en la página Proyectos. Pulse Propiedades. En el
separador Elementos ajustables, establezca Tamaño de memoria caché de lectura (para los archivos de
consultas) o Tamaño de memoria caché de grabación (para los archivos de salida) en el límite superior
adecuado para el trabajo y los recursos. IBM InfoSphere DataStage no utiliza toda la memoria
especificada de una vez. En su lugar, utiliza la memoria en segmentos hasta el límite especificado. El
valor predeterminado de cada uno es 128 MB.

Preparación para el almacenamiento en la memoria caché pública de


enlaces y el almacenamiento en la memoria caché del sistema en las
plataformas UNIX
De forma predeterminada, IBM InfoSphere DataStage se proporciona con el almacenamiento en la
memoria caché pública de enlaces y el almacenamiento en la memoria caché del sistema inhabilitados.
Para habilitar el almacenamiento en la memoria caché de disco, el administrador de InfoSphere DataStage
debe realizar los pasos siguientes.
1. Inicie una sesión como dsadm.
2. Utilice el siguiente mandato para cambiar el directorio actual al directorio de instalación de DSEngine.
cd ’cat /.dshome’
Edite el archivo uvconfig que se encuentra en el directorio del motor de servidor (especificado en el
archivo /.dshome), y establezca los elementos ajustables de la memoria caché de disco en los valores

336 Guía del desarrollador de Server Job


que desee. Como mínimo, establezca el elemento ajustable DISKCACHE en un tamaño deseado en
megabytes. (Consulte “Ajuste de la memoria caché pública de enlaces y la memoria caché del
sistema” en la página 349.)

Nota: Los valores predeterminados sirven como un conjunto razonable de valores iniciales.
3. Asegúrese de que no haya conexiones activas del cliente de InfoSphere DataStage ni usuarios
interactivos.
4. Detenga el motor de servidor de la siguiente manera:
./bin/uv -admin -stop

Nota: No puede continuar en el paso 5 hasta que todas las aplicaciones de InfoSphere DataStage
hayan dejado de ejecutarse. Utilice el siguiente mandato para comprobar que todas las aplicaciones de
InfoSphere DataStage han dejado de ejecutarse:
./bin/uv -admin -info
Si todas las aplicaciones se han detenido, la salida es:
DSEngine, rev xxxx not currently running
5. Genere una nueva configuración del motor de la siguiente manera:
./bin/uv -admin -regen
6. Reinicie el motor de servidor de la siguiente manera:
./bin/uv -admin -start

El almacenamiento en la memoria caché pública de enlaces y el almacenamiento en la memoria caché del


sistema están ahora habilitados. Una vez habilitado el almacenamiento en la memoria caché, los diseños
de trabajo nuevos o existentes pueden utilizar esta funcionalidad. Consulte “Utilización de la memoria
caché pública de enlaces” en la página 339 o “Utilización de la memoria caché del sistema” en la página
340.

Si recibe un error del sistema operativo de host indicando que no se han podido asignar los segmentos
de InfoSphere DataStage, revise la información sobre el kernel del sistema operativo y realice los cambios
necesarios en ellos.

Requisitos especiales de AIX para determinar el tamaño de la memoria


caché de disco
Debido al modelo del espacio de direcciones predeterminado para los procesos de 32 bits en los sistemas
AIX, es posible que necesite una preparación adicional para todas las opciones de memoria caché de
disco. La asignación de espacio predeterminada es de 128 megabytes. La asignación máxima óptima es de
512 megabytes.

Si desea asignar más de 128 megabytes de espacio para la memoria caché en un sistema AIX, siga estos
pasos:
1. Inicie una sesión como dsadm.
2. Utilice el siguiente mandato para cambiar el directorio actual al directorio de instalación de DSEngine:
cd ’cat /.dshome’
3. Edite el archivo uvconfig con un editor de texto como vi.
a. Cambiar DMEMOFF a 0x90000000
b. Cambiar PMEMOFF a 0xa0000000
Guarde el archivo uvconfig.
4. Asegúrese de que no haya conexiones activas del cliente de IBM InfoSphere DataStage ni usuarios
interactivos.
5. Detenga el motor de servidor de la siguiente manera:

Capítulo 9. Almacenamiento en la memoria caché de disco de la etapa Hashed File 337


. ./dsenv./bin/uv -admin -stop

Nota: No puede continuar en el paso 6 hasta que todas las aplicaciones de InfoSphere DataStage
hayan dejado de ejecutarse. Utilice el siguiente mandato para comprobar que todas las aplicaciones de
InfoSphere DataStage han dejado de ejecutarse:
./bin/uv -admin -info
Si todas las aplicaciones se han detenido, la salida es:
DSENGINE, rev xxxx not currently running
6. Genere una nueva configuración del motor de la siguiente manera:
./bin/uv -admin -regen
Si el mandato es satisfactorio, la salida es:
uvregen: reconfiguration complete, disk segment size is xxxxxxx
7. Añada los siguientes valores de entorno al archivo .dsenv:
LDR_CNTRL=MAXDATA=0x30000000;exportar LDR_CNTRL
8. Aplique los nuevos valores de entorno ejecutando
. ./dsenv
9. Reinicie el motor de servidor de la siguiente manera:
./bin/uv -admin -start

Nota: Estos valores pueden afectar a la cantidad de memoria utilizada para las etapas suplementarias
que hacen un uso intensivo de la memoria, y este tipo de etapas puede limitar la cantidad de
memoria disponible para la memoria caché.

Preparación para el almacenamiento en la memoria caché pública de


enlaces y el almacenamiento en la memoria caché del sistema en las
plataformas Windows
De forma predeterminada, IBM InfoSphere DataStage se proporciona con el almacenamiento en la
memoria caché pública de enlaces y el almacenamiento en la memoria caché del sistema inhabilitados.
Para habilitar el almacenamiento en la memoria caché de disco, el administrador de InfoSphere DataStage
debe realizar los pasos siguientes.
1. Inicie una sesión como administrador de Windows.
2. Utilizando un editor de texto como, por ejemplo, Notepad, edite el archivo uvconfig que se encuentra
en el directorio del motor de servidor y establezca los elementos ajustables de la memoria caché de
disco en los valores que desee. Como mínimo, establezca el elemento ajustable DISKCACHE en un
tamaño deseado en megabytes. (Consulte “Ajuste de la memoria caché pública de enlaces y la
memoria caché del sistema” en la página 349.)

Nota: Los valores predeterminados sirven como un conjunto razonable de valores iniciales.
3. Asegúrese de que no haya conexiones activas del cliente de InfoSphere DataStage ni usuarios
interactivos.
4. Detenga el motor de servidor de la siguiente manera:
a. Seleccione Inicio → Configuración → Panel de control → IBM InfoSphere Information Server.
Aparece el recuadro de diálogo Panel de control de InfoSphere DataStage.
b. Pulse Detener todos los servicios y pulse Sí como respuesta al mensaje de que se detendrán todos
los mensajes de los Servicios de InfoSphere DataStage.
c. Pulse Aceptar para salir del Panel de control.

Nota: No puede continuar en el paso 5 hasta que todas las aplicaciones de InfoSphere DataStage
hayan dejado de ejecutarse. Para comprobar que no se esté ejecutando ninguna aplicación de

338 Guía del desarrollador de Server Job


InfoSphere DataStage, consulte el separador Procesos en el gestor de tareas. No debe aparecer
ninguna entrada denominada uvsh ni entradas que empiecen por las letras ds.

Nota: Genere un nuevo archivo de configuración del motor de la siguiente manera:


En el indicador de mandatos de Windows NT®, cambie al directorio del motor de servidor y emita
el siguiente mandato:
C:\IBM\InformationServer\Server\DSEngine\bin\uvregen.exe
donde C:\IBM\InformationServer\Server\DSEngine es la ubicación del motor de servidor
instalado.
5. Reinicie el motor de servidor de la siguiente manera:
a. Seleccione Inicio → Configuración → Panel de control → IBM InfoSphere Information Server.
Aparecerá el recuadro de diálogo Panel de control de InfoSphere DataStage.
b. Pulse Iniciar todos los servicios y pulse Sí como respuesta al mensaje de que se iniciarán todos
los servicios de InfoSphere DataStage.
c. Pulse Aceptar para salir del Panel de control de InfoSphere DataStage.

Nota: Si recibe un error del sistema operativo de host indicando que no se han podido asignar los
segmentos de InfoSphere DataStage, revise la información sobre el kernel del sistema operativo y
realice los cambios necesarios en ellos.

El almacenamiento en la memoria caché pública de enlaces y el almacenamiento en la memoria caché del


sistema están ahora habilitados. Una vez habilitado el almacenamiento en la memoria caché, los diseños
de trabajo nuevos o existentes pueden utilizar esta funcionalidad. Consulte “Utilización de la memoria
caché pública de enlaces” o “Utilización de la memoria caché del sistema” en la página 340.

Utilización de la memoria caché privada de enlaces


El motor de servidor utiliza el espacio privado si se cumple lo siguiente:
v El almacenamiento en memoria caché de disco está habilitado (Habilitado o Habilitado, bloquear para
actualizaciones en la lista desplegable Precargar archivo en memoria en el separador Salida del
recuadro de diálogo Etapa Hashed File)
v Habilitar compartimiento de memoria caché de archivos hash no se ha seleccionado en el separador
General del trabajo (Editar → Propiedades del trabajo) antes de la compilación. De forma
predeterminada, Habilitar compartimiento de memoria caché de archivos hash no está seleccionado.

Si se cumplen todas estas condiciones, las nuevas aplicaciones utilizan el almacenamiento en memoria
caché privada de enlaces. Los mensajes de registro de tiempo de ejecución hacen referencia al espacio
privado de enlaces.

Si se vuelve a compilar una aplicación existente, puede ejecutarse con un archivo de registro diferente.
Un trabajo con una secuencia individual funciona de la misma forma que con el release anterior, pero los
mensajes de registro de tiempo de ejecución ahora hacen referencia al espacio privado de enlaces.

Utilización de la memoria caché pública de enlaces


El motor de servidor utiliza el espacio público si se cumple todo lo siguiente:
v El almacenamiento en memoria caché de disco está habilitado (Habilitado o Habilitado, bloquear para
actualizaciones en la lista desplegable Precargar archivo en memoria en el separador Salida del
recuadro de diálogo Etapa Hashed File).
v Habilitar compartimiento de memoria caché de archivos hash se ha seleccionado en el separador
General del trabajo (Editar → Propiedades del trabajo) antes de la compilación. De forma
predeterminada, Habilitar compartimiento de memoria caché de archivos hash no está seleccionado.

Capítulo 9. Almacenamiento en la memoria caché de disco de la etapa Hashed File 339


v El almacenamiento en memoria caché de disco está activado en el archivo uvconfig en el servidor
(consulte “Ajuste de la memoria caché pública de enlaces y la memoria caché del sistema” en la página
349).
v El archivo de búsqueda se ejecutará en más de una secuencia, ya sea en varias secuencias de datos en
el mismo trabajo o en conjuntos particionados utilizando el motor paralelo de IBM InfoSphere
DataStage.

Si alguna de las tres condiciones anteriores no se cumple, se utiliza el almacenamiento en memoria caché
privada de enlaces.

Si se cumplen todas estas condiciones, las nuevas aplicaciones utilizan el almacenamiento en memoria
caché pública de enlaces. Los mensajes de registro de tiempo de ejecución hacen referencia al espacio
público de enlaces.

Para obtener el estado de la memoria caché de disco, consulte “Obtención del estado” en la página 341.

Utilización de la memoria caché del sistema


Cuando se inicia un proceso de IBM InfoSphere DataStage, el conjunto de segmentos de memoria
compartida que mantiene la memoria caché de disco está visible para el proceso. Para la memoria caché
de disco, se recomienda al administrador utilizar menos del máximo de memoria caché de disco
compartida permitida, para que las aplicaciones puedan ejecutarse en el espacio de trabajo restante.

El diseño de los segmentos de memoria caché de disco compartida permite un acceso de actualización
serializado y eficaz a la lista de bloques en la memoria caché para cada archivo (i-node y dispositivo).

Creación de un archivo hash para el almacenamiento en memoria


caché del sistema
Para utilizar la memoria caché del sistema en la etapa Hashed File, debe crear un archivo con los
atributos de memoria caché "grabación inmediata" o "grabación diferida". Puede crear este archivo
seleccionando Permitir memoria caché de grabación de la etapa en la página Entrada del recuadro de
diálogo Etapa Hashed File. Especifique los atributos que desee en los recuadros de diálogo Opciones de
creación de archivo. Este recuadro de diálogo incluye el recuadro de lista desplegable Atributos de
memoria caché. La lista desplegable tiene las siguientes entradas:
v NINGUNO. No asigna ningún atributo de memoria caché especial. Este es el valor predeterminado.
v GRABACIÓN DIFERIDA. Habilita el almacenamiento en memoria caché del archivo especificado
utilizando la actualización bajo demanda o la actualización lenta. (En el archivo uvconfig, si se habilita
DCWRITEDAEMON, se habilita la actualización lenta. Consulte “Ajuste de la memoria caché pública
de enlaces y la memoria caché del sistema” en la página 349).
v GRABACIÓN INMEDIATA. Habilita el almacenamiento en memoria caché del archivo especificado
utilizando grabaciones síncronas.

Mandatos del motor de servidor


El administrador de IBM InfoSphere DataStage puede administrar y supervisar el subsistema de memoria
caché del sistema mediante la interfaz de línea de mandatos del motor de servidor, tal como se describe a
continuación.

Para utilizar alguno de estos mandatos, antes de ejecutar un trabajo o después de ejecutar un trabajo, cree
definiciones de rutinas anteriores al trabajo o posteriores al trabajo. Consulte la sección Capítulo 6,
“Programación en IBM InfoSphere DataStage”, en la página 135 para obtener información adicional.

340 Guía del desarrollador de Server Job


Creación de archivos hash nuevos y alteración de archivos hash existentes
El siguiente mandato crea un nuevo archivo has en memoria caché:
CREATE.FILE

El mandato CREATE.FILE se ha ampliado con dos opciones, WRITE.CACHE y WRITE.CACHE.DEFER, si


el archivo va a utilizar la memoria caché de disco compartida. Estas opciones tienen los siguientes
significados:
Opción
Descripción
WRITE.CACHE
Almacena en la memoria caché los archivos para las lecturas y grabaciones con grabaciones
inmediatas.
WRITE.CACHE.DEFER
Almacena en la memoria caché los archivos para las lecturas y grabaciones con las grabaciones
diferidas hasta el cierre.

Nota: El tamaño de bloque del archivo debe ser 1 KB, 2 KB, 4 KB, 8 KB, 16 KB o 32 KB. Este tamaño se
controla estableciendo la separación de archivos en 2, 4, 8, 16, 32 o 64, respectivamente.

El siguiente mandato cambia la modalidad de un archivo hash existente:


SET.MODE
nombre_archivo [READ.ONLY | READ.WRITE | WRITE.CACHE |
WRITE.CACHE.DEFER | INFORM]

El mandato tiene las opciones siguientes:


Opción
Descripción
READ.ONLY
Impone el archivo para que sea de sólo lectura y almacena las lecturas en la memoria caché.
READ.WRITE
Restaura el archivo a la modalidad de lectura/grabación normal. Éste es el valor predeterminado.
WRITE.CACHE
Almacena en la memoria caché los archivos para las lecturas y grabaciones con grabaciones
inmediatas.
WRITE.CACHE.DEFER
Almacena en la memoria caché los archivos para las lecturas y grabaciones con las grabaciones
diferidas hasta el cierre.
INFORM
Muestra el valor actual del campo "readonly" en la cabecera.

Nota: El tamaño de bloque del archivo debe ser 1 KB, 2 KB, 4 KB, 8 KB, 16 KB o 32 KB. Este tamaño se
controla estableciendo la separación de archivos en 2, 4, 8, 16, 32 o 64, respectivamente.

Obtención del estado


El administrador (o el usuario) puede obtener el estado actual de la memoria caché de disco utilizando el
siguiente mandato:
LIST.FILE.CACHE [DEVICE
xxx INODE yyy | FILE nombre |
[EVERY]]
[[DETAIL][MRURO][MRUWD]]

Capítulo 9. Almacenamiento en la memoria caché de disco de la etapa Hashed File 341


Nota: Este mandato está disponible para el almacenamiento en la memoria caché pública de enlaces y el
almacenamiento en la memoria caché del sistema.

El mandato tiene las opciones siguientes:


Opción
Descripción
DEVICE xxx INODE yyy
Proporciona información para el archivo de memoria caché asociado con el número de dispositivo
exclusivo y el número de i-node en el que se encuentra el archivo almacenado en memoria caché.
xxx e yyy son decimales, a menos que empiecen por 0[X|x], lo que indica que son hexadecimales.
FILE nombre
Proporciona información para el archivo almacenado en memoria caché denominado.
EVERY
Proporciona información sobre todos los archivos abiertos.
DETAIL
Proporciona información adicional.
MRURO
Lista todos los conjuntos de bloques en la cola de conjuntos de bloques de sólo lectura de la
memoria caché del archivo. Estos conjuntos de bloques aparecen al final de todas las entradas del
archivo de memoria caché, una entrada por línea.
MRUWD
Lista cada conjunto de bloques en la cola de grabación diferida del archivo.

Si se ejecuta el daemon de memoria caché de disco, aparece la siguiente línea primero.


DAEMON.FILE.CACHE daemon active with pause of x, pid of y

donde x es el intervalo de pausa en milisegundos e y es la identificación del ID de proceso. Para obtener


más información, consulte el apartado “Inicio y detención del daemon de memoria caché” en la página
348.

Un proceso puede ser propietario de uno o varios de los siguientes semáforos: solicitud de daemon,
cadena libre de conjunto de bloques y cadena de archivos de memoria caché. Si es propietario de más de
uno, se generan las líneas correspondientes.
daemon request semaphore held by y
blockset freechain semaphore held by y
cache file chain semaphore held by y

donde y es la identificación del ID de proceso.

Cuando se ejecuta este mandato, dos líneas muestran el estado general de la memoria caché. Por ejemplo,

fileentries blocksets freechain flushedro flushedwd blockkhits

11 61 61 50 32 23292

El significado de la información de estado es el siguiente:


Categoría
Significado
fileentries
Número de entradas del archivo de memoria caché.

342 Guía del desarrollador de Server Job


blocksets
Número total de conjuntos de bloques en la memoria caché de disco.
freechain
Número de conjuntos de bloques disponibles actualmente para su uso.
flushedro
Número total de conjuntos de bloques de sólo lectura desechados.
flushedwd
Número total de conjuntos de bloques de grabación diferida desechados.
blockhits
Número total de bloques encontrados en la memoria caché.

Si se especifica DETAIL, cuatro líneas adicionales proporcionan el estado detallado de la memoria caché
de disco:

blocksize arraysize flushpc maxpc catpc

16384 256 80 40 50

nophyread nophywrite nobsetwhits

29 445 4473

El significado del estado detallado es el siguiente:


Categoría
Significado
blocksize
Tamaño configurado del almacenamiento intermedio del conjunto de bloques. Consulte
DCBLOCKSIZE.
arraysize
Número configurado de matrices por entrada de archivo de memoria caché. Consulte
DCMODULUS.
flushpc
Porcentaje de flushpc configurado. Consulte DCFLUSHPCT.
maxpc Porcentaje de maxpc configurado. Consulte DCMAXPCT.
catpc Porcentaje de catpc configurado. Consulte DCCATALOGPCT.
nophyread
Número total de lecturas realizadas en el sistema operativo.
nophywrite
Número total de grabaciones realizadas en el sistema operativo.
nobsetwhits
Número total de conjuntos de bloques encontrados en la memoria caché.

Se proporciona la siguiente información para cada archivo:

Device... Inode... open openwd c t r p time fullname

8912917 1297708 1 1 C D W 1 11:46:17 tress/REL7.DY.1/DATA.30

Capítulo 9. Almacenamiento en la memoria caché de disco de la etapa Hashed File 343


blocksets bsetswd flushedro flushedwd bsethits hblockf

12 3 0 144 5667 0x30000

El significado de esta información es el siguiente:


Categoría
Significado
Device
Número que identifica la partición lógica del disco donde se encuentra el sistema de archivos.
Inode Número que identifica el archivo al que se está accediendo.
open Número de veces que se ha abierto actualmente el archivo.
openwd
Número de veces que se ha abierto actualmente el archivo con grabación diferida.
c El estado del catálogo del archivo.
v C si el archivo está catalogado.
v A espacio si no lo está.
t El tipo de archivo:
v D representa datos de tipo 30
v O representa un desbordamiento de tipo 30
v S representa un archivo público de enlace de IBM InfoSphere DataStage
v A espacio representa un archivo hash
r El estado de lectura/grabación del archivo:
v R representa de sólo lectura
v W representa de grabación diferida
v A espacio representa otros estados
p El estado del daemon de memoria caché. El valor es
v 1 si el daemon de memoria caché supervisa de forma activa el estado del archivo
v ? si el daemon ha terminado anormalmente
v A espacio si el daemon de memoria caché no supervisa de forma activa el estado del archivo y
el archivo no ha terminado anormalmente
time La hora a la que se ha abierto el archivo.
fullname
Los últimos 23 bytes de la vía de acceso completa.
blocksets
El número de conjuntos de bloques que utiliza actualmente este archivo.
bsetswd
El número de conjuntos de bloques que hay actualmente con al menos un bloque de grabación
diferida.
flushedro
El número de conjuntos de bloques de sólo lectura que se han desechado.
flushedwd
El número de conjuntos de bloques desechados que tenían grabaciones diferidas.
bsethits
El número de conjuntos de bloques encontrados en la memoria caché de este archivo.

344 Guía del desarrollador de Server Job


hblockf
El número de bloque máximo en el archivo expresado en hexadecimales.

Si un semáforo de entrada de archivos utilizado para este archivo de memoria caché está actualmente en
espera, se genera una línea con la siguiente información:
this cache file entry semaphore (x) held by y

donde x es el número del semáforo e y es el ID de proceso.

Si se especifica DETAIL, se muestra la información de estado del archivo actual.

0xbaseblock inset mru latch cntovf writedef time

0 8 WD 0x0 0 0x80000000 11:46:17

10000 8 RO 0x0 0 0x0 11:46:17

20000 8 0x80000000 0 0x0 11:46:17

Para cada entrada del conjunto de bloques, el significado de esta información es el siguiente:
Categoría
Significado
0xbaseblock
El número del bloque en hexadecimales (con el prefijo 0x).
inset El número de bloques en este conjunto.
mru El estado de sólo lectura o grabación diferida:
v WD para la lista de grabación diferida del archivo de memoria caché
v RO para la lista de sólo lectura del archivo de memoria caché
latched
Cuatro caracteres hexadecimales que muestran los valores de cierre (prefijo 0x), con 1 bit para
cada bloque cerrado en el conjunto de bloques actual de izquierda a derecha.
cntovf El número de procesos que hacen referencia a un grupo de desbordamiento en este conjunto de
bloques.
writedef
Cuatro caracteres hexadecimales que muestran los valores diferido (prefijo 0x), con 1 bit para
cada bloque en el conjunto de bloques actual de izquierda a derecha.
time La hora a la que se ha hecho referencia por última vez al conjunto de bloques.

Si un semáforo de matriz de archivos de memoria caché correspondiente a un conjunto de bloques


mostrado está retenido actualmente por un proceso, se genera una línea con la siguiente información.
Array entry z has cache file array semaphore (x) held by y

donde x es el número del semáforo, y es el ID de proceso y z es el número de entrada de la matriz.

Si se especifica DETAIL y se aplica un almacenamiento en memoria caché pública de enlaces, se


proporciona esta información adicional. Por ejemplo:
bset 0x4001 first of 8 bsets make up this public HEAPCHUNK
next 247 public HEAPCHUNKs of 8 bsets are consecutive
bset 0x7C4001 first of 2 bsets make up this public HEAPCHUNK

El ejemplo anterior indica que el archivo público de enlace está utilizando 248 HEAPCHUNK de 128 K
cada uno y 1 HEAPCHUNK de 32 K

Capítulo 9. Almacenamiento en la memoria caché de disco de la etapa Hashed File 345


También hay disponible un segundo formato de este mandato.
LIST.FILE.CACHE [DEVICE
xxx INODE yyy|FILE name] BLOCK
zzz [OVER.30]

Cuando se ejecuta este mandato, se muestran un vuelco del bloque en hexadecimal y las claves de
registro. Si desea un bloque de desbordamiento de un archivo de tipo 30, especifique la opción OVER.30.
Después de dos líneas de cabecera, se muestran cada 64 bytes de datos en una línea, con todas las líneas
cero omitidas. Para cada clave, se genera una línea. La clave es un valor de hasta 511 bytes. El vuelco
termina cuando una clave tiene más de 511 bytes. xxx, yyy y zzz son decimales, a menos que empiecen
por 0[X|x], lo que indica que son hexadecimales.

Cambio del estado


El administrador de IBM InfoSphere DataStage puede cambiar el estado de la memoria caché de disco
compartida.

Nota: Este mandato está disponible para el almacenamiento en la memoria caché pública de enlaces y el
almacenamiento en la memoria caché del sistema.

Nota: Debe haber iniciado una sesión en la cuenta dshome para poder cambiar el estado. Consulte
“Inicio de sesión en la cuenta dshome” en la página 348 para obtener más información sobre cómo iniciar
una sesión en la cuenta dshome.

El mandato es
CLEAR.FILE.CACHE
[[FILE nombre_archivo [GROUP zzz]]
[FORCEWRITE | FLUSHRO | CLOSE | CLEAR.STAT]
| ALL| DCFILE | ENTRY | ARRAY | FREECHAIN | DAEMON]
[USER x | SEMNO y]
[STOP {DAEMON}]
[ABORT] {DETAIL}

El mandato tiene las opciones siguientes:


Opciones
Descripción
FILE nombre_archivo
Nombra el archivo para el que se va a cambiar el estado. Si no se especifica, se cambia el estado
de todos los archivos de memoria caché.
GROUP zzz
Identifica el número de grupo para el que se va a cambiar el estado. Si no se especifica, se cambia
el estado de todos los grupos.
FORCEWRITE
Hace que se graben todas las grabaciones diferidas.
FLUSHRO
Libera los conjuntos de bloques de sólo lectura de la memoria caché, establece la indicación de
fecha y hora en 0, y coloca una entrada al final de la cadena utilizada más recientemente.
CLOSE
En colaboración con FORCEWRITE, coloca entradas en la cadena libre de conjuntos de bloques y
cierra la entrada de archivo de memoria caché designada.
CLEAR.STAT
Borra las estadísticas de un determinado archivo o de toda la memoria caché.

346 Guía del desarrollador de Server Job


ALL Libera todos los semáforos. ALL es mutuamente excluyente con DCFILE, ENTRY, ARRAY,
FREECHAIN y DAEMON.
DCFILE
Libera el semáforo de cadena de archivos de memoria caché. DCFILE es mutuamente excluyente
con ALL, pero puede incluirse en combinación con ENTRY, ARRAY, FREECHAIN o DAEMON.
ENTRY
Libera el semáforo de entrada de archivo de memoria caché. ENTRY es mutuamente excluyente
con ALL, pero puede incluirse en combinación con DCFILE, ARRAY, FREECHAIN o DAEMON.
ARRAY
Libera el semáforo de matriz de archivos de memoria caché. ARRAY es mutuamente excluyente
con ALL, pero puede incluirse en combinación con DCFILE, ENTRY, FREECHAIN o DAEMON.
FREECHAIN
Libera el semáforo de cadena libre de conjuntos de bloques. FREECHAIN es mutuamente
excluyente con ALL, pero puede incluirse en combinación con DCFILE, ENTRY, ARRAY o
DAEMON.
DAEMON
Libera el semáforo de daemon de memoria caché. DAEMON es mutuamente excluyente con ALL,
pero puede incluirse en combinación con DCFILE, ENTRY, ARRAY o FREECHAIN.
USER x
Identifica el ID de proceso del usuario que es propietario del semáforo que se va a liberar. Si se
omite, se suponen todos los usuarios. USER puede especificarse con ALL, DCFILE, ENTRY,
ARRAY, FREECHAIN y DAEMON para limitar estas opciones a un usuario específico.
SEMNO y
Especifica el número de semáforos de matriz o entrada que se van a liberar. También debe
especificarse ENTRY o ARRAY. Si se omite, se suponen todos los semáforos de matriz o entrada.
STOP {DAEMON}
Detiene el daemon de grabación asíncrona de la memoria caché de disco.
ABORT [DETAIL]
Detiene todo, desecha todos los archivos, borra todos los semáforos y estadísticas, y detiene el
daemon. Si se especifica DETAIL, se muestran los pasos. Si se especifica ABORT, DETAIL es el
único otro parámetro permitido.

Colocación de los archivos de forma permanente en la memoria caché de disco


El administrador puede colocar archivos específicos de forma permanente en la memoria caché de disco
con el siguiente mandato del motor de servidor:
CATALOG.FILE.CACHE
nombre_archivo {PRE.LOAD|WRITE.DEFER}

El mandato contiene los siguientes componentes:


Componentes
Descripción
FILE nombre_archivo
Nombra el archivo que se va a colocar de forma permanente en la memoria caché de disco.
PRE.LOAD
Carga los datos del archivo en la memoria caché.
WRITE.DEFER
Difiere la grabación en el archivo.

Capítulo 9. Almacenamiento en la memoria caché de disco de la etapa Hashed File 347


El administrador puede precargar un archivo en modalidad de sólo lectura o de grabación en memoria
caché en la memoria caché. Permanecerá ahí entre usos normales. Como mínimo, los registros
modificados se graban en el disco cuando el último usuario lo cierra, mientras está en modalidad de
grabación diferida.

Eliminación de archivos de la memoria caché de disco


El administrador puede eliminar un archivo de la memoria caché de disco con el siguiente mandato:
DECATALOG.FILE.CACHE nombre_archivo

El mandato contiene el siguiente componente:


Componentes
Descripción
FILE nombre_archivo
Nombra el archivo que se va a eliminar de la memoria caché de disco.

El archivo se desecha y se elimina de la memoria caché cuando el último usuario actual cierra el archivo.

Inicio y detención del daemon de memoria caché


El administrador puede iniciar y detener el daemon de memoria caché asíncrono en segundo plano
(grabador).

Nota: Debe haber iniciado una sesión en la cuenta dshome. Consulte “Inicio de sesión en la cuenta
dshome” para obtener más información sobre cómo iniciar una sesión en la cuenta dshome.

El mandato es:
DAEMON.FILE.CACHE [[START x ] | STOP]

El mandato contiene los siguientes componentes:


Componentes
Descripción
START
Inicia el daemon de memoria caché asíncrono en segundo plano.
x Identifica el periodo de pausa entre exploraciones. x se expresa en unidades de 10 milisegundos.
STOP Detiene el daemon de memoria caché asíncrono en segundo plano.

Inicio de sesión en la cuenta dshome


El mandato CLEAR.FILE.CACHE y el mandato DAEMON.FILE.CACHE requieren que inicie una sesión
como administrador en la cuenta de inicio de IBM InfoSphere DataStage (dshome).

En UNIX:

Para iniciar una sesión en la cuenta de inicio de InfoSphere DataStage:


1. Inicie una sesión como dsadm.
2. Determine la vía de acceso de dshome:
cat /.dshome
3. Cambie de directorio a la vía de acceso especificada. Por ejemplo, si la vía de acceso es /u1/uv, el
mandato es:
cd /u1/uv
4. Inicie una sesión en la cuenta de inicio.

348 Guía del desarrollador de Server Job


bin/dssh

Ahora está en la cuenta de inicio de InfoSphere DataStage.

En Windows:

Para iniciar una sesión en la cuenta de inicio de InfoSphere DataStage:

En el indicador de mandatos, cambie al directorio del motor de servidor y emita el siguiente mandato:
C:\IBM\InformationServer\Server\DSEngine\bin\dssh

donde C:\IBM\InformationServer\Server\DSEngine es la ubicación del motor de servidor instalado.


Ahora está en la cuenta de inicio.

Ajuste de la memoria caché pública de enlaces y la memoria caché del


sistema
El administrador puede utilizar los siguientes elementos ajustables en el archivo uvconfig para ajustar el
rendimiento de la memoria caché de disco.
Elemento ajustable
Descripción
DISKCACHE
Especifica el estado del subsistema de memoria caché de disco. Este elemento ajustable debe tener
un valor positivo cuando utiliza la memoria caché pública de enlaces o la memoria caché del
sistema. Los valores válidos son los siguientes:
v -1, que significa ALLOW. La memoria caché de disco está inactiva. Los archivos abiertos en
modalidad de memoria caché de grabación o de sólo lectura se procesan como si se hubieran
abierto en modalidad de grabación/lectura. Éste es el valor predeterminado.
v 0, que significa REJECT. El subsistema de memoria caché de disco está inactivo. Los archivos
abiertos en modalidad de memoria caché de grabación o de sólo lectura producen un error.
v n. El subsistema de memoria caché de disco está activo. n representa el tamaño de la memoria
caché compartida de disco en megabytes. Se permiten valores del 1 al 512. La memoria caché
compartida está limitada a 512 mb en todas las plataformas, excepto Compaq Tru64, que tiene
un límite de 176 mb.
DCBLOCKSIZE
Especifica el tamaño de un almacenamiento intermedio de memoria caché de disco compartida en
unidades de 1K (1024 bytes). Los valores válidos son 4, 8, 16 y 32. 16 es el valor predeterminado.
DCMODULUS
Especifica el número de cadenas de almacenamiento intermedio de memoria caché de disco
compartida en las que se divide un archivo. Los valores válidos son 128, 256, 512 y 1024. 256 es el
valor predeterminado. Este elemento ajustable es específico de la memoria caché del sistema.
DCMAXPCT
Especifica el porcentaje del total de almacenamiento intermedio de memoria caché de disco
compartida que puede poseer un archivo. Los valores válidos son de 1 a 100. 80 es el valor
predeterminado. Este elemento ajustable es específico de la memoria caché del sistema.
DCFLUSHPCT
Especifica el porcentaje del total de almacenamiento intermedio de memoria caché de disco
compartida propiedad de un archivo que puede estar en un estado de grabación diferida antes de
desecharse en el disco. Los valores válidos son de 1 a 100. 80 es el valor predeterminado. Este
elemento ajustable es específico de la memoria caché del sistema.

Capítulo 9. Almacenamiento en la memoria caché de disco de la etapa Hashed File 349


DCCATALOGPCT
Especifica el porcentaje del total de almacenamiento intermedio de memoria caché de disco
compartida que pueden poseer los archivos de datos catalogados para la memoria caché de disco.
Los valores válidos son de 1 a 100. 50 es el valor predeterminado. Este elemento ajustable es
específico de la memoria caché del sistema.
DCWRITEDAEMON
Especifica el estado del daemon de grabación en segundo plano de la memoria caché de disco
compartida. Los valores válidos son los siguientes:
v 0 es el valor predeterminado e indica que el daemon de grabación en segundo plano está
inactivo.
n indica que el daemon de grabación está activo. n es la cantidad de tiempo que se detiene el
daemon de grabación entre dos grabaciones, expresada en unidades de 10 milisegundos. Este
elemento ajustable es específico de la memoria caché del sistema.

Utilización del símbolo de euro en los sistemas sin soporte


multilingüístico
Si desea incluir el símbolo del euro en los archivos hash en los sistemas sin soporte multilingüístico,
deberá realizar varios pasos para dar soporte al símbolo. Consulte la sección “Utilización del símbolo de
euro en los sistemas sin soporte multilingüístico” en la página 44 para obtener información.

Consideraciones sobre el rendimiento


Tenga en cuenta lo siguiente para mejorar el rendimiento de los trabajos.

Trabajo individual frente a múltiples trabajos

El almacenamiento en la memoria caché del sistema permite ejecutar simultáneamente varios trabajos o
etapas para compartir los mismos archivos del motor de servidor, ya sea como archivos de sólo lectura o
para grabar y actualizar archivos. El almacenamiento en la memoria caché del sistema no está diseñado
para utilizarse si sólo hay una etapa individual creando o leyendo el archivo.

Almacenamiento en la memoria caché de grabación diferida

Este tipo de almacenamiento en la memoria caché del sistema ofrece el máximo rendimiento, ya que se
difieren las grabaciones síncronas más costosas en el archivo de disco físico. A efectos de actualización
bajo demanda, no hay activo ningún daemon de caché de grabación aparte, y los bloques actualizados
sólo se graban en el disco cuando se excede la cuota de conjunto de bloques de un archivo o cuando se
ha cerrado la última referencia abierta al archivo. La actualización lenta es la actualización bajo demanda
aumentada por un daemon de grabador asíncrono aparte. El daemon de grabación no es necesario para
la actualización diferida. No obstante, cuando está activo, permite minimizar los límites de cuota de
conjunto de bloques y reducir la posibilidad de archivos dañados al mantener el archivo en un estado
más coherente.

Con el almacenamiento en la memoria caché de grabación diferida, los bloques diferidos reales de un
conjunto de bloques que se graban en un disco están determinados por un algoritmo de antigüedad de
utilizado menos recientemente. Aunque esta opción proporciona el máximo rendimiento general, si el
motor del servidor se cuelga, el archivo puede dañarse.

Almacenamiento en la memoria caché de grabación inmediata

Este tipo de almacenamiento en la memoria caché del sistema tiene un rendimiento más lento que el
almacenamiento en la memoria caché de grabación diferida porque las grabaciones en el archivo de disco

350 Guía del desarrollador de Server Job


físico se producen al mismo tiempo que se actualiza la memoria caché. Aunque esta opción reduce el
rendimiento, evita que se dañen los archivos lo máximo posible si se cuelga el motor del servidor.

Mejoras del rendimiento

Un conjunto de archivos de motor de servidor puede almacenarse en la memoria caché en segmentos de


memoria compartida de un tamaño determinado por el archivo uvconfig. Si una mayoría de los grupos
referenciados están en esta memoria caché dinámica, se mejora el rendimiento. Si se hace una referencia
aleatoria a todos los grupos de un archivo y no todos entran en la memoria caché de disco, el
rendimiento puede ser peor que si no se aplica ningún almacenamiento en la memoria caché. Asimismo,
si el sistema operativo de host tiene menos memoria física que el tamaño de la memoria caché de disco
configurada, el rendimiento se resiente.

El archivo uvconfig en el directorio de inicio de IBM InfoSphere DataStage tiene varios elementos
ajustables que se utilizan en la memoria caché de disco (consulte “Ajuste de la memoria caché pública de
enlaces y la memoria caché del sistema” en la página 349. Cualquier plataforma puede mantener un
subconjunto de un archivo o una tabla en la memoria caché con la liberación de los conjuntos de bloques
antiguos cuando se necesitan nuevos conjuntos de bloques. Cuando hay varios archivos de gran tamaño
en la memoria caché, sólo un pequeño subconjunto de los bloques de un archivo residirán en la memoria
caché, pero el administrador puede modificar los elementos ajustables para permitir el manejo eficaz de
un subconjunto pequeño. DCFLUSHPCT proporciona al administrador control sobre el algoritmo de
sustitución de conjuntos de bloques para evitar la inanición de sólo lectura. DCMAXPCT controla el
porcentaje máximo de la memoria caché que puede ocupar un archivo. La memoria caché de disco sabe
cuándo ningún proceso activo requiere acceso al bloque de un archivo y lo libera si es necesario.

El rendimiento óptimo se consigue cuando el tamaño de la memoria caché de disco compartida, que se
establece con el elemento ajustable DISKCACHE, se establece en un valor lo suficientemente alto para
contener todo el archivo o una gran proporción (90-95%) de los grupos referenciados. Si el tamaño de
DISKCACHE es inadecuadamente pequeño, se produce la hiperpaginación en la memoria caché de disco.

DCMODULUS tiene algún efecto en el tiempo de ejecución, especialmente para los archivos grandes.
Cuando este número disminuye, la longitud de las cadenas activas de los almacenamientos intermedios
de DCBLOCKSIZE aumenta, lo que supone un mayor tiempo para ejecutar una búsqueda secuencial de
una entrada. El establecimiento de DCMODULUS en 1024 es generalmente el óptimo para los archivos
grandes (de más de 75 mb). El inconveniente es que hay menos estructuras de archivo de memoria caché
de disco que entran en un almacenamiento intermedio de caché, lo que significa la eliminación de
algunos de la agrupación de almacenamientos intermedios disponibles.

El valor predeterminado de DCBLOCKSIZE es 16. Si es menor, la E/S física aumentará y las cadenas de
matrices tendrán una mayor longitud, lo que ralentiza el sistema. DCBLOCKSIZE debe ser mayor que 16
sólo si la plataforma puede manejar las solicitudes de E/S física ampliadas en una E/S en el subsistema
de disco. Una forma de reconocerlo es que la plataforma tenga matrices de discos.

Los bloques de memoria caché de disco se almacenan en n conjuntos de bloques (donde n se configura
como 4k, 8k, 16k o 32k, siendo 16k el valor predeterminado) para reducir el tiempo de búsqueda
secuencial y permitir la lectura previa de los bloques en el área del solicitado. Por este motivo, el tamaño
de separación de archivos está restringido a una potencia de 1024 bytes. Cada archivo será propietario de
m cadenas de conjuntos de bloques (donde m se configura como 64, 128, 256, 512 o 1024, siendo 256 el
valor predeterminado).

A continuación, se proporcionan ejemplos de valores ajustables de forma que un archivo individual se


mantiene en memoria con longitudes aceptables de cadena de conjuntos de bloques con referencia de
matriz que deben explorarse secuencialmente para encontrar un bloque.

Capítulo 9. Almacenamiento en la memoria caché de disco de la etapa Hashed File 351


Tabla 19. Valores de ejemplo
Longitud media de cadena
Tamaño de archivo DCBLOCKSIZE DCMODULUS de conjunto de bloques
32 mb 8k 128 32
32 mb 8k 256 16
64 mb 8k 256 32
64 mb 16k 256 16
160 mb 16k 256 40
320 mb 16k 512 40
1024 mb 16k 256 256
1024 mb 16k 512 128
1024 mb 16k 1024 64
1024 mb 32k 1024 32
2048 mb 32k 1024 64

Los archivos de tipo 30 son realmente dos archivos: uno para los grupos primarios y el otro para los
bloques de desbordamiento. Por lo tanto, los dos archivos deben considerarse cuando se establece
DCMAXPCT.

El valor de DCWRITEDAEMON determina la cantidad de tiempo que se detiene el daemon de grabación


entre dos grabaciones. En una plataforma de multiprocesador, el periodo de pausa del daemon de
grabación, que se especifica en DCWRITEDAEMON, puede ser muy bajo; en un procesador individual, el
valor debe ser 10 o superior.

352 Guía del desarrollador de Server Job


Accesibilidad de los productos
Puede obtener información sobre el estado de accesibilidad de los productos de IBM.

Los módulos y las interfaces de usuario de los productos de IBM InfoSphere Information Server no son
totalmente accesibles. El programa de instalación instala los siguientes módulos y componentes del
producto:
v IBM InfoSphere Business Glossary
v IBM InfoSphere Business Glossary Anywhere
v IBM InfoSphere DataStage
v IBM InfoSphere FastTrack
v IBM InfoSphere Information Analyzer
v IBM InfoSphere Information Services Director
v IBM InfoSphere Metadata Workbench
v IBM InfoSphere QualityStage

Para obtener información sobre el estado de accesibilidad de los productos de IBM, consulte la
información de accesibilidad de productos de IBM en http://www.ibm.com/able/product_accessibility/
index.html.

Documentación sobre accesibilidad

Se proporciona documentación accesible sobre los productos de InfoSphere Information Server en un


Information Center. El Information Center presenta la documentación en formato XHTML 1.0, que se
puede ver en la mayoría de navegadores web. El formato XHTML permite establecer propiedades de
visualización en el navegador. También permite utilizar lectores de pantalla y otras tecnologías de
asistencia para acceder a la documentación.

IBM y la accesibilidad

Consulte el IBM Human Ability and Accessibility Center para obtener más información sobre el
compromiso de IBM con respecto a la accesibilidad.

© Copyright IBM Corp. 1997, 2010 353


354 Guía del desarrollador de Server Job
Acceso a la documentación del producto
La documentación se proporciona en diversas ubicaciones y formatos, incluida la ayuda que se abre
directamente desde las interfaces de cliente del producto, en un Information Center (centro de
información) para toda la suite y en manuales en archivos PDF.

El Information Center se instala como un servicio común con IBM InfoSphere Information Server. El
Information Center contiene ayuda para la mayoría de las interfaces del producto, así como
documentación completa correspondiente a todos los módulos de producto de la suite. Puede abrir el
Information Center desde el producto instalado o bien desde un navegador Web.

Acceso al Information Center

Puede utilizar los métodos siguientes para abrir el Information Center instalado.
v Pulse el enlace Ayuda de la parte superior derecha de la interfaz de cliente.

Nota: Desde IBM InfoSphere FastTrack e IBM InfoSphere Information Server Manager, la opción
principal Ayuda abre un sistema de ayuda local. Seleccione Ayuda > Abrir Info Center para abrir el
Information Center completo de la suite.
v Pulse la tecla F1. Generalmente, la tecla F1 abre el tema que describe el contexto actual de la interfaz
de cliente.

Nota: La tecla F1 no funciona en clientes Web.


v Utilice un navegador web para acceder al Information Center instalado aunque no esté conectado al
producto. Especifique la dirección siguiente en un navegador web: http://
nombre_host:número_puerto/infocenter/topic/com.ibm.swg.im.iis.productization.iisinfsv.home.doc/ic-
homepage.html. El elemento nombre_host es el nombre del sistema de nivel de servicios en el que está
instalado Information Center, y número_puerto es el número de puerto de InfoSphere Information
Server. El número de puerto predeterminado es 9080. Por ejemplo, en un sistema Microsoft® Windows®
Server denominado iisdocs2, la dirección Web tendrá el formato siguiente: http://iisdocs2:9080/
infocenter/topic/com.ibm.swg.im.iis.productization.iisinfsv.nav.doc/dochome/iisinfsrv_home.html.

También encontrará un subconjunto del Information Center que se renueva periódicamente en el sitio
Web de IBM, en http://publib.boulder.ibm.com/infocenter/iisinfsv/v8r5/index.jsp.

Obtener documentación en formato PDF y en papel


v También puede disponer de manuales en archivos PDF mediante el instalador de software de
InfoSphere Information Server y el soporte de distribución. También encontrará un subconjunto de los
manuales en archivos PDF en línea que se renueva periódicamente en www.ibm.com/support/
docview.wss?rs=14&uid=swg27016910.
v También puede realizar pedidos de publicaciones de IBM en formato de copia en papel en línea o por
medio de su representante local de IBM. Para solicitar publicaciones en línea, vaya al Centro de
publicaciones de IBM en http://www.ibm.com/e-business/linkweb/publications/servlet/pbi.wss.

Facilitar comentarios sobre la documentación


Puede enviar sus comentarios sobre la documentación de los modos siguientes:
v Formulario de comentarios del lector en línea: www.ibm.com/software/data/rcf/
v Correo electrónico: comments@us.ibm.com

© Copyright IBM Corp. 1997, 2010 355


356 Guía del desarrollador de Server Job
Enlaces a sitios Web no IBM
Este Information Center puede suministrar enlaces o referencias a sitios Web y recursos que no son de
IBM.

IBM no ofrece representación, garantías ni contrae otros compromisos en relación a sitios Web no
pertenecientes a IBM o a recursos de terceros (incluido cualquier sitio Web de Lenovo) al que pueda
hacerse referencia en cualquier sitio de IBM, ser accesible o estar enlazado a él. Un enlace a un sitio Web
no IBM no implica que IBM se haga responsable del contenido o de la utilización de tal sitio Web o de su
propietario. Además, IBM no toma parte ni es responsable de ninguna transacción que el cliente pueda
establecer con terceros, aunque haya tenido conocimiento de ellos (o utilice un enlace con ellos) desde un
sitio de IBM. En consecuencia, el cliente tiene conocimiento y acepta que IBM no es responsable de la
disponibilidad de tales sitios o recursos externos, ni tampoco del contenido, servicios, productos u otros
materiales situados en dichos sitios o recursos o disponibles desde ellos.

Cuando acceda a un sitio Web no IBM, incluso a uno que pueda contener el logotipo de IBM, tenga en
cuenta que es independiente de IBM y que IBM no controla el contenido del mismo. Es responsabilidad
del cliente tomar precauciones para protegerse de los virus, gusanos, troyanos y otros programas
potencialmente destructivos y proteger la información según estime adecuado.

© Copyright IBM Corp. 1997, 2010 357


358 Guía del desarrollador de Server Job
Avisos y marcas registradas
La presente información se ha desarrollado para productos y servicios ofrecidos en Estados Unidos.

Avisos

Es posible que IBM no comercialice en otros países los productos, servicios o características que se
describen en este manual. Consulte al representante local de IBM para obtener información sobre los
productos y servicios que actualmente pueden adquirirse en su zona. Cualquier referencia a un producto,
programa o servicio de IBM no pretende afirmar ni implicar que sólo se pueda utilizar dicho producto,
programa o servicio de IBM. En su lugar se puede utilizar cualquier producto, programa o servicio
funcionalmente equivalente que no vulnere ninguno de los derechos de propiedad intelectual de IBM. Sin
embargo, es responsabilidad del usuario evaluar y verificar el funcionamiento de cualquier producto,
programa o servicio que no sea de IBM.

IBM puede tener patentes o solicitudes de patentes en tramitación que afecten al tema tratado en este
documento. La posesión de este documento no otorga ninguna licencia sobre dichas patentes. Puede
enviar consultas sobre licencias, por escrito, a la siguiente dirección:

IBM Director of Licensing


IBM Corporation
North Castle Drive
Armonk, NY 10504-1785 EE. UU.

Para formular consultas relacionadas con el juego de caracteres de doble byte (DBCS), póngase en
contacto con el departamento de la propiedad intelectual de IBM de su país o envíe las consultas, por
escrito, a la siguiente dirección:

Intellectual Property Licensing


Legal and Intellectual Property Law
IBM Japan Ltd.
1623-14, Shimotsuruma, Yamato-shi
Kanagawa 242-8502 Japón

El párrafo siguiente no es aplicable al Reino Unido ni a ningún país en donde tales disposiciones sean
incompatibles con la legislación local: INTERNATIONAL BUSINESS MACHINES CORPORATION
PROPORCIONA ESTA PUBLICACIÓN TAL CUAL, SIN GARANTÍA DE NINGUNA CLASE, NI
EXPLÍCITA NI IMPLÍCITA, INCLUIDAS, PERO SIN LIMITARSE A ELLAS, LAS GARANTÍAS
IMPLÍCITAS DE NO VULNERACIÓN DE DERECHOS, COMERCIALIZACIÓN O IDONEIDAD PARA
UN FIN DETERMINADO. Algunos estados no permiten la declaración de limitación de responsabilidad
de garantías expresas o implícitas en determinadas transacciones. Por consiguiente, es posible que esta
declaración no se aplique en su caso.

Esta información podría contener imprecisiones técnicas o errores tipográficos. La información de este
documento está sujeta a cambios periódicos; dichos cambios se incorporarán en nuevas ediciones de la
publicación. Es posible que IBM realice mejoras o efectúe cambios en el(los) producto(s) y/o el(los)
programa(s) descritos en esta publicación en cualquier momento sin previo aviso.

Las referencias hechas en esta publicación a sitios Web que no son de IBM se proporcionan sólo para la
comodidad del usuario y no constituyen un aval de esos sitios Web. La información contenida en estos
sitios Web no forma parte de la información del presente producto IBM, y el usuario es responsable de la
utilización de dichos sitios.

© Copyright IBM Corp. 1997, 2010 359


IBM puede utilizar o distribuir cualquier información que se le facilite de la manera que considere
adecuada, sin contraer por ello ninguna obligación con el remitente.

Los licenciatarios de este programa que deseen obtener información sobre él con el fin de habilitar: (i) el
intercambio de información entre programas creados de forma independiente y otros programas (incluido
éste) y (ii) el uso mutuo de la información intercambiada, deben ponerse en contacto con:

IBM Corporation
J46A/G4
555 Bailey Avenue
San José, CA 95141-1003 EE.UU.

Dicha información puede estar disponible, sujeta a los términos y condiciones apropiados, incluido en
algunos casos el pago de una tarifa.

El programa bajo licencia descrito en este documento y todo el material bajo licencia asociado a él los
proporciona IBM según los términos del Acuerdo de Cliente de IBM, el Acuerdo Internacional de
Programas Bajo Licencia de IBM o cualquier acuerdo equivalente entre el usuario e IBM.

Los datos de rendimiento contenidos en este documento se obtuvieron en un entorno controlado. Por
consiguiente, es posible que los resultados obtenidos en otros entornos operativos varíen de forma
significativa. Algunas mediciones pueden haberse realizado en sistemas experimentales y no es seguro
que estas mediciones sean las mismas en los sistemas disponibles comercialmente. Además, algunas
mediciones pueden haberse calculado mediante extrapolación. Los resultados reales pueden variar. Los
usuarios del presente manual deben verificar los datos aplicables para su entorno específico.

La información relacionada con productos ajenos a IBM se ha obtenido a partir de los proveedores de
dichos productos, los anuncios que han publicado u otras fuentes de dominio público. IBM no ha
probado dichos productos ni puede confirmar la precisión del rendimiento, la compatibilidad ni ninguna
otra afirmación sobre productos ajenos a IBM. Las preguntas sobre las prestaciones de productos que no
son de IBM deben dirigirse a los proveedores de esos productos.

Todas las declaraciones de intenciones de IBM están sujetas a cambio o cancelación sin previo aviso, y
sólo representan objetivos.

Esta información sólo tiene como objeto la planificación. La información de este documento está sujeta a
cambios antes de que los productos descritos estén disponibles.

Este manual contiene ejemplos de datos e informes que se utilizan en operaciones comerciales diarias.
Para ilustrarlos de la forma más completa posible, los ejemplos incluyen nombres de personas, empresas,
marcas y productos. Todos estos nombres son ficticios y cualquier similitud con nombres y direcciones
utilizados por una empresa real es totalmente fortuita.

LICENCIA DE COPYRIGHT:

Esta información contiene programas de aplicación de ejemplo en código fuente que ilustran técnicas de
programación en diferentes plataformas operativas. Puede copiar, modificar y distribuir estos programas
de ejemplo de cualquier forma, sin pagar a IBM, con la finalidad de desarrollar, utilizar o distribuir
programas de aplicación que se ajusten a la interfaz de programación de aplicaciones para la plataforma
operativa para la que se han escrito los programas de ejemplo. Estos ejemplos no se han probado
exhaustivamente bajo todas las condiciones. Por tanto, IBM no puede garantizar ni dar por sentada la
fiabilidad, la capacidad de mantenimiento ni el funcionamiento de dichos programas. Los programas de
ejemplo se proporcionan "tal como están", sin garantías de ningún tipo. IBM no se hace responsable de
los daños que se hayan podido causar debido al uso de los programas de ejemplo.

360 Guía del desarrollador de Server Job


Todas las copias o partes de estos programas de ejemplo, o cualquier trabajo derivado, deberán incluir un
aviso de copyright como el siguiente:

© (nombre de la empresa) (año). Partes de este código provienen de programas de ejemplo de IBM Corp.
© Copyright IBM Corp. _entrar el año o los años_. Reservados todos los derechos.

Si está visualizando esta información en copia software, es posible que las fotografías o las ilustraciones
en color no aparezcan.

Marcas registradas

IBM, el logotipo de IBM e ibm.com son marcas registradas de International Business Machines Corp. en
muchos países o regiones de alrededor del mundo. Otros nombres de productos y servicios pueden ser
marcas registradas de IBM u otras empresas. Encontrará una lista actualizada de las marcas registradas
de IBM en www.ibm.com/legal/copytrade.shtml.

Los términos siguientes son marcas registradas de otras compañías:

Adobe es una marca registrada de Adobe Systems Incorporated en los Estados Unidos y/o en otros
países.

IT Infrastructure Library es una marca registrada de Central Computer and Telecommunications Agency,
que ahora forma parte del departamento de comercio (Office of Government Commerce) del gobierno de
los Estados Unidos de América.

Intel, el logotipo de Intel, Intel Inside, el logotipo de Intel Inside, Intel Centrino, el logotipo de Intel
Centrino, Celeron, Intel Xeon, Intel SpeedStep, Itanium y Pentium son marcas registradas de Intel
Corporation o de sus subsidiarias en los Estados Unidos de América y en otros países.

Linux es una marca registrada de Linus Torvalds en los Estados Unidos y/o otros países.

Microsoft, Windows, Windows NT y el logotipo de Windows son marcas registradas de Microsoft


Corporation en los Estados Unidos y/o otros países.

ITIL es una marca registrada y una marca de comunidad registrada del departamento de comercio del
gobierno (Office of Government Commerce), y está registrada en la oficina de patentes y marcas
registradas (Patent and Trademark Office) de los Estados Unidos.

UNIX es una marca registrada de The Open Group en Estados Unidos y en otros países.

Cell Broadband Engine es una marca registrada de Sony Computer Entertainment, Inc. en los Estados
Unidos de América o en otros países y se utiliza con su licencia.

Java y todas las marcas basadas en Java son marcas registradas de Sun Microsystems, Inc. en los EE.UU.
y/o otros países.

El servicio postal de los Estados Unidos (United States Postal Service) es propietario de las siguientes
marcas registradas: CASS, CASS Certified, DPV, LACSLink, ZIP, ZIP + 4, ZIP Code, Post Office, Postal
Service, USPS y United States Postal Service. IBM Corporation tiene titularidad no exclusiva de licencias
de DPV y LACSLink de United States Postal Service.

Otros nombres de empresas, productos o servicios pueden ser marcas registradas o marcas de servicio de
otros.

Avisos y marcas registradas 361


362 Guía del desarrollador de Server Job
Cómo ponerse en contacto con IBM
Puede ponerse en contacto con IBM para obtener soporte, información del producto, de servicios de
software y otro tipo de información general. También puede enviar a IBM comentarios sobre los
productos y la documentación.

La tabla siguiente indica los recursos de soporte al cliente, servicios de software, formación e información
sobre productos y soluciones.
Tabla 20. Recursos IBM
Recurso Descripción y ubicación
Portal de soporte de IBM Puede personalizar la información de soporte eligiendo
los productos y temas que le interesen en
www.ibm.com/support/entry/portal/Software/
Information_Management/
InfoSphere_Information_Server
Servicios de software Puede buscar información sobre servicios de software, de
tecnologías de la información y de consultoría
empresarial en el sitio de soluciones:
www.ibm.com/businesssolutions.
Mi IBM Puede gestionar enlaces a sitios web de IBM y a
información que satisfaga sus necesidades específicas de
soporte técnico creando una cuenta en el sitio Mi IBM:
www.ibm.com/account/.
Formación y certificación Puede obtener información acerca de servicios de
formación técnica diseñados para personas, empresas y
organizaciones públicas para adquirir, mantener y
optimizar sus conocimientos de TI en
http://www.ibm.com/software/sw-training/
Representantes de IBM Puede ponerse en contacto con un representante de IBM
para obtener información acerca de las soluciones en
www.ibm.com/connect/ibm/us/en/

Envío de comentarios

La tabla siguiente describe cómo enviar a IBM comentarios sobre los productos y la documentación de
los mismos.
Tabla 21. Envío de comentarios a IBM
Tipo de comentario Acción
Comentarios sobre productos Puede proporcionar comentarios generales sobre
productos mediante la encuesta de usabilidad, en el sitio
web www.ibm.com/software/data/info/consumability-
survey.

© Copyright IBM Corp. 1997, 2010 363


Tabla 21. Envío de comentarios a IBM (continuación)
Tipo de comentario Acción
Comentarios sobre la documentación Pulse el enlace Comentarios de la parte superior derecha
de cualquier tema del Information Center para hacer
comentarios sobre Information Center. También puede
enviar sus comentarios sobre los manuales en archivos
PDF, Information Center o cualquier otra documentación
de los siguientes modos:
v Formulario de comentarios del lector en línea:
www.ibm.com/software/data/rcf/
v Correo electrónico: comments@us.ibm.com

364 Guía del desarrollador de Server Job


Índice
Caracteres almacenar en memoria caché de disco
(continuación)
Categoría Ordenación
definición 22
Especiales rendimiento del trabajo
almacenamiento en la memoria
Categoría Tipo C
definición 22
[ ] operador 168
caché de grabación diferida 350 categorías, consulte categorías de entorno
almacenamiento en la memoria local 21
caché de grabación categorías de entorno local
A inmediata 350 Clasificar 22
accesibilidad de los productos trabajo individual frente a Hora 21
accesibilidad 353 múltiples trabajos 350 Monetaria 21
acceso de archivo remoto 69 utilizando la memoria caché Numérico 21
AIX, requisitos de memoria caché de dinámica 351 Tipo C 22
disco 337 requisitos de AIX 337 columnas GROUP y OCCURS 36
almacenamiento en la memoria caché, secuencias de datos múltiples 336 columnas OCCURS y GROUP 36
consulte almacenar en memoria caché símbolo del euro 350 compilar
de disco 336 terminología 334 código en rutinas BASIC 141
almacenamiento en la memoria caché de tipos 336 resolución de problemas de
disco de archivo hash, consulte visión general 333 errores 132
almacenar en memoria caché de anteriores/posteriores, subrutinas trabajos 131
disco 333 crear 140 conductos con nombre 45
almacenamiento en la memoria caché del descripción 137 consideraciones sobre la fecha, etapas
sistema incorporadas 330 Complex Flat File 38
ajustar 349 archivos de texto convenciones
directrices 336 acceso a remotas 68 nacionales 20, 22
preparación 336, 338 fusionar 88, 95 convenciones nacionales 20, 22
utilizar 340 archivos estructurados jerárquicamente, correlaciones de juegos de caracteres,
almacenamiento en la memoria caché conversión a tablas relacionales 27, 38 definición
privada de enlaces archivos por lotes DOS, etapa etapa Command 62
directrices 336 Command 60 etapas Complex Flat File 29
preparación 336 ASCII de 7 bits 20 etapas Folder 38
utilizar 339 asistente para Importar definiciones de etapas Merge 89
almacenamiento en la memoria caché funciones de transformación 146 etapas Sequential File 45
pública de enlaces asistentes cuenta dshome, iniciar sesión 348
ajustar 349 Importar definiciones de funciones de
directrices 336 transformación 146
preparación 336, 338
utilizar 339
avisos legales 359 D
daemon de memoria caché,
almacenar en memoria caché de disco
iniciar/detener 348
ajustar 349
almacenamiento en la memoria caché
B definiciones de columna
barras de herramientas campos clave 58
del sistema 336, 340, 349
depurador 128 clave 57
almacenamiento en la memoria caché
Editor de transformador 109 elemento de datos 57, 58
privada de enlaces 336, 339
búsqueda de múltiples filas 119 factor de escala 57, 58
almacenamiento en la memoria caché
longitud 57, 58
pública de enlaces 336, 339, 349
nombre de columna 57, 58
archivos hash
alterar 341 C depurador
barra de herramientas 128
cambiar estado 346 campo clave 58
visión general 127
colocar en la memoria caché 347 carácter raíz 21
derivaciones, véase derivaciones de
crear 340, 341 caracteres
columna 115
eliminar de la memoria caché 348 almacenamiento 19
derivaciones de columna
obtener el estado 341 ASCII de 7 bits [siente
de salida, definir 115
cuenta dshome, iniciar sesión 348 caracteres] 20
editar varias 116
daemon de memoria caché, coma decimal 21
documentación del producto
iniciar/detener 348 caracteres de almacenamiento 19
acceso 355
eficacia de los procesos 336 Categoría de hora
DSSetDisableJobHandler function 212
funcionalidad 333 definición 21
DSSetDisableProjectHandler
mandatos de servidor 340 Categoría monetaria
function 213
preparación 336, 338 definición 21
Categoría numérica
definición 21

© Copyright IBM Corp. 1997, 2010 365


E etapas Aggregator (continuación)
separador General (continuación)
Etapas Hashed File
opciones de creación de archivo 42
Editor de expresiones 122 página Salidas 58 etapas InterProcess, véase etapas IPC 65
editor de transformador subrutinas anteriores y etapas IPC
área de enlaces 109 posteriores 56 enlace de entrada 68
Editor de transformador 108 visión general 55 enlace de salida 68
área de metadatos 109 Etapas Aggregator página Entradas 68
barra de herramientas 109 ordenar los datos de entrada 57 página Etapa 68
menús de atajos 110 etapas Complex Flat File página Salidas 68
ejemplos columnas GROUP y OCCURS 36 separador Columnas
columnas de giros 96 enlaces de salida 27, 30 página Entradas 68
funciones de transformación 331 funcionalidad 28 página Salidas 68
subrutinas anteriores y proceso de metadatos 35 separador General
posteriores 330 REDEFINES 37 página Entradas 68, 87
en memoria caché, archivos hash valores del campo Descripción 36 página Etapa 68, 86
alterar 341 Etapas Complex Flat File página Salidas 68, 88
cambiar estado 346 consideraciones sobre la fecha 38 separador Propiedades 68
colocar en la memoria caché de gestión de OCCURS paralelas 35 visión general 65
disco 347 página Etapa 29, 30 etapas Link Collector
crear 340, 341 página Salida 30, 37 enlaces de entrada 85
eliminar de la memoria caché de separador Columnas de origen 33 enlaces de salida 85
disco 348 separador Criterios de selección 37 página Entradas 85
obtener el estado 341 separador General página Etapa 83
enlaces de rechazo 111 página Salida 30, 33 página Salidas 85
entornos locales separador Seleccionar columnas 36 para optimizar el rendimiento de los
visión general 20 separador Soporte trabajos 83
equijoins 111 multilingüístico 29 separador Columnas
errores terminología 28 página Entradas 85
compilación 132 visión general 27 página Salidas 85
etapa Command etapas Folder separador General
enlace de entrada 60 página Entradas 39 página Entradas 85
enlace de salida 60 página Etapa 38 página Etapa 83, 84
funcionalidad 60 página Salidas 39 página Salidas 85
página Entrada 61, 63 separador Columnas separador Propiedades 84
página Etapa 61 página Entradas 39 subrutinas anteriores y
página Salida 61, 64 página Salidas 39 posteriores 84
programas BASIC 64 separador General 38 visión general 83
separador Columnas separador Propiedades 39 Etapas Link Collector
página Entrada 63 separador Soporte para optimizar el rendimiento de los
página Salida 64 multilingüístico 38 trabajos 9
separador General visión general 38 etapas Link Partitioner
página Entrada 63 etapas FTP Plug-in enlace de entrada 85
página Etapa 61, 62 enlaces de entrada 69 enlaces de salida 85
página Salida 64 enlaces de salida 69 Página Entradas 87
separador Soporte funcionalidad 69 página Etapa 86
multilingüístico 61, 62 propiedades 70, 82 página Salidas 88
terminología 61 representación de datos 82, 83 para optimizar el rendimiento de los
visión general 60 terminología 70 trabajos 9, 85
Etapa Command visión general 68 separador Columnas
mandato dsjob 64 etapas Hashed File página Entradas 87
mandatos TCL 64 enlaces de entrada 40 página Salidas 88
página Entrada 63 enlaces de salida 40 separador Propiedades 87
utilizar mandatos 64 página Entradas 41 subrutinas anteriores y
etapas página Etapa 40 posteriores 87
incorporadas 1 página Salidas 42 visión general 85
suplementarias 1, 2 separador Columnas etapas Merge
etapas Aggregator página Entradas 41 enlaces de salida 88
enlace de entrada 55 página Salidas 43 funcionalidad 88
enlaces de salida 56 separador General página Etapa 89, 90
Página Entradas 56 página Entradas 41 página Salida 90, 95
página Etapa 56 página Etapa 40 separador Correlación 94
página Salidas 58 página Salidas 43 separador General
separador Columnas separador Selección 43 página Etapa 89
página Entradas 57 símbolo del euro 44 página Salida 90, 91
página Salidas 58 vía de acceso de directorio 40 separador Propiedades de archivo de
separador General visión general 40 entrada 91, 94
página Entradas 57
página Etapa 56

366 Guía del desarrollador de Server Job


etapas Merge (continuación) etapas Sequential File (continuación) función ByteLen 174
separador Columnas de primer separador Formato función ByteType 174
archivo 92, 94 página Entradas 46 función ByteVal 175
separador Columnas de segundo página Salidas 48 función Cats 177
archivo 92, 94 separador General función Char 178
separador Formato de primer página Entradas 46 función Checksum 178, 184
archivo 91, 92 página Etapa 45 función Col1 179
separador Formato de segundo página Salidas 48 función Col2 180
archivo 91, 92 separador Soporte función Compare 182
separador Soporte multilingüístico 45 función Convert 183
multilingüístico 89 terminadores de línea 45 función Cos 274
tamaño de archivo de entrada, visión general 44 función CosH 274
ajustar 90 etapas Sort función Count 184
tareas necesarias 88 enlace de salida 104 función DCount 185
visión general 2, 88 funcionalidad 104 función de fecha 185
etapas Pivot mejorar rendimiento 104, 105 función Div 188
ejemplos 96 propiedades configurables 105 función DownCase 188
enlaces de salida 97 Etapas Sort función DQuote 188
funcionalidad 96 criterios de ordenación 105, 106 función DSDetachJob 190
página Entradas 97 enlace de entrada 104 función DSGetCustInfo 191
página Salidas 99 propiedades 106, 108 función DSGetIPCPageProps 206
separador Columnas propiedades configurables 104 función DSGetJobInfo 191
página Entradas 97 visión general 103 función DSGetJobMetaBag 194
página Salidas 97 etapas suplementarias 1, 2 función DSGetLinkInfo 195
visión general 2, 95 etapas Transformer función DSGetLinkMetaData 196
etapas Row Merger conceptos básicos 110 función DSGetLogEntry 197
enlace de entrada 99 edición 112 función DSGetLogEventIds 198
enlace de salida 99 Editor de expresiones 122 función DSGetLogSummary 198, 199
funcionalidad 99 enlaces de entrada 110 función DSGetNewestLogId 199, 200
página Entrada 99, 100 orden de enlaces 121 función DSGetParamInfo 200
página Etapa 99 página Entradas 126 función DSGetProjectInfo 202
página Salida 101 página Etapa 125 función DSGetStageInfo 202
Separador Columnas página Salidas 126 función DSGetStageLinks 204
página Entrada 100 propiedades 125 función DSGetStagesOfType 205
página Salida 101 rechazos 120 función DSGetStageTypes 205
separador Formato 100 restricciones 120 función DSGetVarInfo 205
separador General subrutinas anteriores y función DSLogEvent 207
página Entrada 99 posteriores 119 función DSLogFatal 207
página Etapa 99 varias derivaciones 116 función DSLogInfo 208
Separador General visión general 108 función DSLogWarn 208
página Salida 101 Etapas Transformer función DSSetGenerateOpMetaData 213
visión general 99 enlaces de salida 111 función DSSetJobLimit 213, 214
etapas Row Splitter variables de la etapa local 121 función DSSetParam 214
enlace de entrada 101 expresión de formato 226 función DSStopJob 215
enlace de salida 101 expresiones función DSTransformError 216
funcionalidad 101 clave de columna de entrada 118 función Dtx 218
página Entrada 102 definición 137 función Ebcdic 219
página Etapa 101 edición 116, 122 función Ereplace 221
página Salida 102, 103 validación 125 función Exchange 222
Separador Columnas expresiones de clave, columna de función Exp 222
página Entrada 102 entrada 118 función Field 223
página Salida 103 función FieldStore 224
separador Formato 102, 103 Función FIX 225
separador General
página Entrada 102
F función Fmt 225
función FmtDP 230
función ACos 274
página Etapa 101 función Fold 230
función Alpha 170
página Salida 102 función FoldDP 231
función Ascii 171
visión general 101 función GetLocale 234
función ASin 274
etapas Sequential File función Iconv 236
función ATan 274
enlaces de entrada 44 función Index 244
función BitAnd 172
enlaces de salida 44 función InMat 244
función BitNot 172
página Entradas 46 función INSERT
función BitOr 172
página Etapa 45 y sentencia LOCATE 248
función BitReset 172
página Salidas 48 función Int 245
función BitSet 172
separador Columnas función Left 246
función BitTest 172
página Entradas 47 función Len 246
función BitXOr 172
página Salidas 49 función LenDP 246
función Byte 174

Índice 367
función Ln 247
función MatchField 251
M recuadro de diálogo Seleccionar desde
servidor 89, 140
función Mod 252 mandato dsjob recuadro de diálogo Sustitución de
función Neg 253 utilizar en etapa Command 64 expresiones 116
función Not 253 mandatos recuadros de diálogo
función Num 254 externo 2, 60, 65 Buscar 142
función Oconv 254 mandatos de servidor Buscar y sustituir 113
función Pwr 264 almacenar en memoria caché de edición de metadatos de columna 33
función REAL 266 disco 340 Guardar definición de tabla 93
función Right 267 mandatos externos, ejecutar 2, 60, 65 Opciones de creación de archivo 42
función Rnd 268 mandatos TCL, etapa Command 64 Rutina de servidor 138
función Seq 268 marcas registradas Seleccionar desde servidor 89
función SetLocale 268 lista de 359 Sustitución de expresiones 116
función Sin 274 menús de atajos en el Editor de recurso de coincidencia automática de
función SinH 274 transformador 110 columnas 115
función Soundex 270 múltiples filas, búsqueda 119 REDEFINES 37
función Space 270 reglas de prioridad, programación 137
función Sqrt 271 rendimiento
función SQuote 271 N almacenar en memoria caché de
función Status 271 Navegador de datos 30, 42, 48 disco 350, 352
función Str 272 nombre de rutina 138 estadísticas 10
función Tan 274 número de versión, rutina BASIC 138 etapa Sort 104, 105
función TanH 274 trabajo 5
función Time 273 representación de datos, etapas FTP
función TimeDate 274
función Trim 276
O Plug-in 82, 83
representación de datos ASCII, etapas
función TrimB 277 OCCURS paralelas 35 FTP Plug-in 82
función TrimF 277 operador If...Then...Else 244 representación de datos binaria, etapas
función UniChar 277 operadores de coincidencia de FTP Plug-in 82, 83
función UniSeq 277 patrón 263 restricciones 120
función UpCase 278 rutinas
función Xtd 281 consulte también rutinas BASIC 135
funciones ActiveX (OLE) P crear 135
funciones de programación 136, 139 paquetes de InfoSphere DataStage 2 probar 142
importación 146 programa de copia en masa, véase subrutinas anteriores y
funciones Bit 172 programa de utilidad BCP 1 posteriores 330
funciones de transformación programa de utilidad BCP (Programa de tipos 135
crear 140 copia en masa) rutinas BASIC
ejemplos 331 descripción 1 cómo guardar código 141
funciones orientadas a los bytes 173 programar en InfoSphere DataStage 135 copia 143
funciones trigonométricas 274 programas BASIC, etapa Command 64 crear 135, 140
punto de código 19 edición 143
puntos de interrupción 127 entrada de código 140
G name 138
número de versión 138
giros
columnas 95, 99 R probar 142
tipo 138
definición 95 recuadro de diálogo Buscar 142 visualizar 143
ejemplos 96 recuadro de diálogo Buscar y rutinas incorporadas 330
guardar código en rutinas BASIC 141 sustituir 113
recuadro de diálogo Editar metadatos de
columna 33
I recuadro de diálogo Examinar, véase S
recuadro de diálogo Seleccionar desde scripts Perl, etapa Command 60
importación
servidor 89 scripts UNIX, etapa Command 60
funciones ActiveX (OLE)
recuadro de diálogo Guardar definición secuencias de datos múltiples, almacenar
externas 146
de tabla 93 en memoria caché de disco 336
InfoSphere DataStage, programar en 135
recuadro de diálogo Opciones de creación sentencia * 169
de archivo 42 sentencia $Define 166
recuadro de diálogo Rutina sentencia $Include 168
J página Creador 138 sentencia $Undefine 168
juegos de caracteres 19 Página de códigos 139 sentencia Call 175
correlación entre interno y Página Dependencias 139 sentencia Case 176
externo 19 página General 138 sentencia CloseSeq 179
puntos de código 19 utilizar Buscar 142 sentencia Common 181
juegos de caracteres externos 19 utilizar Sustituir 142 sentencia Deffun 186
juegos de caracteres internos 19 recuadro de diálogo Rutina de sentencia Dimension 187
servidor 138 sentencia End 219

368 Guía del desarrollador de Server Job


sentencia Equate 220
sentencia Function 232
T
sentencia GoSub 234 tablas de correlación 19
sentencia LOCATE 247 terminadores de línea 45
sentencia Mat 250 terminadores de línea de UNIX 45
sentencia Nap 252 terminadores de línea de Windows 45
sentencia Null 253 territorio 21
sentencia OpenSeq 262 trabajos
sentencia Randomize 264 compilar 131
sentencia ReadSeq 265 ejecutable 127
sentencia Return 266 optimizar el rendimiento 5
sentencia Return (valor) 267 transformaciones
sentencia Sleep 269 personalizadas, definir 144
sentencia Subroutine 273
sentencia WEOFSeq 278
sentencia WriteSeq 279 U
sentencia WriteSeqF 280 Unicode
sentencias $IfDef y $IfNDef 167 estándar 19
sentencias de asignación 171 visión general 19
sentencias For...Next 231
sentencias If...Else 241
sentencias If...Then 243
sentencias If...Then...Else 242
V
sentencias Loop...Repeat 249 valores nulos 57, 58
sentencias On...GoSub 260 variables de la etapa 121
sentencias On...GoTo 261 variables de la etapa local 121
servicios de software Ventana de depuración 128
contactar 363 visión general
servidor telnet, etapas FTP Plug-in 70 de entornos locales [visión general
símbolo del euro, utilizar 44, 350 entornos locales] 20
sitios Web de Unicode[visión general
no IBM 357 Unicode] 19
sitios Web no IBM
enlaces a 357
soporte
cliente 363
soporte al cliente
contactar 363
SQL
factor de escala de datos 57, 58
precisión de los datos 57, 58
tipo de datos 57, 58
visualizar caracteres 57, 58
subrutina DSExecute 190
subrutina DSSetUserStatus 215
subrutinas anteriores a la etapa
etapas Transformer 119
subrutinas anteriores a la etapa, definir
etapas Aggregator 56
etapas Link Collector 84
etapas Link Partitioner 87
etapas Transformer 112
subrutinas anteriores y posteriores
crear 140
descripción 137
incorporadas 330
subrutinas posteriores a la etapa
etapas Transformer 119
subrutinas posteriores a la etapa, definir
etapas Aggregator 56
etapas Link Collector 84
etapas Link Partitioner 87
etapas Transformer 112
supervisor de rendimiento 132

Índice 369
370 Guía del desarrollador de Server Job


Impreso en España

SC11-7827-03
Spine information:

IBM InfoSphere DataStage Versión 8 Release 5 Guía del desarrollador de Server Job


Вам также может понравиться