ActiveVFP

AVFP
ActiveVFPlogo2.png
Paradigm objektorienterad , processuell , 4-GL
Utvecklare VFP-gemenskap
Dök först upp 2001 ; 22 år sedan ( 2001 )
Stabil frisättning
6.03 / 29 januari 2013 ; 10 år sedan ( 2013-01-29 )
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 .codeplex .com

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 .codeplex .com och fungerar som den formella referensen till ActiveVFP. ActiveVFP är fri programvara som släpps under MIT-licensen .

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