stringtranslate.com

activoVFP

ActiveVFP (también conocido como AVFP ) es un marco de scripting del lado del servidor diseñado para que el desarrollo web produzca páginas web dinámicas . Similar a PHP , pero utilizando el lenguaje y la base de datos nativos Visual Foxpro (VFP) (u otras bases de datos como Microsoft SQL y MySQL ), ActiveVFP también se puede utilizar en aplicaciones web Model-View-Controller (MVC), así como en RESTful API . ActiveVFP es completamente gratuito y de código abierto y no requiere la compra de Microsoft Visual FoxPro ni ningún software adicional.

ActiveVFP se creó originalmente en 2001. La implementación principal de ActiveVFP ahora la produce la comunidad Foxpro en activevfp.codeplex.com y sirve como referencia formal a ActiveVFP. ActiveVFP es un software gratuito publicado bajo la licencia MIT .

ActiveVFP es único entre los lenguajes y marcos web del lado del servidor porque tiene una base de datos y una funcionalidad de base de datos integrada en el lenguaje.

Sintaxis

ActiveVFP utiliza el lenguaje nativo de Visual Foxpro tal como existe en la última versión producida por Microsoft, Visual FoxPro 9 SP2. El tiempo de ejecución de VFP multiproceso , vfp9t.dll, se utiliza en lugar de la versión de escritorio normal del tiempo de ejecución de VFP. [1]

Al utilizar ActiveVFP, el compilador de VFP solo ejecuta código VFP dentro de sus delimitadores. VFP no procesa nada que esté fuera de sus delimitadores. Los delimitadores más comunes son formas cortas de estilo ASP <% o <%= y %>. <% %> ejecuta un bloque de código FoxPro y <%= %> imprime la variable inmediatamente. El propósito de todos estos delimitadores es separar el código VFP del código que no es VFP, incluido el HTML.

Los principales objetos disponibles para ActiveVFP para programación web son: oRequest, oResponse y oSession (y todos los objetos que han estado disponibles en Classic Active Server Pages (ASP)). Estos objetos se utilizan íntegramente dentro de Visual FoxPro para realizar la programación web con FoxPro.

El lenguaje FoxPro contiene comandos bastante similares a otros lenguajes de programación como Basic. Los bucles incluyen comandos do, if, while, for, else en un uso fácilmente comprensible para cualquier persona familiarizada con otros lenguajes de programación. Los comandos toman la forma de "comando" y "comando final". El lenguaje también tiene amplios comandos de indexación y manipulación de bases de datos. [2]

Al igual que PHP, ActiveVFP aprovecha la recolección automática de basura (GC) de la memoria y la escritura dinámica/débil , [3] aumentando la productividad del programador.

Además del modo "scripting", ActiveVFP también ofrece diseño Modelo-Vista-Controlador (MVC). El controlador consta de un código de clase FoxPro ubicado en un archivo Foxpro .prg. La salida puede consistir en vistas .avfp, JSON y otras, similar a otras implementaciones modernas de MVC. El modelo pueden ser archivos DBF u otras bases de datos de back-end.

Ejemplos

