Skip to Content
Technical Articles
Author's profile photo Anurag Kumar

Master Data (Hierarchies & Attributes) Maintenance Analytic Application – SAP Analytics Cloud

Context:

The Idea behind this blogpost is to create a Master Data Maintenance User Interface which can be used as the only place for Creating, Updating & Deleting attribute values & maintaining Hierarchies (Parent-Child) and commiting them in the master data of the dimension automatically, sidelining the need to achieve these from Model every time.

Prerequisites:

  • A Planning Model with Generic Dimension with Attributes and HierarchiesPlanning%20Model
  • Planning Model Object needs to be created under “Planning Models” section in Analytic Designer

Planning%20Model%20Object

Planning Model Object

  • A Mandatory Global Script Variable of type “PlanningModelMember” needs to be created for capturing the values of all properties of the Dimension Member(s) and using as Parameter for Planning APIs – createMembers(), updateMembers(), deleteMembers()
    • Here in this blog, g_properties & g_properties_1 are the variables of type PlanningModelMember which has been used in the scripts below.

Steps:

1 – Creating Layout

Here, Dropdowns and Input fields widget has been used for Parent Node, Child Node , Members and its attributes for all the CRUD activities.

Master%20Data%20Maintenance%20UI

Master Data Maintenance UI

2 – Script Functions

Create Script Functions to:

  • Fetch All Unique Parents and populate them in respective Parent Node Dropdown & make one as default selection
  • Fetch all relevant Child Nodes only for selected Parent Node in the above Dropdown and populate them in the Child Node Dropdown
  • Fetch all other attributes value for the selected Child Node Member ID and populate them in Input Field or set them as Dropdown selection (wherever Dropdown has been used for attributes)

 

Script snippet for getting Parents:

Get%20Parents%20-%20Script%20Snippet

Get Parents – Script snippet

 

Script snippet for getting Child Node Members:

Get%20Childs%20-%20Script%20snippet

Get Childs – Script snippet

 

Since, Dropdown has been used for selection during “Update” Mode for few attributes of dimension, respective Dropdown needs to be populated with attribute values

Note – For performance optimization, Dropdown “Data Source Type” can be set as Script Variables and you can bind Dropdown to the script variable (or) Dropdown “Data Source Type” can be set as Manual Input and populate them via Scripts Manually as below:

Populate%20Attribute%20Dropdowns

Populate Attribute Dropdowns

 

Script snippet for getting other attributes value for selected Child Node Member ID

Attributes List:

  • Price Type
  • Product Type
  • Category
  • Description

Get%20Attribute%20Values%20for%20selected%20Child%20Node

Get Attribute Values for selected Child Node

 

3 – Application onInitialization():

At the Application Initialization, write below script to populate and set the Member and Attribute Values

Application%20-%20OnInitialization

Application – OnInitialization

 

4 – onSelect() of Dropdown for Parent Node

Write the Script to call script functions to get Child Nodes for the selected Parent and then populate other attribute values by calling script functions for others

Parent%20Node%20Dropdown%20onSelect%28%29

Parent Node Dropdown onSelect()

 

5 – onSelect() of Dropdown for Child Node

Write Script to call script function to populate other attribute values for selected Child Node

Child%20Node%20Dropdown%20onSelect%28%29

Child Node Dropdown onSelect()

 

6 – onClick() of “Update” on the Toolbar

Write Scripts to enable Input Field widgets as Editable using InputField_X.setEditable(true)  API & show Dropdowns for attributes  wherever required for selection.

7 – onClick() of “Finish” for Update Mode

  • Get the values for all attributes form Input fields and Dropdowns. Example below:
var l_price_type = Dropdown_Price_Type.getSelectedKey();
var l_Description = InputField_Description.getValue();
  • Capture attributes values in a PlanningModelMember variables created in the beginning:
g_properties =({id:l_gg_child, description:l_Description,hierarchies: {H1:{parentId:g_dd_parents_servID}}, properties:{Category:l_category,Price_Type:l_price_type,Product_Type:l_prod_type}});
  • Use updateMembers() API to update Planning Model Dimension as below:
var result = Product_Model.updateMembers("Product_Dim", g_properties);
if(result)
{
Application.refreshData();
Application.showMessage(ApplicationMessageType.Success,"Application" + " " + Application.getInfo().description + "has been successfully updated with new master Data" + " " + 			Application.getUserInfo().displayName);

}

 

8 – onClick of “Create” on the Toolbar

