Project moved to GitHub! :)

Projekt FiscalizationCom

Kreirao sam COM komponentu sa primjerima za VBScript i Access(verzija u primjeru 2010).

U source-u je to novi FiscalizationCom.sln solution sa FiscalizationCom i test projektom.

Cilj projekta

  • koristiti API za fiskalizaciju direktno iz jezika u kojem je aplikacija napisana preko COM komponente
  • izbjegnuti manipulaciju sa XML-om, sve operacije se rade preko objekata u jeziku aplikacije
  • sve greške su exception-i u jeziku aplikacije, nema dodatnog kôda za parsiranje grešaka
  • mogućnost logiranja raw SOAP poruka sa CIS servisa
U download FiscalizationCom - COM komponenta za fiskalizaciju uključeno:
  • FiscalizationCom.dll
  • batch skripte za registraciju - RegisterCOM.cmd, UnRegisterCOM.cmd
  • primjeri za VBA i VBScript, Access(Test.accdb)
  • FINA demo root certifikat DemoRootFINA.cer jer smo mi u čudnovatoj državi u kojoj agencija koja je certificate authority nema validan root certifikat?!
  • u primjerima kôd čita DemoCertificate.txt file sa demo podacima za fiskalizaciju(OIB, demo certifikat) i nije uključen u download(zakomentiran je kôd za čitanje certifikata iz pfx file-a)
    • DemoCertificate.txt je tekstualni file sa tri linije
      1. demo OIB poslovnog subjekta
      2. lozinka certifikata
      3. certifikat poslovnog subjekta kao base 64 enkodirani string
Registracija i referenciranje COM komponente
%SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe "%~dp0FiscalizationCom.dll" /codebase /tlb
%SYSTEMROOT%\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe "%~dp0FiscalizationCom.dll" /codebase /tlb
  • FiscalizationCom.tlb se kreira nakon registracije sa RegisterCOM.cmd skriptom
  • u VBA editoru se referencira FiscalizationCom.tlb file
  • za pozivanje iz VBScript-a FiscalizationCom.tlb file nije potreban(nije potrebno ni registrirati sa opcijom /tlb)

API

Kompletan COM API.
Metode za poziv servisa i pomoćne metode su prilagođene za pozive preko COM-a sa FiscalizationComInterop klasom.
Svejedno je jel se koristi uvijek ista instanca ili se za svaki poziv kreira nova.
' .NET COM Interop
Dim cisInterop As New FiscalizationComInterop

' Slanje računa
Set result = cisInterop.SendInvoiceRequest(<request>, (<certificate>), <timeout/ms>, <isDemo>, <check response signature>)

' Slanje poslovnog prostora
Set result = cisInterop.SendLocationRequest(<request>, (<certificate>), <timeout/ms>, <isDemo>, <check response signature>)

' Echo
Set result = cisInterop.SendEcho(<string>, <timeout/ms>, <isDemo>)

Logiranje

Logiranje odlaznih i dolaznih SOAP poruka u file.
Postavlja se na razini instance FiscalizationComInterop klase.
' .NET COM Interop
Dim cisInterop As New FiscalizationComInterop

' Set logging
cisInterop.LogFileName = "Fiscal.log"

Primjer VBScript

'.NET COM Interop
Dim cisInterop
Set cisInterop = CreateObject("FiscalizationComInterop")

' Set logging
cisInterop.LogFileName = "Fiscal.log"

' Demo OIB & certificate
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("DemoCertificate.txt", 1)

Dim oib
oib = objFile.ReadLine

Dim certPwd
certPwd = objFile.ReadLine

Dim certBase64
certBase64 = objFile.ReadLine

' Get certificate from file or base64 encoded string
Dim cert
'Set cert = cisInterop.GetCertificateFile("<certificate file name>.pfx", "<password>")
Set cert = cisInterop.GetCertificateString(certBase64, certPwd)

' Create invoice number
Dim invoiceNr' As BrojRacunaType
Set invoiceNr = CreateObject("Cis.BrojRacunaType")
With invoiceNr
	.BrOznRac = "1"
	.OznPosPr = "1"
	.OznNapUr = "1"
End With

' Create taxes
Dim pdv25
Set pdv25 = CreateObject("Cis.PorezType")
With pdv25
	.Stopa = "25.00"
	.Osnovica = "10.00"
	.Iznos = "2.50"
End With
Dim taxes(1)
Set taxes(0) = pdv25

' Create Racun
Dim invoice
Set invoice = CreateObject("Cis.RacunType")
With invoice
	.OIB = oib
	.USustPdv = True
	.IznosUkupno = "123.45"
	.DatVrijeme = cisInterop.DateFormatLong(Date)
	.OznSlijed = cisInterop.OznakaSlijednostiType_N
	.NacinPlac = cisInterop.NacinPlacanjaType_G
	.OibOper = "98642375382"
	.NakDost = False
	.BrRac = invoiceNr
	' Convert Variant() to PorezType[]
	.Pdv = cisInterop.ToPorezTypeArray((taxes))
End With

' invoice.ZastKod <- filled with generated ZKI code - optional
Call cisInterop.GenerateZki((invoice), (cert))

Dim request' As RacunZahtjev
Set request = cisInterop.CreateInvoiceRequest((invoice))
	
' Call GenerateZki and Sign request - optional
Call cisInterop.Sign((request), (cert))
	
' Send request
Dim result 'As RacunOdgovor
Set result = cisInterop.SendInvoiceRequest((request), (cert), 0, True)
	
MsgBox (result.Jir)
Kreirao sam discussion topic za COM pa ako imate nekih pitanja ili ideja slobodno pišite!

Last edited Dec 9, 2015 at 1:10 PM by tgrospic, version 14