Show progress bar during report loading

The whole point is to use system.util.invokeLater and system.util.invokeAsynchronous.
On my template, I created a custom property progressValue:


Then in my template button, I update THAT custom property:

On my window where the template is, that template has now property progressValue:

And the Progress Bar Value property

is binded to that template property:

yes its working fine… but i have scripts in mouse clicked … once its running my window getting hang and once its fully executed i am getting data in report. so only asked whether its possible use your script in-between in my script…

It doesn’t matter if it is in actionPerformed or mouseClicked.
The point is that YOU must construct your button script inside a function (like I did; def longProcess)
and then call that function at the end with system.util.invokeAsynchronous.
Inside your function, you must use system.util.invokeLater to update the template custom property.

Ok thanks i will try out

Maybe something like this:

def longProcess(rootContainer = event.source.parent):
	SelectedReport = system.tag.read("[default]Common/Dynamic Report/Selected_Report").value
	plantname = system.tag.read("[client]Plant_Name").value
	Header_kWh = system.tag.read("[default]Common/Dynamic Report/Report_header_m2_MeterConsumption").value
	Header_kWhTON = system.tag.read("[default]Common/Dynamic Report/Report_header_kWhTON_MeterConsumption").value
	plant = plantname.replace(" Line", "")
	params = {"plantname":plantname}
	Database = system.db.runNamedQuery(project = "Metriks_Dev", path = "EMS/EM_DynamicReport_DB_Select", parameters = params)
	Database = Database.getValueAt(0,0)
	Unit =  event.source.parent.getComponent('Dropdown_Unit').selectedStringValue
	if SelectedReport == "Meter Consumption Report" and plantname!= "Robertsbridge Line":
		first = event.source.parent.getComponent('Popup Calendar_StartDate').date
		second = event.source.parent.getComponent('Popup Calendar_EndDate').date
	
		start = event.source.parent.getComponent('Popup Calendar_StartDate').date
		event.source.parent.parent.StartDate = start
		end = event.source.parent.getComponent('Popup Calendar_EndDate').date
		event.source.parent.parent.EndDate = end
		endTime = second
		startTime = first
		ReportDS = system.tag.read('[default]Common/Dynamic Report/Report_header_name').value
		ReportDS = system.dataset.clearDataset(ReportDS)
		if Unit == 'kWh':
			TagUnit = 'Total_Consumption_kWh'
			path = "EMS/EM_DynamicReport_kwhm2_MeterConsumption"
			system.tag.write('[default]Common/Dynamic Report/Report_header_MeterConsumption',Header_kWh)
		if Unit == 'kWh/T':
			TagUnit = 'Total_Consumption_kWh_TON'
			path = "EMS/EM_DynamicReport_kwhTON_MeterConsumption"
			system.tag.write('[default]Common/Dynamic Report/Report_header_MeterConsumption',Header_kWhTON)
	
					
		Site_Electric = '[MQTT Engine]Edge Nodes/'+plant+'/Energy/Reports/Static Reports/Electric/Total_Consumption/'+TagUnit+''
		params = {"database":Database, "tagpath": Site_Electric, "startDate":startTime,"endDate":endTime}
		print '...site electric.....'
		print params
		dataSet = system.db.runNamedQuery(project = "Metriks_Dev", path = path, parameters = params)
		delta = dataSet.getValueAt(0, 0)
		print delta
		newRow = ["Site_Electric","-","-","-",delta]
		ReportDS = system.dataset.addRow(ReportDS, newRow)
		Path = '[MQTT Engine]Edge Nodes/'+plant+'/Energy/Reports/Static Reports/Electric/'
		results = system.tag.browse(Path, {"tagType":"Folder","recursive":False}).results
		for result in results:
			if result.get("name"):
				Workshops = str(result['name'])
				Path = '[MQTT Engine]Edge Nodes/'+plant+'/Energy/Reports/Static Reports/Electric/'+Workshops+'/Total_Consumption/'+TagUnit+''
				params = {"database":Database, "tagpath": Path, "startDate":startTime,"endDate":endTime}
				dataSet = system.db.runNamedQuery(project = "Metriks_Dev", path = path, parameters = params)
				delta = dataSet.getValueAt(0, 0)
				newRow = [Workshops,"-","-","-",delta]
				ReportDS = system.dataset.addRow(ReportDS, newRow)
				Path = Path = '[MQTT Engine]Edge Nodes/'+plant+'/Energy/Reports/Static Reports/Electric/'+Workshops+'/'	
				Workshop = system.tag.browse(Path, {"tagType":"Folder","recursive":False}).results
				for result in Workshop:
					Areas = str(result['name'])
					Path = '[MQTT Engine]Edge Nodes/'+plant+'/Energy/Reports/Static Reports/Electric/'+Workshops+'/'+Areas+'/Total_Consumption/'+TagUnit+''
					params = {"database":Database, "tagpath": Path, "startDate":startTime,"endDate":endTime}
					dataSet = system.db.runNamedQuery(project = "Metriks_Dev", path = path, parameters = params)
					delta = dataSet.getValueAt(0, 0)
					newRow = ["-",Areas,"-","-",delta]
					ReportDS = system.dataset.addRow(ReportDS, newRow)
					Path = '[MQTT Engine]Edge Nodes/'+plant+'/Energy/Reports/Static Reports/Electric/'+Workshops+'/'+Areas+'/'	
					Area = system.tag.browse(Path, {"tagType":"Folder","recursive":False}).results
					for result in Area:
						ProcessSteps = str(result['name'])
						Path = '[MQTT Engine]Edge Nodes/'+plant+'/Energy/Reports/Static Reports/Electric/'+Workshops+'/'+Areas+'/'+ProcessSteps+'/Total_Consumption/'+TagUnit+''
						params = {"database":Database, "tagpath": Path, "startDate":startTime,"endDate":endTime}
						dataSet = system.db.runNamedQuery(project = "Metriks_Dev", path = path, parameters = params)
						delta = dataSet.getValueAt(0, 0)
						newRow = ["-","-",ProcessSteps,"-",delta]
						ReportDS = system.dataset.addRow(ReportDS, newRow)
						Path = '[MQTT Engine]Edge Nodes/'+plant+'/Energy/Reports/Static Reports/Electric/'+Workshops+'/'+Areas+'/'+ProcessSteps+'/'			
						PS = system.tag.browse(Path, {"tagType":"Folder","recursive":False}).results			
						for result in PS:
							Equipments = str(result['name'])
							Path = '[MQTT Engine]Edge Nodes/'+plant+'/Energy/Reports/Static Reports/Electric/'+Workshops+'/'+Areas+'/'+ProcessSteps+'/'+Equipments+'/Total_Consumption/'+TagUnit+''
							params = {"database":Database, "tagpath": Path, "startDate":startTime,"endDate":endTime}
							dataSet = system.db.runNamedQuery(project = "Metriks_Dev", path = path, parameters = params)
							delta = dataSet.getValueAt(0, 0)
							newRow = ["-","-","-",Equipments,delta]
							ReportDS = system.dataset.addRow(ReportDS, newRow)
							
							progress = ??????????????
							#Here is progress send back to the template custom property
							#progress must be calculated somewhere before this call
							def sendBack(progress = progress, rootContainer = rootContainer):
								rootContainer.progressValue = progress
							# Now we'll send our results back to the UI.
							system.util.invokeLater(sendBack)
							
						system.tag.write('[default]Common/Dynamic Report/Report_header_name',ReportDS)
						window = system.gui.getParentWindow(event)
						window.getComponentForPath("Root Container.Report Viewer").reportPath = '' 
						window.getComponentForPath("Root Container.Report Viewer").reportPath = 'Meter Consumption Report'

system.util.invokeAsynchronous(longProcess) #Note that this is 'longProcess' instead of 'longProcess()'

But you must find the place where and how to calculate the progress and what it will represent…

Another way of doing it is to use the animation features of the Progress Bar and let it continuously cycle until the long running process is complete.

Add a custom property ‘ShowProgress’ to the Progress Bar.
Then setup the Styles property something like this:

Then run this code:

def Complete():
	# stop the progress bar animation
	event.source.parent.getComponent('Progress Bar').ShowProgress = False

def RunTask():
	import time
	# long running task
	time.sleep(3)
	system.util.invokeLater(Complete)

# start the progress bar animation
event.source.parent.getComponent('Progress Bar').ShowProgress = True
system.util.invokeAsynchronous(RunTask)

Psst! There's an "Indeterminate" setting for that...

True. There’s always a few options to achieve the same thing. The code is the same and that’s the point I was trying to make.