CEL (Content Expression Language)

El CEL (Content Expression Language) de RICOH ProcessDirector permite definir expresiones para especificar el contenido y la colocación de las mejoras (códigos de barras, texto y áreas ocultas) en documentos de archivos AFP. Si tiene la característica Mecanismo de inserción, el CEL permite definir expresiones en archivos de reglas de inserción que graban archivos de control de inserción y analizan e interpretan archivos de resultados de inserción.

Operadores

En esta tabla se muestra el orden de prioridad de los operadores, de mayor a menor.

Nombre del operador Descripción
( ) Delimitador del parámetro de función
( ) Agrupación
+, - Unario
*, /, % Multiplicar, dividir, módulo
+, - Adición, sustracción
==, !=, >, >=, <, <= Relacional
(implícito) Concatenación

Ejemplo:f(3+x)*5 es f(3+x) multiplicado por 5.

Idioma

Patrón Ejemplo de plantilla Ejemplo real Resultado
concatenación 'serie1' 'serie2' 'a' func 'b' aVARb if func='VAR'
expresiones relacionales func1 [operador_relacional] func2 func1 > func2 True si func1=5 y func2=1
Condición or or(expr1,expr2,....) or(a100,a==0,b==1) True si cualquiera de las expresiones se evalúa en true
Condición and and(expr1,expr2,...) y(a>3,a<10) True si cualquiera de las expresiones se evalúa en true
Condición not not(expr1) not(a==b) True si todas las expresiones se evalúan como false
decisión if(expresión_relacional,expr_true,expr_false) if(av,1,0) Si la expresión relacional es cierta, el valor se establece en trueexpr. Si la expresión relacional es falsa, el valor se establece en falseexpr.
decisión if(valor,expr_true,expr_false) if(func2,'true','false') Si func2 tiene un valor numérico distinto de 0 o un valor de serie distinto a una serie vacía, el literal de serie es true; de lo contrario, es false.

Sentencias equivalentes

Base Equivalente Comentarios
a a() Las variables son funciones sin ().
'*' a '*'a() La concatenación no requiere espacios entre entradas de datos y la función a se puede representar de cualquier forma.

Definición de lenguaje EBNF

