2017-04-12 1 views
0

Ich brauche Berichtsebene dll, wo, wenn wir diese dll dann einige Repors zeigen werden..Für, dass ich Klassenbibliothek CustomeReports..in dieser Klassendatei erstellt haben ich habe die Auflistung einige dynamische Berichte wie Sie unten Code sehen ...check dll existieren und basierend auf diesem Eigenschaften der Klassenbibliothek verwenden

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace CustomeReports 
{ 
    public class keyPairTextC 
    { 
     public bool keyID { get; set; } 
     public string keyN { get; set; } 
     public string keyE { get; set; } 
     public string keyFromDate { get; set; } 
     public string keyTillDate { get; set; }   

    } 
    public class CustomReport 
    { 
     public List<keyPairTextC> GetReportNameList() 
     { 
      CustomReport rpt = new CustomReport(); 
      List<keyPairTextC> getReportName = new List<keyPairTextC>(); 
      getReportName.Add(new keyPairTextC 
      { 
       keyID = false, 
       keyN = "Report2", 
       keyE = "R", 
       keyFromDate = "NA", 
       keyTillDate = "NA",    
      }); 
      return getReportName; 
     }   
     public static string getKeyEmp(string strPropertyValue) 
     { 
      try 
      { 
       List<string> newList1 = new List<string>(); 
       newList1 = getKeyValue(strPropertyValue).Select(C => C.keyE).ToList(); 
       strPropertyValue = newList1[0].ToString(); 
      } 
      catch (Exception ex) 
      { 
       strPropertyValue = ""; 
      } 
      return strPropertyValue; 
     } 
     public static List<keyPairTextC> getKeyValue(string strPropertyValue) 
     { 
      List<keyPairTextC> newList = new List<keyPairTextC>(); 
      CustomReport crm = new CustomReport(); 
      newList = crm.GetReportNameList(); 
      newList = newList.Where(c => c.keyN.Contains(strPropertyValue)).ToList(); 
      return newList; 
     } 
    } 
} 

und ich möchte jetzt diese Klasse Methode getReportNameList verwenden, um diesen Bericht in Fall zu binden ich diese dLL oder Referenz dieser Bibliothek bin hinzufügen.

Also meiner aspx Form i unten Code haben ...

var className = "CustomReports"; 
      var assemblyName = "CustomeReports, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"; 
      foreach (var a in AppDomain.CurrentDomain.GetAssemblies()) 
      { 
       if (a.FullName == assemblyName) 
       { 
        assembly = a; 
        break; 
       } 
      } 
      if (assembly != null) 
      { 
       ViewState["AssemblyInfo"] = assembly; 
       hdnDLLValue.Value = "1"; 
       string strReportName = "Custom Reports";            
       object result = null; 
       result = returnDLLObject("GetReportNameList"); 
      } 

i haben Rückkehr unter Methode Objekt in dll

public object returnDLLObject(string MethodName) 
     { 
      string className = "CustomeReports.CustomReports"; 
      object result = null; 
      object classInstance = null; 
      if (assembly == null) 
       assembly=(Assembly)ViewState["AssemblyInfo"]; 

      if (assembly != null) 
      { 
       try 
       { 

        Type _type_2 = assembly.GetType(className); 
        var methodInfo = _type_2.GetMethod(MethodName); 
        ParameterInfo[] parameters = methodInfo.GetParameters(); 
        classInstance = Activator.CreateInstance(_type_2, null); 
        if (parameters.Length == 0) 
        { 
         result = methodInfo.Invoke(classInstance, null); 
        } 
        else 
        { 
         object[] parametersArray = new object[] { ViewState["nodevalue"].ToStringIC() }; 
         result = methodInfo.Invoke(classInstance, parametersArray); 
        } 
       } 
       catch (Exception ex) 
       { 
        result=null; 
       } 
      } 
      return result; 
     } 

so jetzt bin ich nicht in der Lage, diesen Bericht Objekt in die Liste zu binden Klasse eingeben und auch keinen Eigenschaftswert von dieser Klassenbibliothek abrufen können.

Antwort

0

Nach zu vielen Suchen habe ich Wege gefunden, dll zu finden und keypairtext -Eigenschaften zu verwenden .... dank dynamic keyword

hier ist mein Code unten in aspx Seite dll zu finden und dann, dass die Klassenbibliothek Eigenschaften verwenden ..

