Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }