Clipper/FiveWin - Libreria TWCGI y ejemplo practico

 
Vista:

Libreria TWCGI y ejemplo practico

Publicado por Luis Martin (18 intervenciones) el 15/06/2010 00:03:45
Hola a todos

En esta misma pagina lei sobre la libreria TWCgi del maestro Rene algo que me parece muy interesante por ello agradecere a quien pueda remitir copia(si es que es de libre uso para los desarrolladores) de dicha libreria y algun ejemplo practico que ayude en su entendimiento y uso.

Mi casilla es [email protected]

Gracias.... y a la espera de su pronta respuesta.

Saludos,

Luis Martin
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Libreria TWCGI y ejemplo practico

Publicado por Gabriel Pascual (913 intervenciones) el 15/06/2010 03:26:57
Luis:

La clase a la que haces mención forma parte de una suite de desarrollo web de CiberTec llamada WebAS (Web Application System).

La Suite está compuesta de:

La Clase TWCgi
La Clase TWebPrn
La Clase TWebBrowse
El prg WebTools (con las funciones de soporte Web)
El servidor Web WebAS (escrito en Xailer, es opcional su uso, puedes usar IIS, Apache o cualqueir otro que soporte CGI)
Y la lib XaScript de Xailer que es en realidad la que hace toda la magia Web.

Ningun componente de estos es de libre distribución, los incluye CiberTec con todo y el código fuente en el curso de programación para Web con Harbour.

Usar WebAS no es absolutamente nada complicado, el problema inicial consisten en "entender" como funciona un interpretador de código, una vez que lo entiendes, te das cuenta que PHP o ASP no estan inventando nada nuevo.

Te anexo un ejemplo del uso de WebAS aquí, es el que usa René en el demo de FastReport para Web (www.ciber-tec.d2g.com/frh/) :

Function WebInter()
PUBLIC oCgi, hIni, FrPrn

oCgi := TWCgi():New(Application:aArguments[1])

/* carga iniial de FastReports */
WITH OBJECT FrPrn := frReportManager():new()

:SetEventHandler("Report", "OnUserFunction", {|FName, FParams| CallUserFunction(FName, FParams)})
:AddFunction("function XBaseStr(nValue: Double, nLength: Variant = EmptyVar, nDecimals: Variant = EmptyVar): Variant","My Lovely Functions!", "It's a XBase Str() function!")
END