En este EBNF ((Extended Backus-Naur Form), se representa una expresión CEL mediante la producción expr. Las operaciones relaciones y numéricas se comportan como sus equivalentes en lenguaje C. Las expresiones consecutivas se unen para generar un resultado.

expr = "(", expr, ")» | concatenación | expr_num | expr_rel | ("+" | "-"), expr | llamada_func | serie| número;concatenación = expr, expr;expr_num = expr, ("+" | "-" | "*" | "/" | "%"), expr;expr_rel = expr, ("==" | "!=" | "<" | ">" | "<=" | ">="), expr;llamada_func = identificador, [ "(", parámetros, ")" ];parámetros = expr, { ",", expr };identificador = (alfab | "_"), { (alfab | "_" | dígito ) };serie = "'", (* secuencia de caracteres, con escapes \\ estándar *), "'";número = (dígito { dígito }) | ({ dígito } . {dígito});

Nota: No hay variables, sólo llamadas a función; una llamada a función sin una especificación de parámetro tiene el mismo aspecto que una variable y se comporta exactamente de la misma manera.

Funciones de contexto incorporadas

Nombre de la función Sintaxis Descripción
substr substr(f,inicio [,longitud]) inicio es una posición desde el final de la cadena. inicio está basado en cero. inicio puede ser negativo.
trim trim(serie [, carParaElim]) Elimina los espacios en blanco finales (o la lista de caracteres especificados en charsToTrim) situados a la izquierda y a la derecha de la serie.
rtrim rtrim(serie [, carParaElim]) Elimina los espacios en blanco (o la lista de caracteres especificados en charsToTrim) situados a la derecha de la serie.
ltrim ltrim(serie [, carParaElim]) Elimina los espacios en blanco (o la lista de caracteres especificados en charsToTrim) situados a la izquierda de la serie.
indexof indexof(serie, substr [, inicio ]) Devuelve la ubicación de índice de inicio de la subserie dentro de la serie. Si no se encuentra substr, se devuelve -1.
fmt fmt(serieFormato [,valores]... ) Formatea los valores utilizando serieFormato.
tr tr(serie, carDesde [,carHasta]) Convierte los caracteres que coinciden con carDesde de la serie con los carHasta correspondientes. Si el carácter carDesde no tiene un carácter correspondiente en carHasta (coincidencia de posición), fromChar se elimina de la serie de entrada. Si carHasta se omite, todos los caracteres que se muestran en carDesde se eliminan en el valor devuelto.
bandeja bin(serie [, TrueChar]) Utilizando TrueChar como bits de activación de la serie, la serie de entrada se convierte en un número. Si se omite trueChar, "1" es un bit de activación.
fmtbase fmtbase(valor, númCar [, serieBase ]) Si se omite baseString, se asume que es "0123456789ABCDEF", lo que devuelve los numChars que se encuentran más a la derecha tras convertir el valor en la base representada por baseString. baseString puede ser cualquier lista de caracteres, suponiendo que el carácter que se encuentra más a la izquierda representa cero y el que está más a la derecha representa el valor más alto del sistema básico en que se está convirtiendo.
exists =[valor] Se evalúa en true si el valor se evalúa en true. (Esta función es equivalente a la función defined).
definición =[valor] Se evalúa en true si el valor se evalúa en true. Si el valor es un nombre de propiedad de RICOH ProcessDirector, esta función devuelve true si la propiedad está definida en la base de datos. Si una propiedad está definida en la base de datos, puede referirse a ella en otras funciones CEL.
len len(serie) Devuelve el número de caracteres de la serie de entrada.
nil nil Devuelve un valor que puede usar en las funciones CEL para representar un valor nulo.
aggr [aggr=sum] [aggr=max] [aggr=min] Devuelve el valor de la suma, el valor máximo o el valor mínimo de una expresión (expr) evaluada con respecto a todos los documentos del trabajo. Si tiene la característica Mecanismo de inserción, puede utilizarla en el archivo de reglas para el registro de cabecera del archivo de control de inserción.

Funciones de contexto de registro

Nombre de la función Sintaxis Descripción
nombre_campo nombre_campo o nombre_campo() El valor del campo del registro actual en el contexto.
recnum recnum o recnum() El número de registro del registro actual que se utiliza en el contexto.

Funciones de contexto de almacenamiento en memoria caché de registro

Nombre de la función Sintaxis Descripción
nombre_campo nombre_campo o nombre_campo(desplazamiento) Si desplazamiento es 0 o falta, el valor del campo para el registro actual en el contexto. Si desplazamiento es un número positivo, el valor del campo de desplazamiento de registro delante. Si desplazamiento es un número negativo, el valor del campo para el registro desplazamiento detrás. El número máximo de registros almacenados en caché actualmente es 10. El número de registros almacenados en caché previamente puede ser cualquier valor y se determina de forma dinámica durante el procesamiento.
recnum recnum o recnum() El número de registro del registro actual que se utiliza en el contexto.

Ejemplos

Expresión Explicación
if(or(a100,a==0),1,0) Si el valor de a es mayor que 100 o igual a 0, esta expresión se evalúa en 1; de lo contrario, se evalúa en 0.
if(and(a>3,a<10),1,0) Si el valor de a es mayor que 3 y menor que 10, esta expresión se evalúa en 1; de lo contrario, se evalúa en 0.
if(fld,fld,'') Trata un valor que falta como una serie vacía; de lo contrario, trata el valor que falta como no definido, lo que es distinto que un valor en blanco.
fmtbase(if(output_bin=='2',1,0) + if(output_bin=='3',2,0) + if(meter == '1', 4,0) , 1) Devuelve un número hexadecimal, donde el bit de orden inferior (desde la derecha) indica si output_bin está establecido en 2, el segundo bit indica si output_bin está establecido en 3 y el tercer bit indica si meter está establecido en 1.
fmtbase(if(meter=='2',1,0) + if(substr(mch_isrt_bins,0,1)=='Y',2,0) + if(substr(mch_isrt_bins,1,1)=='Y',4,0) , 1 ) Devuelve un número hexadecimal, donde el bit de orden inferior (desde la derecha) indica si meter está establecido en 2, el segundo bit indica si el primer carácter de mch_isrt_bins está establecido en 'Y' y el tercer bit indica si el segundo carácter de mch_isrt_bins está establecido en 'Y'.
fmtbase(63,2,"0123456789ABCDFGHJKLMNPQRSTVWXYZ") Convierte 63 a "1Z". Se puede utilizar cualquier serie como la base.
tr('abc', 'b') Elimina todos los caracteres 'b'.
tr('00101', '01', 'NY') Convierte '0' a 'N' y '1' a 'Y'. Resultados en 'NNYNY'.
tr('00101', '0123456789Y', 'YYYYYYYYYYN') == 'YYYYY' Se evalúa en true si todos los caracteres de '00101' son dígitos. '00101' se puede sustituir por un valor de función de 5 caracteres.
len(tr('00101','0')) Se evalúa en 2. Elimina todos los '0' de la serie de entrada y devuelve la longitud de los caracteres restantes. Cuenta de forma efectiva el número de '1' en la serie de entrada.
[expr=Doc.TotalSheets] [aggr=sum] Devuelve la suma de todos los valores de la propiedad Doc.TotalSheets de todos los documentos del trabajo.
[expr=Doc.TotalSheets] [aggr=max] Devuelve el valor máximo de la propiedad Doc.TotalSheets de todos los documentos del trabajo.
[expr=Doc.TotalSheets] [aggr=min] Devuelve el valor mínimo de la propiedad Doc.TotalSheets de todos los documentos del trabajo.
[expr=recnum>1] Ignorar la primera línea del archivo. (leer solo registros de número mayor que 1).