<!DOCTYPE html> <html> <head> <meta charset= "utf-8" > <title> Código VFP en HTML </title>    ...<% * Configuración lnTotPerPage = 10 lnpagenumbers = 5 lnStart = VAL ( oRequest . querystring ( "página" )) lcButton = oRequest . querystring ( "nav" ) * sql SELE * FROM Customer INTO CURSOR tCursor * crear números de página START = 0 lnPageMax = 0 lnPageBegin = 0 lnRowCount = RECCOUNT () SET PROC en oProp . AppStartPath + 'prg\pages' ADITIVO lcPages = páginas ( lnTotPerPage , lnpagenumbers , lnStart , lcButton , lnRowCount ) %>                                     ... <% FOR lnX = lnPageBegin TO lnPageMax IF lnX <= lnRowCount GOTO lnX %> <tr> <td ancho= "40%" ><font face= "helvetica, arial" tamaño= "2" > <a hhref= " < %= JustPath ( oProp . ScriptPath ) +[/ detalle . cust_id = ]+ ; ALLTRIM ( cust_id ) % > "> <%= tCursor . empresa %></a></font></td> <td width= "36%" ><font face= "helvetica, arial" size= "2" > <%= tCursor . Contacto %></font></td> <td width= "24%" ><font face= "helvetica, arial" size= "2" color= "#000000" > <%= tCursor . Título %></font></td> </tr> <% ENDIF ENDFOR %>                                    ...<%= lcPáginas %>  
* clientes.prg - Controlador de clientes * * omite el código de script Main.prg y .AVFP * DEFINIR CLASE clientes Controlador AS resto Controlador * PROCEDIMIENTO openData SELECCIONAR 0 USAR  ( ESTA .carpeta de inicio + " clientes.dbf " ) ALIAS clientes ENDPROC  PROCEDIMIENTO infoAcción && OBTENER www.hostname.com/app/customers/info  VOLVER  "homeFolder: <b>" + ESTA .homeFolder + "</b>"  ENDPROC  PROCEDIMIENTO getAction && OBTENER www.hostname.com/app/customers/<id>  cCustId LOCAL cCustId = ESTE .Params[1] ESTE .openData() SELECCIONE CLIENTES LOCALIZAR PARA custId = cCustId SI SE ENCUENTRA () LOCAL cJSON **USE mydbf &&error de prueba *JSON rápido y sucio cJSON = [{ "custId" : "] + RTRIM(custId) + [" , "custName" : "] + RTRIM(custName) + [" ,] + ; [ "custStat" : "] + RTRIM(custStat) + [" }] RETORNO cJSON     TERMINARA SI PROCESO FINAL  PROCEDIMIENTO listAction && GET www.hostname.com/app/customers/  LOCAL cHTML cHTML = ""  *oEmp=newOBJECT('schedbizobj','c:\avfp5.61Demo\prg\utiltest2.prg')  SET PROC en substr (oProp .AppStartPath,1, AT ( [\] ,oProp.AppStartPath,2))+ 'prg\AVFPutilities' ADDITIVE && ¡Asegúrate de usar ADDITIVE o sucederán cosas malas!  ESTE .openData() SELECCIONAR  PERSONALIZADOS cHTML = oHTML.mergescript( FILETOSTR ( substr (oProp.AppStartPath,1, AT ( [ \] ,oProp.AppStartPath,2))+ 'viewtest.avfp' )) ​​VOLVER cHTML PROCESO FINAL  PROCEDIMIENTO helloworld && método personalizado (&& GET www.hostname.com/app/customers/helloworld/)  LOCAL cHTML cHTML = ""  *USE mydbf  *SET PROC to substr(oProp.AppStartPath,1,AT([\],oProp. AppStartPath,2))+'prg\AVFPutilities' ADDITIVE && ¡Asegúrate de usar ADDITIVE o sucederán cosas malas!  cHTML = oHTML.mergescript( FILETOSTR ( substr (oProp.AppStartPath,1, AT ( [\] ,oProp.AppStartPath,2))+ 'hola.avfp' )) ​​RETORNO cHTML PROCESO FINAL  PROCEDIMIENTO getemployees && método personalizado (&& GET www.hostname.com/app/customers/getemployee/<id> oJSON = NUEVOOBJETO ( 'json' , 'json.prg' )  ESTABLECER RUTA A oProp.AppStartPath+ 'data\AVFPdemo41\'seleccione e.emp_id como id, e.first_Name como nombre, e.last_Name como apellido, e.title como título, [ imagen s/Emps/]+e .imagen como imagen,count(r.emp_id) como reportCount ; del empleado e a la izquierda, únase al empleado r en VAL (r.reports_to) = VAL (e.emp_id) ; EN Resultados de búsqueda del cursor ; agrupar por e.apellido, e.emp_id, e.primer_nombre, e.título, e.imagen  ; ordenar por e.apellido,e.primer_nombreoJSON .keyfor cursor s= "elementos"* devolver datos y propiedades JSON oResponse .ContentType = "application/json;charset=utf-8"	oResponse.Write(oJSON.stringify( 'SearchResults' )) oResponse .Flush lcHTMLout =[] ENDPROC************************************************** **********************FINALIZAR

Referencias

  1. ^ Servidores VFP avanzados de Calvin Hsia, Microsoft
  2. ^ Ejemplos de código de Visual FoxPro
  3. ^ Comparación de secuencias de comandos web de Windows

enlaces externos