COM DLL - prijedlozi

Coordinator
Oct 23, 2012 at 7:42 AM

Otvaramo ovu temu kako bi se moglo raspraviti o tome što nedostaje u COM sučelju onima koji ga koriste. 

Naime, samo osnovni dio funkcionalnosti iz .NET assembly-a je reflektiran kroz COM, tako da sve zainteresirane molimo da nam iznesu prijedloge što im još nedostaje.

Oct 28, 2012 at 10:34 AM

 

A cuj,

vracamo se na ono kaj sam ja u nekom svom davnom postu pisao.

Evo primjer za koristenje, nako registriranje COM dll-a

Private Sub CmdTest_Click()

Dim myObject As New Raverus_FiskalizacijaDEV_COM.CentralniInformacijskiSustav

Set myObject = New Raverus_FiskalizacijaDEV_COM.CentralniInformacijskiSustav
MsgBox myObject.TestCom("Moj test123") '
MsgBox myObject.PosaljiEcho("")

End Sub

Ovaj gore primjer prolazi.

E sada, slijedeci primjer ne prolazi, mada je ista filozofije... :)

Private Sub CmdTest_Drugi_Click()

Dim myObject As New Raverus_FiskalizacijaDEV_COM.CentralniInformacijskiSustav

'Dim xml

'xml = "<?xml version=""1.0"" encoding=""utf-8""?><tns:RacunZahtjev 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>cff93023-850b-403c-ac8b-277619e81dc9</tns:IdPoruke><tns:DatumVrijeme>21.10.2012T10:10:28</tns:DatumVrijeme></tns:Zaglavlje><tns:Racun><tns:Oib>44718633471</tns:Oib><tns:USustPdv>true</tns:USustPdv><tns:DatVrijeme>21.10.2012T10:10:22</tns:DatVrijeme><tns:OznSlijed>P</tns:OznSlijed><tns:BrRac><tns:BrOznRac>1</tns:BrOznRac><tns:OznPosPr>123</tns:OznPosPr><tns:OznNapUr>1</tns:OznNapUr></tns:BrRac><tns:Pdv><tns:Porez><tns:Stopa>25.00</tns:Stopa><tns:Osnovica>10.00</tns:Osnovica><tns:Iznos>2.50</tns:Iznos></tns:Porez></tns:Pdv><tns:IznosUkupno>12.50</tns:IznosUkupno><tns:NacinPlac>G</tns:NacinPlac><tns:OibOper>12345678900</tns:OibOper><tns:ZastKod>e4d909c290d0fb1ca068ffaddf22cbd0</tns:ZastKod><tns:NakDost>false</tns:NakDost></tns:Racun></tns:RacunZahtjev>"


'MsgBox myObject.PosaljiSoapPoruku(xml, "FISKAL 1")

End sub


End Sub

 

Isti nacin pozivanja DLL-a ali ovaj drugi ne prolazi.

I ne vidi se popis property-a, funkcija i kaj se sve nalazi u DLL-u kad se referencira na dll.

Coordinator
Oct 28, 2012 at 10:41 AM

@goranv13, daj, pls, ovo prebaci negdje drugdje, s obzirom da je ovaj discussion vezan uz nove feature koje bi korisnici htjeli vidjeti u COM DLL-u.

Oct 29, 2012 at 11:13 AM

Kao što sam već naveo slično kod EXE verzije, bilo bi dobro funkciju Potpisivanje ubaciti i u COM.DLL verziju.

Netko možda želi samo potpisati datoteku i poslati je na neki drugi način.

Oct 31, 2012 at 11:17 PM

Zanima me je li moguća implementacija kreiranja XML datoteke u COM DLL-u. 

 

Coordinator
Nov 1, 2012 at 6:58 AM

@vujcic, na što točno misliš?

Nov 1, 2012 at 9:13 AM

Po trenutnoj sotuaciji, trebam imat već pripremljen npr. xml za RacunZahtjev i preko COM DLL- ga potpisujem i šaljem.

Postoji li šansa da se sam XML kreira kroz COM DLL

Znači nešto tipa

Dim myObject As New Raverus_FiskalizacijaDEV_COM.CentralniInformacijskiSustav

Set myObject = New Raverus_FiskalizacijaDEV_COM.CentralniInformacijskiSustav

myObject.RacunZathjev.Oib="123457890"

.

.

.

.

