액티브VFP
ActiveVFP![]() | |
패러다임 | 객체 지향, 절차적, 4-GL |
---|---|
개발자 | VFP 커뮤니티 |
첫 등장 | 2001; | 전
안정적 해제 | 6.03 / 2013년 1월 29일; 전 |
타이핑 규율 | 다이나믹, 약함 |
구현 언어 | Visual FoxPro 9 SP2 |
OS | 창문들 |
면허증 | MIT |
파일 이름 확장명 | 공통 확장자 .avfp 기타 확장자 무연장의 |
웹사이트 | activevfp |
ActiveVFP(ActiveVFP라고도 함)는 동적 웹 페이지를 생성하기 위해 웹 개발을 위해 설계된 서버측 스크립팅 프레임워크다.PHP와 유사하지만 기본 VFP(Visual Foxpro) 언어 및 데이터베이스(또는 Microsoft SQL 및 MySQL과 같은 다른 데이터베이스)를 사용하여 ActiveVFP는 RESTful API뿐만 아니라 MVC(Model-View-Controller) 웹 애플리케이션에서도 사용할 수 있다.ActiveVFP는 완전 무료 오픈 소스로서 마이크로소프트 Visual FoxPro 또는 추가 소프트웨어를 구입할 필요가 없다.
ActiveVFP는 원래 2001년에 만들어졌다.ActiveVFP의 주요 구현은 현재 activevfp.codeplex.com
ActiveVFP는 언어에 데이터베이스와 데이터베이스 기능을 내장하고 있기 때문에 서버측 웹 언어와 프레임워크 사이에서 고유하다.
구문
ActiveVFP는 마이크로소프트 Visual FoxPro 9 SP2에서 제작한 최신 버전에 존재하는 것처럼 토종 Visual FoxPro 언어를 사용한다.VFP 런타임의 일반 데스크톱 버전 대신 다중 스레드 VFP 런타임인 vfp9t.dll이 사용된다.[1]
VFP 컴파일러는 ActiveVFP를 사용하여 구분 기호 내에서 VFP 코드만 실행한다.그 구분자 이외의 어떤 것도 VFP에 의해 처리되지 않는다.가장 일반적인 구분 기호는 ASP 스타일의 짧은 형식 <% 또는 <%= 및 %>이다.<% %>는 FoxPro 코드 블록을 실행하고 <%= %>는 변수를 즉시 출력한다.이 모든 구분 기호의 목적은 HTML을 포함한 비 VFP 코드에서 VFP 코드를 분리하는 것이다.
ActiveVFP가 웹 프로그래밍에 사용할 수 있는 주요 개체는 oRequest, oResponse 및 oSession(및 ASP(Classic Active Server Pages)에서 사용할 수 있는 모든 개체)이다.이러한 물체는 전적으로 Visual FoxPro 내에서 FoxPro로 웹 프로그래밍을 수행하는 데 사용된다.
FoxPro 언어는 Basic과 같은 다른 프로그래밍 언어와 상당히 유사한 명령을 포함하고 있다.루프에는 다른 프로그래밍 언어에 익숙한 사람이 쉽게 이해할 수 있는 용도에 다른 명령이 포함되어 있다.명령은 "명령"과 "끝명령"의 형태를 취한다.언어는 또한 광범위한 데이터베이스 조작과 색인 명령어를 가지고 있다.[2]
PHP와 마찬가지로 액티브VFP는 자동 메모리 가비지 수집(GC)과 동적/취약 타이핑(Dynamic/Weak Typeing)을 활용해 프로그래머 생산성을 높인다.[3]
ActiveVFP는 "스크립팅" 모드 외에도 MVC(Model-View-Controller) 설계도 제공한다.컨트롤러는 FoxPro .prg 파일에 있는 FoxPro 클래스 코드로 구성된다.출력은 다른 현대의 MVC 구현과 유사한 .avfp 뷰, JSON 등으로 구성될 수 있다.모델은 DBF 파일 또는 기타 백엔드 데이터베이스일 수 있다.
예
- 테이블을 열고 레코드를 나열하는 HTML 코드에 포함된 VFP 코드
<!DOCTYPE html> <html> <head> <meta charset="utf-8" > <title>HTML</title>의 VFP 코드 ...<% *Settings lnTottPerPage =10 lnpagencipular =5 lnStart=VAL(oRequest)>.querystring("페이지") lcButton=oRequest.쿼리 문자열("nav") *sql SELE * FROM Customer IN Cursor tcurer *페이지 번호 생성 START=0 lnPageMax = 0 lnPageBegin = 0 lnRowCount() = 0 lnCount() oProp.AppStartPath+'prg\pages's첨부 lcPages=page(lnTotPerPage,lnpagenumber,lnStart,lcButton,lnRowCount) %> …<% FOR lnX = lnPageBegin TO lnPageMax IF <= lnRowCount GOTO lnX %> <tr> <td width="40%"><font face="헬베티카, arial" size="2"a href=justPath(Prop)>.ScriptPath)+[/detail.avfp?cust_id=]+; ALLTRIM(cust_id)%>><%=curchor.company%></td><td 폭="36%"><font face="helvetica, arial" size="2"><%=t Curchor.Contact%</font> <td width="24%"><font face="헬베티카, arial" size="2" color="#000000"> <%=t Curchor.제목 %</font> </tr> <% ENDIF ENDFOR %> ...<%= lcpage %>
- MVC 웹 애플리케이션의 VFP 컨트롤러 코드
* customers.prg -Customers Controller * Main.prg 및 .AVFP 스크립트 코드 MakerestController AS*PROCEDURE 0버스(THIS.homeFolder +"customers.dbf")ALIAS 고객 ENDPROC PROCEDURE infoAction 및 SELECT openData, &,"homeFolder:<>b>."+THIS.homeFolder+"<>/b>."ENDPROC PROCEDURE getAction 및www.hostname.com/app/customers/infoRETURN를 잡아라;동급 customersController DEFINE.&GETwww.hostname.com/app/customers/<id> LOCAL cCustid cCustId = THISE.Params[1]THIS.openData()만약 FOUND()지방 cJSON **USE mydbf 및 CUSTOMERScustId)cCustId. 및 LOCATE, 시험 오류와 더러운 JSONcJSON)*quick[{"custId":"]+RTRIM(custId)+[","custName":"]+RTRIM(custName)+[",]+;["custStat":"]+RTRIM(custStat)+["}]RETURN cJSON ENDIF ENDPROC PROCED SELECT.URE 목록Action &&GET www.hostname.com/app/customers/ LOCAL cHTml = "" *oEmp=newObject('schedbizobj'),c:\avfp5.61Demo\prg\utiltest2.prg') PROC를 substr(oProp)로 SET한다.AppStartPath,1,AT([\]),oProp.AppStartPath,2)+'prg\AVFPutilities의 첨가물 &&•첨가물을 사용하거나 나쁜 일이 발생하는지 확인하라!THITE.openData() SELECT CHTML= oHTML.mergescript(FILETO스트R(oProp))AppStartPath,1,AT([\]),oProp.AppStartPath,2))+'viewtest.avfp') RETURN cHTml ENDProC 프로시저 hellowworld & custom method (&GET www.hostname.com/app/customers/helloworld/) LOCAL cHTml = "" *USE mydbf *SET PROC to substr(oProp)를 사용한다.AppStartPath,1,AT([\]),oProp.AppStartPath,2)+'prg\AVFPutilities의 첨가물&&•첨가물(FILETOSTR(oProp))을 사용하거나 나쁜 일이 발생하는지 확인하라!AppStartPath,1,AT([\]),oProp.AppStartPath,2))+'hello.avfp') RETURN cHTml ENDProC 절차 getempers &&custom method(&GET www.hostname.com/app/customers/getemployee/) oJSON=NEWOBOBLE('json') oProp에 경로를 설정하십시오.AppStartPath+'data\AVFPdemo41\' select e.emp_id as id, e.first_Name as firstName, e.last_Name as lastName, e.title as title, [images/Emps/]+e.picture as picture,count(r.emp_id) as reportCount ; from employee e left join employee r on VAL(r.reports_to) = VAL(e.emp_id) ; INTO Cursor SearchResults; group by e.last_Name,e.emp_id, e.first_Name,e.title, e.picture ;e.last_Name, e.e.first_Name oJSON.keyforcurs="items"로 주문 * JSON 데이터와 속성을 oResponse로 다시 전송.ContentType = "application/json;charset=utf-8" oResponse.쓰기(oJSON.stringify('SearchResults') oResponse.lcHTmlout=[] ENDPROC ********************************************************************************************