/* arrancamos el evalulador de WebAS +/
EVAL(cToBlock(oCgi:GetVarValue("func")))
oCgi:End()
RETURN Nil

FUNCTION Rep( nOption )
WITH OBJECT FrPrn
DO CASE
CASE nOption = 1
:SetWorkArea("Customers", 1)
:SetFieldAliases("Customers", "CUSTNO=Cust No;Company;ADDR1=Address;Phone;Fax;Contact")
:LoadFromFile(cRepsPath + "1.fr3")
CASE nOption = 2
:SetWorkArea("Customers", 1)
:SetFieldAliases("Customers", "CUSTNO=Cust No;Company;ADDR1=Address;Phone;Fax;Contact")
:LoadFromFile(cRepsPath + "2gr.fr3")
CASE nOption = 3 .OR. nOption = 4
Select Items
SET ORDER TO 2
*lShowCustName := .t.
:SetWorkArea("Customers", 1)
:SetFieldAliases("Customers", "CUSTNO=Cust No;Company;ADDR1=Address;Phone;Fax;Contact")
:SetWorkArea("Orders", 2)
:SetWorkArea("Items", 3)
:SetWorkArea("Parts", 4)
:SetMasterDetail("Customers", "Orders", {||Customer->CustNo})
:SetMasterDetail("Orders", "Items", {||Orders->OrderNo})
DbSetRelation(4, {||PartNo})
:SetResyncPair("Items", "Parts")
IF nOption = 3
:LoadFromFile(cRepsPath + "4.fr3")
ELSE
:LoadFromFile(cRepsPath + "md.fr3")
ENDIF
*lShowCustName := .f.
CASE nOption = 5
PRIVATE xx, aDir, I := 1, DirName := "C:\*.*"
aDir := Directory(DirName)
:SetUserDataSet("Dir", "F_NAME;F_SIZE;F_CREATION_DATE",;
{||I := 1}, {||I := I + 1}, ;
{||I := I - 1}, {||I > Len(aDir)},;
{|aField|xx := IF(aField="F_NAME",1, IF(aField="F_SIZE", 2, 3)) , aDir[I, xx]})

:LoadFromFile(cRepsPath + "6.fr3")

CASE nOption = 6
SELECT Items
SET ORDER TO 3
:SetUserDataSet("Parts in oders", "PartNo;Part;Total qty;Price",;
{|| Parts->( DbGoTop() )} ,;
{|| Parts->( DbSkip(1) )},;
{|| Parts->( DbSkip(-1) )},;
{|| Parts->( Eof() )},;
{|cField| GetDSValue(cField)})

:LoadFromFile(cRepsPath + "9.fr3")

CASE nOption = 7
:LoadFromFile( + "24.fr3")
:SetADOConnectPartStr("ADODatabase1", "Data Source", cDataPath + "demo.mdb")
CASE nOption = 8
:LoadFromFile(cRepsPath + "7.fr3") cRepsPath
:AddVariable("My Lovely Vars", "My and only my var", 10)
:AddVariable("My Lovely Vars", "test", 100.25)
:AddVariable("My Lovely Vars", "test1", "'Test'")
:AddVariable("My Lovely Vars", "test2", ctod("01/01/2007"))
ENDCASE
:PrepareReport()
* :SetProperty("Report", "ShowProgress", .f.)
:SetProperty("HTMLExport","ShowDialog",.F.)
:SetProperty("HTMLExport","OpenAfterExport",.F.)
:SetProperty("HTMLExport","Filename",cHtml+"prueba.htm")
:DoExport("HTMLExport")
:ClearDataSets()
Select Items
DbClearRelation()
OrdScope(0, nil)
OrdScope(1, nil)

END WITH

/* lee el archivo html que genera la salida */
cHtmlTemp := MemoRead(cHtml+"prueba.htm")

/* hay graficos en el reporte, tenemos que mover y remapear la salida web */
IF nOption = 7 // mover las graficas de lugar
/* remapeo de salida web para las graficas */
cHtmlTemp := STRTRAN(cHtmlTemp,"prueba.files","/frh/imgs")
/* mover las graficas a una carpeta visible desde la web */
aImgs := Directory(cHtml+"prueba.files\*.*")
FOR x := 1 to LEN(aImgs)
FileCopy(cHtml+"prueba.files\"+aImgs[x,1],cImgDir+aImgs[x,1])
NEXT
ENDIF

/* todo OK, ahora WebAS, haz tu trabajo:*/
oCgi:Say(cHtmlTemp) // salida directa a web.

RETURN Nil
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Libreria TWCGI y ejemplo practico

Publicado por Luis Martin (18 intervenciones) el 16/06/2010 00:26:39
Hola Gabriel

Gracias por tu pronta respuesta, dime ¿sabes como alguien que vive fuera de Mexico o España puede conseguir dichos productos sin llevar el curso que mencionas?
Escribi unas lineas a Ciber-tec pero aun no recivo respuesta.

Saludos, cordiales

Luis Martin
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Libreria TWCGI y ejemplo practico

Publicado por Gabriel Pascual (913 intervenciones) el 16/06/2010 03:11:26
Tengo entendido que ellos venden el material de sus cursos, no me preguntes cuanto cuesta porque lo ignoro.

Seguro te contestarán pronto, suelen tardarse uno o dos días pero siempre contestan.

Hasta donde sé están liados con un tema de facturación electrónica para Méjico o algo parecido, no he contactado ultimamente con René por lo mismo que está liado con el tema y la última vez me comentó que salen con un producto nuevo para Julio.

Supongo que estarán a tope de curro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar