/// <summary> /// Создать XML файлы из данных, считанных из БД /// </summary> /// <param name="rep_year">Отчетный год</param> /// <param name="org">Организация</param> /// <param name="list_id">Список идентификаторов пакетов</param> /// <param name="connectionStr">Строка подключения</param> /// <param name="mapXml">Карта - выходной параметр</param> /// <param name="szv3Xml">Сводная ведомость - выходной параметр</param> /// <param name="szv2XmlArray">Описи - выходной параметр</param> /// <param name="szv1XmlArray">Документы СЗВ1 - выходной параметр</param> /// <returns></returns> public static int MakeXml(int repYear, Org org, IEnumerable <long> listId, string connectionStr, out XmlDocument mapXml, out XmlDocument szv3Xml, out IEnumerable <XmlDocument> szv2XmlArray, out IEnumerable <IEnumerable <XmlDocument> > szv1XmlArray) { int res = 0; XmlDocument szv3 = Szv3Xml.GetXml(org.idVal, repYear, connectionStr); LinkedList <XmlDocument> szv2Array = new LinkedList <XmlDocument>(); LinkedList <IEnumerable <XmlDocument> > szv1Array = new LinkedList <IEnumerable <XmlDocument> >(); foreach (long listID in listId) { XmlDocument szv2 = Szv2Xml.GetXml(listID, connectionStr); long[] docsID = Docs.GetDocsID(listID, connectionStr); IEnumerable <XmlDocument> szv1 = Szv1Xml.GetXml(docsID, org, connectionStr); if (szv1 != null && szv2 != null) { szv2Array.AddLast(szv2); szv1Array.AddLast(szv1); } else { res = -1; } } mapXml = MapXml.GetXml(szv2Array, szv1Array); szv3Xml = szv3; szv2XmlArray = szv2Array; szv1XmlArray = szv1Array; // return(res); }
/// <summary> /// Получить ссылку на объект контейнера с заполненными данными /// </summary> /// <param name="mapXml">Карта</param> /// <param name="szv3Xml">Сводная ведомость</param> /// <param name="szv2XmlArray">Описи пакетов</param> /// <param name="szv1XmlArray">Документы СЗВ-1</param> /// <param name="diskKey">Ключ</param> /// <param name="diskTable">Таблица</param> /// <returns></returns> public static CompoundFile MakeContainer(XmlDocument mapXml, XmlDocument szv3Xml, IEnumerable <XmlDocument> szv2XmlArray, IEnumerable <IEnumerable <XmlDocument> > szv1XmlArray, byte[] diskKey, byte[] diskTable) { XmlElement rootMap = mapXml[MapXml.tagTopics]; XmlElement svodRootMap = rootMap[MapXml.tagSvod]; XmlNodeList lists = rootMap.GetElementsByTagName(MapXml.tagTopics); if (lists.Count != szv2XmlArray.Count() || lists.Count != szv1XmlArray.Count()) { return(null); } CompoundFile container = new CompoundFile(CFSVersion.Ver_3, false, false); CFStorage dir4 = container.RootStorage.AddStorage(rootMap.GetAttribute(MapXml.paramID)); for (int i = 0; i < szv2XmlArray.Count(); i++) { XmlElement curList = lists[i] as XmlElement; XmlElement curOpis = curList[MapXml.tagOpis]; CFStorage curDir = dir4.AddStorage(curList.GetAttribute(MapXml.paramID)); XmlDocument szv2Xml = szv2XmlArray.ElementAt(i); CFStream opisStream = AddStream(curDir, szv2Xml, diskKey, diskTable); curOpis[MapXml.tagFilename].InnerText = opisStream.Name; XmlNodeList docs = curList.GetElementsByTagName(MapXml.tagTopic); if (docs.Count != szv1XmlArray.ElementAt(i).Count()) { continue; } for (int j = 0; j < szv1XmlArray.ElementAt(i).Count(); j++) { /*if (i >= 10 && j >= 51) * { * Console.WriteLine("Packet {0}, Doc {1}", i, j); * }*/ XmlDocument szv1Xml = szv1XmlArray.ElementAt(i).ElementAt(j); XmlElement curDoc = docs[j] as XmlElement; CFStream docStream = AddStream(curDir, szv1Xml, diskKey, diskTable); curDoc[MapXml.tagFilename].InnerText = docStream.Name; } } CFStream svod = AddStream(dir4, szv3Xml, diskKey, diskTable); svodRootMap[MapXml.tagFilename].InnerText = svod.Name; CFStream map = container.RootStorage.AddStream("map"); SetDataToStream(map, mapXml.InnerXml, diskKey, diskTable); CFStorage styleDir = container.RootStorage.AddStorage("styles"); CFStream mapStyleStream = styleDir.AddStream("map_style"); CFStream szv1StyleStream = styleDir.AddStream("szv_style"); CFStream szv3StyleStream = styleDir.AddStream("svod_style"); CFStream szv2StyleStream = styleDir.AddStream("szv_opis_style"); SetDataToStream(mapStyleStream, File.ReadAllBytes(MapXml.GetXslUrl()), diskKey, diskTable); SetDataToStream(szv1StyleStream, File.ReadAllBytes(Szv1Xml.GetXslUrl()), diskKey, diskTable); SetDataToStream(szv3StyleStream, File.ReadAllBytes(Szv3Xml.GetXslUrl()), diskKey, diskTable); SetDataToStream(szv2StyleStream, File.ReadAllBytes(Szv2Xml.GetXslUrl()), diskKey, diskTable); return(container); }