xml=MyObject.KreirajXml(RacunZahtjev)

MsgBox myObject.PosaljiSoapPoruku(xml, "FISKAL 1")

Coordinator
Nov 3, 2012 at 1:25 PM

@vujcic, sugestija svakako ima smisla, no, mislim da do daljnjega, osim ako ne bude nekog jačeg interesa po tom pitanju, ostajemo kod toga da se XML treba pripremiti "ručno". Naime, dosta nam je velik posao da objekte iz kojih se kasnije radi serijalizacija u XML "izbacimo" van putem COM-a...

Coordinator
Nov 3, 2012 at 1:26 PM

Prema vašim sugestijama, ovo je dostupno od v1.2. COM DLL-a: http://fiskalizacija.codeplex.com/workitem/649

Hvala svima koji su se uključili u raspravu :)

Nov 5, 2012 at 11:53 AM

ok, već i ovo što imam je super.

Hvala još jednom na uloženom velikom trudu u ovom projektu.

Nov 12, 2012 at 4:53 PM
Edited Nov 12, 2012 at 4:53 PM

Gospodo, kako mogu nabaviti taj DEMO Certifikat kad sam fizicka osoba? ima li ko da mi posalje ? Nemam obrt pa registracija kod FINE bila bi uzaludna....

Coordinator
Nov 12, 2012 at 4:55 PM
sanjink wrote:

Gospodo, kako mogu nabaviti taj DEMO Certifikat kad sam fizicka osoba? ima li ko da mi posalje ? Nemam obrt pa registracija kod FINE bila bi uzaludna....

Kaj je ovo postalo grupno "žicanje" certifikata?

vidi ovo:

http://fiskalizacija.codeplex.com/discussions/402876

sretno....

Nov 12, 2012 at 8:45 PM

davore, nije to zicanje, to je lagano pitanje, i ako nekoga ima za pomoc onda super...nitko ako netko posudi ili da na koristenje demo cert nece dobiti nikakvu kaznu niti je kaznjivo djelo to ciniti, jer nigdje tako ne pise....lp, sanjin

Nov 13, 2012 at 5:38 PM

Hvala Ninoslavu i ostalima koji su uložili puno truda u ovaj projekt.

Predlažem da se u COM DLL doda mogućnost mijenjanja/čitanja Property-a NazivMapeZahtjev, NazivMapeOdgovor, NazivAutoGeneriranje, OdgovorGreska, OdgovorGreskaStatus i TimeOut

 

Coordinator
Nov 13, 2012 at 5:54 PM

@m_mirda, hvala na sugestiji, otvorio sam Issue: http://fiskalizacija.codeplex.com/workitem/667

Nov 13, 2012 at 6:44 PM
nrasinec wrote:

@vujcic, sugestija svakako ima smisla, no, mislim da do daljnjega, osim ako ne bude nekog jačeg interesa po tom pitanju, ostajemo kod toga da se XML treba pripremiti "ručno". Naime, dosta nam je velik posao da objekte iz kojih se kasnije radi serijalizacija u XML "izbacimo" van putem COM-a...


Ne bi to trebalo biti toliko dodatnog posla...

COM dll se obično koristiiti u alatima koji i nemaju velime tehničke mogućnosti kreiranja XML-a tako da i tu može biti problema kod samog kreiranja.

Primjer promjene COM-a za slanje poruke RacunZahtjev bez prethodno kreiranjog XML-a.