Diese Methode Datei zu überprüfen ist und dll ist return boolean Wert

 internal static bool FileOrDirectoryExists(string name) 
     { 
      return (Directory.Exists(name) || File.Exists(name)); 
     } 

existieren und auf meiner Seite zu laden, habe ich Funktion Berichte zu binden, so in folgendem Code, den Sie

string path = Server.MapPath(@"../CustomReports/CustomeReports.dll"); 

     if (FileOrDirectoryExists(path)) 
     { 
      var className = "CustomReports"; 
      var ProductVersion = FileVersionInfo.GetVersionInfo(path).ProductVersion; 
      var assemblyName = "CustomeReports, Version=" + ProductVersion.ToStringIC() + ", Culture=neutral, PublicKeyToken=null"; 
      assembly = Assembly.LoadFrom(path); 

      // ViewState["AssemblyInfo"] = assembly; 
      hdnDLLValue.Value = "1"; 
      string strReportName = "Custom Reports"; 
      object result = null; 
      result = returnDLLObject("GetReportNameList"); 
      int a = SpectraBL.Application.AccessControl.ToInt32IC(); 

      if (result != null) 
      { 
       if (result is IEnumerable) 
       { 
        List<object> list = new List<object>(); 
        var enumerator = ((IEnumerable)result).GetEnumerator(); 
        while (enumerator.MoveNext()) 
        { 
         list.Add(enumerator.Current); 
        } 
        List<dynamic> dynamicList = list.Select(x => (dynamic)x).ToList(); 
        if (dynamicList.Count != 0) 
        { 
         Childnode = new TreeNode("<span id='reportgrp' class='reportmenu label' onclick= OnNodeClick('G','" + strReportName + "','1'); > " + strReportName + " </span>", "Dynamic Reports"); 
         Childnode.SelectAction = TreeNodeSelectAction.None; 
         TreeView1.Nodes.Add(Childnode); 
         for (var i = 0; i < dynamicList.Count; i++) 
         { 
          string strChildName = dynamicList[i].ReportName; 
          if (dynamicList[i].isDisplay) 
          { 
           TreeNode Namenode = new TreeNode(); 
           if (ReportID == dynamicList[i].Reportid) 
           { 
            //With selection on pageload 
            Namenode = new TreeNode("<span id='report" + dynamicList[i].ReportName + "' class='reportmenu label selected' onclick= OnNodeClick('C','" + dynamicList[i].Reportid + "','1'); > " + strChildName + " </span>", strChildName); 
           } 
           else 
           { 
            //Without selection 
            Namenode = new TreeNode("<span id='report" + dynamicList[i].ReportName + "' class='reportmenu label' onclick= OnNodeClick('C','" + dynamicList[i].Reportid + "','1'); > " + strChildName + " </span>", strChildName); 
           } 
           Namenode.SelectAction = TreeNodeSelectAction.None; 
           Childnode.ChildNodes.Add(Namenode); 
          } 
         } 
        } 
       } 
      } 
     } 

hier ist meine returnDLLObject Methode sehen können ... die Instanz von t schaffen er Klasse und Rückgabeobjekt ..

public object returnDLLObject(string MethodName) 
     { 
      string className = "CustomeReports.CustomReports"; 
      object result = null; 
      object classInstance = null; 
      string path = Server.MapPath(@"../CustomReports/CustomeReports.dll"); 

      // if (!FileOrDirectoryExists(path)) 
      assembly = Assembly.LoadFrom(path); 

      if (FileOrDirectoryExists(path)) 
      { 
       try 
       { 
        Type _type_2 = assembly.GetType(className); 
        var methodInfo = _type_2.GetMethod(MethodName); 
        ParameterInfo[] parameters = methodInfo.GetParameters(); 
        classInstance = Activator.CreateInstance(_type_2, null); 
        if (parameters.Length == 0) 
        { 
         result = methodInfo.Invoke(classInstance, null); 
        } 
        else 
        { 
         object[] parametersArray = new object[] { ViewState["nodevalue"].ToStringIC() }; 
         result = methodInfo.Invoke(classInstance, parametersArray); 
        } 
       } 
       catch (Exception ex) 
       { 
        //Error.BLErrorDesc = ex.Message; 
        result = null; 
       } 
      } 
      return result; 
     } 

Wenn Sie irgendeine Frage oder Zweifel haben, dann lassen Sie mich wissen und diskutieren ... Danke ...;)

Verwandte Themen