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 [operador_relacional] 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,...) | 5 1.1 5 A | 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). |