Visual foxpro

Nov 7, 2012 at 9:01 AM

Molim primjer za Visual foxpro 9.

Coordinator
Nov 7, 2012 at 9:31 AM

Ako je moguće pozivati COM, onda pogledaj ovo: http://fiskalizacija.codeplex.com/wikipage?title=Potpisivanje%20i%20slanje%20pozivanjem%20COM%20DLL-a

Nov 7, 2012 at 1:12 PM
Edited Nov 7, 2012 at 1:14 PM

VFP9 može konzumirati .NET assembly direktno - bez COM registracije !

Evo Rickove "DotNetBridge" klase koja hosta kompletan ".NET framework" u "VisualFox 9". 
http://www.west-wind.com/webconnection/wwClient_docs/_24n1cfw3a.htm

Nov 7, 2012 at 2:32 PM

Zahvaljujem na informacijama

Coordinator
Nov 7, 2012 at 2:46 PM

@mladenbabic, čini se da nema toga kaj ti ne znaš, i mi smo nekaj sad naučili :)

Nov 7, 2012 at 2:50 PM
Edited Nov 7, 2012 at 3:12 PM

Netko me zvao i na telefon za ovo, pa evo da podjelim ovdje : Ovo je moj razvojno-testni VFP9 kood koji ne koristi fiskalizaciju.dev nego wip2fiskal.dll koji sam napisao u C#. U svakom slučaju, zainteresirani će se snaći i napisati jednostavan Wraper za fiskalizacija.dev istom analogijom. Ništa komplicirano. VFP je premoćan za male klijente kada može ovako jednostavno hendlati s .NET frameworkom!

 

COPY FILE "c:\Users\mladen.babic\Documents\Visual Studio 2012\Projects\wip2fiskal\wip2fiskal\bin\Debug\wip2fiskal.dll" TO wip2fiskal.dll
*CLEAR

IF .T. && makni za testni poziv iz aplikacije
	SET DATE TO germa
	SET CENTURY on
	SET HOURS TO 24
	SET STRICTDATE TO 0

	DO wwutils

	do wwDotNetBridge
	LOCAL loBridge as wwDotNetBridge
	loBridge = CreateObject("wwDotNetBridge","V2") && V2 je verzija .NET frameworka. V4 za 4.0

	*! ucitaj moj assembly
	loBridge.LoadAssembly("wip2fiskal.dll")
	IF loBridge.lError
	   WAIT window loBridge.cErrorMsg
	ENDIF
	pFiskalEngine = loBridge.CreateInstance("wip2fiskal.FiskalEngine") && moj assembly. NE kreiraj "private" i ne bahati se s kolekcijama jer to fox ne kuzi nativno
ENDIF

pFiskalEngine.CertFromFile = .F. 		&& ako je T onda ide iz File-a pa je potrebno definirati CertFile i CertPass
pFiskalEngine.CertFile="fiskal1.pfx"
pFiskalEngine.CertPass="TvojaLozinka"
pFiskalEngine.NazivCertifikata			= "FISKAL" && dovoljan je samo dio naziva certifikata

pFiskalEngine.Oib 				= "71555555555" && "krivi" OIB
pFiskalEngine.VrijemeRacuna 			= "26.10.2012T10:20:21" 
pFiskalEngine.BrojcanaOznakaRacuna 		= "3276"
pFiskalEngine.OznakaPoslovnogProstora 		= "POSL1"
pFiskalEngine.OznakaNaplatnogUredjaja 		= "NU1"
pFiskalEngine.UkupniIznosRacuna 		= "3128.22"
pFiskalEngine.SaveXml2File			= .F. && snimi u XML file ili ne

** GENERIRANJE ID PORUKE *********************************
lIdPoruka 		= pFiskalEngine.GenerirajIdPoruke()

** GENERIRANJE ZASTITNOG KODA *********************************
pFiskalEngine.GenerirajZastitniKod2()
IF pFiskalEngine.oError.IsError
	WAIT WINDOW pFiskalEngine.oError.ReadError() TIMEOUT 1
	RETURN
ELSE
	WAIT WINDOW "Zastitni kod je : " + pFiskalEngine.ZastitniKod  TIMEOUT 5
ENDIF

** KREIRANJE XMLa RACUNA *****************************
DO racun_xml WITH "", pFiskalEngine.ZastitniKod, lIdPoruka, pFiskalEngine.VrijemeRacuna && Kreira file "RacunZahtjev2.xml"

** RACUN U VARIJABLU *****************************
xml = File2Var("RacunZahtjev2.xml")

pFiskalEngine.XmlRacun = xml
IF pFiskalEngine.PotpisiRacun()
	TRY
		** SLANJE POTPISANOG RACUNA iz this.XmlRacunPotpisan *****************************
*!		startX = SECONDS()
		pFiskalEngine.SaljiRacun()
