// estas leyendo...

Código

Pase de parámetros en VFP, VFP-PHP y otros más

En ocasiones necesitamos pasar una cantidad indeterminada de parámetros a alguna función o procedimiento cuando escribimos aplicaciones en VFP.  Adicionalmente a la forma tradicional de hacerlo, es decir, enumerando aquellos que se han de recibir, existe la posibilidad de pasar un objeto o un array como parametro, dotando de esta forma de una enorme flexibilidad a nuestras aplicaciones.

La primera de estas, usando un objeto, es aun mas flexible que la segunda, porque permite incluso ir añadiendo o quitando elementos de forma natural en el camino. Un poco de código para verlo:

Primero, creamos el objeto:

1
2
3
4
5
miObjeto= createobject("Empty") &&Creamos el objeto usando la clase Empty, que no contiene propiedades innecesarias
Addproperty(miObjeto,"mipropiedad1","un valor de texto")  &&Podemos asignar cadenas
Addproperty(miObjeto,"mipropiedad2",5)  &&números
Addproperty(miObjeto,"mipropiedad3",.f.) &&boleanos (o cualquier otra cosa, otro objeto o incluso un array)
mifuncion(miObjeto) &&y lo enviamos

Y en la función que habrá de recibirlo:

1
2
3
4
Parameters miObjeto && y le hacemos lo que sea...
if vartype(miObjeto.mipropiedad1)!="U"
&&procesamos
endif && también podríamos recorrerlo con AMEMBERS...

Hacerlo con arrays es básicamente lo mismo, solo que tiene un par de peculiaridades: el array debe ser visible desde fuera de la función que lo transmite, y debe ser precedido por una @ para ser interpretado como una referencia, ya que de lo contrario nuestra función recibirá el argumento como un valor, y este sera el contenido de la celda 1,1 de nuestra array.

Ahora bien, esta característica ya interesante de por si adquiere otra dimensión si consideramos que en combinación con la librería JSON para VFP desarrollada por Craig Boyd (existen otras, pero esta es muy buena y gratuita) podemos simplemente crear un objeto en VFP, convertirlo en JSON y enviarlo por http a un servidor:

1
2
3
4
5
6
7
8
9
10
11
SET LIBRARY TO "json.fll" ADDITIVE  &&Añadimos la librería
loJSON = CreateObject("json")  &&Creamos el objeto
mensaje= loJSON.Stringify(miObjeto)  &&Genero el JSON
loHTTP = CREATEOBJECT("WinHttp.WinHttpRequest.5.1")  && Creamos un objeto para la conexión
loHTTP.Open("POST","http://miserver/miarchivo.php",.F.) && Establecemos la ruta
loHTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded") && Configuramos el envio
loHTTP.SetRequestHeader("User-Agent", "Lo-que-sea")  && el Agente que deseamos pasar
loHTTP.SetRequestHeader("Content-length",LEN(mensaje))  && El tamaño del mensaje
loHTTP.Send(mensaje)  && Lo enviamos
loHTTP.WaitForResponse()  && Esperamos la respuesta
mirespuesta= loHTTP.ResponseText  && Y hacemos cualquier cosa con ella

Y en el servidor, con PHP hacemos algo como esto:

1
2
3
4
require_once('JSON.php'); //Llamamos la clase Json de http://mike.teczno.com/json.html (con la función nativa de PHP5 se obtiene un valor null al decodificar)
$input = $_POST['mensaje']; //Obtenemos el valor recibido
$value = $json->decode($input); //Lo transformamos
echo $value->mipropiedad1 //Imprime "un valor de texto"

Es posible tambien hacerlo a la inversa, es decir, crear el objeto en PHP e interpretarlo en VFP, e incluso puede ser usado para crear objetos complejos y usarlos plenamente en uno y otro lado de la conexión…

Y si lo podemos hacer con PHP, tambien podremos con muchos otros lenguajes para los que se ha implementado el protocolo: Python, toda la gama .net y muchos otros.

Compartir:
  • Technorati
  • Meneame
  • BlogMemes Sp
  • Facebook
  • Google Bookmarks
  • MisterWong
  • Live
  • Pownce
  • StumbleUpon
  • del.icio.us

Conversación

Los comentarios estan cerrados para esta entrada.

  1. Información Bitacoras.com…

    Valora en Bitacoras.com: En ocasiones necesitamos pasar una cantidad indeterminada de parámetros a alguna función o procedimiento cuando escribimos aplicaciones en VFP.  Adicionalmente a la forma tradicional de hacerlo, es decir, enumerando aque……

    Dejado por Bitacoras.com | marzo 7, 2010, 5:24