Write below script to open Popup_1 for selecting options either to create a “New Parent Node” or “Child Node” for existing Parent Node.

if(Image_update.isVisible() === true)
	{
if(Image_create.isVisible() === true)
	{
		Popup_1.open();
        }
else if(Image_Update_close.isVisible() === true)
	{
	Application.showMessage(ApplicationMessageType.Warning,"Update Mode On - Creating new master data is not allowed while in Update Mode !!");
	}
}

Popup_1 would provide the option to start by creating New Parent Node or Child Node for existing Parent Node:

Popup_1

Popup_1

  • For Parent Member:
if(buttonId === "Button_Parent")
	{
		Popup_2.open();
		InputField_parent_pop.setCssClass("myifield");
		InputField_parent_pop.setValue("");
	}

 

Popup_2 would let you create a New Parent:

Popup_2%20for%20Parent%20Creation

Popup_2 for Parent Creation

 

    • onClick of Finish Button form Popup_2

Create%20Parent

Create Parent

 

Note – At the initial, a New Parent Node would not have any Child Node. So While creating Parent Node , “None” flags that No Child is there against this newly created Parent

  • For Child Member:

Write Scripts to Show Input Fields wherever applicable as per requirement and set them as Editable(true) and show Dropdowns as true wherever Selection is required from existing values.

Note: Mandatory Fields checks can also be implemented using CSS and scripts can be implemented to throw message when any mandatory fields are left blank upon committing

 

9 – onClick of “Finish” for Create Mode

  • Get the values for all attributes from Input fields and Drop downs. Example below:
var l_price_type = Dropdown_Price_Type.getSelectedKey();
var l_Description = InputField_Description.getValue();
  • Capture attributes values in a PlanningModelMember Variables created in the beginning as below:
g_properties =({id:l_gg_child, description:l_Description,hierarchies: {H1:{parentId:g_dd_parents_servID}}, properties:{Category:l_category,Price_Type:l_price_type,Product_Type:l_prod_type}});
  • Use createMember() API to create a New Child Node Member ID with attribute values as below.

Note: If Child Member is being created for a newly created Parent Node, “NONE” Child Node which was created at the time of creating the New Parent Node, needs to be deleted.

var result = Product_Model.createMembers("Product_Dim",g_properties);
var result_1 = Product_Model.deleteMembers("Product_Dim","NONE");

if(result || result_1)
	{
	Application.refreshData();
	Application.showMessage(ApplicationMessageType.Success,"Application" + " " + Application.getInfo().description + "has been successfully updated with new master Data" + " " + Application.getUserInfo().displayName);
}
  • Write Scripts to call existing functions to fetch and populate Dropdowns with newly added Child and attribute values, Show and Hide Dropdowns as applicable, set Input Fields Editable as False, Set CSS for all widget as not defined / as was on initialization etc.

 

10 – onClick of “Delete” on Toolbar

To delete any selected Child Node Member ID , write the below script:

Popup_3 below is a warning popup before confirming deletion.

  • onClick of Proceed Button:

Deletion%20Script

Deletion Script

 

Conclusion:

Referring above scenario and Layout & depending upon real-life scenario, above scripts and logic can be adjusted to cater the need of the requirement such as using Flow Layout Panel for responsiveness and Dropdown data source types as scripts variables for better performance etc.

Master Data Maintenance User Interface enables Business Users to directly create, update, analyze & delete master data from a single UI rather than going into Model each time for the same.

Note : Furthermore, Security can also be implemented on this for different User Types – Read only, Update only, Create only etc via different Teams created for such user types and building logic on that in Application.

For more information & help please refer SAP API Reference

 

Regards

Anurag Kumar

Assigned tags

      6 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Sukanya Krishnan
      Sukanya Krishnan

      Nice blog! Very informative.

      Author's profile photo Anurag Kumar
      Anurag Kumar
      Blog Post Author

      Thanks Sukanya

      Author's profile photo Afshin Irani
      Afshin Irani

      Hi,

      It would be great help if you do have a github repository for all the code in the blog.

      Great Job nevertheless.

      Thanks

      Afshin

      Author's profile photo Siddharth Singh
      Siddharth Singh

      Great Work!!!

      Author's profile photo Vaibhav Lokhande
      Vaibhav Lokhande

      great post... very useful

      Author's profile photo Abilash Agasthireddy
      Abilash Agasthireddy

      Hi @anurag30_, Great post. Keep up the good work. I am non-technical and interested in testing this. Is it possible to share the complete script? Thanks.