*!		stopX = SECONDS()
*!		WAIT WINDOW ALLTRIM(TRANSFORM(StopX-StartX)) + "sec" TIMEOUT 2
		*! Greska u slanju - vracen je XML iz porezne s greskom ili je neka druga greska
		IF pFiskalEngine.oError.IsError
			WAIT WINDOW pFiskalEngine.ReadError() && vraca poruku s detaljom greske iz assemblya
		ELSE
			WAIT WINDOW "Jir : " + pFiskalEngine.Rezultat TIMEOUT 1
		ENDIF
	CATCH 
		WAIT WINDOW "Provjerite Interet vezu ili firewall port 8449." TIMEOUT 3
	ENDTRY
ELSE
	*! greska prilikom potpisa rasuna
	WAIT WINDOW "Greska prije potpisa : " + pFiskalEngine.oError.ReadError()  TIMEOUT 3
ENDIF
*pFiskalEngine = null
RETURN
Jan 17, 2013 at 9:42 AM

Postoji li i neki primjer za Poslovni Prostor? Probao sam sa:

odgovor = oCis.PosaljiPoslovniProstor(xml, "FISKAL 1")

ali mi ne šljaka pa nisam siguran je li to pravi način.

Coordinator
Jan 17, 2013 at 9:45 AM

Razlika je samo u XML-u kojeg šalješ, koristiš PosaljiSoapPoruku. Pogledaj: http://fiskalizacija.codeplex.com/wikipage?title=Potpisivanje%20i%20slanje%20pozivanjem%20COM%20DLL-a

Jan 17, 2013 at 1:02 PM

Eh, probao sam i tako, ali vraća mi grešku.

Gdje mogu naći neki XML za poslovni prostor koji sigurno prolazi, tako da mogu debuggirati situaciju?

Coordinator
Jan 17, 2013 at 1:12 PM

Evo, samo zamijeni OIB sa svojim:

<?xml version="1.0" encoding="utf-8"?><tns:PoslovniProstorZahtjev xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Id="signXmlId" xmlns:tns="http://www.apis-it.hr/fin/2012/types/f73"><tns:Zaglavlje><tns:IdPoruke>2b497d24-464e-45b9-8762-2d4e9256cfc5</tns:IdPoruke><tns:DatumVrijeme>19.10.2012T14:59:06</tns:DatumVrijeme></tns:Zaglavlje><tns:PoslovniProstor><tns:Oib>44718633471</tns:Oib><tns:OznPoslProstora>1</tns:OznPoslProstora><tns:AdresniPodatak><tns:Adresa><tns:Ulica>Ulica</tns:Ulica><tns:KucniBroj>12</tns:KucniBroj><tns:KucniBrojDodatak>a</tns:KucniBrojDodatak><tns:BrojPoste>10000</tns:BrojPoste><tns:Naselje>Zagreb</tns:Naselje><tns:Opcina>Naziv općine</tns:Opcina></tns:Adresa></tns:AdresniPodatak><tns:RadnoVrijeme>Od 8 do 20 & 20-8</tns:RadnoVrijeme><tns:DatumPocetkaPrimjene>01.10.2012</tns:DatumPocetkaPrimjene></tns:PoslovniProstor></tns:PoslovniProstorZahtjev>

Jan 17, 2013 at 1:34 PM

@pOk7 Donji prg importiraš u VFP9 koji generira XML za poslovni prostor i to je to:

U bazi OPCIJE su potrebna  polja!

 

* Dbf2xmlPKM.prg

*-- ASCII codes
#DEFINE TAB     CHR(9)
#DEFINE LF      CHR(10)
#DEFINE CR      CHR(13)
#DEFINE CR_LF   CR+LF

LPARAMETERS tcTable, tcScope, tnTabIndents
LOCAL lcTable, lcAlias, lcScope, lcDBFName, lcIndentText, lcDBF, lcRootName
LOCAL lcValue, lcField, lnFieldCount, lnCount, lnLastSelect, lnLastRecNo
LOCAL lcXMLText,cUuID,cOibFir,cDatVrij2,cUlcia,cBrKuc,cDodKuc,cPosBroj,cNasel,cOpicina,cTipOstali,cVrijemR,cDatOPrim,cOznakaPP
DIMENSION laFields[1]

cUUID=UUID.uuid
cDatVrij2=SUBSTR(TTOC(DATETIME()),1,10)+"T"+SUBSTR(TTOC(DATETIME()),12,8)
cOibFir=SUBSTR(OPCIJE.cPorBroj,1,11)
cOznakaPP=RTRIM(OPCIJE.cOznPosl)
cUlcia=RTRIM(OPCIJE.cUlica)
cBrKuc=RTRIM(OPCIJE.cKucni)
cDodKuc=RTRIM(OPCIJE.cDod)
cPosBroj=RTRIM(OPCIJE.cBrPos)
cNasel=RTRIM(OPCIJE.cNaselje)
cOpicina=RTRIM(OPCIJE.cOpcina)
cTipOstali=RTRIM(OPCIJE.cOstTipov)
cVrijemR=RTRIM(OPCIJE.cRadVrij)
cDatOPrim=DTOC(OPCIJE.dDatPrim)

