Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas....

87
Manual de ebdml

Transcript of Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas....

Page 1: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

Manual de ebdml

Page 2: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

2

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 Kanecode

Page 3: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

3 Manual de Kanecode

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 30

3.5.10. eBD:CLEARCACHE 30

3.5.11. eBD:INCLUDE 30

3.6. Integración y Comunicación 32

3.6.1. eBD:SENDMAIL 32

3.6.2. eBD:SENDSMS 32

3.6.3. eBD:BODY 33

3.6.4. eBD:ATTACH 33

3.6.5. eBD:HTTPGET 33

Page 4: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

4 Manual de Kanecode

3.6.6. eBD:HTTPPOST 34

3.6.7. eBD:WS 34

3.6.8. eBD:SOAPFAULT 35

3.6.9. eBD:XMLPARSE 35

3.6.10. eBD:EXECPROCESS 36

3.6.11. eBD:EXECTASK 36

3.6.12. eBD:FTPCLOSE 36

3.6.13. eBD:FTPCWD 37

3.6.14. eBD:FTPDELETE 37

3.6.15. eBD:FTPGET 37

3.6.16. eBD:FTPLOGIN 37

3.6.17. eBD:FTPLS 38

3.6.18. eBD:FTPMKDIR 39

3.6.19. eBD:FTPPUT 39

3.6.20. eBD:FTPPWD 39

3.6.21. eBD:FTPRENAME 39

3.6.22. eBD:FTPRMDIR 40

3.6.23. eBD:FTPSIZE 40

3.7. Manipulación de datos 41

3.7.1. eBD:REPLACE 41

3.7.2. eBD:LENGTH 41

3.7.3. eBD:UNICODE 41

3.7.4. eBD:HTMLENCODE 42

3.7.5. eBD:HTMLDECODE 42

3.7.6. eBD:ENCODE 42

3.7.7. eBD:DECODE 43

3.7.8. eBD:URIESCAPE 43

3.7.9. eBD:URIUNESCAPE 43

3.7.10. eBD:SERIALIZE 44

3.7.11. eBD:DESERIALIZE 44

Page 5: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

5 Manual de Kanecode

3.8. Manipulación de ficheros 45

3.8.1. eBD:TMPFILE 45

3.8.2. eBD:READ 45

3.8.3. eBD:READLINE 46

3.8.4. eBD:WRITE 46

3.8.5. eBD:SEEK 46

3.8.6. eBD:XSLTPROC 46

3.8.7. eBD:EXTRACT 47

3.9. Manipulación de Imágenes 48

3.9.1. eBD:IMGCREATE 48

3.9.2. eBD:IMGINFO 48

3.9.3. eBD:IMGCOLOR 48

3.9.4. eBD:IMGDRAW 49

3.9.5. eBD:IMGTRANSFORM 50

3.9.6. eBD:IMGCOPY 51

3.9.7. eBD:IMGFILTER 51

3.9.8. eBD:IMGGRAPH 52

3.9.9. eBD:IMGSAVE 55

3.10. Acceso a buzones IMAP 56

3.10.1. eBD:IMAP 56

3.10.2. eBD:IMAP_COPY 56

3.10.3. eBD:IMAP_CREATE 56

3.10.4. eBD:IMAP_DELETE 56

3.10.5. eBD:IMAP_GET 57

3.10.6. eBD:IMAP_MAILBOXES 57

3.10.7. eBD:IMAP_RENAME 58

3.10.8. eBD:IMAP_LOGOUT 58

3.10.9. eBD:IMAP_FLAGS 58

3.10.10. eBD:IMAP_STATUS 59

3.11. Varios 60

Page 6: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

6 Manual de Kanecode

3.11.1. eBD:LOGIN 60

3.11.2. eBD:FORCELOGIN 60

3.11.3. eBD:LOGOUT 60

3.11.4. eBD:INFOUSER 60

3.11.5. eBD:INFOFILE 61

3.11.6. eBD:FILEPATH 62

3.11.7. eBD:DAVPATH 62

3.11.8. eBD:WARN 62

3.11.9. eBD:BR 63

3.11.10. eBD:EVAL 63

3.11.11. eBD:CODE 63

3.11.12. eBD:DOC 64

4. Consideraciones Generales

4.1. Tipos de variables 65

4.2. Expresiones 67

4.3. Referencias y estructuras de datos 69

4.4. Varios 71

5. Ejemplo

5.1. Resumen de un pedido 73

6. Anexos

Anexo A. Funciones Internas (#) 75

Anexo B. Funciones para Ajax (eBDSection) 85

Page 7: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

7 Manual de Kanecode

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,entre otros.

eBDML está basado en XML, de forma que sus instrucciones están formadas por tags (delimitadas concaracteres < y >). Todas las instrucciones de eBDML empiezan por "eBD:" y tanto el nombre como los atributosson case-insensitive, por lo que <eBD:SET VAR="a" value="1"/> es exactamente lo mismo que <ebd:setvar="a" vAlue="1"/>.

eBDML incorpora instrucciones propias de un lenguaje de programación de alto nivel, entre las cualesdestacan:

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

Page 8: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

8 Manual de Kanecode

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 laspá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 deseadade 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 directorioque el fichero adicional). Por ejemplo, en el caso anterior, si queremos incluir la imagen "test.jpg" desde elcodigo 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 sonrecursos globales de manera que pueden ser usadas en cualquier sección de tipo Menú.

