Question

J'ai une application Web Forms qui utilise l'authentification des formulaires. J'ai un serveur Crystal Reports Server 2008 V1 avec InfoView .NET installé et fonctionne. J'ai une configuration de comptes d'entreprise. EDIT: Je dois mentionner que mon application Web Forms se trouve sur un autre serveur du serveur Crystal Reports.

J'ai besoin de savoir comment me connecter à InfoView .NET par programmation sur ma page ASP .NET personnalisée (C #), puis transférer l'utilisateur vers InfoView sans qu'il ait à saisir les informations de connexion.

Quelque chose comme ça serait bien (C #):

string username = "blah";
string password = "asdf";

// create logon token for crystal reports server
// .. // this is the code I need
Response.Redirect(url);

J'ai trouvé cette question, ce qui m'amène à mi-chemin, mais cela ne me dit pas comment passer le jeton à infoview .net. Certains documents plus anciens mentionnent également un biscuit. J'ai également trouvé d'autres sites qui montrent comment le passer à Java InfoView, mais j'ai besoin de la version .NET.

Était-ce utile?

La solution

j'ai utilisé ce post comme référence pour cette solution.

Il y a deux pièces à cette solution.

  • Une page dans l'application Web personnalisée pour créer une session CMS
    • Parce que mon application Web connaît l'utilisateur connecté.
  • Une page sur le serveur pour contourner la connexion infoView
    • Parce que mon application Web ne peut pas définir ses session VARS et cookies pour InfoView.

Voici les étapes:

  1. Configurez la page de transfert dans votre application Web.
  2. Copiez une DLL nécessaire sur le serveur.
  3. Configurez la page de contournement du serveur.

Page de transfert

  1. Vous devez installer le SDK du serveur Crystal Reports. Il peut être installé à partir du CD CRYCLAPPORTS Server (il s'appelle Client Tools ou quelque chose de similaire).
  2. Ajoutez une référence de projet à cristaldecisions.enterprise.framework. Définissez-le pour copier local = true.
  3. Créer une page. Ajoutez-y un bouton. Ajoutez un événement OnClick au bouton.
  4. Page Code-Behind Espace Référence:

    using CrystalDecisions.Enterprise;
    
  5. Code d'événement OnClick

    string username = "user";
    string password = "password";
    string server = "CMSNAME:6400";
    string auth_type = "secEnterprise";
    // logon
    SessionMgr session_mgr = new SessionMgr();
    EnterpriseSession session = session_mgr.Logon(username, password, server, auth_type);
    // get the serialized session
    string session_str = session.SerializedSession;
    // pass the session to our custom bypass page on the CRS
    string url = "http://reportserver.domain.com/InfoViewApp/transfer.aspx?session="
    url += HttpUtility.UrlEncode(session_str);
    Response.Redirect(url);
    

Copiez la DLL

  1. Construisez le projet qui contient la page de transfert.
  2. Dans le dossier du projet, sous bin / debug, recherchez le fichier: cristaldecions.enterprise.framework.dll et copiez-le sur le serveur dans: c: Program Files Business Objects BusinessObjects Enterprise 12.0 Web Content infoViewApp infoviewApp bin . Pour Windows 2008 R2, "Fichiers de programme" dans le chemin de la Chemin "Fichiers de programme (x86)" à la place.

Page de contournement

  1. Ouvrez le bloc-notes sur le serveur et collez ce qui suit.

    <%@ Page Language="C#" %>
    <script runat="server">
    private const string SESSION_PARAM = "session";
    private const string SESSION_KEY = "INFOVIEW_SESSION";
    private const string COOKIE_KEY = "InfoViewdotnetses";
    private const string LOGON_URL = "logon.aspx";
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (Request.QueryString[SESSION_PARAM] != null)
            {
                string sessionStrRaw = Request.QueryString[SESSION_PARAM];
                string sessionStr = System.Web.HttpUtility.UrlDecode(sessionStrRaw);
                CrystalDecisions.Enterprise.SessionMgr sessionMgr = new CrystalDecisions.Enterprise.SessionMgr();
                CrystalDecisions.Enterprise.EnterpriseSession entSession = sessionMgr.GetSession(sessionStr);
                BusinessObjects.Enterprise.Infoview.Common.CrystalIdentity identity;
                identity = new BusinessObjects.Enterprise.Infoview.Common.CrystalIdentity(entSession, System.Web.HttpContext.Current);
                HttpContext.Current.Session.Add(SESSION_KEY, identity);
                //Create the InfoViewdotnetses cookie which holds the SerializedSession
                HttpCookie InfoViewdotnetses = new HttpCookie(COOKIE_KEY);
                InfoViewdotnetses.Value = System.Web.HttpUtility.UrlEncode(sessionStrRaw);
                InfoViewdotnetses.Path = @"/";
                Response.Cookies.Add(InfoViewdotnetses);
            }
            Response.Redirect(LOGON_URL);
        }
        catch (Exception ex) { Response.Write(ex.ToString()); }
    }
    </script>
    
  2. Enregistrez la page en tant que transfert.aspx dans: C: Program Files Business Objects BusinessObjects Enterprise 12.0 Web Content InfoViewApp InfoViewApp. (Pour Windows 2008 R2, voir la note ci-dessus.)

C'est ça. C'est ce qui a fonctionné pour moi.

Autres conseils

Cela résoudra votre problème:

Copiez le code sur page_load de l'ASPX pour passer le jeton authentifié au rapport.

    protected void Page_Load(object sender, EventArgs e)
    {
        string username = "user";
        string password = "password";
        string server = "<boe server>";
        string auth_type = "<auth type>";
        // e.g. string auth_type = "Windows AD"

        string token; string tokenEncoded; 

        int reportid = <reportid>; 
        string report_params = "<param1>=<value1>&<param2>=<value2>";

        // logon
        SessionMgr session_mgr = new SessionMgr();
        EnterpriseSession session = session_mgr.Logon(username, password, server, auth_type);

        // create token from session manager
        token = session.LogonTokenMgr.CreateLogonTokenEx("", 120, 100);
        tokenEncoded = HttpUtility.UrlEncode(token);

        // pass the token to the custom bypass page on the CRS
        string url = string.Format("http://{0}/OpenDocument/opendoc/openDocument.aspx?sIDType=wid&iDocID={1}&lsS{2}&token={3}",
            server, reportid, param, tokenEncoded);

        Response.Redirect(url);
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top