Dodane su funkcije koje primaju samo string parametre te se XML i sve ostalo odvija preko samog COM-a.

 public class CentralniInformacijskiSustav: ICIS
    {
        CultureInfo culture = new CultureInfo("hr-HR");
        Raverus.FiskalizacijaDEV.Schema.RacunType racun = new Schema.RacunType();
    
        public void KreirajRacunZahtjev(string pOib, string pUSustPdv, string pDatVrijeme, string pOznSlijed,
             string pBrOznRac, string pOznPosPr, string pOznNapUr, string pIznosUkupno, string pNacinPlac, string pOibOper, string pNaknadDos)
        {
                    
            racun.Oib = pOib;
            racun.USustPdv = Convert.ToBoolean(pUSustPdv);
            racun.DatVrijeme = pDatVrijeme;
            if (pOznSlijed == "P")
                racun.OznSlijed = Schema.OznakaSlijednostiType.P;
            else
                racun.OznSlijed = Schema.OznakaSlijednostiType.N;
           
            Raverus.FiskalizacijaDEV.Schema.BrojRacunaType br = new Schema.BrojRacunaType() { BrOznRac = pBrOznRac, OznPosPr = pOznPosPr, OznNapUr = pOznNapUr };
            racun.BrRac = br;
                    
            racun.IznosUkupno = Convert.ToDecimal(pIznosUkupno, culture);
            switch (pNacinPlac)
         {
                case "G":
                    racun.NacinPlac = Schema.NacinPlacanjaType.G;
                    break;
                case "K":
                    racun.NacinPlac = Schema.NacinPlacanjaType.K;
                    break;
                case "C":
                    racun.NacinPlac = Schema.NacinPlacanjaType.C;
                    break;
                case "T":
                    racun.NacinPlac = Schema.NacinPlacanjaType.T;
                    break;
                case "O":
                    racun.NacinPlac = Schema.NacinPlacanjaType.O;
                    break;
    
         }                  
           
            racun.OibOper = pOibOper;
            racun.NakDost = Convert.ToBoolean(pNaknadDos);

            racun.ZastKod = Raverus.FiskalizacijaDEV.PopratneFunkcije.Razno.ZastitniKodIzracun("FISKAL 1", racun.Oib, racun.DatVrijeme.Replace('T', ' '),    racun.BrRac.BrOznRac, racun.BrRac.OznPosPr, racun.BrRac.OznNapUr, racun.IznosUkupno.ToString());

                       
        }

        public void DodajPDV(string pStopa, string pOsnovica, string pIznos)
        {
            Raverus.FiskalizacijaDEV.Schema.PdvType pdv = new Schema.PdvType();
            Raverus.FiskalizacijaDEV.Schema.PorezType porez = new Schema.PorezType() { Stopa =  Convert.ToDecimal(pStopa, culture), Osnovica = Convert.ToDecimal  (pOsnovica, culture), Iznos = Convert.ToDecimal(pIznos, culture)};
          
            pdv.Porez.Add(porez);
            racun.Pdv.Add(porez);
                             
        }

        public string PosaljiZahtjev(out string oGreska)
        {
            Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new FiskalizacijaDEV.CentralniInformacijskiSustav();
         
            XmlDocument doc = cis.PosaljiRacun(racun, "FISKAL 1");
       

            if (doc != null)
            {
                oGreska = DohvatiPorukuGreske(doc, "RacunOdgovor");
                return Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DohvatiJir(doc);
             }
            else
            {
                oGreska = "";
                return "";
            }
        }

Nov 13, 2012 at 8:27 PM

@iglabas : "COM dll se obično koristiiti u alatima koji i nemaju velike tehničke mogućnosti kreiranja XML-a tako da i tu može biti problema kod samog kreiranja."

A koji to alat nema tehničkih mogućnosti  sklopiti "Hello World" od dva stringa ? :)

Nov 13, 2012 at 9:01 PM
mladenbabic wrote:

@iglabas : "COM dll se obično koristiiti u alatima koji i nemaju velike tehničke mogućnosti kreiranja XML-a tako da i tu može biti problema kod samog kreiranja."

A koji to alat nema tehničkih mogućnosti  sklopiti "Hello World" od dva stringa ? :)


Svaki alat ima mogućnost sklapanje stringa..to nije upitno.

Međutim XML ima kompleksniju strukturu sa pravilima formatiranja i tu se kod običnog "sklapanja" stringa može dodatno pogriješiti..

Drugi problem je u duljini ulaznog string parametra. Moj alat (Erp Dynamics NAV) ne može poslati string duljine veće do 1024 znakova u COM.

Rješenje tog problema je  korištenje 'Microsoft XML, v6.0'.DOMDocument COM da bi prvo kreirao XML dokument na disku koji se onda u COM objektu ponovo čita.

To je bio jedini način da se string te veličine "proslijedi" COM objektu.   

Zato mi je elegantnije rješenje slanje pojedinačnih parametara u COM objekt a ne velikog string-a.

Nov 14, 2012 at 7:31 AM

Jedno pitanje, možda sam previdio negdje tako da se ispričavam unaprijed.

Za izračun ZKI pozovem donji code:

Dim zki

zki=o.ZastitniKodIzracun("FISKAL 1","12345678901","21.10.2012 10:10:28","1","1","1","125.00")
msgbox zki

 

