Manual de eBDML

Anuncio
Manual de eBDML
Versión 3.5
Autor: Carlos Juan
Última Revisión: 01/02/2010
1. Introducción
1.1. ¿Que es eBDML?
7
1.2. Usos de eBDML
8
2. Variables en eBDML
2.1. Tipos de variables
11
2.2. Estructuras de datos. ARRAY vs HASH
12
3. Instrucciones eBDML
3.1. Declaración de Variables
13
3.1.1. eBD:STRICT
13
3.1.2. eBD:VAR
13
3.1.3. eBD:SET
13
3.1.4. eBD:OUT
14
3.1.5. eBD:ARGS
14
3.1.6. eBD:SYNCHRONIZE
14
3.2. Tipos complejos de datos
16
3.2.1. eBD:PUSH
16
3.2.2. eBD:POP
16
3.2.3. eBD:SHIFT
16
3.2.4. eBD:UNSHIFT
16
3.2.5. eBD:SORT
17
3.2.6. eBD:INDEXOF
17
3.2.7. eBD:KEYS
18
3.2.8. eBD:JOIN
18
3.2.9. eBD:SPLIT
18
3.3. Enlaces y encriptación
19
3.3.1. eBD:ENCRYPT
19
3.3.2. eBD:LINKTO
19
3.3.3. eBD:DECRYPT
20
3.3.4. eBD:REDIRECT
20
Manual de eBDML
2
3.4. Acceso a Base de Datos
21
3.4.1. eBD:QUERY
21
3.4.2. eBD:FETCHROW
21
3.4.3. eBD:INSERT
21
3.4.4. eBD:UPDATE
22
3.4.5. eBD:DELETE
22
3.4.6. eBD:QUOTE
22
3.4.7. eBD:EXECDATASOURCE
23
3.4.8. eBD:XQUERY
23
3.4.9. eBD:TRANSACTION
24
3.4.10. eBD:COMMIT
24
3.4.11. eBD:ROLLBACK
25
3.5. Control de Flujo
26
3.5.1. eBD:RETURN
26
3.5.2. eBD:BREAK
26
3.5.3. eBD:FOREACH
26
3.5.4. eBD:IF
27
3.5.5. eBD:WHILE
27
3.5.6. eBD:USE
28
3.5.7. eBD:CALL
28
3.5.8. eBD:FORK
28
3.5.9. eBD:CACHE
29
3.5.10. eBD:CLEARCACHE
29
3.5.11. eBD:INCLUDE
29
3.6. Integración y Comunicación
31
3.6.1. eBD:SENDMAIL
31
3.6.2. eBD:SENDSMS
31
3.6.3. eBD:BODY
32
3.6.4. eBD:ATTACH
32
3.6.5. eBD:HTTPGET
32
Manual de eBDML
3
3.6.6. eBD:HTTPPOST
33
3.6.7. eBD:WS
33
3.6.8. eBD:XMLPARSE
34
3.6.9. eBD:EXECPROCESS
34
3.6.10. eBD:EXECTASK
35
3.6.11. eBD:FTPCLOSE
35
3.6.12. eBD:FTPCWD
35
3.6.13. eBD:FTPDELETE
35
3.6.14. eBD:FTPGET
36
3.6.15. eBD:FTPLOGIN
36
3.6.16. eBD:FTPLS
36
3.6.17. eBD:FTPMKDIR
37
3.6.18. eBD:FTPPUT
38
3.6.19. eBD:FTPPWD
38
3.6.20. eBD:FTPRENAME
38
3.6.21. eBD:FTPRMDIR
38
3.6.22. eBD:FTPSIZE
39
3.7. Manipulación de datos
40
3.7.1. eBD:REPLACE
40
3.7.2. eBD:LENGTH
40
3.7.3. eBD:UNICODE
40
3.7.4. eBD:HTMLENCODE
41
3.7.5. eBD:HTMLDECODE
41
3.7.6. eBD:ENCODE
41
3.7.7. eBD:DECODE
42
3.7.8. eBD:URIESCAPE
42
3.7.9. eBD:URIUNESCAPE
42
3.7.10. eBD:SERIALIZE
43
3.7.11. eBD:DESERIALIZE
43
3.8. Manipulación de ficheros
Manual de eBDML
44
4
3.8.1. eBD:TMPFILE
44
3.8.2. eBD:READ
44
3.8.3. eBD:READLINE
45
3.8.4. eBD:WRITE
45
3.8.5. eBD:SEEK
45
3.8.6. eBD:XSLTPROC
45
3.8.7. eBD:EXTRACT
46
3.9. Manipulación de Imágenes
47
3.9.1. eBD:IMGCREATE
47
3.9.2. eBD:IMGINFO
47
3.9.3. eBD:IMGCOLOR
47
3.9.4. eBD:IMGDRAW
48
3.9.5. eBD:IMGTRANSFORM
49
3.9.6. eBD:IMGCOPY
50
3.9.7. eBD:IMGFILTER
50
3.9.8. eBD:IMGGRAPH
51
3.9.9. eBD:IMGSAVE
54
3.10. Acceso a buzones IMAP
55
3.10.1. eBD:IMAP
55
3.10.2. eBD:IMAP_COPY
55
3.10.3. eBD:IMAP_CREATE
55
3.10.4. eBD:IMAP_DELETE
55
3.10.5. eBD:IMAP_GET
56
3.10.6. eBD:IMAP_MAILBOXES
56
3.10.7. eBD:IMAP_RENAME
57
3.10.8. eBD:IMAP_LOGOUT
57
3.10.9. eBD:IMAP_FLAGS
57
3.10.10. eBD:IMAP_STATUS
58
3.11. Varios
3.11.1. eBD:LOGIN
Manual de eBDML
59
59
5
3.11.2. eBD:FORCELOGIN
59
3.11.3. eBD:LOGOUT
59
3.11.4. eBD:INFOUSER
59
3.11.5. eBD:INFOFILE
60
3.11.6. eBD:FILEPATH
61
3.11.7. eBD:DAVPATH
61
3.11.8. eBD:WARN
61
3.11.9. eBD:BR
62
3.11.10. eBD:EVAL
62
3.11.11. eBD:CODE
62
3.11.12. eBD:DOC
63
4. Consideraciones Generales
4.1. Tipos de variables
64
4.2. Expresiones
66
4.3. Referencias y estructuras de datos
68
4.4. Varios
70
5. Ejemplo
5.1. Resumen de un pedido
72
Anexos.
Anexo A. Funciones Internas (#)
74
Anexo B. Funciones para Ajax (eBDSection)
84
Manual de eBDML
6
1. INTRODUCCIÓN
1. Introducción
1.1. ¿Que es eBDML?
eBDML es el lenguaje de programación propio de eBD, que permite la programación de código ejecutable en el
servidor. Con eBDML se puede modificar el comportamiento de las páginas, definir cabeceras personalizadas,
crear plantillas y funciones genéricas, programar eventos de la base de datos, webservices, etc...
eBDML está basado en XML, de forma que sus instrucciones están formadas por tags (delimitadas con
caracteres < y >). Todas las instrucciones de eBDML empiezan por "eBD:" y tanto el nombre como los atributos
son case-insensitive, por lo que <eBD:SET VAR="a" value="1"/> es exactamente lo mismo que <ebd:set
var="a" vAlue="1"/>.
eBDML incorpora instrucciones propias de un lenguaje de programación de alto nivel, entre las cuales
destacan:
• Control de flujo como <eBD:IF>, <eBD:WHILE>, <eBD:FOREACH>, etc...
• Acceso a variables locales, globales y temporales, como <eBD:VAR> o <eBD:SET>
• Tipos de datos complejos, como ARRAY o HASH
• Acceso a base de datos, con <eBD:QUERY>, <eBD:INSERT>, etc...
• Definicion de funciones propias, y invocación con <eBD:CALL>
• Ejecución de webservices con <eBD:WS>
• Envio de email y sms, con <eBD:SENDMAIL> y <eBD:SENDSMS>
• Cacheado de codigo intermedio, con <eBD:CACHE>
Manual de eBDML
7
1. INTRODUCCIÓN
1.2. Usos de eBDML
Secciones eBDML
Las secciones de tipo eBDML dan al programador total libertad para crear funcionalidades especiales en las
páginas o zonas de eBD, que puede incluir consultas a la base de datos, recepción de datos de un formulario,
llamadas a webservices, y otros tipos de integración.
Generalmente se intercala el código eBDML con código HTML o Javascript, para generar la sección deseada
de forma dinámica. Además tambien se puede incluir ficheros adicionales como imágenes, hojas de estilo CSS,
ficheros de código JavaScript, etc.
El acceso a los ficheros adicionales desde el código HTML generado se debe hacer de forma directa, es decir,
sin añadirle ningun path delante del nombre del fichero (como si el codigo html estuviera en el mismo directorio
que el fichero adicional). Por ejemplo, en el caso anterior, si queremos incluir la imagen "test.jpg" desde el
codigo HTML generado con eBDML, simplemente debemos usar el tag IMG de la siguiente forma:
<img src="test.jpg">
Plantillas de Menú
Podemos utilizar eBDML para dar formato a los menús, usando las plantillas de menú. Las plantillas son
recursos globales de manera que pueden ser usadas en cualquier sección de tipo Menú.
Manual de eBDML
8
1. INTRODUCCIÓN
Paginación Personalizada
Podemos utilizar eBDML para personalizar todo cuanto queramos en la paginación de una sección de tipo
Tabla.
Para más información sobre las paginaciones usando eBDML, véase el Tutorial "Paginaciones".
Plantillas de Seccion
Utilizamos eBDML para personalizar el formato de un registro en una sección de tipo Tabla.
Cabecera y Pie de Zona
Podemos usar eBDML para personalizar la cabecera y el pie de las zonas, modificando el código HTML inicial
como el "head" o los "meta".
Manual de eBDML
9
1. INTRODUCCIÓN
Diseños de Pagina, Zona y Sección Grupo
Los diseños de las Paginas, las Zonas y las Secciones de tipo Grupo se pueden personalizar, usando eBDML
para generar la estructura de la pagina dinámicamente. Se usa la instrucción <eBD:INCLUDE> para hacer las
llamadas a las secciones correspondientes.
Otros objetos avanzados
En el desarrollo de otros tipo de objetos de servidor mas avanzados, como los WebServices, Widgets,
funciones de validacion en carpetas WebDAV, etc... también se usa eBDML para programar el comportamiento
deseado de cada uno de ellos.
Manual de eBDML
10
2. VARIABLES EN EBDML
2. Variables en eBDML
2.1. Tipos de variables
En eBD se pueden distinguir tres tipos de variables, según su ámbito de ejecución:
Variables Locales
Variables que se definen dentro de un código eBDML (ya sea una sección, o
una función, plantilla, etc...) y sólo se pueden usar dentro del mismo código.
Al finalizar la ejecución la variable deja de existir.
Variables Temporales
Variables que se pueden definir en cualquier momento de la ejecución de una
página (generalmente en un código eBDML) pero que mantienen su valor
durante toda la ejecución de la request.
Es decir, se puede definir una variable temporal en una sección, y usarla
posteriormente en otra sección de la misma página, en eventos, en el pie de
zona, etc...
Al finalizar la ejecución de la request la variable deja de existir.
Se suelen utilizar para pasar información de una sección a otra, sin mantenerla
en la sesión del usuario.
Variables Globales
Variables que se pueden definir en cualquier momento de la ejecución de una
página (generalmente en un código eBDML) pero que mantienen su valor
durante toda la sesión del usuario.
Una vez se ha definido la variable, ésta se mantiene hasta que la sesión del
usuario expira.
Manual de eBDML
11
2. VARIABLES EN EBDML
2.2. Estructuras de datos. ARRAY vs HASH
Las variables de eBDML pueden almacenar cualquier información (textos, numeros, fechas, etc...), ya que no
se especifica su tipo de datos al declararlas.
Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos, como ARRAY o
HASH. Los dos tipos de variables sirven para contener una lista de datos pero de forma diferente.
Un ARRAY es una lista de datos ordenados, que tiene esta forma:
(valor1, valor2, valor3,…, valorN)
Se puede recorrer un array usando la instrucción eBD: FOREACH; se creará automáticamente la variable
$iterator que nos devuelve el valor actual del vector. También podemos cambiarle el nombre a esta variable
(ver FOREACH).
Un Hash es una lista de pares clave-valor, tiene esta forma:
(clave1 => valor1, clave2 => valor2, clave3 => valor3,…, claveN => valorN)
Es muy útil en el caso de que queramos guardar los datos objeto estructurado. Por ejemplo, los datos de una
persona serian (Nombre => Juan, Apellido => García, TF => 941256489, etc.).
La única forma de acceder a los valores de un hash es usando la clave de cada uno de los campos. En caso
de no conocer los valores de las claves, se puede usar la funcion KEYS que devuelve un array con las claves
del HASH.
Ejemplo:
<eBD:KEYS HASH="objeto" ARRAY="claves"/>
<eBD:FOREACH ARRAY="claves" ITERATOR="k">
...
<eBD:SET VAR="valor" VALUE="@objeto{$k}"/>
...
</eBD:FOREACH>
O mas sencillo todavia:
<eBD:FOREACH KEYS="objeto" ITERATOR="k">
...
<eBD:SET VAR="valor" VALUE="@objeto{$k}"/>
...
</eBD:FOREACH>
Manual de eBDML
12
3. INSTRUCCIONES EBDML
3. Instrucciones eBDML
3.1. Declaración de Variables
3.1.1. eBD:STRICT
Sintaxis:
<eBD:STRICT/>
Acción:
Activa la declaración obligatoria de variables.
3.1.2. eBD:VAR
Sintaxis:
<eBD:VAR NAME="nombre" [DEFAULT="valor"] [ TYPE="ARRAY | HASH" ] />
Acción:
Declara una variable con o sin valor por defecto.
Las variables ARRAY o HASH no pueden tener el mismo nombre que una variable escalar.
Ejemplo:
<eBD:VAR NAME="test" DEFAULT="0"/>
<eBD:VAR NAME="lista" TYPE="ARRAY"/>
3.1.3. eBD:SET
Sintaxis:
<eBD:SET ( VAR="nombre" | GLOBAL="nombre" | TEMPORAL="nombre" )
[INDEX="indice"] ( VALUE="valor" | EXPR="expresión" | QUERY="queryname" | ROW="rowname" ) />
Acción:
Asigna un valor a una variable (si es una variable global se usa GLOBAL, si es temporal TEMPORAL y sino
VAR).
El atributo INDEX indica la posición en el caso que la variable sea un tipo complejo (ARRAY o HASH).
Si la expresión es un cálculo matemático debe usarse EXPR.
Si se usa QUERY o ROW, se estara asignando un objeto de tipo Query (resultado de un eBD:QUERY) o ROW
(resultado de un FETCHROW) a una variable de tipo ARRAY o HASH respectivamente.
Ejemplo:
<eBD:SET
<eBD:SET
<eBD:SET
<eBD:SET
<eBD:SET
<eBD:SET
Manual de eBDML
VAR="test" VALUE="444"/>
VAR="test" EXPR="$test+20/4"/>
VAR="lista" INDEX="0" VALUE="testlista"/>
VAR="lista_hash" INDEX="nombre" VALUE="pepito"/>
TEMPORAL="request" VALUE="solo para request"/>
GLOBAL="IDOBJETO" VALUE="256"/>
13
3. INSTRUCCIONES EBDML
3.1.4. eBD:OUT
Sintaxis:
<eBD:OUT (VALUE="valor" | EXPR="expresión" )/>
Acción:
Escribe en el buffer de salida el valor especificado.
Ejemplo:
<eBD:OUT
<eBD:OUT
<eBD:OUT
<eBD:OUT
<eBD:OUT
VALUE="$test"/>
VALUE="@lista[0]"/>
VALUE="@lista{nombre}"/>
VALUE="%IDOBJETO"/>
VALUE="%$request"/>
//VARIABLE ESCALAR
//VARIABLE ARRAY
//VARIABLE HASH
//VARIABLE GLOBAL
//VARIABLE TEMPORAL
3.1.5. eBD:ARGS
Sintaxis:
<eBD:ARGS NAME="nombre" [VAR="nombre"] [DEFAULT="valor"]
[TYPE="string|bool|date|datetime|enum|integer|word" NOTNULL="1" VALIDS="ARRAYREF|values"
DATEMASK="maskdate" OPTIONALMASK="timemask" BIGGERTHAN="date" LOWERTHAN="date"]/>
Acción:
'Declara' una variable que espera recibir y le asigna un valor por defecto.
Si el atributo VAR está definido, en vez de crear la variable con el nombre del parámetro, la crea con el nombre
que le pongamos en el atributo VAR.
Se puede definir el tipo de argumento esperado, así como mascaras de fechas para validar el dato recibido.
Si el tipo es 'enum' el argumento 'VALIDS' podrá ser: ARRAYREF|val1,val2,val3....
Ejemplo:
<eBD:ARGS NAME="idnoticia" DEFAULT="1"/>
3.1.6. eBD:SYNCHRONIZE
Sintaxis:
<eBD:SYNCHRONIZE GLOBALS="variable_global" [TIMEOUT="segundos"]>
Acción:
Permite sincronizar el acceso a las variables globales de la sesión entre varias requests concurrentes.
Esto permite bloquear las otras requests concurrentes (que esten ejecutando la misma sesión), y sincronizar la
lectura y escritura de las variables globales para evitar que se pierdan los cambios realizados.
Esta situación, aunque poco común, se puede dar en aplicaciones que hagan un uso intensivo de peticiones
ajax, por lo que conviene sincronizar el acceso de lectura y escritura a las variables de sesión que sean
utilizadas por varias requests concurrentes.
Se pueden añadir varias variables globales, separándolas por comas.
La opción TIMEOUT es opcional, si no se especifica su valor será de 5 segundos.
Manual de eBDML
14
3. INSTRUCCIONES EBDML
Ejemplo:
<eBD:SYNCHRONIZE GLOBALS="counter,data" TIMEOUT="10">
<eBD:DOC>
This session is locked for 10 seconds and %counter and %data
are synchronized with other concurrent requests
</eBD:DOC>
<eBD:SET GLOBAL="counter" EXPR="%counter+1"/>
<eBD:SET GLOBAL="data" VALUE="my_data_value"/>
<eBD:SYNCHRONIZE>
Manual de eBDML
15
3. INSTRUCCIONES EBDML
3.2. Tipos complejos de datos
3.2.1. eBD:PUSH
Sintaxis:
<eBD:PUSH ARRAY="nombre" ( VALUE="valor" | EXPR="expresión" )/>
Acción:
Añade un valor (o una expresión) al final de un array.
Ejemplo:
<eBD:PUSH ARRAY="lista" VALUE="uno mas!"/>
3.2.2. eBD:POP
Sintaxis:
<eBD:POP ARRAY="nombre" [VAR="nombre"] />
Acción:
Extrae el último valor de un array y lo guarda en una variable (si se le indica con VAR).
Ejemplo:
<eBD:POP ARRAY="lista" VAR="nextdato"/>
3.2.3. eBD:SHIFT
Sintaxis:
<eBD:SHIFT ARRAY="nombre" VAR="nombre" />
Acción:
Extrae el primer valor de un array y lo guarda en una variable (VAR).
Ejemplo:
<eBD:SHIFT ARRAY="lista" VAR="nextdato"/>
3.2.4. eBD:UNSHIFT
Sintaxis:
<eBD:UNSHIFT ARRAY="nombre" ( VALUE="valor" | EXPR="expresión") />
Acción:
Añade un valor (o una expresión) al principio de un array.
Ejemplo:
<eBD:UNSHIFT ARRAY="lista" VALUE="nuevo dato"/>
Manual de eBDML
16
3. INSTRUCCIONES EBDML
3.2.5. eBD:SORT
Sintaxis:
<eBD:SORT ARRAY="nombre" [CMP="string"]/>
Acción:
Reordena alfabéticamente un array.
Los métodos de ordenación pueden ser:
$a
$b
$a
$a
cmp
cmp
<=>
cmp
$b:
$a:
$b:
$b:
ordena
ordena
ordena
ordena
alfabéticamente
inversamente
números de menor a mayor
números de mayor a menor
Ejemplo:
comparacion alfabética, ascendente:
<eBD:SORT ARRAY="lista" CMP="$a cmp $b"/>
comparación numérica, descendente:
<eBD:SORT ARRAY="lista" CMP="$b <=> $a"/>
comparación alfabetica por el campo "nombre", en una lista de hashes:
<eBD:SORT ARRAY="lista" CMP="$a->{nombre} cmp $b->{nombre}"/>
3.2.6. eBD:INDEXOF
Sintaxis:
<eBD:INDEXOF ARRAY="varname" VALUE="value" VAR="varname"/>
Acción:
Obtiene la posicion del valor "value" dentro del array "varname".
Si el elemento no se encuentra en el array, devuelve undef.
Ejemplo:
<ebd:indexof array="lista" value="uno" var="i"/>
<ebd:if expr="#[eBDUtil.defined($i)]">
el elemento si que esta y la posicion en el array es <ebd:out value="$i"/>
</ebd:if>
Manual de eBDML
17
3. INSTRUCCIONES EBDML
3.2.7. eBD:KEYS
Sintaxis:
<eBD:KEYS HASH="nombre" ARRAY="nombre" />
Acción:
Extrae la lista de claves de un hash y las guarda en el array.
Ejemplo:
<eBD:KEYS HASH="datos" ARRAY="claves"/>
3.2.8. eBD:JOIN
Sintaxis:
<eBD:JOIN ( ARRAY="nombre" | HASH="nombre" | ARRAY1="nombre1" ARRAY2="nombre2") VAR="nombre"
[CHAR="valor"] />
Acción:
Concatena todos los valores del ARRAY (o los pares clave/valor del HASH), intercalando el carácter CHAR
entre ellos, y lo guarda en la variable VAR.
En el caso de usar los parámetros ARRAY1 y ARRAY2, devuelve un array con la union de todos los elementos
de los 2 arrays.
Ejemplo:
<eBD:JOIN ARRAY="claves" VAR="result" CHAR=","/>
3.2.9. eBD:SPLIT
Sintaxis:
<eBD:SPLIT VALUE="valor" (ARRAY="nombre" | HASH="nombre") CHAR="valor" [LIMIT="n"] />
Acción:
Divide el valor en trozos separados por el carácter CHAR, y lo guarda en el ARRAY o el HASH.
Si se usa HASH, los trozos generados se agruparán por parejas clave/valor.
Si se define LIMIT="n", sólo se dividirá n veces.
Ejemplo:
<eBD:SPLIT ARRAY="claves" VALUE="result" CHAR=","/>
Manual de eBDML
18
3. INSTRUCCIONES EBDML
3.3. Enlaces y encriptación
3.3.1. eBD:ENCRYPT
Sintaxis:
<eBD:ENCRYPT [VAR="varname"] VALUE="value" [NOT_URL="1" (KEY="key"|SALT="pwd_salt"|DIGEST="digest")] />
Acción:
En versiones anteriores a 3.2, se usaba principalmente para encriptar enlaces a páginas de eBD. A partir
de dicha versión, el uso de la instrucción eBD:ENCRYPT para encriptar URLs está DESACONSEJADO. Es
preferible usar eBD:LINKTO.
También podemos utilizar eBD:ENCRYPT para encriptar valores usando una clave simetrica (KEY), o para
crear un digest de los datos. Los digest válidos son: MD5, MD5_HEX, MD5_BASE64, SHA1, SHA1_HEX,
SHA1_BASE64.
Si existe la variable guarda el resultado en ella, sino lo imprime.
El parámetro KEY es opcional, y especifica la semilla que se utilizará para encriptar el valor; debe tener una
longitud mínima de 8 carácteres.
En caso de que no se le pase ningún valor, utilizará la misma semilla que se utiliza para encriptar las URL de la
sesión.
Otra funcionalidad de eBD:ENCRYPT es la de encriptar textos con el mismo algoritmo de encriptación que se
usa para codificar los campos de tipo "Contraseña". Para ello se usa el parámetro SALT, cuyo valor debe ser la
semilla (string de 2 carácteres) con la que se quiere encriptar el valor.
El resultado encriptado contiene la propia semilla al principio, con lo que para comparar si un password es
válido se debe encriptar el password plano usando como semilla la versión encriptada
Ejemplo:
<eBD:ENCRYPT VAR="encripted" VALUE="string a encriptar" NOT_URL="1" DIGEST="MD5"/>
<eBD:ENCRYPT VAR="encripted" VALUE="string a encriptar" NOT_URL="1" KEY="$clave"/>
encripta un password
<eBD:ENCRYPT VAR="codedpwd" VALUE="$password" NOT_URL="1" SALT="$salt"/>
comprueba un password existente
<eBD:ENCRYPT VAR="check" VALUE="$password" NOT_URL="1" SALT="$codedpwd"/>
<eBD:IF EXPR="$check == $codedpwd">
el password es correcto!
</eBD:IF>
3.3.2. eBD:LINKTO
Sintaxis:
<eBD:LINKTO [PAGE="page name" | PAGEID="id page"] [ZONE="zone name" | ZONEID="id page"]
(VAR="varname" | GLOBAL="varname" | TEMP="varname") [FRIENDLY_URL="string"]
[SECURITY="USER|NONE"] (ARGS="var=value&var=value...")/>
Acción:
Sirve para encriptar los enlaces de eBD, si omitimos el parámetro VAR GLOBAL I TEMP lo añadirá al buffer
html de salida.
El parámetro FRIENDLY_URL permite modificar el texto que generan los enlaces si esta activada la opción de
"URLs Amigables". Si el valor de este parámetro empieza por /, se usara unicamente este string como path en
la URL. Si no es así, se concatenara este string al path generado automaticamente por eBD.
Manual de eBDML
19
3. INSTRUCCIONES EBDML
El parámetro SECURITY permite definir el nivel de seguridad de la URL generada. Si no se especifica ninguno
se usará el nivel definido en la zona actual. Los posibles valores son:
- USER: Se encriptará la URL usando la clave propia del usuario (recomendado).
- NONE: Se usará la clave del usuario anónimo, con lo que la url será visible por cualquier usuario.
Ejemplo:
<eBD:LINKTO PAGE="home" ZONE="principal" ARGS="param1=44&param2=333"/>
3.3.3. eBD:DECRYPT
Sintaxis:
<eBD:DECRYPT [VAR="varname"] VALUE="value" [KEY="key"]/>
Acción:
Esta instrucción permite desencriptar un valor encriptado con una clave simértica.
Si se especifica un nombre de variable dejará en ella el resultado, en caso contrario se imprimirá el valor
desencriptado en el HTML. El Parámetro KEY es opcional, y especifica la semilla utilizada cuando se encriptó
el valor, debe tener una longitud mínima de 8 carácteres.
En caso de que no se le pase ningún valor, utilizará la misma semilla que se utiliza para encriptar las URL de la
sesión.
Ejemplo:
<eBD:DECRYPT VAR="texto_ori" VALUE="$encripted" />
3.3.4. eBD:REDIRECT
Sintaxis:
<eBD:REDIRECT TO="pagename|pageid" [argname="value"]/>
Acción:
Instrucción que al ejecutarse nos redireccionará a la página llamada "pagename" o a aquella cuyo id sea
"pageid".
Los demás parámetros son enviados como tal.
Ejemplo:
<eBD:REDIRECT TO="home" param1="44" idnot="15"/>
Manual de eBDML
20
3. INSTRUCCIONES EBDML
3.4. Acceso a Base de Datos
3.4.1. eBD:QUERY
Sintaxis:
<eBD:QUERY [NAME="nombre"] [DATASOURCE="nombre servidor de datos"] [STATIC="1"]>
query sql
</eBD:QUERY>
Acción:
Prepara y ejecuta la consulta contra el servidor de datos indicado, dejando el HANDLER preparado para hacer
FETCH, identificándolo con el nombre (NAME).
Si se especifica el parámetro STATIC, no se evaluarán los carácteres especiales que se encuentren en la
query SQL, por lo que no será necesario usar \ para escaparlos ($,%,etc...)
Ejemplo:
<eBD:QUERY NAME="test" DATASOURCE="principal">
Select * from test
</eBD:QUERY>
3.4.2. eBD:FETCHROW
Sintaxis:
<eBD:FETCHROW NAME="nombre" QUERY="nombre de la query"/>
Acción:
Hace FETCHROW del HANDLER identificado con el nombre del atributo QUERY y guarda el registro
identificándolo con el nombre (NAME).
Ejemplo:
<eBD:FETCHROW QUERY="test" NAME="T"/>
3.4.3. eBD:INSERT
Sintaxis:
<eBD:INSERT TABLE="nombre de la tabla">
<eBD:DATAFIELD FIELD="nombre" VALUE="valor"/>
</eBD:INSERT>
Acción:
Realiza una inserción de un registro en la tabla (TABLE), insertando aquellos campos indicados con el tag
eBD:DATAFIELD.
Ejemplo:
<eBD:INSERT TABLE="test">
<eBD:DATAFIELD FIELD="nombre" VALUE="mi primer insert"/>
<eBD:DATAFIELD FIELD="publicado" VALUE="S"/>
</eBD:INSERT>
Manual de eBDML
21
3. INSTRUCCIONES EBDML
3.4.4. eBD:UPDATE
Sintaxis:
<eBD:UPDATE TABLE="tablename" IDFIELD="campoid" IDVALUE="valorcampoid" [ADDWHERE=""]>
<eBD:DATAFIELD FIELD="fieldname" VALUE="value"/>
</eBD:UPDATE>
Acción:
Realiza un UPDATE del registro o registros indicado por el campo IDFIELD con valor IDVALUE, modificando
aquellos campos que indiquen con eBD:DATAFIELD, de la Tabla TABLE.
Ejemplo:
<eBD:UPDATE TABLE="test" IDFIELD="idconte" IDVALUE="1">
<eBD:DATAFIELD FIELD="nombre" VALUE="mi primer update"/>
<eBD:DATAFIELD FIELD="fecha" VALUE="#hoy"/>
<eBD:DATAFIELD FIELD="publicado" VALUE="N"/>
</eBD:UPDATE>
3.4.5. eBD:DELETE
Sintaxis:
<eBD:DELETE TABLE="tablename" IDFIELD="campoid" IDVALUE="valorcampoid" [ADDWHERE=""]/>
Acción:
Realiza un DELETE del registro o registros indicados por el campo IDFIELD con valor IDVALUE.
Ejemplo:
<eBD:DELETE TABLE="test" IDFIELD="idconte" IDVALUE="1"/>
3.4.6. eBD:QUOTE
Sintaxis:
<eBD:QUOTE VAR="nombre" VALUE="valor" />
Acción:
Pone entre comillas simples (') el valor que le hayamos asignado y lo guarda en la variable VAR.
También se escaparán las comillas internas para poder usar la variable directamente en una query sin tener
que preocuparnos de escapar las comillas a mano, es decir, nos sustituirá (') por (\').
Ejemplo:
<eBD:QUOTE VAR="frase" VALUE="esto es el texto"/>
Manual de eBDML
22
3. INSTRUCCIONES EBDML
3.4.7. eBD:EXECDATASOURCE
Sintaxis:
<eBD:EXECDATASOURCE DATASOURCE="name"
[IGNORE_FILTERS="1|0" ADDWHERE="string" ORDERBY="string" LIMIT="string" COUNT="var name"]
(lista de parámetros nombre="valor") />
Acción:
Permite ejecutar un DataSource definido en el widget identificado por el nombre "name", o de consultas
predefinidas.
En el propio tag se pueden especificar la lista de parámetros a pasar en la consulta.
El parámetro COUNT recoge el valor de 'select count(*)' si está definido el parámetro LIMIT.
Ejemplo:
<eBD:EXECDATASOURCE DATASOURCE="data" param1="10"/>
3.4.8. eBD:XQUERY
Sintaxis:
<eBD:XQUERY TABLE="tablename" [NAME="queryname"] [VAR="varname"] [STATIC="1"] >
XQuery
</eBD:XQUERY>
Acción:
Ejecuta una consulta XQuery contra una Tabla vinculada usando el formato XML
El parámetro NAME definirá el nombre con el que se guardara el HANDLER para poder hacer FETCHROW
para poder recorrer el resultado de la expresion como una estructura de registros y campos (array de hashes).
El parámetro VAR especifica una variable escalar en la que se almacenará el contenido XML de la respuesta
de la query, para poder parsear ese XML manualmente con XMLPARSE.
Si se especifica el parámetro STATIC, eBD no interpretara variables ni expresiones dentro de la XQuery, por lo
que se podran usar los caracteres especiales ($,%,etc..) sin necesidad de escaparlos.
Ejemplo:
<ebd:set var="doc" value="#[eBDDB.xml_document(nombre_tabla)]"/>
<ebd:xquery table="slashdot" name="datos" var="xml">
for \$a in doc("$doc")/rss/channel/item
return
<dato>
<nombre>{data(\$a/title)}</nombre>
<enlace>{data(\$a/link)}</enlace>
</dato>
</ebd:xquery>
Manual de eBDML
23
3. INSTRUCCIONES EBDML
3.4.9. eBD:TRANSACTION
Sintaxis:
<eBD:TRANSACTION ISOLATION="isolation_value">
COMMIT o ROLLBACK
</eBD:TRANSACTION>
Acción:
Permite una ejecución atómica y confiable en presencia de fallos y una correcta ejecución en presencia de
accesos de usuarios múltiples.
La base de datos ha de ser (o convertirse) en innoDB.
Los valores de ISOLATION pueden ser:
• READ UNCOMMITED
• READ COMMITED
• REPETEABLE READ
• SERIALIZABLE
Ejemplo:
<eBD:TRANSACTION ISOLATION="SERIALIZABLE">
<eBD:INSERT TABLE="tbl_News" DATASOURCE="datasource_A">
<eBD:DATAFIELD FIELD="Title" VALUE="$title"/>
<eBD:DATAFIELD FIELD="Date" VALUE="#[eBDDate.CurrentDate]"/>
</eBD:INSERT>
<eBD:IF EXPR="#[eBDDB.ErrCode]<>0">
<eBD:ROLLLBACK/>
<eBD:ELSE>
<eBD:INSERT TABLE="tbl_Line_News" DATASOURCE="datasource_A">
<eBD:DATAFIELD FIELD="NewsContent" VALUE="$content_txt"/>
</eBD:INSERT>
<eBD:IF EXPR="#[eBDDB.ErrCode]<>0">
<eBD:ROLLLBACK/>
<eBD:IF>
</eBD:ELSE>
</eBD:IF>
</eBD:TRANSACTION>
3.4.10. eBD:COMMIT
Sintaxis:
<eBD:COMMIT/>
Acción:
Al final de una transacción, la finaliza y pone todos los cambios visibles a otros usuarios.
Ejemplo:
Manual de eBDML
24
3. INSTRUCCIONES EBDML
<eBD:TRANSACTION ISOLATION="SERIALIZABLE">
<eBD:INSERT TABLE="tbl_News" DATASOURCE="datasource_A">
<eBD:DATAFIELD FIELD="Title" VALUE="$title"/>
<eBD:DATAFIELD FIELD="Date" VALUE="#[eBDDate.CurrentDate]"/>
</eBD:INSERT>
<eBD:IF EXPR="#[eBDDB.ErrCode]<>0">
<eBD:ROLLLBACK/>
<eBD:ELSE>
<eBD:COMMIT/>
</eBD:ELSE>
</eBD:IF>
</eBD:TRANSACTION>
3.4.11. eBD:ROLLBACK
Sintaxis:
<eBD:ROLLBACK/>
Acción:
Revierte una transacción hasta el inicio de la transacción o hasta un punto de retorno de la transacción.
Ejemplo:
(Ver ejemplo de eBD:TRANSACTION y eBD:COMMIT)
Manual de eBDML
25
3. INSTRUCCIONES EBDML
3.5. Control de Flujo
3.5.1. eBD:RETURN
Sintaxis:
<eBD:RETURN [ VALUE="valor" ] />
Acción:
Aborta la ejecución del SCRIPT y devuelve el valor que se puede recoger con el atributo VAR del la instrucción
eBD:CALL.
3.5.2. eBD:BREAK
Sintaxis:
<eBD:BREAK/>
Acción:
Aborta la ejecución del contexto que se esté ejecutando.
3.5.3. eBD:FOREACH
Sintaxis:
<eBD:FOREACH ( QUERY="nombre" | ARRAY="nombre" | KEYS="hashname")
[ITERATOR="nombre"] [START="número"] >
código eBDML y HTML
</eBD:FOREACH>
Acción:
Hace un bucle con tantas iteraciones como registros haya devuelto la ejecución de la consulta.
Típicamente, la primera instrucción de su interior deberá ser un eBDFETCHROW.
El atributo START indica el número de registro por el que se debe comenzar el bucle.
Se puede hacer un recorrido sobre un ARRAY usando el parámetro ARRAY en lugar de KEYS.
También se puede hacer un recorrido sobre las claves de un HASH usando KEYS y el nombre del HASH.
El atributo ITERATOR indica el nombre de la variable que se usará para iterar sobre todos los elementos del
array.
Si no se especifica ITERATOR, se creará automáticamente la variable $iterator.
Ejemplo:
<eBD:FOREACH ARRAY="lista">
<eBD:OUT VALUE="$iterator"/>
</eBD:FOREACH>
<eBD:FOREACH QUERY="noticias">
<eBD:FETCHROW QUERY="noticias" NAME="noticia"/>
....
</eBD:FOREACH>
<eBD:FOREACH KEYS="hash" ITERATOR="k">
<eBD:OUT VALUE="$k : @hash{$k}/>
</eBD:FOREACH>
Manual de eBDML
26
3. INSTRUCCIONES EBDML
3.5.4. eBD:IF
Sintaxis:
<eBD:IF EXPR="expresión">
código eBDML
<eBD:ELSIF EXPR="expresion">
código eBDML
<eBD:ELSE>
código eBDML
</eBD:ELSE>
</eBD:ELSIF>
</eBD:IF>
Acción:
Estructura condicional IF ... ELSIF ... ELSE ...
Ejemplo:
<eBD:IF EXPR=" $id == 0 ">
El id es 0
<eBD:ELSIF EXPR=" '$nombre' =~ '^R' | '$nombre' == 'Juan' ">
El nombre empieza por R o es Juan
<eBD:ELSE>
Ni la id es 0 ni el nombre empieza por R ni es Juan
</eBD:ELSE>
</eBD:ELSIF>
</eBD:IF>
<eBD:IF EXPR=" '$numero' =~ '^(\d+).(\d+)$' ">
Parte entera = <eBD:OUT VALUE="$1"/>
<eBD:OUT VALUE="Parte decimal = $1"/>
</eBD:IF>
3.5.5. eBD:WHILE
Sintaxis:
<eBD:WHILE EXPR="expresión">
código eBDML
</eBD:WHILE>
Acción:
Realiza iteraciones mientras la evaluación de la expresión sea un valor cierto.
Ejemplo:
<eBD:WHILE EXPR=" $count < =10 ">
<eBD:SET VAR="count" EXPR="$count+1"/>
...
</eBD:WHILE>
Manual de eBDML
27
3. INSTRUCCIONES EBDML
3.5.6. eBD:USE
Sintaxis:
<eBD:USE (LIB="nombre_libreria" | SCRIPT="nombre_script")/>
Acción:
Usando el parámetro LIB, carga la librería eBDML y prepara las funciones para su ejecución.
Si se usa el parámetro SCRIPT, incrusta en el HTML resultante el código fuente del Script indicado.
Ejemplo:
<eBD:USE LIB="funciones"/>
3.5.7. eBD:CALL
Sintaxis:
<eBD:CALL [FUNCTION="nombre_función" | EVENT="widgetEventName] [LIB="nombre_libreria"]
[VAR="variable"] [STORE="variable"]
(lista de parámetros nombre="valor" )* />
Acción:
Llama la función ebdml "Nombre_funcion" de la librería, o a un evento en el caso de un widget,
y muestra el HTML generado.
Si definimos el STORE guardará el contenido HTML en la variable en vez de mostrarlo al instante.
El atributo VAR es para recoger el valor del return y los demás parámetros son enviados como tal.
El parámetro EVENT permitirá ejecutar eventos de un widget desde el propio código eBDML del widget.
Ejemplo:
<eBD:CALL FUNCTION="redondea" VAR="numero_ok" STORE="basura" numero="$numero" decimales="2"/>
<eBD:CALL FUNCTION="html_table" VAR="pintable" STORE="html_table" idnot="$idnot"/>
3.5.8. eBD:FORK
Sintaxis:
<eBD:FORK>
Código EBDML
</eBD:FORK>
Acción:
OBSOLETO!!! en entorno Linux/Unix y no soportada bajo Windows.
Sirve para crear un proceso de servidor hijo. El código entre los dos TAGS se ejecutará en modo
BACKGROUND.
Ejemplo:
<eBD:FORK>
...
</eBD:FORK>
Manual de eBDML
28
3. INSTRUCCIONES EBDML
3.5.9. eBD:CACHE
Sintaxis:
<eBD:CACHE NAME="cachename" ID="identifier_string" [EXPIRES="expiration"]
STORE_VARS="$var1,%$var2,%var3">
Código EBDML
</eBD:CACHE>
Acción:
El nombre será identificativo, el ID será el patrón a seguir para evaluar el código o mostrar el código cacheado.
Si deseamos que tenga un límite, podemos especificar un EXPIRES donde pondremos un número y una letra,
que debe ser [smhdw] (segundo, minutos, horas, dias y semanas).
Si se especifica el parámetro STORE_VARS, se cachearan tambien las variables locales, globales o
temporales indicadas en él.
Ejemplo:
<eBD:CACHE NAME="test" ID="#usuario" EXPIRES="1 d">
...
</eBD:CACHE>
3.5.10. eBD:CLEARCACHE
Sintaxis:
<eBD:CLEARCACHE (ID="(pageid | sectionid | tableid)" | SECTION="name" | PAGE="name" |
TABLE="name" | NAME="string" )/>
Acción:
Elimina la cache de la Página, Sección o Tabla XML especificada.
Si se ha añadido un identificador a la cache, se podrá eliminar mediante la opción "NAME".
Ejemplo:
<eBD:CLEARCACHE PAGE="home"/>
<eBD:CLEARCACHE NAME="identifier_1"/>
3.5.11. eBD:INCLUDE
Sintaxis:
<eBD:INCLUDE SECTION="name" [PAGE="name" | ZONE="name"] [STORE="var"]
(lista de parámetros nombre="valor" ) />
Acción:
Ejecuta la sección indicada y devuelve el código HTML resultante, si indicamos un 'STORE' guardará el código
en dicha variable. Se pueden modificar los parámetros de la sección.
También se puede usar desde archivos dinámicos y Web Services para ejecutar secciones.
Mediante las opciones PAGE y ZONE se puede ejecutar secciones de otras páginas o zonas.
Manual de eBDML
29
3. INSTRUCCIONES EBDML
Atención: Los parámetros enviados se pasan de forma case-sensitive.
Ejemplo:
<eBD:INCLUDE SECTION="grafica" param1="$idconte" STORE="contenido"/>
....
<eBD:OUT VALUE="$contenido"/>
<eBD:INCLUDE SECTION="test" param1="$idconte" param2="$idcategoria" mostrable="S"/>
Manual de eBDML
30
3. INSTRUCCIONES EBDML
3.6. Integración y Comunicación
3.6.1. eBD:SENDMAIL
Sintaxis:
<eBD:SENDMAIL TO="mail" FROM="mail" [CC="mail;..." ] [BCC="mail;..." ] [REPLYTO="address"]
SUBJECT="subject" [SERVER="smtp"] [PORT="25"] [TYPE="text/html"] [USER="username"
PASSWORD="password"] >
Contenido del mensaje | <eBD:BODY></eBD:BODY><eBD:ATTACH .. >
</eBD:SENDMAIL>
Sintaxis avanzada:
<eBD:SENDMAIL TO="mail" FROM="mail" [CC="mail;..." ] [BCC="mail;..." ] [REPLYTO="address"]
SUBJECT="subject" [SERVER="ip"] [PORT="25"] [TYPE="text/html"] [USER="username" PASSWORD="password"]>
<eBD:BODY>
Contenido del mensaje
</eBD:BODY>
<eBD:ATTACH FILE="fichero" [NAME="nombre"] /> +
</eBD:SENDMAIL>
Acción:
Envía el contenido (body) por correo electrónico. Si se usa la sintaxis avanzada enviará también los archivos
adjuntos.
Ejemplo:
<eBD:SENDMAIL TO="[email protected]" FROM="[email protected]"
SUBJECT="test mundo" TYPE="text/plain">
hola mundo eBD!!
Soy #usuario
</eBD:SENDMAIL>
<eBD:SENDMAIL TO="[email protected]" FROM="[email protected]"
SUBJECT="test mundo" TYPE="text/html">
<eBD:ATTACH file="/files/1-149-img_petita/image003.jpg" />
<eBD:BODY>
<html><head><body>
<h3>hola mundo eBD!!<br>Sigo siendo #usuario</h3>
</body></head></html>
</eBD:BODY>
</eBD:SENDMAIL>
3.6.2. eBD:SENDSMS
Sintaxis:
<eBD:SENDSMS TO="móvil" FROM="móvil" [SERVER="smpp"] [PORT="port"]
[USER="username" PASSWORD="password"] >
Message Body
</eBD:SENDSMS>
Manual de eBDML
31
3. INSTRUCCIONES EBDML
Acción:
Envía el contenido (Message Body) por SMS.
Ejemplo:
<eBD:SENDSMS TO="666999888" FROM="555444222" >
Hola!!!! Llegaré tarde!
</eBD:SENDMAIL>
3.6.3. eBD:BODY
Sintaxis:
<eBD:BODY>
Cuerpo del mail
</eBD:BODY>
Acción:
Instrucción que debe ir dentro de <eBD:SENDMAIL>.
Sirve para escribir el cuerpo del mensaje. Esto mismo lo podemos hacer incluyendo el texto entre los tags
<eBD:SENDMAIL> y </eBD:SENDMAIL>
3.6.4. eBD:ATTACH
Sintaxis:
<eBD:attach FILE="filename1" [NAME="filename2"] [ID="content-id"]/>
Acción:
Instrucción que va dentro de <eBD:SENDMAIL>.
Podemos adjuntar un fichero cuyo nombre es 'filename1' y opcionalmente cambiarle el nombre por 'filename2'.
Debemos haber subido previamente el fichero que adjuntamos antes de enviarlo, por ejemplo usando un
TMPFILE.
3.6.5. eBD:HTTPGET
Sintaxis:
<eBD:HTTPGET URL="value" [VAR="varname" | GLOBAL="varname" | TEMPORAL="varname"]
[ ENCODING="source encoding" ] [ UPDATE_HTML="1" ]
[ USERNAME="username" ] [ PASSWORD="password" ]
[ REQUEST_HEADERS="varname" ] [ RESPONSE_HEADERS="varname" ] />
Acción:
Realiza una Petición GET a un servidor HTTP de una URL que se recibe como parámetro, y deja el contenido
en una Variable Local, global o Temporal.
Si no se especifica ninguna variable se genera la salida al documento HTML.
Si especificamos el parámetro UPDATE_HTML se pondrá el dominio en los links y referencias encontradas.
Si se especifican los parámetros USERNAME y PASSWORD, éstos se usaran para construir las cabeceras de
autenticación.
Los parámetros REQUEST_HEADERS y RESPONSE_HEADERS permiten usar HASHES para enviar o recibir
en ellos las cabeceras de la request respectivamente.
Ejemplo:
Manual de eBDML
32
3. INSTRUCCIONES EBDML
<eBD:HTTPGET VAR="test" URL="http://my.domain.com/index.html"/>
<eBD:HTTPGET VAR="test" URL="http://www.google.es/" UPDATE_HTML="1"/>
3.6.6. eBD:HTTPPOST
Sintaxis:
<eBD:HTTPPOST URL="value" [VAR="varname" | GLOBAL="varname" | TEMPORAL="varname"]
[ USERNAME="username" ] [ PASSWORD="password" ]
[ REQUEST_HEADERS="varname" ] [ RESPONSE_HEADERS="varname" ]
[ ENCODING="source encoding" ] >
<eBD:PARAM NAME="param name" VALUE="value"/>+
</eBD:HTTPPOST>
Acción:
Realiza una Petición POST a un servidor HTTP de una URL que se recibe como parámetro, y deja el contenido
en una Variable Local, global o Temporal.
Si no se especifica ninguna variable se genera la salida al documento HTML.
Si se especifican los parámetros USERNAME y PASSWORD, éstos se usaran para construir las cabeceras de
autenticación.
Los parámetros REQUEST_HEADERS y RESPONSE_HEADERS permiten usar HASHES para enviar o recibir
en ellos las cabeceras de la request respectivamente.
Los argumentos a enviar en el contenido del POST se especifican usando tantas instrucciones eBD:PARAM
como parámetros se quieran enviar.
Ejemplo:
<eBD:HTTPPOST VAR="html" URL="http://my.domain.com/index.html">
<eBD:PARAM NAME="name" VALUE="$my_name">
<eBD:PARAM NAME="email" VALUE="$my_email">
</eBD:HTTPPOST>
3.6.7. eBD:WS
Sintaxis:
<eBD:WS [SERVICE="servicio" | WSDL="wsdl_url"] OPERATION="funcion" [VAR="variable"]>
<eBD:PARAM NAME="nombre" VALUE="valor" [TYPE="type|AUTO"]/>
....
</eBD:WS>
Acción:
Ejecuta un Webservice y guarda el resultado en una variable.
Se puede indicar el servicio a usar con el parámetro SERVICE (que debe contener el nombre del servicio tal
y como se ha configurado en el menu "Recursos compartidos", o directamente usando la url del archivo de
definición del servicio con el parámetro WSDL.
Ejemplo:
<eBD:WS SERVICE="users" OPERATION="login" VAR="dato">
<eBD:PARAM NAME="username" VALUE="$username"/>
Manual de eBDML
33
3. INSTRUCCIONES EBDML
<eBD:PARAM NAME="password" VALUE="$password"/>
</eBD:WS>
3.6.8. eBD:XMLPARSE
Sintaxis:
<eBD:XMLPARSE (VAR="varname" | GLOBAL="varname" | TEMPORAL="varname")
VALUE="value" [PARSER="LITE|RECORDSET"] [ENCODING="source encoding"]/>
Acción:
Parsea un documento XML y genera un árbol (basado en HASHES) con la información del xml recibido.
Si se usa el parámetro PARSER="LITE", se usará un parser que no valida ni interpreta entities. Este parser
sólo es útil si el XML recibido no cumple estrictamente el estándar en lo que se refiere a la codificación de
carácteres usando entities.
El parámetro PARSER="RECORDSET" parsea estructuras XML simples, devolviendo un array de hashes.
Con el parámetro ENCODING le indicamos el tipo de codificación, para que no lo deduzca del
automáticamente del archivo.
Cada nodo del árbol generado tendrá esta estructura:
tag
nombre del tag.
namespace
namespace asociado al tag.
localname
nombre del tag, excluyendo el namespace.
prefix
prefijo que se usa para identificar el namespace en el xml.
childs
un array con todos los nodos hijos, que tendran esta misma estructura.
attributes
un hash con los atributos del nodo.
data
variable con el contenido del nodo.
parent
puntero al nodo padre.
Ejemplo:
<eBD:XMLPARSE VAR="arbol" VALUE="$xml"/>
3.6.9. eBD:EXECPROCESS
Sintaxis:
<eBD:EXECPROCESS [PROCESSID="idprocess" | PROCESS="name"] [ARGS="value value value..."]
[STDOUT="varname"] [STDERR="varname"] [STATUS="varname"]/>
Acción:
Ejecutará el proceso especificado inmediatamente, y espera a que finalize la ejecución.
En las variables indicadas por los parámetros STDOUT, STDERR y STATUS se guardarán los valores
generados por los canales de comunicación estándar del proceso, y el valor de retorno de la ejecución.
Ejemplo:
Manual de eBDML
34
3. INSTRUCCIONES EBDML
<eBD:EXECPROCESS PROCESS="boletin"/>
3.6.10. eBD:EXECTASK
Sintaxis:
<eBD:EXECTASK (TASKID="idtask" | TASK="name") [EXECDATE="AAAA-MM-DD hh:ii:ss"]/>
Acción:
Ejecutara la tarea programada especificada, si se omite el parámetro EXECDATE se ejecutara
inmediatamente.
Ejemplo:
<eBD:EXECTASK TASK="boletin"/>
3.6.11. eBD:FTPCLOSE
Sintaxis:
<eBD:FTPCLOSE FTP="ftp_connection" ERR="varname"/>
Acción:
Cierra la conexión FTP.
Ejemplo:
<eBDFTPCLOSE FTP="my_ftp" ERR="error"/>
3.6.12. eBD:FTPCWD
Sintaxis:
<eBD:FTPCWD FTP="ftp_connection" ERR="varname" DIR="directory"/>
Action:
Permite cambiar el directorio de trabajo.
Ejemplo:
<eBDFTPCWD FTP="my_ftp" ERR="error" DIR="other_dir"/>
3.6.13. eBD:FTPDELETE
Sintaxis:
<eBD:FTPDELETE FTP="ftp_connection" ERR="varname" REMOTE="remote_file"/>
Acción:
Borra un archivo remoto indicado en el nombre de la ruta.
Ejemplo:
Manual de eBDML
35
3. INSTRUCCIONES EBDML
<eBD:FTPDELETE FTP="my_ftp" ERR="error" REMOTE="old_file.txt"/>
3.6.14. eBD:FTPGET
Sintaxis:
<eBD:FTPGET FTP="ftp_connection" ERR="varname" LOCAL="local_file" REMOTE="remote_file"/>
Acción:
Coge un fichero remoto y lo guarda en la variable LOCAL.
Ejemplo:
<eBD:FTPGET FTP="my_ftp" ERR="error" LOCAL="new_file.txt" REMOTO="remote_file.txt"/>
3.6.15. eBD:FTPLOGIN
Sintaxis:
<eBD:FTPLOGIN [PASSWORD="password"] VAR="ftpcon_var" ERR="varname" [PASSIVE="0|1"] [PORT="port"]
HOST="hostname" [LOGIN="login"]/>
Acción:
Crea la conexión con el FTP. La conexión guarda un puntero sobre la conexión en VAR para referenciarlo en el
resto de comandos.
• PASSWORD: Contraseña de acceso al servidor FTP.
• VAR: Variable en la que se almacena la respuesta del FTP.
• ERR: Variable en la que se almacena el error del FTP en caso de existir.
• PASSIVE: Modo pasivo (1) o Modo activo (0).
• PORT: Puerto de conexión al servidor.
• HOST: Nombre del servicio FTP.
• LOGIN: Nombre del usuario de acceso al FTP.
El HOST en caso de ser la misma máquina, no puede llamarse 'localhost', sino 'localhost.domain' ó 127.0.0.1
Ejemplo:
<eBD:FTPLOGIN VAR="my_ftp" ERR="error" HOST="ftp.my_server.com"/>
<eBD:FTPLOGIN PASSWORD="12345" VAR="my_ftp" ERR="error" HOST="ftp.my_server.com" LOGIN="john"/>
Retorno:
Net::FTP=GLOB(0xe313a84)
3.6.16. eBD:FTPLS
Sintaxis:
Manual de eBDML
36
3. INSTRUCCIONES EBDML
<eBD:FTPLS OUT="varname" FTP="ftp_connection" ERR="varname" [LONG="1|0"] [DIR="directory"]/>
Acción:
Lista el contenido del directorio remoto.
• OUT: Array con el contenido del directorio mostrado, de la raiz en caso que no sea informado.
• FTP: Nombre de la conexión del FTP.
• ERR: Mensaje de error en caso de que exista.
• LONG: Muestra toda la informacion del fichero/carpeta (1) o no (0):
o
1: devuelve permisos, usuario, fecha, nombre fichero.
o
0: devuelve el path absoluto (partiendo de la raiz del FTP) del fichero/carpeta
• DIR: Directorio al que se quiere acceder.
Ejemplo:
<eBD:FTPLS OUT="file_list" FTP="my_ftp" ERR="error"/>
<ebd:foreach array="file_list">
<ebd:out value="$iterator"/>
</ebd:foreach>
Retorno:
Long=1
, devuelve un array con el siguiente contenido:
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
-rw-r--r--rw-r--r--
3
3
2
1
1
ftptesting
ftptesting
ftptesting
ftptesting
ftptesting
ftptesting
ftptesting
ftptesting
ftptesting
ftptesting
4096 May 12 10:11 .
4096 May 12 10:10 ..
4096 May 12 10:11 33
52535 May 12 10:05 859714.jpg
57726 May 12 10:05 dr-slump.JPG
**NOTA**
Para separar cada uno de los valores y tenerlo en un array usar:
<ebd:split value="$iterator" array="arCont" char="\s+"/>
ya que el número de espacios que separan cada parámetro es irregular e
indefinido
Long=0
, devuelve un array con el siguiente contenido:
varis/fc-barcelona-poster.jpg
varis/atari_logo.jpg
varis/wam-tux-maul-starwars-1771.png
3.6.17. eBD:FTPMKDIR
Sintaxis:
<eBD:FTPMKDIR [RECURSIVE="1|0"] FTP="ftp_connection" ERR="varname" DIRECTORY="remote_dir"/>
Acción:
Crea un directorio en directorio remoto.
Manual de eBDML
37
3. INSTRUCCIONES EBDML
Ejemplo:
<eBD:FTPMKDIR FTP="my_ftp" ERR="error" DIRECTORY="images"/>
3.6.18. eBD:FTPPUT
Sintaxis:
<eBD:FTPPUT FTP="ftp_connection" ERR="varname" LOCAL="local_file" REMOTE="remote_file"/>
Acción:
Envia un archivo al directorio remoto.
Ejemplo;
<eBD:FTPPUT FTP="my_ftp" ERR="error" LOCAL="image1.jpg" REMOTE="image1.jpg"/>
3.6.19. eBD:FTPPWD
Sintaxis:
<eBD:FTPPWD OUT="varname" FTP="ftp_connection" ER="varname"/>
Acción
Indica en que directorio se está trabajando
Ejemplo:
<eBDFTPPWD OUT="directorio" FTP="my_ftp" ERR="error"/>
3.6.20. eBD:FTPRENAME
Sintaxis:
<eBD:FTPRENAME FTP="ftp_connection" ERR="varname" NEW="remote_file" OLD="remote_file"/>
Acción:
Cambia el nombre de un fichero remoto. Si se especifica en el parámetro NEW una ruta distinta, el archivo será
movido de directorio.
Ejemplo:
<eBD:FTPRENAME FTP="my_ftp" ERR="error" NEW="new_image.jpg" OLD="old_image.jpg"/>
3.6.21. eBD:FTPRMDIR
Sintaxis:
<eBD:FTPRMDIR [RECURSIVE="1|0"] FTP="ftp_connection" ERR="varname" DIRECTORY="remote_dir"/>
Acción:
Borra un directorio remoto. Puede hacer borrados recursivos.
Ejemplo:
Manual de eBDML
38
3. INSTRUCCIONES EBDML
<eBD:FTPRMDIR FTP="my_ftp" ERR="error" DIRECTORY="images"/>
3.6.22. eBD:FTPSIZE
Sintaxis:
<eBD:FTPSIZE OUT="varname" FTP="ftp_connection" ERR="varname" REMOTE="remote_file"/>
Acción:
Guarda en OUT el valor del tamaño del archivo remoto.
Ejemplo:
<eBD:FTPSIZE OUT="size" FTP="my_ftp" ERR="error" REMOTE="image1.jpg"/>
Manual de eBDML
39
3. INSTRUCCIONES EBDML
3.7. Manipulación de datos
3.7.1. eBD:REPLACE
Sintaxis:
<eBD:REPLACE VAR="nombre" MATCH="regexp" REPLACE="valor" />
Acción:
Sustituye el patrón definido en el parámetro MATCH por el valor del parámetro REPLACE.
El parámetro MATCH es una expresión regular, de forma que se pueden recuperar los trozos incluidos entre
paréntesis con las variables $1, $2, etc. desde el REPLACE.
Ejemplo:
<eBD:REPLACE VAR="frase" MATCH="([aeiou])" REPLACE="-$1-"/>
3.7.2. eBD:LENGTH
Sintaxis:
<eBD:LENGTH VAR="varname" VALUE="value"/>
Acción:
Obtenemos la longitud de VALUE y dejamos el resultado en VARNAME.
Ejemplo:
<eBD:LENGTH VAR="longitud" VALUE="esto nos dara 16"/>
3.7.3. eBD:UNICODE
Sintaxis:
<eBD:UNICODE (VAR="varname" | GLOBAL="varname" | TEMPORAL="varname")
VALUE="value" FROM="charset" TO="charset"/>
Acción:
Pasará el valor del parámetro VALUE del charset FROM al charset TO.
Ejemplo:
<eBD:UNICODE VALUE="buenos días" FROM="latin1" TO="utf8"/>
Manual de eBDML
40
3. INSTRUCCIONES EBDML
3.7.4. eBD:HTMLENCODE
Sintaxis:
<eBD:HTMLENCODE (VAR="varname" | GLOBAL="varname" | TEMPORAL="varname") VALUE="valor" />
Acción:
Esta rutina reemplaza carácteres inseguros en el valor por los elementos HTML correspondientes.
Los caracteres considerados peligrosos con caracteres de control, los caracteres <, &, >, " y los caracteres
cuyo código es mayor que 128 (high-bit).
Si se especifica una variable, se deja el resultado en la variable, en caso contrario se genera la salida al
documento HTML.
Ejemplo:
<eBD:HTMLENCODE VAR="test" VALUE="buenos diás."/>
3.7.5. eBD:HTMLDECODE
Sintaxis:
<eBD:HTMLENCODE (VAR="varname" | GLOBAL="varname" | TEMPORAL="varname" ) VALUE="valor" />
Acción:
Esta rutina reemplaza las entidades HTML por el correspondiente valor Unicode.
Si se especifica una variable, se deja el resultado en la variable, en caso contrario, se genera la salida al
documento HTML.
Ejemplo:
<eBD:HTMLDECODE VAR="test" VALUE="buenos días."/>
3.7.6. eBD:ENCODE
Sintaxis:
<eBD:ENCODE [VAR="varname"] VALUE="value" INTO="encoding" />
Acción:
Esta rutina codifica un texto en el formato indicado por el encoding, y lo almacena en la variable "varname".
Actualmente, el único encoding soportado es BASE64.
Ejemplo:
<eBD:ENCODE VAR="test" VALUE="buenos diás." INTO="BASE64"/>
Manual de eBDML
41
3. INSTRUCCIONES EBDML
3.7.7. eBD:DECODE
Sintaxis:
<eBD:DECODE [VAR="varname"] VALUE="value" FROM="encoding" />
Acción:
Esta rutina decodifica un texto codificado en el formato indicado por el encoding, y lo almacena en la variable
"varname". Actualmente, el único encoding soportado es BASE64.
Ejemplo:
<eBD:DECODE VAR="test" VALUE="$base64encoded" FROM="BASE64"/>
3.7.8. eBD:URIESCAPE
Sintaxis:
<eBD:URIESCAPE [VAR="varname" | GLOBAL="varname" | TEMPORAL="varname"]
VALUE="value" [ UTF8="1|0" ]/>
Acción:
Escapa los caracteres especiales que se encuentren en el valor "value" para convertirlo en una URL válida
segun el RFC 2396, y lo almacena en la variable indicada por var, global o temporal.
El parámetro UTF8 indica si se debe interpretar el texto original como utf8 o no.
Ejemplo:
<eBD:URIESCAPE VAR="url" VALUE="un parámetro" UTF8="1">
3.7.9. eBD:URIUNESCAPE
Sintaxis:
<eBD:URIUNESCAPE [VAR="varname" | GLOBAL="varname" | TEMPORAL="varname"]
VALUE="value" [ UTF8="1|0" ]/>
Acción:
Recupera los carácteres especiales que se habian escapado en "value" para obtener el texto original, y lo
almacena en la variable indicada por var, global o temporal.
El parámetro UTF8 indica si se debe interpretar el texto original como utf8 o no.
Ejemplo:
<eBD:URIESCAPE VAR="text" VALUE="$escaped_url" UTF8="1">
Manual de eBDML
42
3. INSTRUCCIONES EBDML
3.7.10. eBD:SERIALIZE
Sintaxis:
<eBD:SERIALIZE [VAR="varname"] VALUE="value" INTO="format"
[AUTOTYPE="0|1"] [METHOD="xmlrpc_method"] [METHODNAME="methodname"] />
Acción:
Serializa una estructura de datos compleja (formada por combinaciones de ARRAYS y HASHES), en un
escalar que representa esa estructura y se puede almacenar en una única variable.
Los formatos soportaros son XML-RPC o JSON
El parámetro AUTOTYPE indica si se deben generar los tags XML-RPC en funcion del tipo de datos de los
valores de forma automática.
El parámetro METHOD indica el tipo de XML que se quiere generar en caso de usar XML-RPC. Los posibles
valores son CALL, RESPONSE o FAULT.
En el caso de CALL, se usa el parámetro METHODNAME para indicar el nombre del metodo a llamar.
Ejemplo:
<eBD:SERIALIZE VAR="serialized" VALUE="$data" INTO="JSON">
<eBD:OUT VALUE="$serialized"/>
3.7.11. eBD:DESERIALIZE
Sintaxis:
<eBD:DESERIALIZE [VAR="varname"] VALUE="value" FROM="format" />
Acción:
Recupera una estructura de datos serializada en alguno de los formatos soportados por eBD:SERIALIZE: XMLRPC o JSON.
Ejemplo:
<eBD:DESERIALIZE VAR="data" VALUE="$serialized" FROM="JSON">
Manual de eBDML
43
3. INSTRUCCIONES EBDML
3.8. Manipulación de ficheros
3.8.1. eBD:TMPFILE
Sintaxis:
<eBD:TMPFILE (SOURCE="varname" | VALUE="value" | FILEPATH="value" |
TABLE="value" IDFIELD="value" IDVALUE="value" ADDWHERE="value" FIELD="value")
VAR="varname" [NAME="value" | MAXSIZE="number" | EXTENSION="ext" |
MODE="binary|text" | CHARSET="charset"] />
Acción:
Crea un archivo temporal y dejara el puntero al archivo en la variable VAR.
El contenido puede venir, o de un input de tipo "file" (SOURCE), de un valor especifico VALUE o del campo
fichero de una tabla.
Se puede devolver un tmpfile como un archivo dinámico o una función de Web Service, así como crear el
fichero a partir de una URL de un FILEPATH directamente.
También se le puede especificar la extensión que tendrá el fichero, mediante EXTENSION.
Ejemplo:
<eBD:TMPFILE SOURCE="imagen" VAR="fichero_source"/>
<eBD:TMPFILE VALUE="esto sera el valor del fichero" VAR="ficherotxt"/>
<eBD:TMPFILE TABLE="test" IDFIELD="idtest" IDVALUE="22" FIELD="imagen" VAR="copia_imagen"/>
3.8.2. eBD:READ
Sintaxis:
<eBD:READ FILE="varname" SIZE="size_bytes" BUFFER="varname" [VAR="bytes_read"] />
Acción:
Lee del fichero temporal especificado en FILE el numero de bytes en SIZE y lo almacena en la variable
BUFFER.
Si se especifica el parámetro VAR se guardara el numero de bytes leidos.
Ejemplo:
<eBD:READ FILE="fichero_source" SIZE="500" BUFFER="todo"/>
Ejemplo de uso:
Creación de un fichero dinámico que retorna un fichero almacenado en una tabla.
<eBD:CODE>
<eBD:DOC> Vamos a leer en bloques de 64Kbtes </eBD:DOC>
<eBD:SET VAR="bytes" VALUE="65536"/>
<eBD:TMPFILE TABLE="tmp_ficheros" FIELD="fichero" IDFIELD="idfichero" IDVALUE="2" VAR="mi_pdf"/>
<eBD:SET VAR="bytesleidos" VALUE="$bytes"/>
<eBD:WHILE EXPR="$bytesleidos=$bytes">
Manual de eBDML
44
3. INSTRUCCIONES EBDML
<eBD:READ FILE="mi_pdf" SIZE="$bytes" BUFFER="tmp" VAR="bytesleidos"/>
<eBD:SET VAR="resultado" VALUE="$resultado$tmp"/>
</eBD:WHILE>
<eBD:OUT VALUE="$resultado"/>
</eBD:CODE>
3.8.3. eBD:READLINE
Sintaxis:
<eBD:READLINE FILE="varname" (VAR="varname" | ADDTO="varname") />
Acción:
Lee una linea del fichero temporal especificado en FILE y se guardar en la variable VAR, o se concatena con la
variable especificada en ADDTO.
Ejemplo:
<eBD:READLINE FILE="fichero_source" ADDTO="todo"/>
3.8.4. eBD:WRITE
Sintaxis:
<eBD:WRITE FILE="varname" (VALUE="value" | EXPR="expression") />
Acción:
Escribe en el posición acutal del puntero del fichero FILE el contenido o expresión especificada.
Ejemplo:
<eBD:WRITE FILE="fichero_source" VALUE="se añade al fichero...."/>
3.8.5. eBD:SEEK
Sintaxis:
<eBD:SEEK FILE="varname" TO="bytes" />
Acción:
Posiciona el puntero del fichero FILE en el byte especificado en TO.
Ejemplo:
<eBD:SEEK FILE="fichero_source" TO="0"/>
3.8.6. eBD:XSLTPROC
Sintaxis:
<eBD:XSLTPROC XSLT="template_name" INPUT="varname" [VAR="varname"] [OUTPUT="TMPFILE"]
[TYPE="PDF"] />
Acción:
Manual de eBDML
45
3. INSTRUCCIONES EBDML
Ejecuta una transformacion XSLT sobre un string o fichero temporal que contiene datos XML.
La variable indicada en INPUT puede ser un escalar o un fichero creado con TMPFILE.
La variable indicado en VAR contendra el resultado como un escalar, o como un TMPFILE si se ha
especificado asi con el parámetro OUTPUT.
El parámetro TYPE permite forzar la ejecución del proceso FOP para generar el documento PDF a partir del
resultado de la transformación.
Ejemplo:
<eBD:XSLTPROC XSLT="xml_to_html" INPUT="xmlfile" VAR="data" OUTPUT="TMPFILE" />
3.8.7. eBD:EXTRACT
Sintaxis:
<eBD:EXTRACT FILE="tmpfile" [VAR="array"] [CHARSET="charset"] />
Acción:
Devuelve un array de TMPFILEs con todos los ficheros que estaban comprimidos en el TMPFILE original. Los
posibles formatos que soporta la instruccion extract son: zip, tgz, tar.gz, gz, tar, jar, par, tbz, tar.bz2, bz2, lzma,
Z
El parámetro opcional "CHARSET" permite definir el charset en el que están codificados los nombres de los
ficheros dentro del archivo comprimido.
Las claves que podemos usar en el array son "name" y "path", donde name nos devolverá el nombre del
fichero, y path, su ruta.
<eBD:EXTRACT FILE="fichero" VAR="extracted" />
<ebd:foreach array="extracted" iterator="file">
<ebd:out value="Fichero subido! @file{name}"/><br>
</ebd:foreach>
Manual de eBDML
46
3. INSTRUCCIONES EBDML
3.9. Manipulación de Imágenes
3.9.1. eBD:IMGCREATE
Sintaxis:
<eBD:IMGCREATE VAR="imgvar" ( WIDTH="pixels" HEIGHT="pixels" [TRUECOLOR="1|0"] |
TMPFILE="tmpfile" )/>
Acción:
Crea una imagen vacia, con las dimensiones indicadas. Puede crearse en modo truecolor o no (usara una
paleta). Si se usa la opcion TMPFILE, creará la imagen a partir de un fichero temporal previamente abierto con
TMPFILE.
Ejemplo:
<eBD:IMGCREATE VAR="img" WIDTH="$w" HEIGHT="$h" TRUECOLOR="1" />
<eBD:IMGCREATE VAR="img" TMPFILE="tmpFileName" />
3.9.2. eBD:IMGINFO
Sintaxis:
<eBD:IMGINFO IMG="imgvar" [WIDTH="varname"] [HEIGHT="varname"] />
Acción:
Devuelve la anchura y la altura de la imagen.
Ejemplo:
<eBD:IMGINFO IMG="img" WIDTH="w" HEIGHT="h" />
<eBD:OUT VALUE="Ancho: $w, Alto: $h"/>
3.9.3. eBD:IMGCOLOR
Sintaxis:
<eBD:IMGCOLOR IMG="image_var" ( ALLOCATE="(XXXXXX|r,g,b)" VAR="index" |
DEALLOCATE="colorindex" |
COUNT="varname" |
CLOSEST="(XXXXXX|r,g,b)" [USEHWB="(0|1)"] VAR="index" |
EXACT="(XXXXXX|r,g,b)" VAR="index" [ALLOC="(0|1)"] |
PIXEL="x,y" VAR="varname" |
INDEX="index" VAR="varname" |
TRANSPARENT="(FFFFFF|r,g,b)" ) />
Acción:
Permite realizar varias operaciones sobre la paleta de colores de una imagen. Los parámetros XXXXXXXX
representan un codigo RGB en hexadecimal (6 caracteres).
Ejemplo:
Manual de eBDML
47
3. INSTRUCCIONES EBDML
<eBD:IMGCOLOR IMG="imgvar" ALLOCATE="r,g,b" VAR="index" />
Añade un color especificado por los componentes RGB a la paleta.
<eBD:IMGCOLOR IMG="imgvar" DEALLOCATE="index" />
Elimina el color indicado por el indice de la paleta.
<eBD:IMGCOLOR IMG="imgvar" CLOSEST="r,g,b" USEHWB="1" VAR="index" />
Devuelve el indice del color de la paleta que mas se parece al que estamos buscando,
según los componentes RGB. Si se usa el parámetro USEHWB, buscara el color mas parecido
según los componentes HWB, que se acercan mas a la percepción humana.
<eBD:IMGCOLOR IMG="imgvar" EXACT="r,g,b" ALLOCATE="1" VAR="index" />
Busca el color indicado por los componentes RGB en la paleta y devuelve el indice.
Si no encuentra el color, y se ha usado el parámetro ALLOCATE, se añade el color
a la paleta automaticamente.
<eBD:IMGCOLOR IMG="imgvar" PIXEL="x,y"
VAR="color" />
(color = r,g,b)
Devuelve los componentes RGB del color con el que esta pintado el pixel indicado.
<eBD:IMGCOLOR IMG="imgvar" INDEX="index" VAR="color" /> (color = r,g,b)
Devuelve los componentes RGB de la posición indicada de la paleta.
<eBD:IMGCOLOR IMG="imgvar" TRANSPARENT="r,g,b" />
Activa el flag de transparencia para el color indicado de la paleta.
3.9.4. eBD:IMGDRAW
Sintaxis:
<eBD:IMGDRAW IMG="image_var" [ANTIALIAS="(FFFFFF|r,g,b)"]
( FILL="x,y" [THICKNESS="pixels"]
( COLOR="(FFFFFF|r,g,b)" | FILLCOLOR="(FFFFFF|r,g,b)" | STYLE="color1;color2;..." ) |
ELLIPSE="cx,cy,width,height" [THICKNESS="pixels"]
( COLOR="(FFFFFF|r,g,b)" | FILLCOLOR="(FFFFFF|r,g,b)" | STYLE="color1;color2;..." ) |
RECT="x1,y1,x2,y2" [THICKNESS="pixels"]
( COLOR="(FFFFFF|r,g,b)" | FILLCOLOR="(FFFFFF|r,g,b)" | STYLE="color1;color2;..." ) |
STRING="text" DIRECTION="(V|H)" COLOR="(FFFFFF|r,g,b)"
[FONT="font-name|(size;rotation angle)"] [START="x,y"] |
ARC="cx,cy,w,h,start,end" [THICKNESS="pixels"]
( COLOR="(FFFFFF|r,g,b)" | FILLCOLOR="(FFFFFF|r,g,b)" | STYLE="color1;color2;..." ) |
LINE="x1,y1,x2,y2" [THICKNESS="pixels"]
( COLOR="(FFFFFF|r,g,b)" | FILLCOLOR="(FFFFFF|r,g,b)" | STYLE="color1;color2;..." ) |
) />
Acción:
Permite dibujar elementos geometricos sobre la imagen.
Ejemplo:
Manual de eBDML
48
3. INSTRUCCIONES EBDML
<eBD:IMGDRAW IMG="imgvar" LINE="0,0,10,10" COLOR="$color" THICKNESS="$t"/>
Dibuja una linea desde 0,0 hasta 10,10, de "$t" pixels de anchura.
<eBD:IMGDRAW IMG="imgvar" RECT="0,0,100,100" COLOR="$color" STYLE="$color1,$color2" />
Dibuja un rectangulo desde 0,0 hasta 100,100, alternando los pixels entre 2 colores.
<eBD:IMGDRAW IMG="imgvar" FILL="x,y" COLOR="$index" />
Rellena el area de la imagen que contenga el mismo color de forma contigua,
empezando por las coordenadas 50,50 con el color $index.
<eBD:IMGDRAW IMG="imgvar" STRING="Hello" START="20,20" COLOR="$c" FONT="MEDIUM" />
Escribe el string "texto" en las coordenadas 20,20. El parámetro font indica
el tamaño del texto pudiendo ser uno de los siguientes valores:
GIANT, LARGE, MEDIUM, SMALL, TINY.
Se pueden utilizar tipografias de tipo TrueType para introducir texto en la imagen, añadiendo
el archivo de la tipografia dentro del directorio /userdata/resources/fonts/
Y especificando en el parámetro font la cadena:
archivo.ttf;tamaño(ppp);ángulo de rotacion(grados)
por ejemplo: FONT="arial.ttf;20;5"
3.9.5. eBD:IMGTRANSFORM
Sintaxis:
<eBD:IMGTRANSFORM IMG="image_var"
( ROTATE="degrees" |
CLIP="x1,y1,x2,y2" |
SCALE="width,height" [ASPECTRATIO="(1|0)"] |
FLIP="(H|V)" ) />
Acción:
Permite realizar diferentes transformaciones sobre la imagen.
Ejemplo:
<eBD:IMGTRANSFORM IMG="imgvar" FLIP="H" />
Voltea la imagen horizontalmente.
<eBD:IMGTRANSFORM IMG="imgvar" ROTATE="90" />
Hace una rotación de la imagen de 90 grados en el sentido horario.
<eBD:IMGTRANSFORM IMG="imgvar" SCALE="100,*" ASPECTRATIO="1" />
Escala la imagen a 100 pixels de anchura, manteniendo la relacion de aspecto.
Los parámetros width y height se pueden indicar en pixels o en porcentage, usando
el carácter % al final. Por ejemplo: SCALE="50%,*"
<eBD:IMGTRANSFORM IMG="imgvar" CLIP="10,10,50,50" />
Recorta el trozo de la imagen indicado por el parámetro CLIP (desde 10,10 hasta 50,50).
Manual de eBDML
49
3. INSTRUCCIONES EBDML
3.9.6. eBD:IMGCOPY
Sintaxis:
<eBD:IMGCOPY SRC="image_var" FROM="x,y,width,height" DST="image_var"
TO="x,y(,width,height)?" [ROTATE="degrees"]/>
Acción:
Copia un trozo de una imagen sobre otra, permitiendo realizar una transformación de escalado o rotación al
mismo tiempo.
Ejemplo:
<eBD:IMGCOPY SRC="imgvar" FROM="0,0,100,100" DST="imgvar2" TO="0,0" />
Copia el trozo de la imagen imgvar entre 0,0 y 100,100 sobre la imagen imgvar2
(en las coordenadas 0,0).
3.9.7. eBD:IMGFILTER
Sintaxis:
<eBD:IMGFILTER IMG="src_image_var" (PIXELIZE="tgt_image_var" |
OILIFY="tgt_image_var" (SEED="seed") |
CHANNEL="1" [GREEN="tgt_image"] [BLUE="tgt_image"] [RED="tgt_image"] |
POSTERIZE="tgt_image_var" |
SOLARIZE="tgt_image_var" (SEED="seed") |
ERASELINE="tgt_image_var" [THICKNESS="linewidth"]
[COLOR="(colorname|XXXXXX|r,g,b)"] [ORIENTATION="H|V"] |
GREYSCALE="tgt_image_var" |
SWIRL="tgt_image_var" |
SHARPEN="tgt_image_var" |
BLUR="tgt_image_var" |
INVERT="tgt_image_var" |
EDGE="tgt_image_var" |
GAUSSIAN="tgt_image_var" |
TWIRL="tgt_image_var" |
RIPPLE="tgt_image_var" |
FLOYD="tgt_image_var" |
LEVEL="tgt_image_var" (LIMIT="level") |
ROTATE="tgt_image_var" |
EMBOSS="tgt_image_var")
/>
Acción:
Permite aplicar distintos efectos sobre la imagen.
Ejemplo:
Manual de eBDML
50
3. INSTRUCCIONES EBDML
<eBD:IMGFILTER BLUE="imgvar"/>
Aplica un efecto de desenfocado sobre la imagen imgvar.
<eBD:IMGFILTER SOLARIZE="imgvar" SEED="128"/>
Aplica un efecto de solarizado sobre la imagen imgvar.
3.9.8. eBD:IMGGRAPH
Sintaxis:
<eBD:IMGGRAPH IMG="varname" TYPE="(lines|bars|hbars|points|linespoints|area|mixed|pie)"
WIDTH="width" HEIGHT="height" [TRANSPARENT="(0|1)"] [EXTENDED="hash_varname"]>
<eBD:IMGGRAPHDS [DSTYPE="(lines|bars|hbars|points|linespoints|area)"] DATASET="array_varname"/> +
</eBD:IMGGRAPH>
Acción:
Permite generar varios tipos de gráficas usando los DataSets proporcionados por las instrucciones
eBD:IMGGRAPHDS. El parámetro EXTENDED permite definir varios parámetros extendidos mediante un
HASH. Los posibles parámetros a usar dependen del tipo de gráfica que se va a generar.
parámetros para cualquier gráfica:
width, height
t_margin, b_margin,
l_margin, r_margin
dimensiones de la grafica a dibujar.
margenes laterales que se deben dejar. (top,bottom,left y right)
interlaced
indica si la imagen generada sera entrelazada o no (default: 1)
parámetros sobre colores:
bgclr
fgclr
boxclr
accentclr
shadowclr
color
color
color
color
color
de
de
de
de
de
fondo de la grafica
los ejes y la regilla
relleno de la caja definida por los ejes
resaltado en las graficas "bar","area" y "pie"
la sombra en las graficas "bar"
shadow_depth
anchura de la sombra. Puede ser positiva => sombra derecha/inferior,
o negativa => sombre izquierda/superior
labelclr
axislabelclr
legendclr
valuesclr
textclr
Manual de eBDML
color
color
color
color
color
usado
usado
usado
usado
usado
para
para
para
para
para
las etiquetas de los ejes
los valores de los ejes
la leyenda
los valores
cualquier otro texto
51
3. INSTRUCCIONES EBDML
dclrs
colores usados para los dataset. Este parámetro debe ser una
referencia a un array de colores, que indicaran los colores para
cada dataset segun su posicion.
borderclrs
colores para los borsers de los dataset en graficas "bar". Sigue la
misma estructura que dclrs.
cycle_clrs
Indica si la secuencia de colores especificada por dclrs se usa
por dataset o por valor.
parámetros para gráficas con ejes:
x_label
y_label
Etiqueta para el eje X
Etiqueta para el eje Y
long_ticks
Las marcas de los ejes deben tener la misma longitud que los ejes
tick_length
Longitud de las marcas de los ejes (si long_ticks es 0)
Se pueden especificar independientemente para el eje x o y,
usando x_long_ticks, y_long_ticks, x_tick_length y y_tick_length.
x_ticks
Indica si se deben dibujar las marcas del eje X
y_tick_number
Numero de marcas que se deben dibujar en el eje Y
x_label_position
Posicion de la etiqueta X definida con un valor entre 0 y 1.
(0 => alineada a la izquierda, 1 => alineada a la derecha)
y_label_position
Posicion de la etiqueta X definida con un valor entre 0 y 1.
(0 => alineada abajo, 1 => alineada arriba)
x_labels_vertical
Indica si las etiquetas del eje X deben escribirse verticalmente
x_plot_values
y_plot_values
Indica si se deben dibujar los valores de las marcas del eje X
Indica si se deben dibujar los valores de las marcas del eje Y
box_axis
no_axes
Indica si se deben dibujar los ejes como una caja
Desactiva el dibujado de los ejes
zero_axis
zero_axis_only
Indica si se debe dibujar el eje 0.
Solo se debe dibujar el eje 0 (no se mostrará el eje X habitual)
y_max_value
y_min_value
Valor maximo a mostrar en el eje Y
Valor minimo a mostrar en el eje Y
axis_space
text_space
Espacio entre el eje y las etiquetas de las marcas de los ejes.
Espacio entre los textos (titulo y etiquetas) y la grafica
cumulate
overwrite
Dibuja las graficas acumulando los valores de los DataSet.
Dibuja las graficas superponiendo los valores de los DataSet.
show_values
Muestra los valores de cada punto de la grafica
Manual de eBDML
52
3. INSTRUCCIONES EBDML
values_vertical
values_space
Muestra los valores de cada punto verticalmente
Espacio entre los valores y el punto en la grafica
parámetros para gráficas de barras:
bar_width
bar_spacing
Anchura de la barra en pixels.
Espacio entre barras
parámetros para gráficas de lineas:
line_types
Tipo de lineas. Debe ser un array de numeros, (uno para cada DataSet),
donde el valor indica el tipo de linea
1 => solida
2 => guiones
3 => puntos
4 => punto/guion
line_type_scale
Longitud de los guiones en los tipos de linea 3 y 4
line_width
Anchura en pixels de la linea
skip_undef
Creara un salto en la linea si se encuentra un valor no definido
parámetros para gráficas de puntos:
markers
Tipo de puntos. Debe ser un array de numeros, (uno para cada DataSet),
donde el valor indica el tipo de punto:
1 => cuadrado relleno,
2 => cuadrado abierto
3 => cruz horizontal,
4 => cruz diagonal,
5 => rombo relleno,
6 => rombo abierto,
7 => circulo relleno,
8 => circulo abierto,
9 => linea horizontal,
10 => linea vertical
marker_size
Tamaño del punto en pixels
parámetros para tartas:
3d
pie_height
start_angle
suppress_angle
label
Manual de eBDML
Indica si se debe dibujar la tarta en 3d
Altura de la tarta en pixels
Angulo de inicio por el que se debe empezar a rellenar la tarta.
Angulo minimo para que un valor se represente en la tarta
Etiqueta a escribir bajo la tarta
53
3. INSTRUCCIONES EBDML
Ejemplo:
<eBD:VAR
<eBD:SET
<eBD:SET
<eBD:SET
NAME="options" TYPE="HASH"/>
VAR="options" INDEX="x_label" VALUE="Posiciones"/>
VAR="options" INDEX="y_label" VALUE="Valores"/>
VAR="options" INDEX="title" VALUE="Titulo"/>
<eBD:IMGGRAPH IMG="imagen" TYPE="bars" WIDTH="300" HEIGHT="400" EXTENDED="$options">
<eBD:IMGGRAPHDS DATASET="$datos"/>
</eBD:IMGGRAPH>
3.9.9. eBD:IMGSAVE
Sintaxis:
<eBD:IMGSAVE IMG="imgvar" TMPFILE="file" FORMAT="jpg|png|gif" [NAME="filename"]
[QUALITY="png:9-1,jpeg:1-100"] />
Acción:
Guarda la imagen en el fichero temporal, usando el formato indicado.
Ejemplo:
<eBD:IMGSAVE IMG="imgvar" TMPFILE="file" FORMAT="jpg" JPEGQUALITY="80" />
Manual de eBDML
54
3. INSTRUCCIONES EBDML
3.10. Acceso a buzones IMAP
3.10.1. eBD:IMAP
Sintaxis:
<eBD:IMAP SERVER="server_address" [PORT="143"]
USERNAME="username" PASSWORD="password" VAR="varname"/>
Acción:
Conecta con un servidor IMAP y almacena la conexión en la variable varname
Ejemplo:
<eBD:IMAP SERVER="$my_server_ip" USERNAME="$user" PASSWORD="$pwd" VAR="imap"/>
3.10.2. eBD:IMAP_COPY
Sintaxis:
<eBD:IMAP_COPY IMAP="varname" ID="message_id"
FROM="INBOX.folder.name" TO="INBOX.folder.other.name"/>
Acción:
Copia un mensaje de un mailbox (o carpeta) a otro
Ejemplo:
<eBD:IMAP_COPY IMAP="$imap" ID="$id" FROM="INBOX" TO="INBOX.folder"/>
3.10.3. eBD:IMAP_CREATE
Sintaxis:
<eBD:IMAP_CREATE IMAP="varname" MAILBOX="INBOX.folder.name" />
Acción:
Crea una nueva carpeta o mailbox
Ejemplo:
<eBD:IMAP_CREATE IMAP="$imap" MAILBOX="INBOX.other" />
3.10.4. eBD:IMAP_DELETE
Sintaxis:
<eBD:IMAP_DELETE IMAP="varname" MAILBOX="INBOX.folder.name" [ ID="message_id" ] />
Acción:
Borra todo un mailbox (o carpeta) o sólo un mensaje de esa carpeta (si se indica el parámetro ID).
Ejemplo:
Manual de eBDML
55
3. INSTRUCCIONES EBDML
<eBD:IMAP_DELETE IMAP="$imap" MAILBOX="INBOX.folder" ID="$message_id"/>
3.10.5. eBD:IMAP_GET
Sintaxis:
<eBD:IMAP_GET IMAP="varname" MAILBOX="INBOX.folder.name"
[ SEARCH="search_hash" ] [ ID="message_id" ] [ STRINGIFY="1|0" ] VAR="[string|list|hash]"/>
Acción:
Obtiene la lista de mensages de un mailbox, o descarga el mensaje de ese mailbox identificado con el
parámetro ID. El parámetro STRINGIFY indica si el mensaje debe descargarse como una estructura de datos
(HASH) o como un string (código fuente del mensaje).
El parámetro SEARCH permite realizar búsquedas en el FROM, TO o SUBJECT de los mensajes, si no se
especifica por defecto su valor será 'All'.
Ejemplo:
<eBD:IMAP_GET IMAP="$imap" MAILBOX="INBOX" VAR="headers"/>
<eBD:IMAP_GET IMAP="$imap" MAILBOX="INBOX" ID="$message_id" VAR="msg_content"/>
<eBD:SET VAR="search" INDEX="from" VALUE="ebdsoft.com"/>
<eBD:SET VAR="search" INDEX="to" VALUE="cjuan"/>
<eBD:SET VAR="search" INDEX="subject" VALUE="this is a message"/>
<eBD:IMAP_GET IMAP="$imap" MAILBOX="INBOX" SEARCH="$search" VAR="messages"/>
3.10.6. eBD:IMAP_MAILBOXES
Sintaxis:
<eBD:IMAP_MAILBOXES IMAP="varname" [ MAILBOX="INBOX.folder" ] VAR="arrayname"/>
Acción:
Devuelve el arbol de mailboxes o carpetas de la raiz, o solo las subcarpetas de una carpeta concreta (si se
identifica con el parámetro MAILBOX).
Ejemplo:
<eBD:IMAP_MAILBOXES IMAP="$imap" VAR="foldertree"/>
<eBD:IMAP_MAILBOXES IMAP="$imap" MAILBOX="INBOX.folder" VAR="subfolders"/>
Manual de eBDML
56
3. INSTRUCCIONES EBDML
3.10.7. eBD:IMAP_RENAME
Sintaxis:
<eBD:IMAP_RENAME IMAP="varname" MAILBOX="INBOX.folder.name" TO="INBOX.folder.other"/>
Acción:
Renombra un mailbox o carpeta
Ejemplo:
<eBD:IMAP_RENAME IMAP="$imap" MAILBOX="INBOX.folder.name" TO="INBOX.folder.other"/>
3.10.8. eBD:IMAP_LOGOUT
Sintaxis:
<eBD:IMAP_LOGOUT IMAP="varname"/>
Acción:
Cierra la conexión con el servidor IMAP.
Ejemplo:
<eBD:IMAP_LOGOUT IMAP="$imap"/>
3.10.9. eBD:IMAP_FLAGS
Sintaxis:
<eBD:IMAP_FLAGS IMAP="varname" MAILBOX="INBOX.folder.name" ID="message_id"
ADD="\Seen|\Draft|\Answered|\Flagged|\Deleted|\Recent|my_label_1"
REMOVE="\Seen|\Draft|\Answered|\Flagged|\Deleted|\Recent|my_label_1"/>
Acción:
Modifica el estatus de los flags de los mensajes. Pueden ser flags definidos por el usuario o del sistema (que
empiezan por una barra invertida), estos puedes ser:
\Seen \Answered \Flagged \Deleted \Draft \Recent
Ejemplo:
<eBD:IMAP_FLAGS IMAP="$imap" MAILBOX="INBOX" ID="$message_id" ADD="\Seen,my_label_1"
REMOVE="\Answered,my_label_2"/>
Manual de eBDML
57
3. INSTRUCCIONES EBDML
3.10.10. eBD:IMAP_STATUS
Sintaxis:
<eBD:IMAP_STATUS IMAP="varname" MAILBOX="INBOX.folder.name" VAR="hashname"/>
Acción:
Devuelve el número total de emails en la carpeta y el número de emails no leidos.
Ejemplo:
<eBD:IMAP_STATUS IMAP="$imap" MAILBOX="INBOX" VAR="num_of_messages"/>
Manual de eBDML
58
3. INSTRUCCIONES EBDML
3.11. Varios
3.11.1. eBD:LOGIN
Sintaxis:
<eBD:LOGIN USERNAME="usuario" PASSWORD="password"/>
Acción:
Hace login en eBD con el usuario (USERNAME).
Ejemplo:
<eBD:LOGIN USERNAME="$username" PASSWORD="$pass"/>
3.11.2. eBD:FORCELOGIN
Sintaxis:
<eBD:FORCELOGIN USERNAME="usuario" [TYPE="EBD|REMOTE"] />
Acción:
Hace login sin necesidad de password en eBD con el usuario (USERNAME).
Sino especificamos el type sera en cualquiera de ellos.
Se puede utilizar FORCELOGIN sobre usuarios administradores, siempre y cuando estubiera logado
anteriormente dentro de la misma request.
Ejemplo:
<eBD:FORCELOGIN USERNAME="anonimo" TYPE="EBD"/>
3.11.3. eBD:LOGOUT
Sintaxis:
<eBD:LOGOUT/>
Acción:
Hace logout en eBD y deja la sesión logueada como usuario Anónimo. No se pierden los atributos de la sesión
tras un logout (no se cierra la sesión), tan solo se cambia el atributo de usuario, manteniendo el resto de
atributos como la zona o variables globales.
3.11.4. eBD:INFOUSER
Sintaxis:
<eBD:INFOUSER [INFOHASH="varname"] [GROUPSARRAY="varname"] [GROUPSHASH="varname"]/>
Acción:
Sirve para conseguir información sobre el usuario. Si tenemos INFOHASH obtendremos información personal
sobre el usuario en una variable llamada "varname" de tipo HASH. Si utilizamos la opción GROUPSARRAY,
obtendremos un array con todos los grupos de usuarios a los que pertenece el usuario. Si por el contrario,
usamos GROUPSHASH dispondremos de un hash en cuyas claves tendremos todos los grupos del usuario
con valor '1'.
Dentro del infohash tendremos:
Manual de eBDML
59
3. INSTRUCCIONES EBDML
address
dirección
region
region
phone
telefono
city
ciudad
name
nombre completo
cp
codigo postal
email
email
username
nombre de usuario
admin
indica si es administrador de proyecto o no
Ejemplo:
<eBD:INFOUSER INFOHASH="datos"/>
<eBD:OUT VALUE="@datos{address}"/>
3.11.5. eBD:INFOFILE
Sintaxis:
<eBD:INFOFILE FILE="file" HASH="varname" [TYPE="type" METATAGS="1|S|Y"]/>
Acción:
Nos crea un hash con la siguiente información de un fichero:
ext
extensión del fichero
full_path
path completo al fichero
size
tamaño del fichero en bytes.
metatags
en caso de poner los metatgs crea un hash con todos los metatags del fichero.
Si el campo es una imagen y se especifica el parámetro TYPE="IMAGE", se obtienen tambien los campos:
width
anchura en caso de ser una imagen
height
altura en caso de ser una imagen
Si el campo es un pdf, también se guardara la información del documento en los siguientes campos:
ModDate, PDF version, Page size, Pages, Creator, Encrypted, Title, File size, CreationDate, Producer,
Optimized, Tagged.
Ejemplo:
Manual de eBDML
60
3. INSTRUCCIONES EBDML
<eBD:INFOFILE FILE="/files/1-149-pdffile/triptic.pdf" HASH="datos" TYPE="PDF"/>
3.11.6. eBD:FILEPATH
Sintaxis:
< eBD:FILEPATH [VAR="varname"] [TABLEID="value"|TABLE="tablaname"] ROW="value" FIELDNAME="value" [DOWN
Acción:
Monta la url para cualquier fichero de cualquier tabla. En el ROW deberemos poner el nombre de la fila del
fetchrow, o la referéncia a un HASH.
Ejemplo:
<eBD:FILEPATH VAR="path" TABLEID="49" ROW="test" FIELDNAME="userfile"/>
<eBD:OUT VALUE="@datos{Pages} - @datos{size}"/>
3.11.7. eBD:DAVPATH
Sintaxis:
< eBD:DAVPATH [VAR="varname"] WEBDAV="webdav_folder" FOLDERID="value" />
Acción:
Calcula la url correspondiente a la carpeta identificada por FOLDERID, según la estructura definida en la
carpeta WebDAV (WEBDAV).
Ejemplo:
<eBD:DAVPATH VAR="url" WEBDAV="/services/dav" FOLDERID="1"/>
3.11.8. eBD:WARN
Sintaxis:
<eBD:WARN VALUE="valor" />
Acción:
Muestra en el archivo de trazas de eBD y en el DEBUGER el valor especificado.
Es exactamente igual a la función eBD:OUT con la diferencia de que la salida no se produce a un documento
HTML sino al archivo de trazas y DEBUGER.
Ejemplo:
<eBD:WARN VALUE="valor de test:$test"/>
Manual de eBDML
61
3. INSTRUCCIONES EBDML
3.11.9. eBD:BR
Sintaxis:
<eBD:BR/>
Acción:
Instrucción utilizada dentro de <eBD:CODE>.
Fuerza a dar un salto de línea en el resultado.
Ejemplo:
<eBD:BR/>
3.11.10. eBD:EVAL
Sintaxis:
<eBD:EVAL [VAR="varname" | GLOBAL="varname" | TEMPORAL="varname"]/>
Acción:
Evalúa el contenido de la variable, es decir, si la variable vale '#param1' al hacer EVAL, ésta tomará el valor del
parámetro 1.
Ejemplo:
<eBD:SET VAR="test" VALUE="#param$num"/>
<eBD:EVAL VAR="test"/>
3.11.11. eBD:CODE
Sintaxis:
<eBD:code>
Código eBDML
</eBD:CODE>
Acción:
El código que incluyamos entre los dos TAGS no generará HTML.
Es especialmente útil cuando utilizamos archivos dinámicos para evitar tener saltos de líneas.
Si no utilizamos eBDCODE, cada tag eBDML se convierte en un salto de línea en HTML.
Ejemplo:
<eBD:CODE>
<eBD:OUT VALUE="este texo sale"/><eBD:BR/>
Esto no saldrá.<br>Porque no esta en el un eBD:OUT
</eBD:CODE>
Manual de eBDML
62
3. INSTRUCCIONES EBDML
3.11.12. eBD:DOC
Sintaxis:
<eBD:DOC > código eBDML y HTML </eBD:DOC >
Acción:
Comenta las líneas entre el tag eBD:DOC. No se evaluará el contenido dentro del tag.
Ejemplo:
<eBD:DOC>
....
</eBD:DOC>
Manual de eBDML
63
4. CONSIDERACIONES GENERALES
4. Consideraciones Generales
4.1. Tipos de variables
• Para hacer referencia a las variables locales se debe usar '$', para acceder a variables temporales '%$' y
para acceder a variables globales '%'
Código eBDML
Resultado
<eBD:VAR NAME="var1" DEFAULT="hello world!"/>
local: <eBD:OUT VALUE="$var1"/>
<br>
local: hello world!
temporal: hello temp!
global: hello global!
<eBD:SET VAR="temp" VALUE="hello temp!"/>
temporal: <eBD:OUT value="%$temp"/>
<br>
<eBD:SET VAR="glob" VALUE="hello global!"/>
global: <eBD:OUT value="%glob"/>
• Para obtener el número de elementos de un ARRAY se debe usar '@.
Código eBDML
Resultado
<eBD:VAR NAME="lista" TYPE="ARRAY"/>
<eBD:SET VAR="lista" INDEX="0" VALUE="valor0"/>
<eBD:SET VAR="lista" INDEX="1" VALUE="valor1"/>
Núm elementos: 2
Num elementos: <eBD:OUT VALUE="@lista"/>
• Para hacer referencia a los elementos de un ARRAY o un HASH usaremos '@ combinado con [] para
ARRAY y {} para HASH. Entre [] puede ir un valor o una variable.
Código eBDML
Resultado
<eBD:VAR NAME="lista" TYPE="ARRAY"/>
<eBD:SET VAR="lista" INDEX="0" VALUE="valor0"/>
<eBD:SET VAR="lista" INDEX="1" VALUE="valor1"/>
pos0: valor0
pos1: valor1
pos0: <eBD:OUT VALUE="@lista[0]"/>
<br>
<eBD:SET VAR="k" VALUE="1"/>
pos1: <eBD:OUT VALUE="@lista[$k]"/>
• Para obtener el valor de un atributo de un registro recuperado con un FETCHROW tenemos que usar
&[registro].[atributo]
Manual de eBDML
64
4. CONSIDERACIONES GENERALES
Código eBDML
Resultado
<eBD:QUERY NAME="puntero" DATASOURCE="principal">
QUERY SQL
</eBD:QUERY>
NOMBRE = (nombre)
<eBD:FETCHROW NAME="registro" QUERY="puntero"/>
NOMBRE= <eBD:OUT value="&registro.nombre"/>
NOTA: Usando '& delante del nombre de una query ejecutada con <eBD:QUERY nos devolverá el
número de registros que ha devuelto esa query.
Manual de eBDML
65
4. CONSIDERACIONES GENERALES
4.2. Expresiones
• Los operadores disponibles en las expresiones son:
Operadores matematicos
+ suma
- resta
* multiplicación
/ división
% módulo
** potencia
== igual
< menor
<= menor o igual
!= diferente
> mayor
>= mayor o igual
=~ match
!~ not match
Comparadores
Comparadores sobre strings
eq igual
lt menor
le menor o igual
ne diferente
gt mayor
ge mayor o igual
<< shift left
>> shift right
~ bitwise not
& bitwise and
| bitwise or
^ bitwise xor
|| or
! not
Operadores binarios
Operadores booleanos
&& and
• Expresiones para obtener valores de campos:
Si estamos programando una plantilla de una seccion tabla, podemos usar &Tabla.campo para mostrar un
campo de la seccion. Esta expresión mostrara el campo con todos los tags adicionales de estilo, enlaces, etc...
Si deseamos obtener únicamente el valor del campo, podemos usar &Tabla.campo:value.
Para mostrar la etiqueta de un campo, tal y como esta definida en "Campos a mostrar", podemos usar
&Tabla.campo:label.
En el caso de un campo basado en ficheros (Imagen, Fichero, Audio, Video...), para obtener la url absoluta del
fichero almacenado podemos usar &Tabla.campo:filepath.
Manual de eBDML
66
4. CONSIDERACIONES GENERALES
• Se pueden usar expresiones regulares.
Código eBDML
Resultado
<eBD:SET VAR="dia" VALUE="28/12/2001" />
<eBD:VAR NAME="expr" DEFAULT="(\d+)/(\d+)/(\d+)"/>
La fecha es:
Dia: 28
Mes: 12
<eBD:IF EXPR=" '$dia =~ '$expr">
La fecha es:
<br>
Dia: <eBD:OUT VALUE="$1"/>
<br>
Mes: <eBD:OUT VALUE="$2"/>
<br>
Año: <eBD:OUT VALUE="$3"/>
<eBD:ELSE>
NO ES UNA FECHA
</eBD:ELSE>
</eBD:IF>
Año: 2001
• Se puede usar \ para escapar aquellos caracteres especiales que no queremos que se interpreten
Código eBDML
Resultado
<eBD:SET VAR="var1" VALUE="test"/>
value: <eBD:OUT VALUE="$var1"/>
<br>
value: test
escaped: $var1
espaced: <eBD:OUT VALUE="\$var1"/>
• Podemos usar { y } para delimitar el nombre de una variable que queremos interpolar entre caracteres
estáticos.
Código eBDML
Resultado
<eBD:SET VAR="var1" VALUE="test"/>
value: <eBD:OUT VALUE="${var1}_demo"/>
value: test_demo
Manual de eBDML
67
4. CONSIDERACIONES GENERALES
4.3. Referencias y estructuras de datos
• Podemos recuperar un HASH con todos los argumentos que hemos recibido en la página usando la
variable global %_ARGS
Código eBDML
Resultado
<eBD:SET VAR="args" VALUE="%_ARGS"/>
<eBD:KEYS HASH="args" ARRAY="claves"/>
<eBD:FOREACH ARRAY="claves" ITERATOR="k">
Valor de <eBD:OUT VALUE="$k"/> es <eBD:OUT VALUE="@args{$k}"/>
<br>
</eBD:FOREACH>
• Se pueden crear referencias a variables de tipo complejo (ARRAY,HASH) usando $ en vez de @
Código eBDML
Resultado
<eBD:VAR NAME="lista" TYPE="ARRAY" />
<eBD:PUSH ARRAY="lista" VALUE="valor1"/>
<eBD:PUSH ARRAY="lista" VALUE="valor2"/>
valor1
valor2
<eBD:SET VAR="referencia" VALUE="$lista"/>
<eBD:FOREACH ARRAY="referencia">
<eBD:OUT VALUE="$iterator"/><br>
</eBD:FOREACH>
• Una función puede devolver una referencia a una variable de tipo complejo.
Código eBDML
Resultado
<!—codigo de la función get_listado -->
<eBD:VAR NAME="lista" TYPE="ARRAY" />
<eBD:PUSH ARRAY="lista" VALUE="valor1"/>
valor1
valor2
<eBD:PUSH ARRAY="lista" VALUE="valor2"/>
<eBD:RETURN VALUE="$lista"/>
<!-- codigo externo -->
<eBD:CALL FUNCTION="get_listado" VAR="referencia" />
<eBD:FOREACH ARRAY="referencia">
<eBD:OUT VALUE="$iterator"/><br>
</eBD:FOREACH>
Manual de eBDML
68
4. CONSIDERACIONES GENERALES
• El valor de un elemento de un ARRAY o un HASH puede ser una referencia a otra variable de tipo
ARRAY o HASH.
Código eBDML
Resultado
<eBD:VAR NAME="lista" TYPE="ARRAY" />
<eBD:PUSH ARRAY="lista" VALUE="valor1"/>
<eBD:PUSH ARRAY="lista" VALUE="valor2"/>
valor1
valor2
<eBD:VAR NAME="otra" TYPE="ARRAY"/>
<eBD:SET VAR="otra" INDEX="0" VALUE="$lista"/>
<eBD:SET VAR="copia" VALUE="@otra[0]"/>
<eBD:FOREACH ARRAY="copia">
<eBD:OUT VALUE="$iterator"/><br>
</eBD:FOREACH>
Manual de eBDML
69
4. CONSIDERACIONES GENERALES
4.4. Varios
• Utilización del HTTPGET y el XMLPARSER.
Código eBDML
Resultado
<eBD:HTTPGET VAR="xml" URL="..../download/eventos.txt"/>
<eBD:XMLPARSE VAR="arbol" VALUE="$xml"/>
Eventos:
2005-06-21 - Presentación
2005-06-29 - Formación
<p>
2005-06-21 - Reunión
<div style="font:11px Verdana,Arial,Helvetica,sans-serif;">
Eventos:
<eBD:IF EXPR="'$arbol' =~ 'HASH'">
<eBD:SET VAR="eventos" VALUE="@arbol{hijos}"/>
<eBD:OUT VALUE="hijos: $eventos"/>
<eBD:FOREACH ARRAY="eventos" ITERATOR="nodo">
<eBD:IF EXPR="'$nodo' =~ 'HASH'">
<eBD:SET VAR="attrs" VALUE="@nodo{atributos}"/>
<eBD:SET VAR="nombre" VALUE="@nodo{datos}"/>
<eBD:REPLACE VAR="nombre" MATCH="\n" REPLACE=" "/>
<eBD:OUT VALUE="@attrs{fecha}"/> - <eBD:OUT VALUE="$nombre"/>
</eBD:IF>
</eBD:FOREACH>
</eBD:IF>
• Utilización de TMPFILE para insertar o modificar un registro.
Código eBDML
Resultado
<eBD:ARGS NAME="send" DEFAULT="0"/>
- Inicialmente veremos un formulario,
con un input tipo file.
<eBD:IF EXPR="'$send' == '0'">
<form action="" method="post" ENCTYPE="multipart/form-data">
<input type="file" name="img">
<input type="submit" name="send" value="send">
</form>
<eBD:ELSE>
<eBD:TMPFILE SOURCE="img" VAR="curriculum"/>
<eBD:UPDATE TABLE="t_images" idfield="imageid" idvalue="17">
<eBD:DATAFIELD FIELD="img" VALUE="$curriculum"/>
</eBD:UPDATE>
El fichero se actualizó correctamente
</eBD:ELSE>
</eBD:IF>
Manual de eBDML
- Al hacer el submir, se guardará el
fichero y se mostrará el mensaje.
70
4. CONSIDERACIONES GENERALES
• Utilización de TMPFILE para enviar un mail.
Código eBDML
Resultado
<eBD:ARGS NAME="send" DEFAULT="0"/>
- Inicialmente veremos un formulario,
con un input tipo file.
<eBD:IF EXPR="'$send' == '0'">
<form action="" method="post" ENCTYPE="multipart/form-data">
<input type="file" name="img">
<input type="submit" name="send" value="send">
</form>
<eBD:ELSE>
- Al hacer el submir, se enviará el
mail y se mostrará el mensaje.
<eBD:TMPFILE SOURCE="img" VAR="curriculum"/>
<eBD:SENDMAIL FROM="me@my_domain.com"
TO="me@my_domain.com" SUBJECT="test">
<eBD:ATTACH FILE="curriculum"/>
<eBD:BODY>
message content
</eBD:BODY>
</eBD:SENDMAIL>
Mail enviado correctamnte
</eBD:ELSE>
</eBD:IF>
• Creación de una imagen a través de un archivo dinámico.
Código eBDML
Resultado
<eBD:CODE>
<eBD:IMGCREATE VAR="imgvar" WIDTH="100" HEIGHT="30"/>
<eBD:IMGDRAW IMG="imgvar" RECT="0,0,50,20" COLOR="00FFF0"/>
<eBD:IMGDRAW IMG="imgvar" STRING="My Image" START="18,7" COLOR="000000" FONT="MEDIUM"/>
<eBD:IMGSAVE IMG="imgvar" FORMAT="jpg"/>
</eBD:CODE>
Manual de eBDML
71
5. EJEMPLO
5. Ejemplo
5.1. Resumen de un pedido
El siguiente código es una sección que muestra el resumen de un pedido:
<eBD:QUERY NAME="query_carrito" DATASOURCE="principal">
SELECT * FROM carrito_procesados WHERE usuario = '#usuario'
</eBD:QUERY>
<eBD:IF EXPR="&query_carrito > 0">
<table border="0" cellpadding="0" cellspacing="0" width="590">
<tr>
<td align="left" height="21" NOWRAP><span class="titulo">Confirmar pedido</span></td>
<td width="99%" class="linia" align="left"><img src="void.gif"
width="1" height="1" border="0" alt=""></td>
</tr>
</table>
<table class="ter" width="100%" border="0">
<tr>
<td class="labels">Unidades</td>
<td class="labels">Referencia</td>
<td class="labels">Producto</td>
<td class="labels">Fabricante<td>
<td class="precio">Precio</td>
</tr>
<eBD:FOREACH QUERY="query_carrito" START="0">
<eBD:FETCHROW NAME="item" QUERY="query_carrito"/>
<tr> </tr>
<tr>
<td class="datos"><eBD:OUT VALUE="&item.cantidad"/></td>
<td class="datos"><eBD:OUT VALUE="&item.referencia"/></td>
<td class="datos" style="font-weight: bold">
<eBD:OUT VALUE="&item.articulo"/></td>
<td class="datos" style="font-weight: bold">
<eBD:OUT VALUE="&item.fabricante"/></td>
<td class="precio" style="font-weight: bold; color: gray">
<eBD:OUT VALUE="&item.precio"/> €</td>
<eBD:SET VAR="total_prod" EXPR="&item.quantitat*&item.precio"/>
<eBD:SET VAR="total" EXPR="$total+$total_prod"/>
</tr>
</eBD:FOREACH>
<tr style="border-bottom: 1px solid blue">
<eBD:SET VAR="total_iva" EXPR="$total*1.16"/>
<td class="cc" style="color: #209ddd; line-height: 12pt" colspan="6">
Subtotal<br/>
Total con IVA
</td>
<td class="precio" style="line-height: 12pt">
Manual de eBDML
72
5. EJEMPLO
<b><eBD:OUT VALUE="$total"/> €</b><br/>
<b><eBD:OUT VALUE="$total_iva"/> €</b>
</td>
</tr>
</table>
En la parte superior podemos ver una consulta llamada query_carrito a la base de datos principal. En esta
consulta seleccionamos aquellos registros de la tabla carrito_procesados cuyo campo usuario sea igual a
#usuario (función interna de eBD que indica el usuario que se ha logueado).
A continuación tenemos una instrucción if. Continuaremos ejecutando el código secuencialmente sólo si la
consulta query_carrito devuelve algún registro.
Después definimos una tabla (podemos usar estilos), en el primer <tr> tenemos los nombres de los campos.
La siguiente instrucción es un FOREACH (equivalente a la instrucción FOR de C) sobre la consulta hecha
anteriormente, el número de iteraciones es igual al número de registros devueltos por la consulta. Con
FETCHROW damos un nombre (ítem) al registro obtenido, démonos cuenta que para cada iteración este valor
será diferente.
En las siguientes instrucciones listamos ciertos campos de la tabla carrito_procesados. Para obtener estos
valores debemos utilizar la instrucción <eBD:OUT>, estos valores los colocaremos dentro de las celdas de la
tabla.
En la imagen superior tenemos el resultado del código. Esta tabla la hubiéramos podido hacer con una sección
tipo tabla pero usando código eBDML tenemos la posibilidad de personalizarla mucho más.
Manual de eBDML
73
ANEXOS.
Anexos.
Anexo A. Funciones Internas (#)
eBD proporciona una serie de funciones internas que se pueden utilizar en filtros, valores por defecto,
editor de expresiones, etc. Estas funciones dan acceso a un conjunto de funcionalidades o variables
internas, y están agrupadas en objetos abstractos según las funcionalidades que proporcionan. La
sintaxis para acceder a estos objetos es:
#[Nombre.funcion(p1,p2)] o #[Nombre.atributo]
Por ejemplo
#[eBDUser.Username]
Los objetos disponibles son:
eBDUser
Atributos:
Username -> string Devuelve el usuario actual
Name -> string Devuelve el nombre del usuario actual
Email -> string Devuelve el email del usuario actual
IsAdmin -> bool Devuelve S o N según sea o no administrador
IsAnonymous -> bool Devuelve S o N según sea el usuario anónimo o no
IsRemote -> bool Devuelve S o N dependiendo si se ha logado a través de un acceso remoto
SessionId -> string Devuelve el string identificador de la sesión
RemoteUserSource -> string Devuelve el nombre del Origen de Usuarios Remotos con el que se ha validado
el usuario actual
NTLMUser -> string Devuelve el nombre de usuario autenticado con NTLM
NTLMDomain -> string Devuelve el dominio usado para autenticar con NTLM
NTLMEnabled -> bool Es cierto si se ha autenticado el usuario con NTLM
Rejected -> bool Es cierto si se ha intentado autenticar con NTLM pero el usuario ha sido rechazado
Métodos
in_group(name) -> bool Recibe como parámetro el nombre de un grupo y devuelve 1 ó 0 dependiendo si el
usuario está o no en el grupo
set_attribute(name,value) -> Permite asignar el valor a un atributo del usuario (definido por el desarrollador)
get_attribute(name) -> string Devuelve el valor del atributo del usuario
eBDServer
Atributos
InstanceName -> string Devuelve el nombre de la instancia de eBD
InstancePath -> string Devuelve el path absoluto al "userdata" de la instancia actual.
Métodos
get_label(name) -> string Devuelve el valor de la etiqueta name configurada en el servidor (véase archivo
ebd.xml en el manual del Administrador)
Manual de eBDML
74
ANEXOS.
eBDSession
Atributos
Id -> int Devuelve el identificador de la sesión
Expired -> bool Indica si la sesión acaba de expirar o no
ExpirationInterval -> int Permite obtener el tiempo de expiracion de la sesion (en segundos)
Métodos
get_temporal(name) -> string Devuelve el valor de una variable temporal
set_temporal(name, string) -> int Modifica el valor de una variable temporal
get_global(name) -> string Devuelve el valor de una variable global
set_global(name, string) -> int Modifica el valor de una variable global
eBDProject
Atributos:
Name -> string Devuelve el nombre del proyecto
Id -> int Devuelve el identificador del proyecto
IsPublic -> bool Devuelve S o N dependiendo de si el proyecto es público o no
get_env -> string Permite acceder a las variables de entorno creadas en el proyecto.
eBDRequest
Atributos:
Language -> string Devuelve el ‘iso_lang’ del navegador del usuario
Url -> string Devuelve la URL actual sin el dominio, sólo carpetas y parámetros
Referer -> string Devuelve la URL completa de la página anterior
RequestMethod -> string Devuelve el método de la request actual
RequestProtocol -> string Devuelve el protocolo de la request actual
RemoteIp -> string Devuelve la IP del usuario
RemoteHost -> string Devuelve el dominio del usuario, si el servidor reconoce la IP
Https -> bool Indica si la request se ha ejecutado usando HTTPS o no
WebDAV -> bool Indica si la request es de tipo WebDAV o no
Host -> string Devuelve el dominio introducido por el usuario
Port -> string Devuelve el puerto que se está usando para la conexión HTTP
RemoteUser -> string Devuelve el usuario con el que se esta conectando
UserAgent -> string Devuelve es UserAgent del usuario, ‘navegador’
ParamX -> string Devuelve el valor del parámetro X indicado
Filename -> string Devuelve el nombre del fichero que solicita la request actual
GeoIPCountry -> string Devuelve el nombre del país desde el que está conectando el usuario (según su IP de
origen)
GeoIPCountryCode -> string Devuelve el código ISO del país desde el que está conectando el usuario (según
su IP de origen)
Métodos:
Manual de eBDML
75
ANEXOS.
get_param(name) -> string Devuelve el valor del parámetro especificado
get_params -> hash_of_string Devuelve un hash con todos los parámetros de la página
get_header(name) -> string Devuelve el valor de la cabecera HTTP especificada
get_headers -> hash_of_string Devuelve un hash con todas las cabeceras HTTP recibidas
get_cookie(name) -> string Devuelve el valor de la cookie especificada
get_cookies -> hash_of_string Devuelve un hash con todas las cookies recibidas
get_ssl_var(name) -> string Devuelve el valor de la variable de entorno SSL especificada. Las variables
disponibles son:
HTTPS
SSL_PROTOCOL
SSL_CIPHER
SSL_CLIENT_I_DN_O
SSL_CLIENT_I_DN_OU
SSL_CLIENT_S_DN_O
SSL_CLIENT_S_DN_OU
SSL_CLIENT_I_DN_CN
SSL_CLIENT_I_DN
SSL_CLIENT_S_DN_CN
SSL_CLIENT_S_DN
get_content ->string Devuelve el valor del contenido de la request http sin decodificar (raw data)
set_arg(param_name,value) -> Modifica el valor del parámetro especificado
set_param(param_name,value) -> Permite modificar el valor de un parámetro recibido en la request
eBDResponse
Métodos:
header(name,value) -> int Modifica el valor de una cabecera HTTP
status(int) -> int Modifica el valor de la respuesta HTTP (status code)
type(value) -> int Modifica el valor del la cabecera “Content-Type”
add_styles_text(text) -> int Añade el texto dentro del tag head
add_style(url) -> int Añade ficheros CSS a la cabecera.
add_script(url) -> int Añade un fichero javascript a la cabecera de la respuesta, controlando que no se repita.
add_scripts_text(text) -> int Añade el texto dentro del tag head
get_head_content() -> string Devuelve el contenido (tags de estilos y scripts) del head generado
automáticamente al ejecutar secciones
set_cookie(name,value,expires,path,domain) -> int Añade la cabecera "Set-Cookie" en la respuesta HTTP.
Los parámetros "expires","path2 y "domain" son opcionales.
Algunos ejemplos de posibles valores del parámetro "expires":
• +30s (dentro de 30 segundos)
• +10m (dentro de 10 minutos)
• +1h (dentro de 1 hora)
• -1d (hace 1 hora!)
• now (inmediatamente)
• +3M (dentro de 3 meses)
Manual de eBDML
76
ANEXOS.
• +10y (dentro de 10 años)
• Thursday, 25-Apr-1999 00:40:33 GMT (a la fecha/hora indicada)
Manual de eBDML
77
ANEXOS.
eBDZone
Atributos:
Name -> string Devuelve el nombre de la zona actual
Id -> int Devuelve el identificador de la zona actual
IsInitial -> bool Devuelve S o N según la zona actual sea la inicial o no
eBDPage
Atributos:
Name -> string Devuelve el nombre de la página actual
Id -> int Devuelve el identificador de la página actual
Title -> string Devuelve el título de la página actual
eBDSection
Atributos:
Name -> string Devuelve el nombre de la sección actual
Id -> id Devuelve el identificador de la sección actual
Title -> string Devuelve el título de la sección actual
CurrentRecord -> int Devuelve el número de registro que se esta tratando en ese momento
TotalRecords -> int Devuelve el número total de registros de la sección
ShowRecords -> int Devuelve el número de registros que se están mostrando de la sección
UniqueID ->int Devuelve un identificador numérico único para la ejecución de la sección actual. Los widgets
envían automáticamente este valor en la URL de sus eventos, por lo que al ejecutar esta función en un evento
de widget recibiremos el mismo valor que tenía antes de la ejecución del código principal.
eBDDate
Atributos:
CurrentYear -> int Devuelve el año actual
CurrentMonth -> int Devuelve el mes actual
CurrentDay -> int Devuelve el día actual
CurrentDate -> string Devuelve la fecha actual en formato del locale actual
CurrentTime -> string Devuelve la hora actual
CurrentMilis ->string Devuelve la fecha Epoch en milisegundos.
Métodos:
date_add(string,int) -> string Suma en la fecha enviada el número de días especificado
date_sub(string,string) -> int Devuelve la diferencia de días entre las dos fechas, si la primera fecha es antes
en el tiempo será positivo, sino negativo y si son iguales un 0
week_number(string) -> int Devuelve el número de la semana de la fecha indicada
day_of_week(string) -> int Devuelve el día de la semana de la fecha indicada
monday_of_week(int,year) -> date Devuelve la fecha del lunes de la semana y año indicado
date_format(date,driver) -> date formated Devuelve la fecha enviada en el formato del driver indicado
Manual de eBDML
78
ANEXOS.
date_to_epoch(data) -> integer Devuelve la fecha en formato epoch (número de segundos desde 1/1/1970)
epoch_to_date(int) -> integer Devuelve la fecha en formato estándar a partir del epoch
mask(date, src_mask, dst_mask, opt_src_mask, opt_dst_mask)-> Transforma una fecha entre dos formatos
especificados (de src_mask a dst_mask). También tiene en cuenta partes de la máscara que pueden ser
opcionales (opt_src_mask y opt_dst_mask)
25/06/2009 -> 2009-06-25
#[eBDDate.mask('25/06/2009','dd/mm/yyyy','yyyy-mm-dd')]
25/06/2009 12:34:52 -> 2009-06-25 12.34
#[eBDDate.mask('25/06/2009 12:34:52','dd/mm/yyyy','yyyy-mm-dd','hh:ii:ss',' hh.ii')]
25 06 2009 -> 25_06_09
#[eBDDate.mask('25 06 2009','dd mm yyyy','dd_mm_yy')]
20090625T141529Z -> 25-06-2009 14:15:29
#[eBDDate.mask('20090625T141529Z','yyyymmddThhiissZ','dd-mm-yyyy','ThhiissZ',' hh:ii:ss')]
parse(string) -> string Parsea una fecha almacenada en un string y la devuelve formateada según la
localización actual. Es capaz de reconocer los siguientes formatos:
"Wed, 09 Feb 1994 22:23:32 GMT"
"Thu Feb 3 17:03:55 GMT 1994"
"Thu Feb 3 00:00:00 1994",
"Tuesday, 08#Feb#94 14:15:29 GMT"
"Tuesday, 08#Feb#1994 14:15:29 GMT"
##
##
##
##
##
HTTP format
ctime(3) format
ANSI C asctime() format
old rfc850 HTTP format
broken rfc850 HTTP format
"03/Feb/1994:17:03:55 #0700"
"09 Feb 1994 22:23:32 GMT"
"08#Feb#94 14:15:29 GMT"
"08#Feb#1994 14:15:29 GMT"
##
##
##
##
common logfile format
HTTP format (no weekday)
rfc850 format (no weekday)
broken rfc850 format (no weekday)
"1994#02#03 14:15:29 #0100"
"1994#02#03 14:15:29"
"1994#02#03"
"1994#02#03T14:15:29"
"19940203T141529Z"
"19940203"
##
##
##
##
##
##
ISO 8601 format
zone is optional
only date
Use T as separator
ISO 8601 compact format
only date
"08#Feb#94"
"08#Feb#1994"
"09 Feb 1994"
"03/Feb/1994"
##
##
##
##
"Feb
"Feb
## Unix ’ls #l’ format
## Unix ’ls #l’ format
3 1994"
3 17:03"
"11#15#96
old rfc850 HTTP format
broken rfc850 HTTP format
proposed new HTTP format
common logfile format
(no
(no
(no
(no
weekday,
weekday,
weekday,
time, no
no time)
no time)
no time)
offset)
03:52PM" ## Windows ’dir’ format
http_date(string) -> string Devuelve la fecha recibida (en segundos, epoch), convertida a formato estándard
para HTTP
Manual de eBDML
79
ANEXOS.
eBDDB
Atributos:
CurrentId -> int Devuelve el identificador del registro que se está modificando / borrando
LastInsertId -> int Devuelve el identificador de la última inserción
LastUpdateId -> int Devuelve el identificador de la última actualización
LastDeleteId -> int Devuelve el identificador de la última eliminación
ErrCode -> int Devuelve el código de error generado
ErrMsg -> string Devuelve el mensaje de error generado
Métodos:
abort(err_msg) -> string Aborta la ejecución de la inserción / modificación / eliminación, y muestra el mensaje
de error especificado. Se debe usar en un evento antes de insertar en una Vista mediante eBD:SET
last_insert(fieldname) -> string Devuelve el valor del campo especificado de la última inserción
last_update(fieldname) -> string Devuelve el valor del campo especificado de la última actualización
current(fieldname) -> string Devuelve el valor del campo especificado del registro que se está modificando /
borrando
set_new_value(fieldname,value) Permite modificar el valor que se guardará en un campo de la base de datos,
si se ejecuta desde un evento de Vista o Tabla disparado antes de la inserción o modificación
http_date(string) -> string Devuelve la fecha recibida (en segundos, epoch), convertida a formato estándard
para HTTP
xml_document(string) ->string Devuelve el nombre del fichero XML relativo a una Tabla XML, para poder
ejecutar una consulta XQuery de forma manual
eBDLocale
Atributos:
Name -> string Devuelve el nombre del locale actual
Iso -> string Devuelve la ‘iso_lang’ del locale actual
Id -> int Devuelve el identificador del locale actual
Language -> string Devuelve el language del locale actual
DateFormat -> string Devuelve el formato de fecha del locale actual
Métodos:
set(string | int) -> int Activa el locale especificado por el nombre o por el identificador
literal(string) -> string Devuelve el valor del literal especificado
get_locales -> array of hashes Devuelve una lista de las localizaciones, se puede accceder a los
atributos:id,name,iso_lang,language,number_format y date_format
get_literal_names(folder) -> array Devuelve la lista de claves de los literales disponibles. El parámetro 'folder'
es opcional, si se indica el idCarpeta o el nombre de la carpeta devolverá los literales de esa carpeta; en caso
de no enviarle ningún parámetro devuelve todos los literales.
get_literal_value(literal,idLocalizacion) -> string Devuelve el valor de un literal para una localización
determinada
set_literal_value(literal,idLocalizacion,newLiteral) Modifica el valor de un literal para una localización
determinada
Manual de eBDML
80
ANEXOS.
find_literal(string) -> array Busca un literal que contenga las palabras indicadas en el nombre o los valores
eBDUtil
eBDVersion -> string devuelve la versión actual de eBD
ErrCode -> int devuelve el código de error del último error generado
ErrMsg -> string devuelve el mensaje de error del último error generado
ErrLine -> int devuelve el numero de linea del último error generado
Métodos:
random() -> int Devuelve un número aleatorio
random(min,max) -> int Devuelve un número aleatorio entre min i max
quote(string) -> string Escapa el contenido enviado
trim(field,len,[concat]) -> string Acota a la longitud elegida el campo especificado y añade el ‘concat’ al final
uc(string) -> string convierte el string a mayúsculas
lc(string) -> string convierte el string a minúsculas
ucfirst(string) -> string convierte la primera letra del string a mayúsculas
lcfirst(string) -> string convierte la primera letra del string a minúsculas
length(string) -> int devuelve la longitud de un string
defined(string) -> bool devuelve true (1) si el string está definido
substr(string,start,count)-> string develve un substring del string inicial, comenzando en la posición “start”, y
seleccionando “count” caracteres
is_eof -> bool devuelve true si se ha llegado al final de un fichero después de la última lectura
chr(int) -> string Devuelve un carácter representado por el código ASCII o la secuencia de escape indicada (\n,
\t,...)
ord(string) -> int Devuelve el código ASCII del carácter indicado.
eBDMath
Métodos:
int(number) -> int Devuelve la parte entera del número enviado
abs(number) -> int Devuelve el valor absoluto del número enviado
cos(number) -> float Devuelve el coseno del número enviado
sin(number) -> float Devuelve el seno del número enviado
tan(number) -> float Devuelve el valor de la tangente del ángulo especificado
atan2(number) -> float Devuelve el resultado de la función arcotangente en el rango -PI .. PI
exp(number) -> int Devuelve la inversa del logaritmo neperiano
hex2dec(hex) -> int Recibe un hexadecimal y devuelve su valor decimal
dec2hex(number) -> hex Recibe un decimal y devuelve su valor hexadecimal
log(number) -> float Devuelve el logaritmo neperiano del número enviado
oct2dec(oct) -> int Recibe un octal y devuelve su valor decimal
dec2oct(number) -> oct Recibe un decimal y devuelve su valor octal
sqrt(number) -> float Devuelve el resultado de la raíz cuadrada del número enviado
Manual de eBDML
81
ANEXOS.
round (number,decimals) -> float Devuelve el número enviado acotado al número de decimales especificado,
redondeando +0.5
ceil(number) -> int Devuelve el entero más pequeño que sea más grande o igual al número enviado
floor(number) -> int Devuelve el entero más grande que sea más pequeño o igual al número enviado
eval(expr) -> number Evalúa la expresión matemática enviada
eBDSecurity
Función para proteger frente ataques XSRF.
Métodos:
xsrf_security_token() -> string Devuelve el valor del token XSRF.
xsrf_security_input(input_name) -> string Devuelve el token dentro de un input oculto, se le puede pasar el
nombre del input (por defecto: xsrf_security_token)
check_xsrf_security(name) -> bool Devuelve 0 si el token es valido ó 1 si no lo és. Se le puede pasar el
nombre del parámetro, que por defecto es xsrf_security_token.
is_valid_arg(name) -> bool Devuelve 0 ó 1 dependiendo de si el argumento es válido o no. Para que valide el
parámetro se debe de indicar el TYPE en eBD:ARGS
is_valid_args() -> bool Devuelve 0 ó 1, según si todos los argumentos eBD:ARGS con algún TYPE son válidos
o no.
validate_value(value,type,null,[validos|mask,optional_mask,biggerthan,lowerthan]) -> bool
Devuelve un boleano según si el valor es válido. Se debe pasar el valor, el tipo
(string,bool,date,datetime,integer,word,enum), si puede ser nulo(boleano) y en caso de ser un enum la lista de
valores validos (separado por comas o un puntero a un array).
Ejemplo:
<ebd:out value="#[eBDSecurity.validate_value('sadfkasdfkasdf asdf asdfad f',string)]"/>
Return -> 1
<ebd:out value="#[eBDSecurity.validate_value('',string,1)]"/>
Return -> 0
<ebd:out value="#[eBDSecurity.validate_value(0,bool)]"/>
Return -> 1
<ebd:out value="#[eBDSecurity.validate_value(uno,enum,1,tres,dos,uno,zero)]"/>
Return -> 1
<ebd:out value="#[eBDSecurity.validate_value(12-01-1980,date,1,DD-MM-YYYY,,,12-12-1970)]"/>
Return -> 0
quote_for_input(value, simple|tag) -> string Devuelve el valor recibido escapado para introducirlo en un
atributo de un tag o entre tag de inicio y final de tag. Se Debe pasar el valor y el literal 'simple' en el caso que el
atributo este con comillas simples o el literal 'tag' si queremos ponerlo entre dos tags.
Ejemplo:
<ebd:set var="doble" value='"'/>
<input type="text" name="dummy_a" value="<ebd:out value="#[eBDSecurity.quote_for_input(Hallo
${doble}World${doble} K's)]"/>">
<br>
<input type="text" name="dummy_b" value='<ebd:out value="#[eBDSecurity.quote_for_input(Hallo
Manual de eBDML
82
ANEXOS.
${doble}World${doble} K's, simple)]"/>'>
<br>
<textarea>
<ebd:out value="#[eBDSecurity.quote_for_input(Hallo ${doble}World${doble} K's</textarea>
out of the tag, tag)]"/>
</textarea>
<br>
quote_for_javascript(value,simple) -> string Devuelve el valor recibido escapado para introducirlo como un
literal de una variable. Se debe pasar el valor y el literal 'simple' si la variable está entre comillas simples.
Ejemplo:
<ebd:set var="doble" value='"'/>
<ebd:out value="#[eBDSecurity.quote_for_javascript(Hello ${doble}world${doble})]"/>
Returns -> Hello \"world\"
eBDWidget
Permite acceder a funciones útiles del objeto Widget que se está ejecutando.
Atributos:
Name -> string Devuelve el nombre del widget actual.
Id -> int Devuelve el identificador del widget actual.
Métodos:
eventsURL(event_name, [idSection]) -> string Devuelve la URL necesaria para invocar al evento indicado. Si
no se indica evento, devolverá el path hacia los eventos. Opcionalmente se puede añadir el ID de la sección
sobre la que queremos calcular la URL.
filesURL(path, [idSection]) -> string Devuelve el path absoluto del fichero. Opcionalmente se puede añadir el
ID de la sección sobre la que queremos calcular la URL.
getAttribute(name) ->string Recupera el atributo que hayamos definido en el widget. Esta función puede ser
utilizada por cualquier parte del widget (datasources, events, ...)
Manual de eBDML
83
ANEXOS.
Anexo B. Funciones para Ajax (eBDSection)
EBD permite usar AJAX para ejecutar remotamente secciones EBD, y usar el contenido html generado
por ellas para modificar la página original. Por ejemplo, se puede usar para mostrar el contenido de una
sección dentro de un DIV de forma dinámica. Para ello, es necesario activar la opción "Visible desde
AJAX" en la sección que queramos mostrar.
Las principales funciones son:
eBDSection.show(url, callback)
Esta función permite llamar a una sección, página o zona de EBD, ejecutarla y devolver el código HTML
resultante a una función de callback que se encargará de publicarla.
Un ejemplo de como llamar a una sección al pulsar sobre un enlace:
Con este ejemplo hemos conseguido que al pulsar sobre un enlace se despliegue el contenido de una sección
sin necesidad de recargar la página, simplemente utilizando una capa como 'recipiente'.
Primero es necesario tener cargadas las librerias AjaxCaller, Util y Sections:
<script language="Javascript" src="/includes/ajax/ajaxCaller.js";></script>
<script language="Javascript" src="/includes/ajax/util.js"></script>
<script language="Javascript" src="/includes/ajax/sections.js"></script>
Desde EBD calculamos la URL del objeto a cargar, mediante la instrucción eBD:ENCRYPT, por ejemplo, para
llamar a una sección podemos utilizar:
<ebd:ENCRYPT var="url" value="?idsection=<id_seccion>"/>
Los parámetros de eBDSection que podemos utilizar son:
idsection
ID de la sección que se llama.
section
Nombre de la sección. Se debe utilizar conjuntamente con los parámetros 'zone'
o 'page', de lo contrario se considerará como una sección global.
?section=my_section&page=my_page
idpage
ID de la página que se llama.
page
Nombre de la página.
idzone
ID de la zona que se llama. La función utilizará el DOCTYPE de la zona actual si
no se especifica este parámetro.
Manual de eBDML
84
ANEXOS.
zone
Nombre de la zona. La función utilizará el DOCTYPE de la zona actual si no se
especifica este parámetro.
full_name [1|0]
Booleano que indica si se debe generar el contenido HTML completo, por
ejemplo: para poder usar esa URL directamente en un IFRAME.
Para crear el enlace utilizamos:
<a href="javascript:eBDSection.show('<ebd:out value="$url"/>',callback);">SEE SECTION</a>
Este enlace llamará a una función, que hemos llamado 'callback' y que se encarga de recoger el HTML
devuelto por el objeto llamado y publicarlo.
<script language="javascript">
function callback(html){
var obj=document.getElementById('my_div');
if (obj!=null)
{obj.innerHTML=html;}
}
</script>
Para que se muestra el resultado debemos tener un objeto que nos sirva para mostrar el resultado.
<div id="my_div"></div>
Si en la URL encriptada, de eBDSection.show, añadimos el parámetro 'section_containers=1' forzaremos la
inserción de los elementos contenedores.
Con este ejemplo hemos conseguido que al pulsar sobre un enlace se despliegue el contenido de una sección
sin necesidad de recargar la página, simplemente utilizando una capa como 'recipiente'.
eBDSection.setDOMContent(dom_node, html)
Esta función es auxiliar a eBDSection, ya que esta usa setDOMContent para incrustar el HTML que recibe,
además permite cargar todos los scripts en el HEAD, comprobando que no estén cargados previamente.
La carga de los STYLE las realiza en el propio DOM node.
Manual de eBDML
85
Descargar