Page 9: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

9 Manual de Kanecode

1. INTRODUCCIÓN

Paginación Personalizada

Podemos utilizar eBDML para personalizar todo cuanto queramos en la paginación de una secciónde 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 inicialcomo el "head" o los "meta".

Page 10: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

10 Manual de Kanecode

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 eBDMLpara generar la estructura de la pagina dinámicamente. Se usa la instrucción <eBD:INCLUDE> para hacer lasllamadas 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 comportamientodeseado de cada uno de ellos.

Page 11: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

11Manual de Kanecode

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, ouna 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 unapágina (generalmente en un código eBDML) pero que mantienen su valordurante toda la ejecución de la request.

Es decir, se puede definir una variable temporal en una sección, y usarlaposteriormente en otra sección de la misma página, en eventos, en el pie dezona, 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 mantenerlaen la sesión del usuario.

Variables Globales Variables que se pueden definir en cualquier momento de la ejecución de unapágina (generalmente en un código eBDML) pero que mantienen su valordurante toda la sesión del usuario.

Una vez se ha definido la variable, ésta se mantiene hasta que la sesión delusuario expira.

2. VARIABLES EN EBDML

Page 12: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

2.2. Estructuras de datos. ARRAY vs HASH

Las variables de eBDML pueden almacenar cualquier información (textos, numeros, fechas, etc...), ya que nose especifica su tipo de datos al declararlas.

Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos, como ARRAY oHASH. 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 unapersona 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 casode no conocer los valores de las claves, se puede usar la funcion KEYS que devuelve un array con las clavesdel 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>

2. VARIABLES EN EBDML

12Manual de Kanecode

Page 13: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

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 sinoVAR).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 VAR="test" VALUE="444"/><eBD:SET VAR="test" EXPR="$test+20/4"/><eBD:SET VAR="lista" INDEX="0" VALUE="testlista"/><eBD:SET VAR="lista_hash" INDEX="nombre" VALUE="pepito"/><eBD:SET TEMPORAL="request" VALUE="solo para request"/><eBD:SET GLOBAL="IDOBJETO" VALUE="256"/>

3. INSTRUCCIONES EN EBDML

13Manual de Kanecode

Page 14: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

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 VALUE="$test"/> //VARIABLE ESCALAR<eBD:OUT VALUE="@lista[0]"/> //VARIABLE ARRAY<eBD:OUT VALUE="@lista{nombre}"/> //VARIABLE HASH<eBD:OUT VALUE="%IDOBJETO"/> //VARIABLE GLOBAL<eBD:OUT VALUE="%$request"/> //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 nombreque 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 lalectura 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 peticionesajax, por lo que conviene sincronizar el acceso de lectura y escritura a las variables de sesión que seanutilizadas 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.

3. INSTRUCCIONES EN EBDML

14Manual de Kanecode

Page 15: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

Ejemplo:

<eBD:SYNCHRONIZE GLOBALS="counter,data" TIMEOUT="10"><eBD:DOC>This session is locked for 10 seconds and %counter and %dataare synchronized with other concurrent requests</eBD:DOC><eBD:SET GLOBAL="counter" EXPR="%counter+1"/><eBD:SET GLOBAL="data" VALUE="my_data_value"/><eBD:SYNCHRONIZE>

3. INSTRUCCIONES EN EBDML

15Manual de Kanecode

Page 16: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

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"/>

3. INSTRUCCIONES EN EBDML

16Manual de Kanecode

Page 17: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

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 cmp $b: ordena alfabéticamente $b cmp $a: ordena inversamente $a <=> $b: ordena números de menor a mayor $a cmp $b: ordena 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.de�ned($i)]">el elemento si que esta y la posicion en el array es <ebd:out value="$i"/></ebd:if>

3. INSTRUCCIONES EN EBDML

17Manual de Kanecode

Page 18: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

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 CHARentre 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 elementosde 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=","/>

3. INSTRUCCIONES EN EBDML

18Manual de Kanecode

Page 19: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

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 partirde dicha versión, el uso de la instrucción eBD:ENCRYPT para encriptar URLs está DESACONSEJADO . Espreferible usar eBD:LINKTO.

También podemos utilizar eBD:ENCRYPT para encriptar valores usando una clave simetrica (KEY), o paracrear un digest de los datos. Los digest válidos son:

MD5, MD5_HEX, MD5_BASE64, SHA1, SHA1_HEX, SHA1_BASE64, HMAC_SHA1, HMAC_SHA1_HEX yHMAC_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 unalongitud 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 lasesión.