vidim u C# solutionu da je methoda overloadana da može hvatati i verziju sa certifikat datotekom i password međutim ne mogu
ga natjerati da primi, kaže da broj parametara nije ispravan. Ako netko zna točan poziv bio bih zahvalan.

 

Unaprijed zahvaljujem. 

Coordinator
Nov 14, 2012 at 7:34 AM

Probaj koristiti ZastitniKodIzracunCertifikatDatoteka, kod COM-a ne koristimo overload, da smanjimo rizik od potencijalnih problema na raznim platformama. Inače, kod možeš pogledati ovdje: http://fiskalizacija.codeplex.com/SourceControl/changeset/view/16798#381793

Nov 14, 2012 at 7:37 AM
moras koristiti ovu metodu: ZastitniKodIzracunCertifikatDatoteka sa
pripadajucim parametrima...poz, sanjin

2012/11/14 user1312 <notifications@codeplex.com>:
> From: user1312
>
> Jedno pitanje, možda sam previdio negdje tako da se ispričavam unaprijed.
>
> Za izračun ZKI pozovem donji code:
>
> Dim zki
>
> zki=o.ZastitniKodIzracun("FISKAL 1","12345678901","21.10.2012
> 10:10:28","1","1","1","125.00")
> msgbox zki
>
>
>
> vidim u C# solutionu da je methoda overloadana da može hvatati i verziju sa
> certifikat datotekom i password međutim ne mogu
> ga natjerati da primi, kaže da broj parametara nije ispravan. Ako netko zna
> točan poziv bio bih zahvalan.
>
>
>
> Unaprijed zahvaljujem.
>
> Read the full discussion online.
>
> To add a post to this discussion, reply to this email
> ([email removed])
>
> To start a new discussion for this project, email
> [email removed]
>
> You are receiving this email because you subscribed to this discussion on
> CodePlex. You can unsubscribe on CodePlex.com.
>
> Please note: Images and attachments will be removed from emails. Any posts
> to this discussion will also be available online at CodePlex.com
Nov 14, 2012 at 7:56 AM

Zahvaljujem na oba odgovora, tipično od šume nisam vidio drvo. Hvala još jednom.

Nov 14, 2012 at 7:58 AM

Možete li dodati nešto da u Delphiju budu vidljive metode da ne moram pisati napamet?

Nešto tipa: ComVisible atribut = true ili 

[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface ICIS
    {

 

ili već kako to ide ...

 

Hvala

Nov 14, 2012 at 7:59 AM
Da, ja isto u VB6 ne mogu vidjeti metode, kako se to moze uciniti u
COM DLL komponenti?
lp, sanjin

On Wed, Nov 14, 2012 at 8:58 AM, [email removed] wrote:
> From: infos
>
> Možete li dodati nešto da u Delphiju budu vidljive metode da ne moram pisati
> napamet?
>
> Nešto tipa: ComVisible atribut = true ili
>
> [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
> public interface ICIS
> {
>
>
>
> ili već kako to ide ...
>
>
>
> Hvala
>
> Read the full discussion online.
>
> To add a post to this discussion, reply to this email
> ([email removed])
>
> To start a new discussion for this project, email
> [email removed]
>
> You are receiving this email because you subscribed to this discussion on
> CodePlex. You can unsubscribe on CodePlex.com.
>
> Please note: Images and attachments will be removed from emails. Any posts
> to this discussion will also be available online at CodePlex.com
Nov 14, 2012 at 1:48 PM

Koliko sam ja saznao moraju se u Visual Studiju dodati određeni atributi prije buildanja. Sad koji točno ne znam.

Nov 14, 2012 at 2:35 PM
infos wrote:

Koliko sam ja saznao moraju se u Visual Studiju dodati određeni atributi prije buildanja. Sad koji točno ne znam.

Mora se osim atributa Make assebly COM visible dodati interface za pristup metodama.

VB6 neće vidjeti metode bez interface isto kao i bilo koji drugi klijent koji korisit "late binding" za inicijalizaciju COM-a...

Ja dodao i radi bez problema..predlažem da se doda u sljedeći build...


http://fiskalizacija.codeplex.com/discussions/403037#post941124

 

Coordinator
Nov 14, 2012 at 2:42 PM

Probat ćemo to srediti za slijedeću verziju: http://fiskalizacija.codeplex.com/workitem/669