Código: Seleccionar todo
METHOD method1(oController) CLASS WS
local hData := {=>},hResponse := {=>}
LOCAL cDirDbf:= AP_GetEnv( "PATH_DBF" ),cDirAds:= AP_GetEnv( "PATH_ADS" )
local aRows, wncod, nConn:=0, cAdsSerial:="",nAdsConn:=0, lForcaAds:=.F.,nCons:=0
local hCookies := oController:oRequest:GetHeader( 'Authorization' ),nQte,nHandle, lError:=.F.,;
calias,,caliasflag,lOpen:=.T.,nTime,ctxt:="",oBDFlag, oQry, nT:=0, lcon:=.f.,hAds,caliast
SET EPOCH TO 2000
SET CENTURY ON
SET DATE BRITISH
hData:=oController:oRequest:PostAll()
oBDFlag:= TMySQl():New("MARIA","localhost","root","psw","flag_db",3306)
caliasflag:= "AG"+hData['field1']+"01"
nTime:=Seconds()
DO WHILE lOpen .AND. (Seconds()-nTime) < 30
oQry:=NIL
oQry:=oBDFlag:Query("SELECT data, cflag, time FROM flag WHERE data='PARAM01' ",{Trans(Dtos(Date()),"@R 9999-99-99")})
IF oQry = NIL .OR. oQry:Count()<=0
IF (nT:=oBDFlag:Exec({"INSERT INTO flag (data, cflag, time) VALUES('PARAM01','PARAM02','PARAM03')"},;
{{Trans(Dtos(Date()),"@R 9999-99-99"),caliasflag,Time()}})) < 0
lOpen:=.T.
ELSE
WaitPeriod(100)
DO WHILE WaitPeriod()
ENDDO
oQryV:=NIL
oQryV:=oBDFlag:Query("SELECT cflag FROM flag WHERE data='PARAM01'",{Trans(Dtos(Date()),"@R 9999-99-99")})
oQryV:First()
IF oQryV:FieldGet("cflag")=caliasflag
lOpen:=.F.
ELSE
lOpen:=.T.
ENDIF
ENDIF
ELSE
oQry:First()
IF (Seconds()-Secs(oQry:FieldGet("time")))>=20
oBDFlag:Exec({"DELETE FROM flag WHERE data='PARAM01'"},{{Trans(Dtos(Date()),"@R 9999-99-99")}})
IF (oBDFlag:Exec({"INSERT INTO flag (data, cflag, time) VALUES('PARAM01','PARAM02','PARAM03')"},;
{{Trans(Dtos(Date()),"@R 9999-99-99"),caliasflag,Time()}})) < 0
lOpen:=.T.
ELSE
WaitPeriod(100)
DO WHILE WaitPeriod()
ENDDO
oQryV:=NIL
oQryV:=oBDFlag:Query("SELECT cflag FROM flag WHERE data='PARAM01'",{Trans(Dtos(Date()),"@R 9999-99-99")})
oQryV:First()
IF oQryV:FieldGet("cflag")=caliasflag
lOpen:=.F.
ELSE
lOpen:=.T.
ENDIF
ENDIF
ELSE
lOpen:=.T.
ENDIF
ENDIF
WaitPeriod(100)
DO WHILE WaitPeriod()
ENDDO
ENDDO
IF lOpen
hResponse[ 'success' ] := .F.
oController:oResponse:SendJson( hResponse)
RETURN NIL
ENDIF
DO WHILE .T.
IF AdsIsServerLoaded( Left(cDirAds,2), @nConn ) = ADS_REMOTE_SERVER
AdsSetServerType(2)
AdsSetFileType( 2 )
AdsMgConnect( Left(cDirAds,2),,,@nConn )
aTemp := AdsMgGetInstallInfo()
cAdsSerial := IF(Len(aTemp)>=8,aTemp[8],"")
aTemp := NIL
nAdsConn := nConn
EXIT
ELSEIF .NOT. lForcaAds
RddRegister("ADS",1)
RddSetDefault( "ADS" )
AdsSetServerType(1)
AdsSetFileType( 2 )
lcon:=ADSConnect60( cDirDbf, 1, "", "",,@hAds)
IF .NOT. lcon
hResponse[ 'success' ] := .F.
oController:oResponse:SetHeader("Authorization",hCookies)
oController:oResponse:SendJson( hResponse)
RETURN NIL
ENDIF
EXIT
ELSEIF n = 1
n := 2
ELSE
hResponse[ 'success' ] := .F.
oController:oResponse:SetHeader("Authorization",hCookies)
oController:oResponse:SendJson( hResponse )
RETURN NIL
ENDIF
ENDDO
caliast:= NewAlias("PS"+hData['field1'])
nTry:=0
DO WHILE nTry < 10
TRY
USE ( cDirDbf+ "\TABLE.DBF" ) INDEX "TABLE" ALIAS caliast VIA "ADS" SHARED NEW
IF NetErr()
lError:=.T.
hResponse[ 'success' ] := .F.
ENDIF
nTry:=10
CATCH oError
lError:=.T.
nTry++
WaitPeriod(100)
DO WHILE WaitPeriod()
ENDDO
END
ENDDO
IF lError
oBDFlag:Exec({"DELETE FROM flag WHERE data='PARAM01'"},{{Trans(Dtos(Date()),"@R 9999-99-99")}})
hResponse[ 'success' ] := .F.
oController:oResponse:SetHeader("Authorization",hCookies)
oController:oResponse:SendJson( hResponse )
AdsDisconnect(hAds)
RETURN NIL
ENDIF
calias:=Alias(Select(caliast))
(calias)->(DbSetOrder(3))
(calias)->(AdsSetAof("FIELD1 = ["+ hData['field1]+"] AND (FIELD2 <> [C] AND EMPTY(FIELD3)) AND DTOS(FIELD4) >= ["+Dtos(Date())+"]"))
(calias)->(DbGoTop())
DO WHILE .NOT. (calias)->(Eof())
IF (calias)->field2 = hData['field2']
hResponse['success'] := .T.
hResponse['resp'] := (calias)->field1
(calias)->(AdsClearAof())
(calias)->(DbSetOrder(0))
(calias)->(dbCloseArea())
oBDFlag:Exec({"DELETE FROM flag WHERE data='PARAM01'"},{{Trans(Dtos(Date()),"@R 9999-99-99")}})
oController:oResponse:SetHeader("Authorization",hCookies)
oController:oResponse:SendJson( hResponse )
AdsDisconnect(hAds)
RETURN NIL
ENDIF
n++
IF n >= 3
hResponse[ 'success' ] := .F.
hResponse['cod'] := "6"
(calias)->(AdsClearAof())
(calias)->(DbSetOrder(0))
(calias)->(dbCloseArea())
oBDFlag:Exec({"DELETE FROM flag WHERE data='PARAM01'"},{{Trans(Dtos(Date()),"@R 9999-99-99")}})
oController:oResponse:SetHeader("Authorization",hCookies)
oController:oResponse:SendJson( hResponse )
AdsDisconnect(hAds)
RETURN NIL
ENDIF
(calias)->(DbSkip())
ENDDO
(calias)->(AdsClearAof())
(calias)->(DbSetOrder(1))
(calias)->(dbGoBottom())
IF (calias)->(Eof())
wncod:="0001"
ELSE
wncod:=(calias)->field1
DO WHILE (calias)->(DbSeek(wncod))
wncod:=IncSequenc(wncod,4)
ENDDO
ENDIF
nQte:=Seconds()
nLOop:=.T.
(calias)->(DbSetOrder(2))
(calias)->( DbSeek(hData['field2']+Dtos(Ctod(hData['field3']))+StrTran(hData['field4'],":")) )
DO WHILE .NOT. (calias)->(Eof()) .AND. (calias)->field3=Ctod(hData['field3']) .AND. (calias)->field5=hData['field5'] .AND. (calias)->hora=StrTran(hData['field6'],":")
IF (calias)->field7="N"
hResponse['cod'] :="2"
hResponse['success'] := .T.
(calias)->(DbSetOrder(0))
(calias)->(dbCloseArea())
oBDFlag:Exec({"DELETE FROM flag WHERE data='PARAM01'"},{{Trans(Dtos(Date()),"@R 9999-99-99")}})
oController:oResponse:SetHeader("Authorization",hCookies)
oController:oResponse:SendJson( hResponse )
AdsDisconnect(hAds)
RETURN NIL
ENDIF
(calias)->(DbSkip())
ENDDO
(calias)->(DbSetOrder(0))
(calias)->(dbAppend())
IF NetErr()
nLoop:=.F.
hResponse[ 'success' ] := .F.
ELSE
if (calias)->(DbRLock())
(calias)->field1 := wncod
(calias)->field2 := Ctod(hData[ 'field2' ])
(calias)->(DbUnLock())
hResponse[ 'success' ] := .T.
ENDIF
ENDIF
(calias)->(dbCloseArea())
oBDFlag:Exec({"DELETE FROM flag WHERE data='PARAM01'"},{{Trans(Dtos(Date()),"@R 9999-99-99")}})
oController:oResponse:SetHeader("Authorization",hCookies)
oController:oResponse:SendJson( hResponse )
AdsDisconnect(hAds)
RETURN nil
METHOD 2
Código: Seleccionar todo
METHOD carregarDados(oController) CLASS WS
LOCAL hData:={=>},hResponse:={=>},hReg:={=>},hRegCrypt:={=>},cDirDbf:= AP_GetEnv( "PATH_DBF" ),cDirAds:= AP_GetEnv( "PATH_ADS" ),;
nConn:=0, cAdsSerial:="",nAdsConn:=0, lForcaAds:=.F.,nCons:=0,cUrl:= AP_GetEnv("WSCT")+"updbase", hToken,hCookies,lsend:=.f. ,;
hRegAux:={=>},wcmed:="",wnomemed:="",wespdesc:="",lsite:=.F.,;
calias,calias1,calias2,calias3,calias4,calias11,calias22,calias33,calias44,caliasflag,nTime,;
lOpen:=.T.,cSalt:="",nChar:=0,oBDFlag,oQry,oQryV,hAds, lcon:=.F.
hData:=oController:oRequest:PostAll()
FOR N=1 TO 2
nChar:=HB_RandomInt( 65, 90 )
cSalt+=Chr(nChar)
NEXT N
caliasflag:= StrTran(Time(),":")+cSalt+"01"
nTime:=Seconds()
oBDFlag:= TMySQl():New("MARIA","localhost","root","psw","flag_db",3306)
DO WHILE lOpen .AND. (Seconds()-nTime) < 30
oQry:=NIL
oQry:=oBDFlag:Query("SELECT data, cflag, time FROM flag WHERE data='PARAM01'",{Trans(Dtos(Date()),"@R 9999-99-99")})
IF oQry = NIL .OR. oQry:Count()<=0
IF (nT:=oBDFlag:Exec({"INSERT INTO flag (data, cflag, time) VALUES('PARAM01','PARAM02','PARAM03')"},;
{{Trans(Dtos(Date()),"@R 9999-99-99"),caliasflag,Time()}})) < 0
lOpen:=.T.
ELSE
WaitPeriod(100)
DO WHILE WaitPeriod()
ENDDO
oQryV:=NIL
oQryV:=oBDFlag:Query("SELECT cflag FROM flag WHERE data='PARAM01'",{Trans(Dtos(Date()),"@R 9999-99-99")})
oQryV:First()
IF oQryV:FieldGet("cflag")=caliasflag
lOpen:=.F.
ELSE
lOpen:=.T.
ENDIF
ENDIF
ELSE
oQry:First()
IF (Seconds()-Secs(oQry:FieldGet("time")))>=20
oBDFlag:Exec({"DELETE FROM flag WHERE data='PARAM01'"},{{Trans(Dtos(Date()),"@R 9999-99-99")}})
IF (oBDFlag:Exec({"INSERT INTO flag (data, cflag, time) VALUES('PARAM01','PARAM02','PARAM03')"},;
{{Trans(Dtos(Date()),"@R 9999-99-99"),caliasflag,Time()}})) < 0
lOpen:=.T.
ELSE
WaitPeriod(100)
DO WHILE WaitPeriod()
ENDDO
oQryV:=NIL
oQryV:=oBDFlag:Query("SELECT cflag FROM flag WHERE data='PARAM01'",{Trans(Dtos(Date()),"@R 9999-99-99")})
oQryV:First()
IF oQryV:FieldGet("cflag")=caliasflag
lOpen:=.F.
ELSE
lOpen:=.T.
ENDIF
ENDIF
ELSE
lOpen:=.T.
ENDIF
ENDIF
WaitPeriod(100)
DO WHILE WaitPeriod()
ENDDO
ENDDO
IF lOpen
hResponse[ 'success' ] := .T.
oController:oResponse:SendJson( hResponse )
RETURN NIL
ENDIF
DO WHILE .T.
IF AdsIsServerLoaded( Left(cDirAds,2), @nConn ) = ADS_REMOTE_SERVER
AdsSetServerType(2)
AdsSetFileType( 2 )
AdsMgConnect( Left(cDirAds,2),,,@nConn )
aTemp := AdsMgGetInstallInfo()
cAdsSerial := IF(Len(aTemp)>=8,aTemp[8],"")
aTemp := NIL
nAdsConn := nConn
EXIT
ELSEIF .NOT. lForcaAds
RddRegister("ADS",1)
RddSetDefault( "ADS" )
AdsSetServerType(1)
AdsSetFileType( 2 )
lcon:=ADSConnect60( cDirDbf, 1, "", "",,@hAds)
EXIT
ELSEIF n = 1
n := 2
ELSE
//NAO FOI ENCONTRADO O ADS
hResponse[ 'success' ] := .F.
oController:oResponse:SendJson( hResponse )
RETURN NIL
ENDIF
ENDDO
IF hData['op'] # "I"
hReg['success'] := .T.
hReg['op'] := "R"
lsend:=.t.
ELSE
calias11:=NewAlias("HC"+StrTran(Time(),":"))
calias22:=NewAlias("EC"+StrTran(Time(),":"))
calias33:= NewAlias("DC"+StrTran(Time(),":"))
calias44:= NewAlias("MC"+StrTran(Time(),":"))
DO CASE
CASE X=X
TRY
USE ( cDirDbf+ "\TABLE1.DBF" ) INDEX "TABLE1" ALIAS calias11 VIA "ADS" SHARED NEW
IF NetErr()
lsend:=.F.
QUIT
ENDIF
CATCH oError
lsend:=.F.
QUIT
END
calias1:=Alias(Select(calias11))
(calias1)->(DbSetOrder(1))
IF (calias1)->(dbSeek(hData['reg']))
wdesc:=(calias1)->field1
lsite:=(calias1)->field2
(calias1)->(dbsetorder(0))
(calias1)->(dbCloseArea())
hReg['cod'] := 'cod'
IF lsite
hReg['op'] := hData['op']
hReg['teste']:={}
TRY
USE ( cDirDbf+ "\TABLE2.DBF" ) INDEX "TABLE2" ALIAS calias22 VIA "ADS" SHARED NEW
IF NetErr()
lsend:=.F.
QUIT
ENDIF
CATCH oError
lsend:=.F.
QUIT
END
calias2:= Alias(Select(calias22))
(calias2)->(DbSetOrder(2))
IF (calias2)->(dbSeek(hData['reg']))
TRY
USE ( cDirDbf+ "\TABLE3.DBF" ) INDEX "TABLE3" ALIAS calias33 VIA "ADS" SHARED NEW
IF NetErr()
lsend:=.F.
QUIT
ENDIF
calias3:=Alias(Select(calias33))
USE ( cDirDbf+ "\TABLE4.DBF" ) INDEX "TABLE4" ALIAS calias44 VIA "ADS" SHARED NEW
IF NetErr()
lsend:=.F.
QUIT
ENDIF
calias4:=Alias(Select(calias4))
CATCH oError
lsend:=.F.
QUIT
END
(calias3)->(DbSetOrder(1))
(calias4)->(DbSetOrder(1))
DO WHILE (calias3)->cod=hData['reg'] .AND. .NOT. (calias3)->(Eof())
hRegAux:={=>}
IF (calias4)->(dbSeek((calias3)->cod)) .AND. (calias4)->field3 # "I" .AND. (calias4)->(dbSeek((calias3)->cod))
hRegAux['teste1'] := (calias4)->test1
hRegAux['teste2'] := (calias4)->test2
hRegAux['test3']:={}
hItem:={=>}
hItem['item1'] := (calias4)->item1
hItem['item2'] := (calias4)->item2
aadd( hRegAux['test3'], hItem )
hRegAux['test4']:={}
DO WHILE (calias3)->cod=(calias3)->cod .AND. .NOT. (calias3)->(Eof())
IF (calias3)->interval > 0
hItem:={=>}
hItem['cod1'] := (calias3)->cod2
hItem['cod2'] := (calias3)->cod1
aadd( hRegAux['test4'], hItem )
ENDIF
(calias3)->(dbSkip())
ENDDO
IF Len(hRegAux['test4'])<=0
(calias3)->(DbSkip())
LOOP
ELSE
Aadd(hReg['test2'],hRegAux)
ENDIF
ENDIF
(calias3)->(dbSkip())
ENDDO
(calias2)->(DbSetOrder(0))
(calias2)->(dbCloseArea())
(calias3)->(DbSetOrder(0))
(calias3)->(dbCloseArea())
(calias4)->(DbSetOrder(0))
(calias4)->(dbCloseArea())
IF Len(hReg['test2'])<=0
lsend:=.F.
ELSE
lsend:=.T.
ENDIF
ELSE
(calias3)->(DbSetOrder(0))
(calias3)->(dbCloseArea())
lsend:=.F.
ENDIF
ELSE
hReg['op'] := "E"
lsend:=.t.
ENDIF
ELSE
(calias1)->(DbSetOrder(0))
(calias1)->(dbCloseArea())
lsend:=.F.
ENDIF
ENDIF
CASE ...
...
END CASE
AdsDisconnect(hAds)
IF lsend
hToken := { 'in' => time(), 'teste1' => '000001', 'teste2' => 'WS' }
hCookies := oController:oMiddleware:SetAutenticationToken( hToken )
hResponse := sendHttp("POST",cUrl,hCookies,hReg)
hResponse['cod']:=1
ELSE
hResponse['success']:=.F.
ENDIF
oBDFlag:Exec({"DELETE FROM flag WHERE data='PARAM01'"},{{Trans(Dtos(Date()),"@R 9999-99-99")}})
oController:oResponse:SendJson(hResponse)
RETURN NIL
*Don't pay much attention to the code inside loops and processing blocks, I changed the variable names, so it's probably not making a lot of sense... I want you guys to pay attention to the structure of the methods and the blocks I mentioned in the last post. This is just to illustrate better what I told you in the last post