2010-01-15 34 views
5

¿Cómo puedo cambiar el origen de datos (servidor de base de datos, nombre de usuario, contraseña) que utiliza un informe Crystal en tiempo de ejecución, ejecutándose dentro de un servidor Crystal?Establecer programáticamente el origen de datos para Crystal Report en Crystal Server a través de Crystal Web Services

Tengo un servidor Crystal y he cargado informes que tienen un origen de datos conjunto (SQL Server 2005 alojado en SERVER A, userA, passwordA). Me gustaría programar informes para ejecutar utilizando un origen de datos diferente (SQL Server 2005 alojado en el SERVIDOR B, usuarioB, contraseñaB) del cliente C# que he escrito.

El cliente C# puede programar informes para que se ejecuten dentro del servidor utilizando objetos proporcionados por los servicios web de crystal. He estado usando los siguientes 3 objetos:

BIPlatform 
InfoObject 
CrystalReport 

Documentación sobre estos objetos se puede encontrar HERE

+0

documentación del punto de enlace a Ja ¿Pero etiquetó su pregunta como C# pregunta? –

Respuesta

0

Usted debe tratar de obtener algo de información acerca de la ConnectionInfo Class


CrystalDecisions.Shared.ConnectionInfo myConnectionInfo = 
       new CrystalDecisions.Shared.ConnectionInfo(); 

myConnectionInfo.DatabaseName = "Database"; 
myConnectionInfo.UserID = "Username"; 
myConnectionInfo.Password = "[email protected]"; 

Programmatically Change a Crystal Reports datasource location - en VB pero puede usar una de las herramientas de traducción en línea para convertir de VB a C#:

http://www.developerfusion.com/tools/convert/vb-to-csharp/ http://www.carlosag.net/Tools/CodeTranslator/
http://converter.telerik.com/

+0

La clase ConnectionInfo no está expuesta por el servicio web Crystal. Es una clase contenida en el ensamblado CrystalDecisions.Shared.dll. Necesito una solución que use los objetos del servicio web porque creo que esta es la única forma en que puedo interactuar con los informes ya que están alojados en un servidor web Crystal. – argyle

4

1/30/2018 -Sólo quería añadir que necesitará el archivo DLL CrystalDecisions.ReportAppServer.DataDefModel

que tenían el mismo problema, donde tengo un informe que tiene MS Access conexión de base de datos y que necesitaba cambiar eso a SQL Server, que tardaron 2 días para resolver esto:

  reportDocument = new ReportDocument(); 
      reportDocument.Load(reportFileName); 
      TableLogOnInfo tableLogOnInfo = ReportClass.GetSQLTableLogOnInfo(connectionProperties.DatabaseSource, connectionProperties.DatabaseName, connectionProperties.UserName, connectionProperties.Password); 
      for (int i = 0; i < reportDocument.Database.Tables.Count; i++) 
      { 
       Table table = reportDocument.Database.Tables[i]; 
       table.ApplyLogOnInfo(tableLogOnInfo); 
      } 

    public static ConnectionInfo GetConnectionInfo(string serverName, string   databaseName, string userID, string password) 
    { 
     ConnectionInfo connectionInfo = new ConnectionInfo(); 
     connectionInfo.ServerName = serverName; 
     connectionInfo.DatabaseName = databaseName; 
     connectionInfo.UserID = userID; 
     connectionInfo.Password = password; 
     return connectionInfo; 
    } 

    public static TableLogOnInfo GetSQLTableLogOnInfo(string serverName, string databaseName, string userID, string password) 
    { 
     CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag connectionAttributes = new CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag(); 
     connectionAttributes.EnsureCapacity(11); 
     connectionAttributes.Add("Connect Timeout", "15"); 
     connectionAttributes.Add("Data Source", serverName); 
     connectionAttributes.Add("General Timeout", "0"); 
     connectionAttributes.Add("Initial Catalog", databaseName); 
     connectionAttributes.Add("Integrated Security", false); 
     connectionAttributes.Add("Locale Identifier", "1033"); 
     connectionAttributes.Add("OLE DB Services", "-5"); 
     connectionAttributes.Add("Provider", "SQLOLEDB"); 
     connectionAttributes.Add("Tag with column collation when possible", "0"); 
     connectionAttributes.Add("Use DSN Default Properties", false); 
     connectionAttributes.Add("Use Encryption for Data", "0"); 

     DbConnectionAttributes attributes = new DbConnectionAttributes(); 
     attributes.Collection.Add(new NameValuePair2("Database DLL", "crdb_ado.dll")); 
     attributes.Collection.Add(new NameValuePair2("QE_DatabaseName", databaseName)); 
     attributes.Collection.Add(new NameValuePair2("QE_DatabaseType", "OLE DB (ADO)")); 
     attributes.Collection.Add(new NameValuePair2("QE_LogonProperties", connectionAttributes)); 
     attributes.Collection.Add(new NameValuePair2("QE_ServerDescription", serverName)); 
     attributes.Collection.Add(new NameValuePair2("SSO Enabled", false)); 

     ConnectionInfo connectionInfo = ReportClass.GetConnectionInfo(serverName, databaseName, userID, password); 
     connectionInfo.Attributes = attributes; 
     connectionInfo.Type = ConnectionInfoType.SQL; 

     TableLogOnInfo tableLogOnInfo = new TableLogOnInfo(); 
     tableLogOnInfo.ConnectionInfo = connectionInfo; 
     return tableLogOnInfo; 
    } 
+0

genial ... pero los caracteres árabes se convirtieron en [????] ... cambié el identificador de configuración regional a 3073 ... pero no acción –

1
CrystalReportSource1.Report = new Report { FileName = @"C:\test.rpt" }; 
CrystalReportSource1.ReportDocument.SetDatabaseLogon(user,pass,server,db) 
Cuestiones relacionadas