# Nomenclatura de objetos en urls

Vía web, podremos hacer uso de los objetos siguientes:

## Procesos

El [proceso](https://doc.velneo.com/velneo-vdevelop/proyectos-objetos-y-editores/de-aplicacion-y-datos/proceso) es el objeto que se usará para componer y retornar el código html de las páginas que se desea servir. En una url un proceso se identificará de la forma siguiente:

**URL\_HOST\[ID\_PROYECTO\_EXT]/ID\_PROCESO\[.pro]**

Donde:

#### URL\_HOST

Será la URL completa del *location* o *virtualhost* que hayamos configurado en Apache. Si hemos configurado el siguiente *location*, por ejemplo:

```
<Location /migestion>
    setHandler velneo
    Vrl vatp://pepe:verp1234@c22.velneo.com:7050/VERP
</Location>
```

Y el dominio de nuestro servidor Apache es midominio.com se resolvería:&#x20;

`https://midominio.com/migestion`

#### **ID\_PROYECTO\_EXT/**

Si el proceso que queremos ejecutar está en el propio proyecto configurado en el *location* de Apache, este dato no es necesario especificarlo, pero sí si el proceso está en un proyecto heredado, sí. Teniendo que poner su identificador. El identificador del proyecto será el valor establecido en la propiedad **nombre** de la ventana de propiedades del proyecto en vDevelop:

<figure><img src="https://1419534355-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhGRTr5J3e6YsZ6MYIEDz%2Fuploads%2FAzFwPxyDoXjTfkPn4A9g%2Fimage.png?alt=media&#x26;token=37185fab-038f-4ac2-8c2e-51e244f4d859" alt=""><figcaption></figcaption></figure>

La extensión (EXT) será **dat** si el proceso a ejecutar está en un [proyecto de datos](https://doc.velneo.com/velneo-vdevelop/buenas-practicas-de-programacion/buenas-practicas-de-organizacion/proyecto-de-datos-1-carpetas-esquemas-tablas-e-indices-complejos) heredado y **app** si está en un [proyecto de aplicación](https://doc.velneo.com/velneo-vdevelop/proyectos-objetos-y-editores/proyecto-de-aplicacion) heredado. El identificador del proyecto y la extensión irán separados por un carácter de subrayado: **\_**.

El carácter separador **/** no se incluirá si no se incluye el identificador del proyecto.

Siguiendo el ejemplo anterior, si el proceso a ejecutar está en el propio proyecto de aplicación, esta parte de la URL sería:

`https://midominio.com/migestion`&#x20;

Y si estuviese en el proyecto de datos, esta parte de la URL sería:

`https://midominio.com/migestion/mi_erp_dat`

#### **ID\_PROCESO**

Será el identificador del proceso a ejecutar, siendo la extensión **.pro** opcional.

#### **\[.pro]**

Extensión identificativa del objeto. La de un proceso será .pro. Es opcional. Si en una url no se incluye la extensión del objeto, Velneo asumirá por defecto que se trata de un proceso.

Siguiendo el mismo ejemplo, si el proceso está en el propio proyecto de aplicación configurado en la instancia, para ejecutar un proceso cuyo identificador es INDEX la url sería:&#x20;

`https://midominio.com/migestion/INDEX.pro`&#x20;

O:

`https://midominio.com/migestion/INDEX`&#x20;

Si el proceso estuviese en el proyecto de datos heredado:

`https://midominio.com/migestion/mi_erp_dat/INDEX.pro`

O:

`https://midominio.com/migestion/mi_erp_dat/INDEX`

{% hint style="warning" %}
Es muy importante recordar que los procesos ejecutables vía web han de tener activada la propiedad Accesible web. Si esta propiedad no está activada en un proceso, éste no podrá ser ejecutado vía web.
{% endhint %}

Si queremos que el proceso a ejecutar reciba parámetros, tendremos que crear en el proceso tantas [variables locales](https://doc.velneo.com/velneo-vdevelop/proyectos-objetos-y-editores/de-aplicacion-y-datos/variable-local) de tipo alfabético como parámetros se necesiten pasar y en la pasarela cgi resolver cada una con el mismo identificador que tenga la variable local en el proceso. Ejemplo: en un proyecto tenemos declarado el proceso siguiente:

![](https://content.gitbook.com/content/hGRTr5J3e6YsZ6MYIEDz/blobs/08MO7uTyWn2wa23rtnVA/res_1805.png)

Este proceso tiene declaradas dos variables locales de tipo alfabético ID y NAME, que son usadas para dar de alta un registro en una tabla.

La declaración del proceso y los parámetros en la pasarela cgi debería ser:

…ALTA\_DE\_FICHA.PRO?**ID**=xxxxx&**NAME**=yyyyyy

Otra forma de poder leer las variables de una petición Web es creando en el proceso las variables locales especiales [REQUEST\_INFO](https://doc.velneo.com/velneo-vdevelop/proyectos-objetos-y-editores/de-aplicacion-y-datos/variable-local#request_info) (cuando el método de envío es *get*) y [REQUEST\_INFO\_VARSPOST](https://doc.velneo.com/velneo-vdevelop/proyectos-objetos-y-editores/de-aplicacion-y-datos/variable-local#request_info_varspost) (cuando el método de envío es *post*). Para concer qué otras variables locales espaciales podemos crear un un proceso de código nativo de Velneo ejecutado vía web, haz clic [aquí](https://doc.velneo.com/velneo-vdevelop/proyectos-objetos-y-editores/de-aplicacion-y-datos/variable-local#variables-locales-especiales-para-procesos-ejecutados-en-velneo-vmodapache).

El proceso puede ser un proceso [javascript](https://doc.velneo.com/velneo-vdevelop/scripts/lenguajes/javascript). En ese caso, en el proceso disponemos de dos nuevas variables, [theRequest](https://doc.velneo.com/velneo-vdevelop/scripts/lenguajes/javascript/clases/xmlhttprequest#therequest) y [threResponse](https://doc.velneo.com/velneo-vdevelop/scripts/lenguajes/javascript/clases/xmlhttprequest#theresponse).

**theRequest** tiene las siguientes funciones:

String header( String szHeader )\
Array headerKeys(\
String GET( String szKey )\
Array GETkeys()\
String POST( String szKey )\
Array POSTKeys()\
String pathInfo()\
String unparsedUri()\
String uri()\
String body()\
String method()

**threResponse** tiene las siguientes funciones:

String header( String szHeader )\
Array headerKeys()\
void setHeader( String szHeader, String szValue )\
String contentType()\
setContentType( String szContentType )\
String body()\
void setBody( String szBody )\
void setStatus( int nStatus )\
int status()

Ejemplo: si en el proceso vJavascript llamado por vModApache hacemos lo siguiente:

```
var body="Host: " + theRequest.header("Host");
body += "<br />Header keys: ";
body += theRequest.headerKeys();
body += "<br />Get keys: ";
body += theRequest.GETkeys();
body += "<br />Post keys: ";
body += theRequest.POSTkeys();
body += "<br />unparsedUri: ";
body += theRequest.unparsedUri();
body += "<br />uri: ";
body += theRequest.uri();
body += "<br />pathInfo: ";
body += theRequest.pathInfo();
body += "<br />r: ";
body += theRequest.GET("r");
body += "<br />method: ";
body += theRequest.method();
body += "<br />";
theResponse.setBody( body );
theResponse.setContentType( "text/html" );
```

Para la petición a la url <http://127.0.0.1/velneo/proceso?r=6> devuelve:

Host: 127.0.0.1\
Header keys: Accept,Accept-Encoding,Accept-Language,Cache-Control,Connection,Host,Upgrade-Insecure-Requests,User-Agent\
Get keys: r\
Post keys:\
unparsedUri: /velneo/proceso?r=6\
uri: /velneo/proceso\
pathInfo: /proceso\
r: 6\
method: GET

## Dibujos

Es posible servir vía web [dibujos](https://doc.velneo.com/velneo-vdevelop/proyectos-objetos-y-editores/de-aplicacion-y-datos/dibujo) declarados en el proyecto actual o en un proyecto heredado. La forma de referenciar un dibujo en una URL es similar a la de los procesos:

**\[ID\_PROYECTO\_ext]\[/]ID\_DIBUJO.ext**

Donde:

#### **\[ID\_PROYECTO\_ext]\[/]**

Es el identificador del proyecto (ID\_PROYECTO) y su extensión (ext) donde está alojado el dibujo que se desea servir. Solamente será necesario especificarlo cuando el dibujo se encuentre en un proyecto heredado. Si el dibujo está en el proyecto actual no se especificará. El identificador del proyecto será el valor establecido en la propiedad **nombre** del formulario de propiedades del proyecto y ha de escribirse exactamente igual a como lo hemos establecido,respetando mayúsculas y minúsculas:

![](https://content.gitbook.com/content/hGRTr5J3e6YsZ6MYIEDz/blobs/FjHB54XEvk9SGA7fEi4k/res_1841.png)

y el sufijo **dat** ha de ser escrito todo en minúsculas.

El carácter separador **/** no se incluirá si no se incluye el identificador del proyecto.

#### **ID\_DIBUJO**

El el identificador dado al dibujo en el proyecto.

#### **.ext**

Será la extensión; ésta podrá ser o bien **.png** o bien **.jpg** indistintamente.

Ejemplos:\
`https://midominio.com/migestion/LOGO.png` o `http://midominio.com/migestion/LOGO.jpg`: llamada al dibujo LOGO del proyecto actual.

`https://midominio.com/migestion/mi_erp_dat/LOGO.jpg` : llamada al dibujo LOGO del proyecto de datos heredado.

## Campos de tipo objeto dibujo

En los procesos ejecutados vía web podremos leer registros de [tablas](https://velneo.es/info_v7_20_es/velneo_vdevelop/proyectos_objetos_y_editores/proyecto_de_datos/tabla) del proyecto en curso o de proyectos heredados para, por ejemplo, ir componiendo código html para devolver una página web el contenido de sus campos. Para obtener el contenido de un campo simplemente incluiremos su identificador en la fórmula donde queramos obtenerlo, pero un campo de tipo objeto dibujo de un registro es un caso especial, dado que el dibujo no es almacenado en el fichero de datos sino en un fichero a parte llamado contenedor, lo que se guarda en el campo es una etiqueta que referencia al objeto en el contenedor. Para poder servir la imagen correspondiente a este tipo de campo tendremos que especificar la url siguiente:

**obj/ID\_PROYECTO\_dat/ID\_TABLA/ETIQUETA.ext**

Donde:

#### **obj**

Es el prefijo que indica que se trata de un campo objeto. Es obligatoria su especificación

#### .**ID\_PROYECTO\_dat**

Es el identificador del proyecto de datos donde está declarada la tabla que contiene el campo objeto dibujo. Es obligatoria su especificación y ha de escribirse exactamente igual a como lo hemos establecido,respetando mayúsculas y minúsculas:

![](https://content.gitbook.com/content/hGRTr5J3e6YsZ6MYIEDz/blobs/FjHB54XEvk9SGA7fEi4k/res_1841.png)

y el sufijo **dat** ha de ser escrito todo en minúsculas.

#### **ID\_TABLA**

Es el identificador de la la tabla que contiene el campo objeto dibujo. Es obligatoria su especificación.

#### **ETIQUETA**

Es la etiqueta que referencia al objeto en el contenedor. Dicha etiqueta, tal y como hemos indicado anteriormente, es almacenada en el campo objeto dibujo de la tabla. Es obligatoria su especificación.

#### **.ext**

Será la extensión; ésta podrá ser o bien **.png** o bien **.jpg** indistintamente.

{% hint style="warning" %}
Solamente podremos presentar imágenes de tablas declaradas en el proyecto en curso o en proyectos heredados de forma directa. Esto quiere decir que en un proyecto de aplicación que hereda un proyecto de datos podremos servir vía web una imagen de un registro de una tabla del mismo, pero si queremos hacerlo en un proyecto de aplicación que a su vez hereda otro que es el que hereda el proyecto de datos, no podremos servir la imagen. En este caso lo recomendable sería hacer que nuestro proyecto herede directamente ese proyecto de datos.
{% endhint %}

Ejemplo:

La fórmula siguiente se corresponde con una línea de proceso cuyo origen es una **Ficha** de la tabla de **MAESTROS** del proyecto **TutorvModApache** y en ella se está componiendo un código html que devolverá una fila que devolverá el contenido de los campos ID, NOMBRE y el campo objeto dibujo (FOTO) de un registro:

```
"<tr><td>" + #ID + "</td><td>" + #NAME + "</td><td>" + "<img src=\c" + "obj/TutorvModApache_dat/MAESTROS/" + #FOTO + ".png" + "\c>" + "</td></tr>"
```

El código html que esta fórmula generará al ejecutar el proceso a través de Velneo vModApache será:

```
<tr><td>2</td><td>Nombre Maestro 2</td><td><img src="obj/TutorvModApache_dat/MAESTROS/JPG00002.png"></td></tr>
```

La URL base la heredará de la URL vigente en el momento de la ejecución del proceso.

## Variable CONTENT\_TYPE

Usada en un proceso nos permitirá especificar la codificación de caracteres utilizada al codificar el documento. Para ello simplemente tendremos que declarar una variable local en el proceso cuyo identificador sea **CONTENT\_TYPE**. Para establecer su contenido usaremos el comando de instrucción de proceso [set](https://doc.velneo.com/velneo-vdevelop/proyectos-objetos-y-editores/de-aplicacion-y-datos/proceso/basicos/variables#set).

Ejemplo: `Set \( CONTENT\_TYPE, "text/html; charset=ISO-8859-1" \)`

Esta declaración dice que el tipo de contenido del documento es text/html, y la codificación de caracteres utilizada es la ISO-8859-1.

Simplemente declarando este Set en el proceso ya se enviará en el encabezado de la comunicación http la información sobre la codificación de caracteres que hayamos establecido.

## Petición /velneo\_version

En modapache, se reserva la petición `/velneo_version` para devolver la versión de Velneo, por lo que si en un proyecto, existiese un recurso (proceso, o cualquier cosa accesible mediante modapache), llamado velneo\_version no será atendido.

Ejemplo:

`https://midominio.com/gestion/velneo_version`
