Page 1 of 1

Call report B but it shows report A

Posted: Thu Oct 20, 2011 10:25 am
by Super Bread
When I click the "report B" button, it shows report A. After that, I re-click the "report B" button, it can show report B. Then, I click "report A" button, it still shows report B. Finally, if I re-click "report A" button, it can show report A. Any mistake in my following code? Please help. Thanks.

Code: Select all

			private var rptFile: String = "reports/reportA.mrt";
			private var reportString: String;

Code: Select all

			private function onInitialize(): void
			{
				StiViewerFx.initialize();
				
				var request: URLRequest = new URLRequest(rptFile);
				var loader: URLLoader = new URLLoader();
				
				loader.addEventListener(Event.COMPLETE, onLoadComplete);
				loader.load(request);
			}

Code: Select all

			private function onLoadComplete(event: Event): void
			{
				var loader: URLLoader = event.target as URLLoader;
				reportString = loader.data as String;
			}

Code: Select all

			protected function ReportAButton_clickHandler(event:MouseEvent):void
			{
				rptFile  = "reportA.mrt";

				var request: URLRequest = new URLRequest(rptFile);
				var loader: URLLoader = new URLLoader();
				loader.addEventListener(Event.COMPLETE, onLoadComplete);
				loader.load(request);

				StiViewerFx.initialize();
				var report: StiReport = new StiReport();
				report.loadReportFromString(reportString);
				report.show();				
			}

Code: Select all

			protected function ReportBButton_clickHandler(event:MouseEvent):void
			{				
				StiViewerFx.initialize();
				var report: StiReport = new StiReport();

				rptFile  = "reportB.mrt";
				var request: URLRequest = new URLRequest(rptFile);
				var loader: URLLoader = new URLLoader();
				
				loader.addEventListener(Event.COMPLETE, onLoadComplete);
				loader.load(request);
				
				report.loadReportFromString(reportString);
				report.show();				
			}

Call report B but it shows report A

Posted: Fri Oct 21, 2011 5:03 am
by Vladimir
Hello,

1. Please use the StiViewerFx.initialize() method only one time, it is used to initialize the libraries when the application starts.
2. You have shown the previous report, since the new one has no time to load. Please use the following code:

Code: Select all

            private function onInitialize(): void
            {
                StiViewerFx.initialize();
                
                //var request: URLRequest = new URLRequest(rptFile);
                //var loader: URLLoader = new URLLoader();
                
                //loader.addEventListener(Event.COMPLETE, onLoadComplete);
                //loader.load(request);
            }

Code: Select all

            private function onLoadComplete(event: Event): void
            {
                var loader: URLLoader = event.target as URLLoader;
                reportString = loader.data as String;

                var report: StiReport = new StiReport();
                report.loadReportFromString(reportString);
                report.show();
            }

Code: Select all

            protected function ReportAButton_clickHandler(event:MouseEvent):void
            {
                rptFile  = "reportA.mrt";

                var request: URLRequest = new URLRequest(rptFile);
                var loader: URLLoader = new URLLoader();
                loader.addEventListener(Event.COMPLETE, onLoadComplete);
                loader.load(request);
            }

Code: Select all

            protected function ReportBButton_clickHandler(event:MouseEvent):void
            {
                rptFile  = "reportB.mrt";

                var request: URLRequest = new URLRequest(rptFile);
                var loader: URLLoader = new URLLoader();
                loader.addEventListener(Event.COMPLETE, onLoadComplete);
                loader.load(request);     
            }
Thank you.

Call report B but it shows report A

Posted: Fri Oct 21, 2011 9:29 am
by Super Bread
Thanks for your reply. However, I have other problem after using that code. I have to pass the variable in the reportB.mrt. How can I do that when I call the ReportBButton_clickHandler? I cannot declare the variable in ReportBButton_clickHandler because the report is moved to onLoadComplete. Thank you.

Code: Select all

	for each (var variable: StiVariable in report.dictionary.variables)
	{
		if (variable.name == "vUser") variable.valueObject = agentRptLoan10D.text;
	}

Call report B but it shows report A

Posted: Mon Oct 24, 2011 1:02 am
by Vladimir
Hello,

You can make two different events in the end of reading the report file, it will perform different actions for different reports. Also, you can check which one of reports has been loaded by using the condition:

Code: Select all

if (rptFile == "reportA.mrt")
{
  .....
}
Thank you.

Call report B but it shows report A

Posted: Tue Oct 25, 2011 2:49 am
by Super Bread
It doesn't work. Is it corrected?

Code: Select all

			private function onLoadComplete(event: Event): void
			{
				var loader: URLLoader = event.target as URLLoader;
				reportString = loader.data as String;
				
				var report: StiReport = new StiReport();
				
				if (rptFile == "reportA.mrt")
				{
					for each (var variable: StiVariable in report.dictionary.variables)
					{
						if (variable.name == "vUser") variable.valueObject = agentRptLoan10D.text;
					}
				}
				
				report.loadReportFromString(reportString);
				report.show();
			}

Call report B but it shows report A

Posted: Wed Oct 26, 2011 6:38 am
by Vladimir
Hello,

Please try to load the report before:

Code: Select all

            private function onLoadComplete(event: Event): void
            {
                var loader: URLLoader = event.target as URLLoader;
                reportString = loader.data as String;
                
                var report: StiReport = new StiReport();
                report.loadReportFromString(reportString);
                
                if (rptFile == "reportA.mrt")
                {
                    for each (var variable: StiVariable in report.dictionary.variables)
                    {
                        if (variable.name == "vUser") variable.valueObject = agentRptLoan10D.text;
                    }
                }
                
                report.show();
            }
Thank you.