Otra funcionalidad de eBD:ENCRYPT es la de encriptar textos con el mismo algoritmo de encriptación que seusa para codificar los campos de tipo "Contraseña". Para ello se usa el parámetro SALT, cuyo valor debe ser lasemilla (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 esvá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 bufferhtml de salida.

3. INSTRUCCIONES EN EBDML

19Manual de Kanecode

Page 20: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

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 enla URL. Si no es así, se concatenara este string al path generado automaticamente por eBD.

El parámetro SECURITY permite definir el nivel de seguridad de la URL generada. Si no se especifica ningunose 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 valordesencriptado 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 lasesió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"/>

3. INSTRUCCIONES EN EBDML

20Manual de Kanecode

Page 21: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

21Manual de Kanecode

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 hacerFETCH, 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 laquery 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 registroidentificá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 tageBD:DATAFIELD.

Ejemplo:

<eBD:INSERT TABLE="test"><eBD:DATAFIELD FIELD="nombre" VALUE="mi primer insert"/><eBD:DATAFIELD FIELD="publicado" VALUE="S"/></eBD:INSERT>

3. INSTRUCCIONES EN EBDML

Page 22: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

3.4.4. eBD:UPDATE

Sintaxis:

<eBD:UPDATE TABLE="tablename" IDFIELD="campoid" IDVALUE="valorcampoid" [ADDWHERE=""]>

<eBD:DATAFIELD FIELD="fieldname" VALUE="value" [NULL_VALUE="1"]/>

</eBD:UPDATE>

Acción:

Realiza un UPDATE del registro o registros indicado por el campo IDFIELD con valor IDVALUE, modificandoaquellos campos que indiquen con eBD:DATAFIELD, de la Tabla TABLE.

La opción, NULL_VALUE, usada en el DATAFIELD, permite el borrado de ficheros (también elimina el ficheroreal).

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 tenerque preocuparnos de escapar las comillas a mano, es decir, nos sustituirá (') por (\').

Ejemplo:

<eBD:QUOTE VAR="frase" VALUE="esto es el texto"/>

3. INSTRUCCIONES EN EBDML

22Manual de Kanecode

Page 23: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

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 consultaspredefinidas.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 XMLEl parámetro NAME definirá el nombre con el que se guardara el HANDLER para poder hacer FETCHROWpara 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 respuestade 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 loque 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/itemreturn<dato><nombre>{data(\$a/title)}</nombre><enlace>{data(\$a/link)}</enlace></dato></ebd:xquery>

3. INSTRUCCIONES EN EBDML

23Manual de Kanecode

Page 24: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

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 deaccesos 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:

3. INSTRUCCIONES EN EBDML

24Manual de Kanecode

Page 25: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

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

3. INSTRUCCIONES EN EBDML

25Manual de Kanecode

Page 26: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

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óneBD: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 delarray.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>

3. INSTRUCCIONES EN EBDML

26Manual de Kanecode

Page 27: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

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>

3. INSTRUCCIONES EN EBDML

27Manual de Kanecode

Page 28: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

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.

Los argumentos que se pasan a la función pueden ser recogidos tanto como con el nombre que se le hapasado, como con el nombre en minúsculas. Así por ejemplo si pasamos a la función el argumento 'IDModulo',podremos recogerlo como 'IDModulo' o como 'idmodulo' indistintamente.

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 modoBACKGROUND.

Ejemplo:

3. INSTRUCCIONES EN EBDML

28Manual de Kanecode

Page 29: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

...</eBD:FORK>

3. INSTRUCCIONES EN EBDML

29Manual de Kanecode

Page 30: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

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 otemporales 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="identi�er_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ódigoen 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.

3. INSTRUCCIONES EN EBDML

30Manual de Kanecode

Page 31: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

Atención: Los parámetros enviados se pasan de forma case-sensitive.

Ejemplo:

<eBD:INCLUDE SECTION="gra�ca" param1="$idconte" STORE="contenido"/>....<eBD:OUT VALUE="$contenido"/><eBD:INCLUDE SECTION="test" param1="$idconte" param2="$idcategoria" mostrable="S"/>

3. INSTRUCCIONES EN EBDML

31Manual de Kanecode

Page 32: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

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 archivosadjuntos.

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 �le="/�les/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>

3. INSTRUCCIONES EN EBDML

32Manual de Kanecode

Page 33: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

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 unTMPFILE.

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 contenidoen 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 deautenticación.Los parámetros REQUEST_HEADERS y RESPONSE_HEADERS permiten usar HASHES para enviar o recibiren ellos las cabeceras de la request respectivamente.

Ejemplo:

3. INSTRUCCIONES EN EBDML

33Manual de Kanecode

Page 34: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

<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 contenidoen 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 deautenticación.Los parámetros REQUEST_HEADERS y RESPONSE_HEADERS permiten usar HASHES para enviar o recibiren ellos las cabeceras de la request respectivamente.Los argumentos a enviar en el contenido del POST se especifican usando tantas instrucciones eBD:PARAMcomo 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"] [FAULT="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 serviciotal y como se ha configurado en el menu "Recursos compartidos", o directamente usando la url del archivode definición del servicio con el parámetro WSDL. La opción FAULT permite recibir el fault object de unarespuesta SOAP.

Ejemplo:

3. INSTRUCCIONES EN EBDML

34Manual de Kanecode

Page 35: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

<eBD:WS SERVICE="users" OPERATION="login" VAR="dato" FAULT="error"><eBD:PARAM NAME="username" VALUE="$username"/><eBD:PARAM NAME="password" VALUE="$password"/></eBD:WS><eBD:IF EXPR="$fault"><eBD:OUT VALUE="@fault{faultcode} - @fault{faultstring}"/><eBD:OUT VALUE="@fault{detail}"/></eBD:IF>

3.6.8. eBD:SOAPFAULT

Sintaxis:

(código del Web Service ...)

<eBD:SOAPFAULT [FAULTCODE="value"] [FAULTSTRING="value"] [DETAIL="value"]/>

Acción:

Permite devolver un fault message de SOAP en un Web Service creado en eBDML. Su funcionamiento esparecido al de eBD:RETURN, con lo que se puede poner en cualquier parte del código del Web Service paraque fuerce la salida de la operación.

Ejemplo:

<eBD:SOAPFAULT FAULTCODE="micodigo" FAULTSTRING="Error en el código"DETAIL="más detalle del error"/>

3.6.9. 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 parsersólo es útil si el XML recibido no cumple estrictamente el estándar en lo que se refiere a la codificación decará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 delautomá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.

3. INSTRUCCIONES EN EBDML

35Manual de Kanecode

Page 36: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

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.10. 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 valoresgenerados por los canales de comunicación estándar del proceso, y el valor de retorno de la ejecución.

Ejemplo:

<eBD:EXECPROCESS PROCESS="boletin"/>

3.6.11. 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 ejecutarainmediatamente.

Ejemplo:

<eBD:EXECTASK TASK="boletin"/>

3.6.12. 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. INSTRUCCIONES EN EBDML

36Manual de Kanecode

Page 37: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

3.6.13. 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.14. 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:

<eBD:FTPDELETE FTP="my_ftp" ERR="error" REMOTE="old_�le.txt"/>

3.6.15. 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_�le.txt" REMOTO="remote_�le.txt"/>

3.6.16. 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 elresto 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.

3. INSTRUCCIONES EN EBDML

37Manual de Kanecode

Page 38: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

• 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.17. eBD:FTPLS

Sintaxis:

<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="�le_list" FTP="my_ftp" ERR="error"/><ebd:foreach array="�le_list"><ebd:out value="$iterator"/></ebd:foreach>

Retorno: Long=1 , devuelve un array con el siguiente contenido:

drwxr-xr-x 3 ftptesting ftptesting 4096 May 12 10:11 . drwxr-xr-x 3 ftptesting ftptesting 4096 May 12 10:10 .. drwxr-xr-x 2 ftptesting ftptesting 4096 May 12 10:11 33 -rw-r--r-- 1 ftptesting ftptesting 52535 May 12 10:05 859714.jpg

3. INSTRUCCIONES EN EBDML

38Manual de Kanecode

Page 39: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

-rw-r--r-- 1 ftptesting ftptesting 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 inde�nido 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.18. eBD:FTPMKDIR

Sintaxis:

<eBD:FTPMKDIR [RECURSIVE="1|0"] FTP="ftp_connection" ERR="varname" DIRECTORY="remote_dir"/>

Acción:

Crea un directorio en directorio remoto.

Ejemplo:

<eBD:FTPMKDIR FTP="my_ftp" ERR="error" DIRECTORY="images"/>

3.6.19. 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.20. 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.21. eBD:FTPRENAME

3. INSTRUCCIONES EN EBDML

39Manual de Kanecode

Page 40: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

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.22. 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:

<eBD:FTPRMDIR FTP="my_ftp" ERR="error" DIRECTORY="images"/>

3.6.23. 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"/>

3. INSTRUCCIONES EN EBDML

40Manual de Kanecode

Page 41: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

41Manual de Kanecode

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 entreparé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"/>

3. INSTRUCCIONES EN EBDML

Page 42: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

42Manual de Kanecode

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 caracterescuyo 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 aldocumento 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 aldocumento 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"/>

3. INSTRUCCIONES EN EBDML

Page 43: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

43Manual de Kanecode

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álidasegun 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 loalmacena 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">

3. INSTRUCCIONES EN EBDML

Page 44: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

44Manual de Kanecode

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 unescalar que representa esa estructura y se puede almacenar en una única variable.Los formatos soportaros son XML-RPC o JSONEl parámetro AUTOTYPE indica si se deben generar los tags XML-RPC en funcion del tipo de datos de losvalores de forma automática.El parámetro METHOD indica el tipo de XML que se quiere generar en caso de usar XML-RPC. Los posiblesvalores 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: XML-RPC o JSON.

Ejemplo:

<eBD:DESERIALIZE VAR="data" VALUE="$serialized" FROM="JSON">

3. INSTRUCCIONES EN EBDML

Page 45: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

45Manual de Kanecode

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 campofichero de una tabla.

Se puede devolver un tmpfile como un archivo dinámico o una función de Web Service, así como crear elfichero 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="�chero_source"/><eBD:TMPFILE VALUE="esto sera el valor del �chero" VAR="�cherotxt"/><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 variableBUFFER.Si se especifica el parámetro VAR se guardara el numero de bytes leidos.

Ejemplo:

<eBD:READ FILE="�chero_source" SIZE="500" BUFFER="todo"/>

Ejemplo de uso:Creación de un �chero dinámico que retorna un �chero 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_�cheros" FIELD="�chero" IDFIELD="id�chero" IDVALUE="2" VAR="mi_pdf"/>

<eBD:SET VAR="bytesleidos" VALUE="$bytes"/>

<eBD:WHILE EXPR="$bytesleidos=$bytes">

3. INSTRUCCIONES EN EBDML

Page 46: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

46Manual de Kanecode

<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 lavariable especificada en ADDTO.

Ejemplo:

<eBD:READLINE FILE="�chero_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="�chero_source" VALUE="se añade al �chero...."/>

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="�chero_source" TO="0"/>

3.8.6. eBD:XSLTPROC

Sintaxis:

<eBD:XSLTPROC XSLT="template_name" INPUT="varname" [VAR="varname"] [OUTPUT="TMPFILE"]

[TYPE="PDF"] />

Acción:

3. INSTRUCCIONES EN EBDML

Page 47: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

47Manual de Kanecode

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 haespecificado 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 delresultado de la transformación.

Ejemplo:

<eBD:XSLTPROC XSLT="xml_to_html" INPUT="xml�le" 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. Losposibles 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 losficheros dentro del archivo comprimido.

Las claves que podemos usar en el array son "name" y "path", donde name nos devolverá el nombre delfichero, y path, su ruta.

<eBD:EXTRACT FILE="�chero" VAR="extracted" /><ebd:foreach array="extracted" iterator="�le"><ebd:out value="Fichero subido! @�le{name}"/><br></ebd:foreach>

3. INSTRUCCIONES EN EBDML

Page 48: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

48Manual de Kanecode

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 unapaleta). Si se usa la opcion TMPFILE, creará la imagen a partir de un fichero temporal previamente abierto conTMPFILE.

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 XXXXXXXXrepresentan un codigo RGB en hexadecimal (6 caracteres).

Ejemplo:

3. INSTRUCCIONES EN EBDML

Page 49: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

49Manual de Kanecode

<eBD:IMGCOLOR IMG="imgvar" ALLOCATE="r,g,b" VAR="index" />Añade un color especi�cado 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 parecidosegú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 colora 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 �ag 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:

3. INSTRUCCIONES EN EBDML

Page 50: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

50Manual de Kanecode

<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 indicael tamaño del texto pudiendo ser uno de los siguientes valores:GIANT, LARGE, MEDIUM, SMALL, TINY.

Se pueden utilizar tipogra�as de tipo TrueType para introducir texto en la imagen, añadiendoel archivo de la tipogra�a dentro del directorio /userdata/resources/fonts/Y especi�cando 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, usandoel carácter % al �nal. 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).

