Call report B but it shows report A

Stimulsoft Reports.Flex discussion
Locked
Super Bread
Posts: 36
Joined: Mon Aug 08, 2011 12:51 am

Call report B but it shows report A

Post 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();				
			}
Vladimir
Posts: 1462
Joined: Fri Apr 13, 2007 4:05 am
Location: Earth

Call report B but it shows report A

Post 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.
Super Bread
Posts: 36
Joined: Mon Aug 08, 2011 12:51 am

Call report B but it shows report A

Post 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;
	}
Vladimir
Posts: 1462
Joined: Fri Apr 13, 2007 4:05 am
Location: Earth

Call report B but it shows report A

Post 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.
Super Bread
Posts: 36
Joined: Mon Aug 08, 2011 12:51 am

Call report B but it shows report A

Post 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();
			}
Vladimir
Posts: 1462
Joined: Fri Apr 13, 2007 4:05 am
Location: Earth

Call report B but it shows report A

Post 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.
Locked