Exemple #1
0
        public string AddReport(string report, string url, string type)
        {
            if (!report.HasValue())
            {
                throw new ArgumentException("missing report name");
            }

            int typeid;

            string[] lookfor;
            switch (type)
            {
            case "PyScript":
                typeid  = ContentTypeCode.TypePythonScript;
                lookfor = new[] { "BlueToolbarReport", "@BlueToolbarTagId" };
                break;

            case "SqlReport":
                typeid  = ContentTypeCode.TypeSqlScript;
                lookfor = new[] { "@qtagid" };
                break;

            case "OrgSearchSqlReport":
                typeid  = ContentTypeCode.TypeSqlScript;
                lookfor = new[] { "@OrgIds" };
                break;

            case "Menu":
                typeid  = ContentTypeCode.TypeSqlScript;
                lookfor = new[] { "menu" };
                break;

            default:
                throw new ArgumentException($"unknown typeid: {type}");
            }
            var content = db.Content(report, typeid);

            if (lookfor.Any(vv => content.Body.Contains(vv, ignoreCase: true)))
            {
                var xdoc = GetCustomReportXml();
                if (FindReportOnDocument(xdoc, report) != null)
                {
                    throw new ArgumentException("report already exists");
                }

                var reportElement = new XElement("Report", new XAttribute("name", report), new XAttribute("type", type));
                xdoc.Root?.Add(reportElement);
                SetCustomReportsContent(xdoc.ToString());
                return("BlueToolbar");
            }
            content = db.Content("CustomReportsMenu", "<ReportsMenu/>", ContentTypeCode.TypeText);
            var xd = XDocument.Parse(content.Body);
            var e  = xd.Descendants("Report").SingleOrDefault(r => r.Attribute("link").Value == url);

            if (e != null)
            {
                throw new ArgumentException("report already exists");
            }
            e = new XElement("Report", new XAttribute("link", url), report.SpaceCamelCase());
            var col2 = xd.Descendants("Column2").SingleOrDefault();

            if (col2 == null)
            {
                col2 = new XElement("Column2");
                xd.Root?.Add(col2);
            }
            col2.Add(e);
            content.Body = xd.ToString();
            HttpRuntime.Cache.Remove(DbUtil.Db.Host + "CustomReportsMenu");
            db.SubmitChanges();
            return("Reports Menu");
        }