Clipper -> PrijavaProstora

Nov 26, 2012 at 3:06 PM

Nakon visesatnog(dnevnog) cackanja i uz pomoc drugih kolega sa sajta, sastavljam listu onoga sto se smije i ne smije slati u XML-u za PoslovniProstorZahtjev, s posebnim naglaskom na Clipper. Notacija kojom oznacavam polja su iz Clipera, T,L,D, gdje su:
T=TIP (N-numeric, C-CHARACTER, L-Logical, D-DATE)
L=length, tj. ukupna duzina polja i
D=decimalni dio, (za numeric, inace uvijek 0)

<tns:IdPoruke> - Generira se sa Raverus... GenerirajUUID, koji kreira UUID.TXT u kojem je string sa CRLF na kraju (koji treba eliminirati prije umetanja u XML - tu pomaze memotran())
<tns:DatumVrijeme> - u formatu DD.MM.GGGGTHH:MM:SS, (SET CENTURY ON)
<tns:Oib> - N 11,0 obavezno OIB koji je identican onom iz certifikata
<tns:OznPoslProstora> - C,20,0 bez razmaka
*<tns:Ulica> - C,100,0
*<tns:KucniBroj> - N,4,0
*<tns:KucniBrojDodatak> - C,4,0 bez razmaka
*<tns:BrojPoste> - N,12,0
*<tns:Naselje> - C,35,0
*<tns:Opcina> - C,35,0
<tns:RadnoVrijeme> - C,1000,0
<tns:DatumPocetkaPrimjene> - D,8,0 (SET CENTURY ON)
*<tns:SpecNamj> - C,1000,0

Sva polja oznacena sa * nisu obavezna za slanje. Ako nemaju nikakvu vrijednost (u sto spada i string sa razmacima), npr. KucniBrojDodatak cesto ne postoji, se moraju potpuno obrisati iz XML-a, dakle i definiciju polja (otvaranje/zatvaranje). Dakle, ako nema dodatka kucnom broju, ne moze se ostaviti ovako:

<tns:KucniBrojDodatak><\tns:KucniBrojDodatak>

vec se sve to mora ukloniti iz XML-a. Ostala polja se ne smiju brisati. Recimo, sva polja vezana za adresu se ne moraju slati (dakle moraju se obrisati), ali polja koja ga definiraju <tns:AdresniPodatak> i <Adresa> moraju postojati.

Problem moze biti i koristenje funkcije memowrit(), jer ona na kraj fajla doda CHR(26) (EOF), koji smeta XML-u, tj, cini ga neispravnim. Kao alternativu se mogu koristiti funkcije fcreate()/fwrite() ili strfile() iz Nantucket Tools-a.

I da, dimenzije polja su zaista takve (barem na danasnji dan 26.11.12). SpecNamj i RadnoVrijeme prime 1000 znakova, ali 1001 ne!

Nov 27, 2012 at 6:36 AM

Evo mog primjera za generiranje/čitanje UUID-a.
Raverus.FiskalizacijaDEV.EXE.exe je preimenovan u RAVFISKD.EXE 

FUNCTION UUID
PRIVATE MUUID
MUUID = ""
DELETE FILE UUID.TXT
IF FILE("UUID.TXT")=.F.  
  MEXE = "RAVFISKD.EXE GenerirajUuid"  
  !&mexe  
  F_Block = 36  
  cBuffer = SPACE(F_Block)  
  nHandle = FOPEN("UUID.txt")  
  IF FERROR() # 0
  * ? "File open error:", FERROR()  
  ELSE    
    FREAD(nHandle, @cBuffer, F_Block)    
    MUUID = cBuffer
    FCLOSE(nHandle)  
  ENDIF
ENDIF
RETURN MUUID

Nov 27, 2012 at 3:47 PM

function GetUUID
local ret:=""
local f_uuid:="UUID.TXT"

   ferase(f_uuid)
   run ('raveru~2 GenerirajUUID')
   if file(f_uuid)
      ret:=alltrim(memotran(memoread(f_uuid)," "," "))
   else
      ? "Fatalna greska: nije generiran UUID"
      quit
   endif
return ret