Пример #1
0
        void Init()
        {
            lock (this)
            {
                if (_UseCompression != -1)
                {
                    return;
                }
                _UseCompression = 0;      // assume failure; and use the builtin MS routines

                try
                {
                    // Load the assembly
                    _Assembly = XmlUtil.AssemblyLoadFrom(_CodeModule);

                    // Load up a test stream to make sure it will work
                    object[] args = new object[] { new MemoryStream() };

                    Stream so = _Assembly.CreateInstance(_ClassName, false,
                                                         BindingFlags.CreateInstance, null, args, null, null) as Stream;

                    if (so != null)
                    {      // we've successfully inited
                        so.Close();
                        _UseCompression = 1;
                    }
                    else
                    {
                        _Assembly = null;
                    }

                    if (_Finish != null)
                    {
                        Type theClassType = so.GetType();
                        this._FinishMethodInfo = theClassType.GetMethod(_Finish);
                    }
                }
                catch (Exception e)
                {
                    _ErrorMsg       = e.InnerException == null ? e.Message : e.InnerException.Message;
                    _UseCompression = 0;      // failure; force use the builtin MS routines
                }
            }
        }
Пример #2
0
 static public void Init()
 {
     if (_Assembly != null)
     {
         return;
     }
     lock (typeof(ZipWrap))
     {
         try
         {
             _Assembly = XmlUtil.AssemblyLoadFrom(ZIPNAME);
             _ZipError = string.Empty;
         }
         catch (Exception ex)
         {
             _ZipError = ex.ToString();      // record error for later
         }
     }
 }
Пример #3
0
        static void GetCustomReportItem(Dictionary <string, CustomReportItemEntry> crieDir, XmlNode xNode)
        {
            string friendlyTypeName = null;
            string codemodule       = null;
            string classname        = null;

            foreach (XmlNode xNodeLoop in xNode.ChildNodes)
            {
                if (xNodeLoop.NodeType != XmlNodeType.Element)
                {
                    continue;
                }
                switch (xNodeLoop.Name)
                {
                case "Type":
                    friendlyTypeName = xNodeLoop.InnerText;
                    break;

                case "CodeModule":
                    codemodule = xNodeLoop.InnerText;
                    break;

                case "ClassName":
                    classname = xNodeLoop.InnerText;
                    break;

                default:
                    break;
                }
            }
            if (friendlyTypeName == null)
            {
                return;         // nothing to do if no provider specified
            }
            CustomReportItemEntry crie;

            try
            {   // load the module early; saves problems with concurrency later
                string   msg        = null;
                Type     dotNetType = null;
                Assembly la         = null;
                if (codemodule != null && classname != null)
                {
                    // Check to see if previously loaded.  Many CustomReportItems share same CodeModule.
                    Assembly[] allLoadedAss = AppDomain.CurrentDomain.GetAssemblies();
                    foreach (Assembly ass in allLoadedAss)
                    {
                        if (ass.Location.Equals(codemodule, StringComparison.CurrentCultureIgnoreCase))
                        {
                            la = ass;
                            break;
                        }
                    }

                    if (la == null)     // not previously loaded?
                    {
                        la = XmlUtil.AssemblyLoadFrom(codemodule);
                    }
                    if (la == null)
                    {
                        msg = string.Format("{0} could not be loaded", codemodule);
                    }
                    else
                    {
                        dotNetType = la.GetType(classname);
                    }
                }

                crie = new CustomReportItemEntry(friendlyTypeName, dotNetType, msg);
                crieDir.Add(friendlyTypeName, crie);
            }
            catch (Exception e)
            {      // keep exception;  if this CustomReportItem is ever used we will see the message
                crie = new CustomReportItemEntry(friendlyTypeName, null, e.Message);
                crieDir.Add(friendlyTypeName, crie);
            }
        }
Пример #4
0
        static void GetDataSource(IDictionary dsDir, XmlNode xNode)
        {
            string provider          = null;
            string codemodule        = null;
            string cname             = null;
            string inter             = "SQL";
            string tselect           = null;
            bool   replaceparameters = false;

            foreach (XmlNode xNodeLoop in xNode.ChildNodes)
            {
                if (xNodeLoop.NodeType != XmlNodeType.Element)
                {
                    continue;
                }
                switch (xNodeLoop.Name)
                {
                case "DataProvider":
                    provider = xNodeLoop.InnerText;
                    break;

                case "CodeModule":
                    codemodule = xNodeLoop.InnerText;
                    break;

                case "Interface":
                    inter = xNodeLoop.InnerText;
                    break;

                case "ClassName":
                    cname = xNodeLoop.InnerText;
                    break;

                case "TableSelect":
                    tselect = xNodeLoop.InnerText;
                    break;

                case "ReplaceParameters":
                    if (xNodeLoop.InnerText.ToLower() == "true")
                    {
                        replaceparameters = true;
                    }
                    break;

                default:
                    break;
                }
            }
            if (provider == null)
            {
                return;         // nothing to do if no provider specified
            }
            SqlConfigEntry sce;

            try
            {   // load the module early; saves problems with concurrency later
                string   msg = null;
                Assembly la  = null;
                if (codemodule != null && cname != null)
                {
                    // check to see if the DLL has been previously loaded
                    //   many of the DataProvider done by ReportingCloud are in a single code module
                    foreach (SqlConfigEntry sc in dsDir.Values)
                    {
                        if (sc.FileName == codemodule &&
                            sc.CodeModule != null)
                        {
                            la = sc.CodeModule;
                            break;
                        }
                    }
                    if (la == null)
                    {
                        la = XmlUtil.AssemblyLoadFrom(codemodule);
                    }
                    if (la == null)
                    {
                        msg = string.Format("{0} could not be loaded", codemodule);
                    }
                }
                sce = new SqlConfigEntry(provider, codemodule, cname, la, tselect, msg);
                dsDir.Add(provider, sce);
            }
            catch (Exception e)
            {      // keep exception;  if this DataProvided is ever useed we will see the message
                sce = new SqlConfigEntry(provider, codemodule, cname, null, tselect, e.Message);
                dsDir.Add(provider, sce);
            }
            sce.ReplaceParameters = replaceparameters;
        }