3. INSTRUCCIONES EN EBDML

Page 51: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

51Manual de Kanecode

3. INSTRUCCIONES EN 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 almismo 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:

Page 52: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

3. INSTRUCCIONES EN EBDML

52Manual de Kanecode

<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 instruccioneseBD:IMGGRAPHDS. El parámetro EXTENDED permite definir varios parámetros extendidos mediante unHASH. 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 dimensiones de la gra�ca a dibujar.t_margin, b_margin, margenes laterales que se deben dejar. (top,bottom,left y right)l_margin, r_margin

interlaced indica si la imagen generada sera entrelazada o no (default: 1)

parámetros sobre colores:

bgclr color de fondo de la gra�cafgclr color de los ejes y la regillaboxclr color de relleno de la caja de�nida por los ejesaccentclr color de resaltado en las gra�cas "bar","area" y "pie"shadowclr color de la sombra en las gra�cas "bar"

shadow_depth anchura de la sombra. Puede ser positiva => sombra derecha/inferior,o negativa => sombre izquierda/superior

labelclr color usado para las etiquetas de los ejesaxislabelclr color usado para los valores de los ejeslegendclr color usado para la leyendavaluesclr color usado para los valorestextclr color usado para cualquier otro texto

Page 53: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

3. INSTRUCCIONES EN EBDML

