Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations TouchToneTommy on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Navigation among reorts through hyperlink

Status
Not open for further replies.

AurobindoSaha

Programmer
Mar 11, 2004
57
US
Here's problem:

User is in Report A. Report A has 3 groups. On each stage of Drill down each group is displayed. Clicking on the last drill level User goes to Report B.

User is now in Report B. Everything is fine upto this point.
Now User clicks a link on the top in report B to go to a specific group level of Report A. Here lies the problem. The user goes to Report A, but not to the specific drill level of Report A. Cliking in an intermediate group level link of Report A from Report B always takes the user to the top level of Report A

Any solution for this?

Here's the page that runs on clicking the link in report B to go to a intermediate group level of Report A



runreport.csp

<%@ language=JavaScript codepage=65001%>
<!-- #include file="helper_js.csp" -->
<!-- #include file="checksession_js.csp" -->

<%

function replace(string,text,by) {
// Replaces text with by in string
var strLength = string.length, txtLength = text.length;
if ((strLength == 0) || (txtLength == 0)) return string;

var i = string.indexOf(text);
if ((!i) && (text != string.substring(0,txtLength))) return string;
if (i == -1) return string;

var newstr = string.substring(0,i) + by;

if (i+txtLength < strLength)
newstr += replace(string.substring(i+txtLength,strLength),text,by);

return newstr;
}


function GetViewerType()
{
var Viewer;
switch(GetSubCookie("eportfolio_prefs","vwr"))
{
case 0:
Viewer = "actx";
break;
case 1:
Viewer = "html_frame";
break;
case 2:
Viewer = "html_page";
break;
case 3:
Viewer = "java";
break;
case 4:
Viewer = "java_plugin"
break;
case 5:
Viewer = "nav_plugin";
break;
default:
Viewer = "html_frame"
break;
}

return (Viewer);
}




function CEGetFolderIdByName(infoStore,FolderName)
// this function gets the folder id by it's name.
{
var sSQL;
var oResult;
var iFolderID;
var rsResults;

sSQL = "SELECT * FROM CI_INFOOBJECTS where SI_PROGID ='CrystalEnterprise.Folder'";
/////// Response.write(sSQL +"<br>");
sSQL= sSQL + " and SI_NAME = '" + FolderName + "'";

/////// Response.write(sSQL);
rsResults = infoStore.Query (sSQL);
/////// Response.write("<br>"+ rsResults.Count);
if (rsResults.count >= 1)
{
oResult = rsResults.item(1);
iFolderID = oResult.ID;
}
/////// Response.write("<br>"+iFolderID);
return(iFolderID);
}


function CEGetReportIDByName(infostore,FolderID,ReportName,p_iInstance)
{

var sSQL;
var iReportID;
var rsResults;
var oResult;

sSQL = "SELECT * FROM CI_INFOOBJECTS where SI_PROGID ='CrystalEnterprise.Report'";
sSQL+= " and SI_NAME = '" + ReportName + "' ";
sSQL+= " and SI_INSTANCE=" + p_iInstance;

/////// Response.Write("<br>Report Name="+ ReportName+"<br>FolderId = "+FolderID);

if (FolderID != 0)
sSQL += " AND SI_PARENT_FOLDER = " + FolderID;


/////// Response.Write("<br>"+ sSQL);
rsResults = infostore.Query (sSQL);

/////// Response.write( "<BR>"+rsResults.Count);

if (rsResults.count >= 1)
{
oResult = rsResults.item(1);
iReportID = oResult.ID;
}
/////// Response.write( "<BR>"+iReportID);
return(iReportID );
}


function GetLatestReportInstance (oInfoStore, p_sReportName, p_FolderId)
{
var sSQL;
var oResult;
var iInstanceID ;
var rsResults;
/////// Response.Write("<br> In Get Latest Instance");

sSQL = "SELECT * FROM CI_INFOOBJECTS WHERE SI_PROGID = 'CrystalEnterprise.Report' AND SI_INSTANCE = 1 AND SI_NAME = '" + p_sReportName + "'";
sSQL = sSQL + " AND SI_PARENT_FOLDER = " + p_FolderId;

/////// Response.Write("<br>"+ sSQL);

rsResults = oInfoStore.Query (sSQL) ;

oResult = rsResults.item(rsResults.count);

iInstanceID = oResult.ID;

return(iInstanceID);

}


function CEReportURLBasic ()
{
// This function will create the basic report URL with APS token. Rest of the parameters will be added as and when needed.
var sBasicURL;
// sBasicURL = "viewrpt.cwr?apstoken=" + Server.UrlEncode(GetCookie("ePortfolio_logontoken")) + "&init=" + GetViewerType() +"&id=" + p_iReportID;
// sBasicURL = "viewrpt.cwr?apstoken=" + GetCookie("ePortfolio_logontoken") + "&init=" + GetViewerType() +"&id=" + p_iReportID;
sBasicURL = "viewrpt.cwr?apstoken=" + Server.UrlEncode(GetCookie("ePortfolio_logontoken"));
/////// Response.Write("<br>"+sBasicURL);
return(sBasicURL);
}


