ActiveVFP
Paradigm | objektorienterad , processuell , 4-GL |
---|---|
Utvecklare | VFP-gemenskap |
Dök först upp | 2001 |
Stabil frisättning | 6.03 / 29 januari 2013
|
Maskinskrivningsdisciplin | Dynamisk , svag |
Implementeringsspråk | Visual FoxPro 9 SP2 |
OS | Windows |
Licens | MIT |
Filnamnstillägg |
Vanliga tillägg .avfp Andra tillägg utan tillägg |
Hemsida |
ActiveVFP (även känd som AVFP ) är ett skriptramverk på serversidan utformat för webbutveckling för att producera dynamiska webbsidor . I likhet med PHP , men med det inbyggda Visual Foxpro (VFP) språket och databasen (eller andra databaser som Microsoft SQL och MySQL ), kan ActiveVFP också användas i Model-View-Controller (MVC) webbapplikationer samt RESTful API . ActiveVFP är helt gratis och öppen källkod och kräver inte köp av Microsoft Visual FoxPro eller någon ytterligare programvara.
ActiveVFP skapades ursprungligen 2001. Den huvudsakliga implementeringen av ActiveVFP produceras nu av Foxpro Community på
ActiveVFP är unikt bland webbspråk och ramverk på serversidan eftersom det har en databas- och databasfunktionalitet inbyggd i språket.
Syntax
ActiveVFP använder det inhemska Visual Foxpro-språket som det finns i den senaste versionen producerad av Microsoft, Visual FoxPro 9 SP2. Den flertrådade VFP-runtimen, vfp9t.dll, används istället för den vanliga skrivbordsversionen av VFP-runtime.
Med ActiveVFP kör VFP-kompilatorn endast VFP-kod inom dess avgränsare. Allt utanför dess avgränsare bearbetas inte av VFP. De vanligaste avgränsarna är korta former i ASP-stil <% eller <%= och %>. <% %> kör ett FoxPro-kodblock och <%= %> skriver ut variabeln omedelbart. Syftet med alla dessa avgränsare är att separera VFP-kod från icke-VFP-kod, inklusive HTML.
Huvudobjekten som är tillgängliga för ActiveVFP för webbprogrammering är: oRequest, oResponse och oSession (och alla objekt som har varit tillgängliga i Classic Active Server Pages (ASP)). Dessa objekt används helt och hållet inom Visual FoxPro för att utföra webbprogrammering med FoxPro.
FoxPro-språket innehåller kommandon som liknar andra programmeringsspråk som Basic. Slingor inkluderar kommandon do, if, while, for else i en användning som lätt kan förstås av alla som är bekanta med andra programmeringsspråk. Kommandon har formen av "command" och "endcommand". Språket har också omfattande databasmanipulerings- och indexeringskommandon.
Liksom PHP drar ActiveVFP fördel av automatisk minnesinsamling (GC) och Dynamic/Weak Typing , vilket ökar programmerarens produktivitet.
Förutom "skript"-läge erbjuder ActiveVFP Model-View-Controller (MVC) design också. Styrenheten består av FoxPro-klasskod som finns i en Foxpro .prg-fil. Utdata kan bestå av .avfp-vyer, JSON och andra, liknande andra moderna MVC-implementationer. Modellen kan vara DBF-filer eller andra backend-databaser.
Exempel
- VFP-kod inbäddad i HTML -kod för att öppna tabell- och listposter
0
0
0
<!DOCTYPE html> <html> <head> <meta charset= "utf-8" > <title> VFP-kod i HTML </title> ... <% * Inställningar lnTotPerPage = 10 lnpagenumbers = 5 lnStart = VAL ( oRequest . querystring ( "sida" )) lcButton = oRequest . querystring ( " nav" ) * sql SELE * FRÅN Kund INTO CURSOR tMarkör * skapa sidnummer START = lnPageMax = lnPageBegin = lnRowCount = RECCOUNT () STÄLL IN PROC till oProp . AppStartPath + 'Prg \ Pages ' Additive LcPages = Pages ( LntotPerPage , Lnpagenumbers , LnStart , LcButton , LnRowCount ) %> ... < % för lnx = lnpagebegin till lnpagemax if lnx < = lnRowCount Goto lnx % = "40%" ><font face= "helvetica, arial" size= "2" > <a hhref= " <%= JustPath ( oProp . ScriptPath ) +[/ detalj . avfp ? cust_id =]+ ; ALLTRIM ( cust_id ) %> "> <%= tMarkör . företag %></a></font></td> <td width= "36%" ><font face= "helvetica, arial" size= "2" > <%= tCursor . Kontakta %></font></td> <td width= "24%" ><font face= "helvetica, arial" size= "2" color= "#000000" > <%= tMarkör . Titel %></font></td> </tr> <% ENDIF ENDFOR %> ... <%= lcPages %>
- VFP Controller-kod för en MVC-webbapplikation
" + THIS.homeFolder + " * customers.prg -Customers Controller * * förbigår Main.prg och .AVFP skriptkod * DEFINIERA KLASS kunderController AS restController * PROCEDUR openData SELECT 0 ANVÄND (THIS.homeFolder + "customers.dbf") ALIAS kunder ENDPROC PROCEDUR HÄMTA www.Action &&. hostname.com/app/customers/info RETURN "homeFolder: <b>" + THIS.homeFolder + " LOCAL cCustId cCustId = THIS.Params[1] THIS.openData() VÄLJ KUNDER LOCATE FOR custId = cCustId IF FOUND() LOCAL cJSON **ANVÄND mydbf &&testfel *snabb och smutsig JSON cJSON = [{"]+custId RTRIM(custId) + [","custName":"] + RTRIM(custName) + [",] + ; ["custStat":"] + RTRIM(custStat) + ["}] RETUR cJSON ENDIF ENDPROC PROCEDURE listAction && GET www.hostname.com/app/customers/ LOCAL cHTML cHTML = "" *oEmp=newOBJECT('schedbizobj', 'c:\avfp5.61Demo\prg\utiltest2.prg') STÄLL IN PROC till substr(oProp.AppStartPath,1,AT([\],oProp.AppStartPath,2))+'prg\AVFPutilities' ADDITIVE && Se till att du använd ADDITIVE eller dåliga saker händer! THIS.openData() SELECT KUNDER cHTML= oHTML.mergescript(FILETOSTR(substr(oProp.AppStartPath,1,AT([\],oProp.AppStartPath,2))+'viewtest.avfp')) RETURNERA cHTML ENDPROC PROCEDUR helloworld && anpassad metod (&& GET www.hostname.com/app/customers/helloworld/) LOCAL cHTML cHTML = "" *ANVÄND mydbf *SET PROC till substr(oProp.AppStartPath,1,AT([\],oProp.AppStartPath,2 ))+'prg\AVFPutilities' ADDITIVE && Se till att du använder ADDITIVE eller dåliga saker händer! cHTML= oHTML.mergescript(FILETOSTR(substr(oProp.AppStartPath,1,AT([\],oProp.AppStartPath,2))+'hello.avfp')) RETUR cHTML ENDPROC PROCEDUR getanställda && anpassad metod (&& GET www. hostname.com/app/customers/getemployee/ oJSON=NEWOBJECT('json','json.prg') STÄLL IN SÖG TILL oProp.AppStartPath+'data\AVFPdemo41\' välj e.emp_id som id, e.first_Name som förnamn, e.last_Name som efternamn, e.title som titel , [images/Emps/]+e.picture as picture,count(r.emp_id) as reportCount ; från anställd e vänster gå med anställd r på VAL(r.reports_to) = VAL(e.emp_id) ; INTO Cursor SearchResults; gruppera efter e.last_Name,e.emp_id, e.first_Name,e.title, e.picture ; ordna efter e.last_Name,e.first_Name oJSON.keyforcursors="items" * skicka tillbaka JSON-data och egenskaper oResponse.ContentType = "application/json;charset=utf-8" oResponse.Write(oJSON.stringify('SearchResults') ) oResponse.Flush lcHTMLout=[] ENDPROC ***************************************** ******************************* ENDDEFINE
externa länkar
- Klassbaserade programmeringsspråk
- Datacentrerade programmeringsspråk
- Dynamiskt typade programmeringsspråk
- Fjärde generationens programmeringsspråk
- Gratis kompilatorer och tolkar
- Programmeringsspråk på hög nivå
- Microsoft databasprogramvara
- Microsofts utvecklingsverktyg
- Objektorienterade programmeringsspråk
- Procedurmässiga programmeringsspråk
- Skriptspråk
- Programvara som använder MIT-licensen
- Webbramverk
- XBase programmeringsspråk familj