lcXMLText = "<?xml version='1.0' encoding='utf-8'?><tns:PoslovniProstorZahtjev xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'  Id='signXmlId' xmlns:tns='http://www.apis-it.hr/fin/2012/types/f73'>"  + CR_LF
lcXMLText = lcXMLText + "<tns:Zaglavlje>" + CR_LF
lcXMLText = lcXMLText + "<tns:IdPoruke>" + cUUID + "</tns:IdPoruke>" + CR_LF
lcXMLText = lcXMLText + "<tns:DatumVrijeme>" + cDatVrij2 + "</tns:DatumVrijeme>" + CR_LF
lcXMLText = lcXMLText + "</tns:Zaglavlje>" + CR_LF
lcXMLText = lcXMLText + "<tns:PoslovniProstor>" + CR_LF
lcXMLText = lcXMLText + "<tns:Oib>" +cOIBFir+ "</tns:Oib>" + CR_LF
lcXMLText = lcXMLText + "<tns:OznPoslProstora>" +cOznakaPP+ "</tns:OznPoslProstora>" + CR_LF
lcXMLText = lcXMLText + "<tns:AdresniPodatak>" + CR_LF
IF LEN(cTipOstali) > 0
    lcXMLText = lcXMLText + "<tns:OstaliTipoviPP>" + cTipOstali + "</tns:OstaliTipoviPP>" + CR_LF
    ELSE
    lcXMLText = lcXMLText + "<tns:Adresa>" + CR_LF
    lcXMLText = lcXMLText + "<tns:Ulica>" + cUlcia + "</tns:Ulica>" + CR_LF                 
    lcXMLText = lcXMLText + "<tns:KucniBroj>" + cBrKuc + "</tns:KucniBroj>" + CR_LF
    IF LEN(cDodKuc) > 0
        lcXMLText = lcXMLText + "<tns:KucniBrojDodatak>" + cDodKuc + "</tns:KucniBrojDodatak>" + CR_LF  
    ENDIF
    lcXMLText = lcXMLText + "<tns:BrojPoste>" + cPosBroj + "</tns:BrojPoste>" + CR_LF
    lcXMLText = lcXMLText + "<tns:Naselje>" + cNasel + "</tns:Naselje>" + CR_LF
    lcXMLText = lcXMLText + "<tns:Opcina>" + cOpicina + "</tns:Opcina>" + CR_LF
    lcXMLText = lcXMLText + "</tns:Adresa>" + CR_LF
ENDIF
lcXMLText = lcXMLText + "</tns:AdresniPodatak>" + CR_LF
lcXMLText = lcXMLText + "<tns:RadnoVrijeme>" + cVrijemR + "</tns:RadnoVrijeme>" + CR_LF
lcXMLText = lcXMLText + "<tns:DatumPocetkaPrimjene>" + cDatOPrim + "</tns:DatumPocetkaPrimjene>" + CR_LF
lcXMLText = lcXMLText + "<tns:SpecNamj>18917230087</tns:SpecNamj>" + CR_LF
lcXMLText = lcXMLText +    "</tns:PoslovniProstor>" + CR_LF       
lcXMLText = lcXMLText + "</tns:PoslovniProstorZahtjev>" + CR_LF

RETURN lcXMLText

Jan 17, 2013 at 1:37 PM

Hvala.

Jan 17, 2013 at 3:33 PM
Edited Jan 17, 2013 at 3:34 PM

Kojom metodom dobijem povratni XML koji bi trebao izgledati ovako nekako:

<tns:PoslovniProstorOdgovorxmlns:tns="http://www.apis-it.hr/fin/2012/types/f73">
<tns:Zaglavlje>
<tns:IdPoruke>ca996cc7-fcc3-4c50-961b-40c8b875a5e8</tns:IdPoruke>
<tns:DatumVrijeme>01.09.2012T21:10:35</tns:DatumVrijeme>
</tns:Zaglavlje>
</tns:PoslovniProstorOdgovor>

?

Feb 12, 2013 at 11:54 AM
I ja imam sličan problem.
Kojom metodom vidim da li mi je prošao zahtjev za poslovni prostor?
Nov 8 at 10:29 PM
Javlja mi kada želim podići novu 3.1. verziju slijedeće:
enable the loadFromRemoteSources switch
Zna netko kako da ga Enable-am u Foxu?
tnx
Nov 9 at 12:35 PM
MSDN kaže ovako:
<loadFromRemoteSources  
   enabled="true|false"/>
Nov 10 at 5:37 PM
Hm, taj problem sam riješio sa novim "DotNetBridge", ali sada javlja da ga ne može podići.
_"Unable to load wwDotNetBridge"_

Probam i sa registracijom com-a; ista stvar. Ne kužim gdje griješim.... Ima netko neku ideju?
Exe varijanta radi bez problema...
Nov 12 at 7:17 PM
loBridge = CreateObject("wwDotNetBridge","V2") && V2 je verzija .NET frameworka. V4 za 4.0
?
Tomo