/// <summary>
        /// Vraća sve greške iz XML dokumenta koji sadrži odgovor.</summary>
        /// <param name="dokument">XML dokument primljen kao odgovor iz CIS-a.</param>
        /// <returns>
        /// Vraća poruku greške (Pogledati poglavlje 2.4. Šifrarnik grešaka u Tehničkoj specifikaciji).</returns>
        public static string DohvatiGreskuRezultataZahtjeva(XmlDocument OdgovorGreska)
        {
            // prema sugestiji hebos: http://fiskalizacija.codeplex.com/workitem/672

            XmlNamespaceManager nsmgr;

            TipDokumentaEnum tipDokumenta = XmlDokumenti.OdrediTipDokumenta(OdgovorGreska);

            XmlDokumenti.DodajNamespace(OdgovorGreska, out nsmgr);
            XmlElement root         = OdgovorGreska.DocumentElement;
            XmlNode    bodyNode     = root.SelectSingleNode("soap:Body", nsmgr);
            XmlNode    documentNode = null;

            if (bodyNode.HasChildNodes)
            {
                if (tipDokumenta == TipDokumentaEnum.EchoOdgovor)
                {
                    documentNode = bodyNode.SelectSingleNode("tns:EchoResponse", nsmgr);
                }
                else if (tipDokumenta == TipDokumentaEnum.RacunOdgovor)
                {
                    documentNode = bodyNode.SelectSingleNode("tns:RacunOdgovor", nsmgr);
                }
                else if (tipDokumenta == TipDokumentaEnum.PoslovniProstorOdgovor)
                {
                    documentNode = bodyNode.SelectSingleNode("tns:PoslovniProstorOdgovor", nsmgr);
                }
                else if (tipDokumenta == TipDokumentaEnum.ProvjeraOdgovor)
                {
                    documentNode = bodyNode.SelectSingleNode("tns:ProvjeraOdgovor", nsmgr);
                }
            }

            string ErrorCollection = "";

            if (documentNode != null)
            {
                XmlNodeList ErrorList = documentNode.SelectNodes("tns:Greske", nsmgr);

                foreach (XmlNode NextError in ErrorList)
                {
                    ErrorCollection += String.Format("{0} Šifra greške: {1}\n", NextError.FirstChild.SelectSingleNode("tns:PorukaGreske", nsmgr).InnerText, NextError.FirstChild.SelectSingleNode("tns:SifraGreske", nsmgr).InnerText);
                }

                return(ErrorCollection);
            }
            else
            {
                return("Nepoznata greška");
            }
        }
Пример #2
0
        /// <summary>
        /// Pomoćna metoda koja određuje tip XML dokumenta
        /// </summary>
        /// <param name="dokument">XML dokument prema XSD schemi, zajedno sa SOAP omotnicom</param>
        /// <returns>Tip dokumenta</returns>
        public static TipDokumentaEnum OdrediTipDokumenta(XmlDocument dokument)
        {
            TipDokumentaEnum tipDokumenta = TipDokumentaEnum.Nepoznato;

            if (dokument != null)
            {
                XmlNamespaceManager nsmgr;
                XmlDokumenti.DodajNamespace(dokument, out nsmgr);

                if (dokument.DocumentElement != null)
                {
                    XmlElement root = dokument.DocumentElement;
                    XmlNode    node = root.SelectSingleNode("soap:Body", nsmgr);

                    if (node != null && node.HasChildNodes)
                    {
                        switch (node.FirstChild.Name)
                        {
                        case "tns:EchoRequest":
                            tipDokumenta = TipDokumentaEnum.EchoZahtjev;
                            break;

                        case "tns:EchoResponse":
                            tipDokumenta = TipDokumentaEnum.EchoOdgovor;
                            break;

                        case "tns:RacunZahtjev":
                            tipDokumenta = TipDokumentaEnum.RacunZahtjev;
                            break;

                        case "tns:RacunOdgovor":
                            tipDokumenta = TipDokumentaEnum.RacunOdgovor;
                            break;

                        case "tns:PoslovniProstorZahtjev":
                            tipDokumenta = TipDokumentaEnum.PoslovniProstorZahtjev;
                            break;

                        case "tns:PoslovniProstorOdgovor":
                            tipDokumenta = TipDokumentaEnum.PoslovniProstorOdgovor;
                            break;

                        default:
                            break;
                        }
                    }
                }
            }

            return(tipDokumenta);
        }
        /// <summary>
        /// Kreira XML poruku zajedno sa SOAP envelop, koja je sprena za slanje ECHO web metodi.</summary>
        /// <param name="poruka">Tekst poruke koja se šalje, na primjer 'test' ili 'test poruka' ili sl. Ukoliko se radi o praznom stringu (""), tada će tekst poruke biti 'echo test'.</param>
        /// <example>
        /// XmlDocument echoZahtjev = PopratneFunkcije.XmlDokumenti.DohvatiPorukuEchoZahtjev(poruka);
        /// </example>
        /// <returns>
        /// Vraća XmlDocument sa XML zahtjeva, u slučaju greške vraća null.</returns>
        public static XmlDocument DohvatiPorukuEchoZahtjev(string poruka)
        {
            XmlDocument xml = null;

            Razno.FormatirajEchoPoruku(ref poruka);

            string soap = String.Format(@"<tns:EchoRequest xmlns:tns=""http://www.apis-it.hr/fin/2012/types/f73"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:schemaLocation=""http://www.apisit.hr/fin/2012/types/f73/FiskalizacijaSchema.xsd"">{0}</tns:EchoRequest>", poruka);

            try
            {
                xml = new XmlDocument();
                xml.LoadXml(soap);
                XmlDokumenti.DodajSoapEnvelope(ref xml);
            }
            catch (Exception ex)
            {
                Trace.WriteLine(String.Format("Greška kod kreiranja poruke za ECHO zahtjev: {0}", ex.Message));
                throw;
            }


            return(xml);
        }