53Manual de Kanecode

dclrs colores usados para los dataset. Este parámetro debe ser unareferencia a un array de colores, que indicaran los colores paracada dataset segun su posicion.

borderclrs colores para los borsers de los dataset en gra�cas "bar". Sigue lamisma estructura que dclrs.

cycle_clrs Indica si la secuencia de colores especi�cada por dclrs se usapor dataset o por valor.

parámetros para gráficas con ejes:

x_label Etiqueta para el eje Xy_label Etiqueta para el eje Y

long_ticks Las marcas de los ejes deben tener la misma longitud que los ejestick_length Longitud de las marcas de los ejes (si long_ticks es 0)Se pueden especi�car 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 de�nida 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 de�nida 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 Indica si se deben dibujar los valores de las marcas del eje Xy_plot_values Indica si se deben dibujar los valores de las marcas del eje Y

box_axis Indica si se deben dibujar los ejes como una cajano_axes Desactiva el dibujado de los ejes

zero_axis Indica si se debe dibujar el eje 0.zero_axis_only Solo se debe dibujar el eje 0 (no se mostrará el eje X habitual)

y_max_value Valor maximo a mostrar en el eje Yy_min_value Valor minimo a mostrar en el eje Y

axis_space Espacio entre el eje y las etiquetas de las marcas de los ejes.text_space Espacio entre los textos (titulo y etiquetas) y la gra�ca

cumulate Dibuja las gra�cas acumulando los valores de los DataSet.

overwrite Dibuja las gra�cas superponiendo los valores de los DataSet.

show_values Muestra los valores de cada punto de la gra�ca

Page 54: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

3. INSTRUCCIONES EN EBDML

54Manual de Kanecode

values_vertical Muestra los valores de cada punto verticalmentevalues_space Espacio entre los valores y el punto en la gra�ca

parámetros para gráficas de barras:

bar_width Anchura de la barra en pixels.bar_spacing 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 linea1 => solida2 => guiones3 => puntos4 => punto/guionline_type_scale Longitud de los guiones en los tipos de linea 3 y 4line_width Anchura en pixels de la lineaskip_undef Creara un salto en la linea si se encuentra un valor no de�nido

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 abierto3 => 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 Indica si se debe dibujar la tarta en 3dpie_height Altura de la tarta en pixelsstart_angle Angulo de inicio por el que se debe empezar a rellenar la tarta.suppress_angle Angulo minimo para que un valor se represente en la tartalabel Etiqueta a escribir bajo la tarta

Page 55: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

3. INSTRUCCIONES EN EBDML

55Manual de Kanecode

Ejemplo:

<eBD:VAR NAME="options" TYPE="HASH"/><eBD:SET VAR="options" INDEX="x_label" VALUE="Posiciones"/><eBD:SET VAR="options" INDEX="y_label" VALUE="Valores"/><eBD:SET 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="�le" FORMAT="jpg" JPEGQUALITY="80" />

Page 56: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

3. INSTRUCCIONES EN EBDML

56Manual de Kanecode

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:

Page 57: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

3. INSTRUCCIONES EN EBDML

57Manual de Kanecode

<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 elpará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 seespecifica 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 seidentifica con el parámetro MAILBOX).

Ejemplo:

<eBD:IMAP_MAILBOXES IMAP="$imap" VAR="foldertree"/><eBD:IMAP_MAILBOXES IMAP="$imap" MAILBOX="INBOX.folder" VAR="subfolders"/>

Page 58: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

3. INSTRUCCIONES EN EBDML

58Manual de Kanecode

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 (queempiezan 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"/>

Page 59: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

3. INSTRUCCIONES EN EBDML

59Manual de Kanecode

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"/>

Page 60: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

3. INSTRUCCIONES EN EBDML

60Manual de Kanecode

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 logadoanteriormente 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óntras un logout (no se cierra la sesión), tan solo se cambia el atributo de usuario, manteniendo el resto deatributos 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 personalsobre 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 usuariocon valor '1'.Dentro del infohash tendremos:

Page 61: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

61Manual de Kanecode

3. INSTRUCCIONES EN 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:

Page 62: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

3. INSTRUCCIONES EN EBDML

62Manual de Kanecode

<eBD:INFOFILE FILE="/�les/1-149-pd�le/triptic.pdf" HASH="datos" TYPE="PDF"/>

3.11.6. eBD:FILEPATH

Sintaxis:

< eBD:FILEPATH [VAR="varname"] [TABLEID="value"|TABLE="tablaname"] ROW="value" FIELDNAME="value" [DOWNLOAD="1"] />

Acción:

Monta la url para cualquier fichero de cualquier tabla. En el ROW deberemos poner el nombre de la fila delfetchrow, o la referéncia a un HASH.

Ejemplo:

<eBD:FILEPATH VAR="path" TABLEID="49" ROW="test" FIELDNAME="user�le"/><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 lacarpeta 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 documentoHTML sino al archivo de trazas y DEBUGER.

Ejemplo:

<eBD:WARN VALUE="valor de test:$test"/>

Page 63: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

3. INSTRUCCIONES EN EBDML

63 Manual de Kanecode

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 delpará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>

Page 64: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

3. INSTRUCCIONES EN EBDML

64Manual de Kanecode

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>

Page 65: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

4. CONSIDERACIONES GENERALES

65Manual de Kanecode

4. Consideraciones Generales

4.1. Tipos de variables

• Para hacer referencia a las variables locales se debe usar '$', para acceder a variables temporales '%$' ypara acceder a variables globales '%'

Código eBDML Resultado

<eBD:VAR NAME="var1" DEFAULT="hello world!"/>

local: <eBD:OUT VALUE="$var1"/>

<br>

<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"/>

local: hello world!

temporal: hello temp!

global: hello global!

• 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"/>

Num elementos: <eBD:OUT VALUE="@lista"/>

Núm elementos: 2

• Para hacer referencia a los elementos de un ARRAY o un HASH usaremos '@ combinado con [] paraARRAY 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: <eBD:OUT VALUE="@lista[0]"/>

<br>

<eBD:SET VAR="k" VALUE="1"/>

pos1: <eBD:OUT VALUE="@lista[$k]"/>

pos0: valor0

pos1: valor1

• Para obtener el valor de un atributo de un registro recuperado con un FETCHROW tenemos que usar&[registro].[atributo]

Page 66: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

4. CONSIDERACIONES GENERALES

66Manual de Kanecode

Código eBDML Resultado

<eBD:QUERY NAME="puntero" DATASOURCE="principal">

QUERY SQL

</eBD:QUERY>

<eBD:FETCHROW NAME="registro" QUERY="puntero"/>

NOMBRE= <eBD:OUT value="&registro.nombre"/>

NOMBRE = (nombre)

NOTA: Usando '& delante del nombre de una query ejecutada con <eBD:QUERY nos devolverá elnúmero de registros que ha devuelto esa query.

Page 67: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

4. CONSIDERACIONES GENERALES

67Manual de Kanecode

4.2. Expresiones

• Los operadores disponibles en las expresiones son:

Operadores matematicos

+ suma - resta * multiplicación

/ división % módulo ** potencia

Comparadores

== igual < menor <= menor o igual

!= diferente > mayor >= mayor o igual

=~ match !~ not match

Comparadores sobre strings

eq igual lt menor le menor o igual

ne diferente gt mayor ge mayor o igual

Operadores binarios

<< shift left >> shift right ~ bitwise not

& bitwise and | bitwise or ^ bitwise xor

Operadores booleanos

&& and || or ! not

• Expresiones para obtener valores de campos:

Si estamos programando una plantilla de una seccion tabla, podemos usar &Tabla.campo para mostrar uncampo 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 delfichero almacenado podemos usar &Tabla.campo:filepath.

Page 68: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

4. CONSIDERACIONES GENERALES

68Manual de Kanecode

• 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+)"/>

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

