/// <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"); } }
/// <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); }