var strRedirect;
var GF;
var iStore;
var strToken;
var strReportName;
var strFolderName;
var GF;

Response.Expires=1;

iStore = CheckSession(false);

strReportName = Request.QueryString.Item("REPORTNAME");
strFolderName = Request.QueryString.Item("FolderName");
GF=Request.QueryString.Item("gf");

/////// Response.Write("<BR>"+GetCookie("ePortfolio_logontoken")+"<br>");

// I will put this code back for the logon token.
//*******************************************************************************************************************
var strToken = "";
var strViewer = "";
if( iStore && typeof(iStore) == "object" )
{
strToken = GetCookie("ePortfolio_logontoken");
if(strToken == "")
{
try
{
var ltm = iStore.EnterpriseSession.LogonTokenMgr;
strToken = ltm.CreateLogonTokenEx("", 480, -1);
SetCookie("ePortfolio_logontoken", strToken);
}
catch(e)
{
// just continue on, the viewer will ask for logon if there's no token
}
}
// strViewer = GetViewer();
}
//*******************************************************************************************************************
///////Response.Write("<BR>"+strToken+"<br>");


// Get the Folder id first
iFolderID = CEGetFolderIdByName(iStore,strFolderName);

/////// Response.Write("<br>"+ iFolderID);
iStore = CheckSession(false);

iReportID=CEGetReportIDByName(iStore,iFolderID,strReportName,0);

// Keep on generating the URL as and when we proceed.
var sURL=CEReportURLBasic();
/////// Response.Write("<br>"+ sURL + "<br>");

// Adding the viewer in the url

var viewer = GetViewerType();

// checking if we need to add connect in the viewer or not based on the gf parameter in the query string
if(String(GF)=='undefined')
{
viewer+=":connect";
}
else
{
var iReportID = GetLatestReportInstance(iStore,strReportName,iFolderID);
}
// Here the code needs to be changed so that we can create the viewer object and then use ParameterFieled Object
// for changing the parameter values in the report.


EnsureImageCleanerIsRunning();
viewer1 = Server.CreateObject( "CrystalReports.CrystalReportViewer" );
// Response.Write("<br> Viewer object created");
//*******************************************************************************************


var rptSrcFactory = iStore.EnterpriseSession.Service ("", "RASReportFactory");
var oReportClientDoc = rptSrcFactory.OpenDocument(iReportID);

var rptFields = oReportClientDoc.DataDefinition.ParameterFields;

/////// Response.Write("<br>"+rptFields.count);

var ObjFactory = Server.CreateObject("CrystalReports.ObjectFactory");

var parameterfield = ObjFactory.CreateObject("CrystalReports.ParameterField");
var parameterfieldvalue = ObjFactory.CreateObject("CrystalReports.ParameterFieldDiscreteValue");
var value = ObjFactory.CreateObject("CrystalReports.ParameterFieldDiscreteValue") ;

for (var i=0;i<rptFields.count;i++)
{
/////// Response.Write("<br>" + rptFields.Item(i).Name + "="+ Request.QueryString(rptFields.Item(i).Name) + " Type = " + rptFields.Item(i).Type);
rptFields.Item(i).CopyTo(parameterfield);

switch(parameterfield.Type)
{

case 6: //Number type Parameter
value = Number(Request.QueryString(rptFields.Item(i).Name));
break;
case 11:// String Type Parameter
value = String(Request.QueryString(rptFields.Item(i).Name));
break;
case 15:// Date type Parameter
value = Request.QueryString(rptFields.Item(i).Name);
break;
case 9:// Date type Parameter

value = String(Request.QueryString(rptFields.Item(i).Name));

if (value == 'undefined') {
//if the querystring value is undefined we'll get it from the defaultvalues
value = rptFields.item(i).DefaultValues.Item(0).value;
}
else
value = Request.QueryString(rptFields.Item(i).Name);

break;

}
/////// Response.Write("<br>Modifying Current Value Now");
parameterfield.CurrentValues.Add(value);
/////// Response.Write("<br>Modifying Value Now");
oReportClientDoc.DataDefController.ParameterFieldController.Modify (rptFields.Item(i),parameterfield);

}

var viewer1 = Server.CreateObject( "CrystalReports.CrystalReportViewer" );
Session.Value("oReportClientDoc") = oReportClientDoc;
Response.Redirect("viewrpt2_viewer.csp?gf="+GF);


%>


Through a hyperlink the user goes
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top