PVS Klient - Příklady
dim g_uid : StringZ;
dim g_status : Longint;
dim g_last_sended_msg : Longint;
dim g_last_resp_msg : Longint;
dim g_correlation_id : String;
dim g_response_url : StringZ;
dim g_received_error_count : Longint;
dim g_error_type : StringZ;
dim g_error_code : Longint;
dim g_error_text : StringZ;
dim g_data : StringZ;
dim g_class_type : StringZ;
dim g_ack_govtalk_msg : StringZ;
dim g_business_error : StringZ;
dim g_signed_submission : StringZ;
dim g_pam_user_name : StringZ;
dim g_dt_acknowledgement : DateTime;
dim g_dt_submit_response : DateTime;
procedure BindPvsTable( Set : Longint)
SQLBind(set, "uid", SQL_VARCHAR, g_uid);
SQLBind(set, "status", SQL_INTEGER, g_status);
SQLBind(set, "last_sended_msg", SQL_INTEGER, g_last_sended_msg);
SQLBind(set, "last_resp_msg", SQL_INTEGER, g_last_resp_msg);
SQLBind(set, "correlation_id", SQL_VARCHAR, g_correlation_id);
SQLBind(set, "response_url", SQL_VARCHAR, g_response_url);
SQLBind(set, "received_error_count", SQL_INTEGER, g_received_error_count);
SQLBind(set, "error_type", SQL_VARCHAR, g_error_type);
SQLBind(set, "error_code", SQL_INTEGER, g_error_code);
SQLBind(set, "error_text", SQL_VARCHAR_LEN,1024, g_error_text);
SQLBind(set, "data", SQL_LONGVARCHAR,-1, g_data);
SQLBind(set, "class_type", SQL_VARCHAR, g_class_type);
SQLBind(set, "ack_govtalk_msg", SQL_LONGVARCHAR,-1, g_ack_govtalk_msg);
SQLBind(set, "business_error", SQL_LONGVARCHAR,-1, g_business_error);
SQLBind(set, "signed_submission", SQL_LONGVARCHAR,-1, g_signed_submission);
SQLBind(set, "pam_user_name", SQL_VARCHAR, g_pam_user_name);
SQLBind(set, "dt_acknowledgement", SQL_DATETIME, g_dt_acknowledgement);
SQLBind(set, "dt_submit_response", SQL_DATETIME, g_dt_submit_response);
endproc
Vytvoření podání
procedure CreateSubmission
{ Vytvoří podání a vloží ho do db tabulky }
dim db : Longint;
dim set : Longint;
dim sVal : stringz;
dim hDoc : longint;
dim sValB64 : StringZ;
{ Nějaké vytvoření Xml dokumentu }
call CreateXml(hDoc);
_XmlGetDocXmlText(hDoc,sVal);
sValB64 := _StrToBase64(sVal,CP_UTF8);
{ Napojení na db tabulku }
call PreparePvsTable(db, set);
{ Select pro přidání }
SQLSelect(Set, "PVS_SUB_STATUS", "uid=''", "uid");
if _SQLAddNew(Set) then
_SQLSetColDirty(Set,"",true)
g_uid := _NewSysGuid;
g_status := PVS_STATE_NEW;
g_last_sended_msg := 0;
g_last_resp_msg := 0;
g_correlation_id := "";
g_response_url := "";
g_received_error_count := 0;
g_error_type := "";
g_error_code := 0;
g_error_text := "";
g_data := sValB64;
g_class_type := "CSSZ_RELDP";
g_ack_govtalk_msg := "";
g_business_error := "";
g_signed_submission := "";
g_pam_user_name := _GetActUser(AU_PRIHL_JMENO);
_SQLUpdate(set);
SQLClose(set);
endif
SQLDBClose(db);
endproc { CreateSubmission }
procedure PreparePvsTable(dim db : Longint;
dim Set : Longint)
SQLDBOpen(db, ...);
SQLOpen(db, set);
call BindPvsTable(Set);
endproc { PreparePvsTable }
Přečtení business chyb
z db věty podle Guid
procedure ZobrazChyby( sGuid : StringZ)
dim db : Longint;
dim set : Longint;
dim hDoc : longint;
dim bOK : Byte;
dim F : File;
dim nIdx : Integer;
dim hNode : Longint;
dim sResult : StringZ;
dim sRC : StringZ;
dim sErrMsg : StringZ;
dim sz : StringZ;
bOK := false;
{ Vytvoříme spojení s tabulkou }
SQLDBOpen(db, ...);
SQLOpen(db, set);
SQLBind(set, "business_error", SQL_LONGVARCHAR,-1, g_business_error);
{ Najdeme požadovanou větu }
SQLSelect(Set, "PVS_SUB_STATUS", "uid='" + sGuid + "'", "uid");
if _SQLFirst(Set) then
{ Věta byla nalezena - vytvoříme XML }
if(_XmlCreateDoc(hDoc, _Base64ToStr(g_business_error, CP_UTF8)))then
bOK := true;
else
_MsgBox(1,"Chyba při vytváření Xml dokumentu z Base64!",0);
endif
else
_MsgBox(1,"Věta s Guidem " + sGuid + " nebyla nalezena!",0);
endif
{ Uzavřeme tabulku a db spojení }
SQLClose(set);
SQLDBClose(db);
if(bOK)then
{ Xml dokument je vytvořen OK - Doplníme potřebné jmenné prostory }
_XmlAddNamespace(hDoc,"c", "http://www.govtalk.gov.uk/CM/envelope");
_XmlAddNamespace(hDoc,"e", "http://www.cssz.cz/XMLSchema/reldp/ErrorEnvelope");
{ Získáme seznam chybových nodů }
SRewrite(F,"",true);
_XmlGetNodes(hDoc,0,"c:Body/e:ErrorResponse/e:Application/e:Protocol/e:error/e:rec",F);
if _SFirst(F,nIdx) then
repeat
hNode := _SGet(F, nIdx);
_XmlGetNodeAttr(hNode, "result", sResult);
if(_UpperS(sResult)="WARNING")then
_XmlGetNodeAttr(hNode, "col1", sRC);
_XmlGetNodeAttr(hNode, "errMsg", sErrMsg);
repeat
StrExtract(sErrMsg, sz, sErrMsg, ";");
exitif _DelLeft(sz)="" then
endexit
Trace(sRC," ",sz);
until false;
endif
until _SNext(F,nIdx)=false;
endif
SClose(F);
endif
endproc { ZobrazChyby }
Přečtení počtu db vět s určitým stavem
call ZjistiPocet(PVS_STATE_NEW, nVal);
call ZjistiPocet(PVS_STATE_ERROR, nVal);
...
procedure ZjistiPocet( Status : Longint;
dim Pocet : Longint)
dim db : Longint;
dim set : Longint;
SQLDBOpen(db, ...);
SQLOpen(db, set);
SQLBind(set, "count(*)", SQL_INTEGER, Pocet);
SQLSelect(Set, "PVS_SUB_STATUS", "status=" + _Str(Status), "");
if _SQLFirst(Set) then
else
Pocet := 0;
endif
SQLClose(set);
SQLDBClose(db);
endproc { ZjistiPocet }