La fecha es:

Dia: 28

Mes: 12

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>

espaced: <eBD:OUT VALUE="\$var1"/>

value: test

escaped: $var1

• Podemos usar { y } para delimitar el nombre de una variable que queremos interpolar entre caracteresestáticos.

Código eBDML Resultado

<eBD:SET VAR="var1" VALUE="test"/>

value: <eBD:OUT VALUE="${var1}_demo"/>

value: test_demo

Page 69: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

4. CONSIDERACIONES GENERALES

69Manual de Kanecode

4.3. Referencias y estructuras de datos

• Podemos recuperar un HASH con todos los argumentos que hemos recibido en la página usando lavariable 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"/>

<eBD:SET VAR="referencia" VALUE="$lista"/>

<eBD:FOREACH ARRAY="referencia">

<eBD:OUT VALUE="$iterator"/><br>

</eBD:FOREACH>

valor1

valor2

• 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"/>

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

valor1

valor2

Page 70: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

4. CONSIDERACIONES GENERALES

70Manual de Kanecode

• El valor de un elemento de un ARRAY o un HASH puede ser una referencia a otra variable de tipoARRAY o HASH.

Código eBDML Resultado

<eBD:VAR NAME="lista" TYPE="ARRAY" />

<eBD:PUSH ARRAY="lista" VALUE="valor1"/>

<eBD:PUSH ARRAY="lista" VALUE="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>

valor1

valor2

Page 71: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

71Manual de Kanecode

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"/>

<p>

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

Eventos:

2005-06-21 - Presentación

2005-06-29 - Formación

2005-06-21 - Reunión

• Utilización de TMPFILE para insertar o modificar un registro.

Código eBDML Resultado

<eBD:ARGS NAME="send" DEFAULT="0"/>

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

- Inicialmente veremos un formulario,

con un input tipo file.

- Al hacer el submir, se guardará el

fichero y se mostrará el mensaje.

Page 72: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

4. CONSIDERACIONES GENERALES

72Manual de Kanecode

• Utilización de TMPFILE para enviar un mail.

Código eBDML Resultado

<eBD:ARGS NAME="send" DEFAULT="0"/>

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

- Inicialmente veremos un formulario,

con un input tipo file.

- Al hacer el submir, se enviará el

mail y se mostrará el mensaje.

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

Page 73: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

5. EJEMPLO

73Manual de Kanecode

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">Con�rmar 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>&nbsp;</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"/>&nbsp;€</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">

Page 74: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

5. EJEMPLO

74Manual de Kanecode

<b><eBD:OUT VALUE="$total"/>&nbsp;€</b><br/><b><eBD:OUT VALUE="$total_iva"/>&nbsp;€</b></td></tr></table>

En la parte superior podemos ver una consulta llamada query_carrito a la base de datos principal. En estaconsulta 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 laconsulta 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 hechaanteriormente, el número de iteraciones es igual al número de registros devueltos por la consulta. ConFETCHROW damos un nombre (ítem) al registro obtenido, démonos cuenta que para cada iteración este valorserá diferente.

En las siguientes instrucciones listamos ciertos campos de la tabla carrito_procesados. Para obtener estosvalores debemos utilizar la instrucción <eBD:OUT>, estos valores los colocaremos dentro de las celdas de latabla.

En la imagen superior tenemos el resultado del código. Esta tabla la hubiéramos podido hacer con una seccióntipo tabla pero usando código eBDML tenemos la posibilidad de personalizarla mucho más.

Page 75: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

6. ANEXOS

75Manual de Kanecode

6. 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 variablesinternas, y están agrupadas en objetos abstractos según las funcionalidades que proporcionan. Lasintaxis 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 validadoel 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 elusuario 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 archivoebd.xml en el manual del Administrador)

Page 76: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

6. ANEXOS

76Manual de Kanecode

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 deorigen)

GeoIPCountryCode -> string Devuelve el código ISO del país desde el que está conectando el usuario (segúnsu IP de origen)

Métodos:

Page 77: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

6. ANEXOS

77Manual de Kanecode

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 variablesdisponibles 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 generadoautomá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)

Page 78: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

6. ANEXOS

78Manual de Kanecode

• +10y (dentro de 10 años)

• Thursday, 25-Apr-1999 00:40:33 GMT (a la fecha/hora indicada)

Page 79: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

6. ANEXOS

79Manual de Kanecode

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 widgetsenvían automáticamente este valor en la URL de sus eventos, por lo que al ejecutar esta función en un eventode 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 antesen 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

Page 80: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

6. ANEXOS

80Manual de Kanecode

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 formatosespecificados (de src_mask a dst_mask). También tiene en cuenta partes de la máscara que pueden seropcionales (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 lalocalización actual. Es capaz de reconocer los siguientes formatos:

"Wed, 09 Feb 1994 22:23:32 GMT" ## HTTP format"Thu Feb 3 17:03:55 GMT 1994" ## ctime(3) format"Thu Feb 3 00:00:00 1994", ## ANSI C asctime() format"Tuesday, 08#Feb#94 14:15:29 GMT" ## old rfc850 HTTP format"Tuesday, 08#Feb#1994 14:15:29 GMT" ## broken rfc850 HTTP format

"03/Feb/1994:17:03:55 #0700" ## common log�le format"09 Feb 1994 22:23:32 GMT" ## HTTP format (no weekday)"08#Feb#94 14:15:29 GMT" ## rfc850 format (no weekday)"08#Feb#1994 14:15:29 GMT" ## broken rfc850 format (no weekday)

"1994#02#03 14:15:29 #0100" ## ISO 8601 format"1994#02#03 14:15:29" ## zone is optional"1994#02#03" ## only date"1994#02#03T14:15:29" ## Use T as separator"19940203T141529Z" ## ISO 8601 compact format"19940203" ## only date

"08#Feb#94" ## old rfc850 HTTP format (no weekday, no time)"08#Feb#1994" ## broken rfc850 HTTP format (no weekday, no time)"09 Feb 1994" ## proposed new HTTP format (no weekday, no time)"03/Feb/1994" ## common log�le format (no time, no o�set)

"Feb 3 1994" ## Unix ’ls #l’ format"Feb 3 17:03" ## Unix ’ls #l’ format

"11#15#96 03:52PM" ## Windows ’dir’ format

http_date(string) -> string Devuelve la fecha recibida (en segundos, epoch), convertida a formato estándardpara HTTP

Page 81: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

6. ANEXOS

81Manual de Kanecode

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 mensajede 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ándardpara HTTP

xml_document(string) ->string Devuelve el nombre del fichero XML relativo a una Tabla XML, para poderejecutar 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 losatributos: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 casode 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óndeterminada

set_literal_value(literal,idLocalizacion,newLiteral) Modifica el valor de un literal para una localizacióndeterminada

Page 82: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

6. ANEXOS

82Manual de Kanecode

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”, yseleccionando “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.

eval_expr(string) -> string evalua expresiones númericas a partir de un string (requiere que el sistemadisponga del comando 'bc')

Ejemplo:

<ebd:set var="myString" value=" $a == 1 "/><ebd:set var="isTrue" value="#[eBDUtil.eval_expr($myString)]"/>

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

Page 83: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

6. ANEXOS

83Manual de Kanecode

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

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 elnombre 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 elnombre 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 elpará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álidoso no.

validate_value(value,type,null,[validos|mask,optional_mask,biggerthan,lowerthan]) -> boolDevuelve 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 devalores 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 unatributo 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 elatributo este con comillas simples o el literal 'tag' si queremos ponerlo entre dos tags.

Page 84: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

6. ANEXOS

84Manual de Kanecode

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${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 unliteral 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. Sino se indica evento, devolverá el path hacia los eventos. Opcionalmente se puede añadir el ID de la secciónsobre la que queremos calcular la URL.

filesURL(path, [idSection]) -> string Devuelve el path absoluto del fichero. Opcionalmente se puede añadir elID 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 serutilizada por cualquier parte del widget (datasources, events, ...)

Page 85: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

6. ANEXOS

85Manual de Kanecode

Anexo B. Funciones para Ajax (eBDSection)

EBD permite usar AJAX para ejecutar remotamente secciones EBD, y usar el contenido html generadopor ellas para modificar la página original. Por ejemplo, se puede usar para mostrar el contenido de unasección dentro de un DIV de forma dinámica. Para ello, es necesario activar la opción "Visible desdeAJAX" 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 HTMLresultante 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ónsin 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, parallamar 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 sino se especifica este parámetro.

Page 86: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,

6. ANEXOS

86Manual de Kanecode

zone Nombre de la zona. La función utilizará el DOCTYPE de la zona actual si no seespecifica este parámetro.

full_name [1|0] Booleano que indica si se debe generar el contenido HTML completo, porejemplo: 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 HTMLdevuelto 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 lainserción de los elementos contenedores.

Con este ejemplo hemos conseguido que al pulsar sobre un enlace se despliegue el contenido de una secciónsin 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.

Page 87: Manual de ebdml - Kanecode · 2021. 1. 4. · se especifica su tipo de datos al declararlas. Adicionalmente, se pueden crear estructuras de datos usando tipos abstractos de datos,