PVS Klient - Příklady


Připojení k tabulce PVS_SUB_STATUS

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 }