Technical Articles
SAP Analytics Cloud – Passing URL Parameters between Analytic Applications
This blog post will demonstrate how to pass parameters between two analytics application. Two kind of parameters will be discussed
- Passing data source filter values across applications
- Passing constant value – which can be numeric constant to be leveraged for calculations Or values like SAC Calendar Task Id or user name, values that do not have dimension or variable placeholder in model but still creates necessity to pass the value from one application to other
Consider below application from BestRunJuice sample model. It has below widgets
- Table
- Dropdown with all location names
- Button to navigate to child application
- Radio button to capture the constant value and pass to child application
I – Passing datasource filters to child application
Filtering the table using dropdown selection and passing the same filters to the child application
On Initialization – loading the dropdown with location keys
var location= Table_1.getDataSource().getMembers(“Location_4nm2e04531”);
Dropdown_1.addItem(“Choose Location”,”Choose Location”);
for(var i=0;i<location.length;i++)
{
Dropdown_1.addItem(location[i].id,location[i].description);
}
Dropdown_1.setSelectedKey(“Choose Location”);
On selection of location from dropdown, table’s datasource gets filtered for specific location
Table_1.getDataSource().setDimensionFilter(“Location_4nm2e04531”,Dropdown_1.getSelectedKey())
Filter value is to be passed to child application
Step 1:
Create script variable and check the “Expose Variable via URL Parameter” option
Step 2:
On click of button “Navigate to Trend Analysis”, call below function by passing child application’s application id
Step 3:
Get the filters applied to the table’s data source. In our use case, we are filtering data in table using location drop down
Step 4:
getFilter() is standard reusable function which fetches the filter values. In our use case it is a single value but this function can be leveraged to handle both single and multiple values, range filters and also exclude option
Single Value Filter:
Multi Value Filter
Step 5:
Once filter value is retrieved from getFilter function, create URL parameter
UrlParam_Filters = filterInfo;
var urlParam_Filter1 = UrlParameter.create(“p_Filter”,UrlParam_Filters);
“Filter” is a global script variable in child application. When indicating the same in the URL parameter, it has to be mentioned as “p_Filter”
On selecting the location from dropdown, table gets filtered as below
Below is how parameters get passed via URL parameter
<<SAC tenant URL>>/app.html#/analyticapp&/aa/CAEA94048C8C010DD59CCE953ABCA400/?p_Filter=Location_4nm2e04531$Single$CT13$false$&url_api=true&mode=present&view_id=appBuilding
- CAEA94048C8C010DD59CCE953ABCA400 – child app id
- “Filter” is global script variable in child application
- “Location_4nm2e04531” is the dimension
- “Single” is passed as we are passing single value for location
- Location value – “CT13” is passed
Child Application
As “Portland” location is passed, we see filter applied in the child application for the same.
Script to be included in the Child Application
Step 1:
Create parameter “Filter” with “Expose variable as URL parameter” option
Step 2: Invoke the setFilter function in the initialization script
Step 3: setFfilter function, to capture the filter values from URL, decode the same and apply in target application
Captured filter value is first applied as filter to Table data source. Same is copied to chart.
II – Passing constant values to child application
Value selected from radio button is passed as constant value to child application. As sample scenario, I am passing true/false values to the child application and accordingly changing visibility of table data source in the child application
Step 1:
Create parameter in parent application “p_Visible” with “Expose variable as URL parameter” option checked
Step 2:
Capture the value of radio button. Check line # 14 to 16 in below script. Create UrlParameter
var urlParam_Filter2 = UrlParameter.create(“p_Visible”,p_Visible);
“Visible” is global script variable in child application but it is to be represented as “p_Visible” in the code.
Step 3:
Check the openApplication syntax where we are passing both URL parameters to the child application. One is datasource filter and other is constant value. As we have more than one URL parameters to pass, it is mentioned within square braces
NavigationUtils.openApplication(appID,[urlParam_Filter1,urlParam_Filter2]);
Step 4:
“Visible” is parameter in child application. Based on the value if passed constant parameter value, widgets visibility is controlled
URL with both parameters that gets generated
<<SAC Tenant URL>>/app.html#/analyticapp&/aa/CAEA94048C8C010DD59CCE953ABCA400/?p_Visible=True&p_Filter=Location_4nm2e04531$Single$CT13$false$&url_api=true&mode=present&view_id=appBuilding
Conclusion:
Leveraging this feature, parameters can be passed between analytics applications. This would be useful in multiple use cases
- Instead of complicating single application, functionalities can be split across multiple applications. Like summary page can be maintained in one application and details can be segregated and maintained as different app. In such cases, filters can be passed from summary to detail
- In certain scenarios, there might be a need to maintain a landing page where all required filters can be applied. From landing page, users can travel to main application pages. In such scenarios, URLParameter feature can be leveraged to pass values from landing page to other application pages
- If multiple work files are to be tagged to Calendar Task. Instead of adding multiple work files, main app or landing page can be added as work file. Context values set in task will be applied to landing page. Same can be passed to other work files leveraging this URL Parameter feature. In such scenarios, even the calendar task id can be passed to multiple work files and submission can be done leveraging the Calendar integration feature of analytics application
Reference:
Generic SAC Content : https://blogs.sap.com/2021/05/04/sap-analytics-cloud-sample-content-generic-analysis-application-url-parameter/
Thank you for sharing, this is a helpful reference indeed !
Gives an insight how it differs from Lumira Url parameter. Nice read
Hi, thank you for sharing. So, what if we want to send more than one filters?
For example, I want to send filter values of Location and Store dimension at the same time.
Regards
For this, I would suggest looking into the content provided by SAC and open the example application. That is setup to take all filters from a particular table's data source and iterate around, generating the URL to send across. Works nicely.