Skip to Content

Like last time, I’ll give the community a brief overview of the new and improved topics in the SDK for Design Studio 1.5.

While in 1.4 there were many new features to announce, this time we focused on smaller improvements – following the suggestions from the community.

Display Attributes

You might know that the axes of a cross table does not only contain dimensions and their members, but also display attributes – or shortly attribute. A dimension “ShopCity” might have the attributes “Latitude” and “Longitude” – and accordingly the member “London” has the attribute members “51.5” and “-1.5”.

Attributes are part of the result set if they are activated, e.g. in Query Designer. In this case the Crosstable shows additional columns or rows – right beside/below the member presentation (key, text) column(s) or row(s).

In 1.5 SDK components can request attributes and attribute members with the property option


<option name="includeAttributes" value="true"/>.

At runtime in the SDK result set JSON, you receive the activated attributes as part of the dimension metadata, and the attribute members as part of the member metadata. The following data snipped uses attributes for country and postcode on the customer number dimension.



{
            "key":"0BC_CUST",
            "text":"Kundennummer",
            "axis":"ROWS",
            "axis_index":0,
            "attributes":[
             {
              "key":"0BC_COUN",
              "text":"Land"
             },
             {
              "key":"0BC_POST",
              "text":"Postleitzahl"
             }
            ],
            "members":[
               {
              "key":"000001",
              "text":"Techno\x20Graph\x20Ltd.",
              "level":3,
              "attributeMembers":[
               {
                "key":"US",
                "text":"US\x7cVereinigte\x20Staaten"
               },
               {
                "key":"0000054323",
                "text":"54323"
               }
              ]
             },
...

The Simple Crosstab sample has been extended to display attributes and there members in extra columns – just like the “real” Crosstab.

Conditional Formatting aka Exceptions

The second frequently requested feature is Conditional Formatting – also known as “Exceptions”. The Query contains conditions under which some values of a result set should be formatted, e.g. critical numbers should be shown in red.

Again, you can request the feature with an option:

<option name="includeConditionalFormats" value="true"/>

Now you need a result set with some Exception definition. You could e.g. specify some exceptions in A-Office and smart-paste the query to Design Studio.

In this case your would get the available exception types as new metadata property:


"conditionalFormats":[
           {
            "key":"LocalException\x2d1",
            "text":"Conditional\x20Formatting\x201",
            "com.sap.ip.bi.bics.exception":{
             "FORMATTYPE":"4"
            }
           },
           {
            "key":"LocalException\x2d2",
            "text":"Conditional\x20Formatting\x202",
            "com.sap.ip.bi.bics.exception":{
             "FORMATTYPE":"16"
            }
           },
           {
            "key":"LocalException\x2d3",
            "text":"Conditional\x20Formatting\x203",
            "com.sap.ip.bi.bics.exception":{
             "FORMATTYPE":"8"
            }
           },
           {
            "key":"LocalException\x2d4",
            "text":"Conditional\x20Formatting\x204",
            "com.sap.ip.bi.bics.exception":{
             "FORMATTYPE":"2"
            }
           }
          ]
...

And as part of the data, you receive a new array with the same length as the data array:


"conditionalFormatValues":[
           null,
           null,
           null,
           null,
           null,
           null,
           {
            "LocalException-1":1
           },
           null,
           null,
           {
"LocalException-1":1,
            "LocalException-3":2
           },
           ...,

As you see, not all cells have exceptions – and some have multiple. What you do with the numbers is up to you. The Simple Crosstab again has been extended to behave similar to the standard Crosstab and add some exception-specify CSS classes – which can be used to change background color or attach some icon to the cell.

Configurable Cell Limit

Another frequently requested “feature” was the increase of the cell limit to higher values than 10.000 cell. Now – the cell limit is in fact not a missing functionality, but a safety belt to you as component author and you customers – to avoid JSON transfer volume that can hurt stability and performance of customer’s apps, browsers and servers.

But in cases where an SDK component has been tested successfully with a certain number of cells, the author can specify a cell limit that is good for his or her component. The setting is per data-bound property:


<option name="maxCells" value="15000"/>

If wrongly used such option could influence a whole BIP system. Therefore we have a new admin parameter AAD_SDK_MAX_CELLS which has a default value 50.000. Administrators can change it to higher or lower value, e.g. by changing the RSADMIN table for NetWeaver or adding a JVM argument “-DAAD_SDK_MAX_CELLS=<somesthing>. The lower of the SDK-component specific option and the admin parameter is used at runtime to decide if the error message “Too much data” should be displayed.

Improvements for SAPUI5 Components

For SAP Components build in the “SAPUI5” handler type, two missing feature were added to correspond to the same functionality in “DIV”-components:

  • The API fireDesignStudioPropertiesChangedAndEvent saves roundtrips if you both update property values and trigger a script event.
  • The API callRuntimeHandler from Additional Property Views will not correctly call the specified function in the SAPUI5 control.

Better Data Selection Tool

The Data Selection feature for SDK components and charts was always quite powerful. Unfortunately the UI in the Designer to configure such selections was not able to unleash all the features. Now we have a new Data Selection tool. Depending on the property type (selectionShape option), it supports all kinds of carthesian selections, including checkerboard stile. And it even works with custom data sources!

SelectionTool.png

Property Binding

One of bigger features in release 1.5 is the possibility to bind potentially any property of any component to data from a result set – without scripting. This feature is inspired by the Excel cell binding in Xcelsius. I will probably write and extra blog describing the feature and the concepts behind.

SDK components can also leverage the feature. But as only the author of a component knows if binding a property makes sense and will work, it has to be enabled. This is easy – just set the new “bindable” attribute to true:


<property
  id="color"
  title="Color"
  type="Color"
  group="Display"
  bindable="true"/>

Multiple Data Sources for one SDK Component

A nice side effect of the property binding features now allows and SDK component to consume data from multiple data sources.

Just define multiple databound properties (type e.g. ResultCellSet) and make it bindable. Afterwards users can use the property binding UI to assign selections from the same or different data source. Selections could of course select an entire result set. This concept makes effectively the “databound” attribute and the implicit property “DATA_SOURCE_ALIAS_REF” obsolete, as a property binding for a databound property forms the combination of a data source and a data selection.

Base on these techniques I have created a new sample: The ScalingDataSource takes the result set from another data source (e.g. from BW or HANA) and scales some of the data values bases on a second data selection. It also shows some changes in the SDK DataBuffer to customize some of its data selection features.

Corrections

The advanced features for Even Binding and “onBeforeRender” had some problem which are now solved:

  • The annotation @Visibility(private) now works as intended.
  • The event “onBeforeRender” happens a bit earlier in a phase where also some modifying operations are allowed. The mentioned function “getMembers()” had some issues in release 1.4.

Incompatible Changes

Unfortunately we had to do some changes that could break existing SDK extensions. But is should be simple to fix them.

  • The popular library underscore.js is now always included in the page. Thus please remove it from your extension.
  • The trick to load static resources with $(“script:last”).attr(“src”) doesn’t work anymore. Reason is the performance-optimized page and script loading. As alternative we have a new API: The function sap.zen.createStaticSdkMimeUrl(sdkExtensioId, relativePath) will give you ready-use URLs for all supported platforms. E.g. to correct the sample you would use the following snippet:

    var imageUrl = sap.zen.createStaticSdkMimeUrl(“com.sap.sample.coloredbox.ColoredBox”, “res/css/img/Desert.jpg”);
    var image = $(“<img/>”).width(“100%”).height(“100%”).attr(“src”, imageUrl);

Experimental Feature: Direct and SDK Extension directly from JAR File

Finally there is a little experimental feature in the “Install Extension to Design Studio…” dialog. If you are choosing a file with extension “JAR”, it will try to install it directly. This means that you don’t need a “Deployable Feature” or “Eclipse Update Site” to install a single extension. Theoretically you could just use a ZIP tool to compress the source structure – and change the extension to “JAR”. But please be warned: this is not any officially supported feature – and can fail. We could also change or remove the feature in future versions. Commercial extensions must ship in form of an “Eclipse Update Site”.

Ok, that’s all for 1.5 – if I didn’t forget to mention something. As usual – I’m looking forward to you comments and suggestions.

To report this post you need to login first.

19 Comments

You must be Logged on to comment or reply to a post.

    1. Reiner Hille-Doering Post author

      Thanks Jonas!

      And I didn’t even mention the option that we did already do for you guys in 1.4SP1:

      allDataOnEmptySelection If true then an empty selection string ("" or {}) set to this data-bound property returns the entire result set in the Metadata and Data Runtime JSONs. If false then an empty selection string ("" or {}) set to this data-bound property returns a Metadata Runtime JSON with no dimension information and an empty Data Runtime JSON ("").
      (0) 
  1. Mustafa Bensan

    Hi Reiner,

    These are great enhancements for the SDK!  Thank you for delivering them and for considering submissions from the Idea Place.  My favourites in particular are:

    • Configurable Cell Limit
    • Improvements for SAPUI5 Components
    • Property Binding
    • Multiple Data Sources for one SDK Component

    The Display Attributes and Conditional Formatting features are a nice bonus too 🙂 .

    I have a couple of questions for clarification:

    1. I think the new API to replace the trick to load static resources is a much cleaner alternative.  I assume that for testing purposes this API will also work in local mode?
    2. Regarding the Configurable Cell Limit, I assume that the AAD_SDK_MAX_CELLS parameter cannot exceed the built-in limit of the platform, such as 500,000 for BW.  Is that right?
    3. The Experimental Feature for JAR Files mentions that ‘Commercial extensions must ship in form of an “Eclipse Update Site”‘.  What about shipping as an archive file generated from a deployable feature?  I would think that customers would prefer to control SDK component updates to the DS IDE Clients internally, to ensure they are all in sync and avoid their developers updating independently from an external vendor site.

    Regards,

    Mustafa.

    (0) 
    1. Reiner Hille-Doering Post author

      Hi Mustafa,

      happy to hear that you like it. Here my answers:

      1. Yes, it should work in all modes. Now for local, NW and BIP the URLs have the same format, only on HANA it is different, which is considered by the function.

      2. Yes, but this can be also configured with an admin parameter. There are a few more such limits, e.g. for Universes.

      3. Sure, with “Eclipse Update Site” I mean a real update site (remote), or a ZIPped one, which is also called a “deployable feature”.

      Reiner.

      (0) 
  2. Mike Howles

    Reiner,

    I’m excited always about enhancements but the two you listed that keep me up at night thinking the most about are Property Binding and Multiple Data Sources (and the combined usage of)

    1. I see where you mention this makes the databound=true obsolete.  Is it technically just deprecated or must existing databound components have this removed?
    2. I use a trick in the APS related to DATA_SOURCE_ALIAS_REF so that the component can ‘sense’ a datasource change when both the APS and the Standard Property sheet are shown at the same time.  The scenario is that my APS has not had a reliable means to know that the Datasource assignment has changed to callRuntimeHandler to inspect the datasource metadata.  So I rely on componentSelected event and the DATA_SOURCE_ALIAS_REF function setter to issue a callRuntimeHandler to inspect metadata.  Are there any implications or considerations with the new bindable approach that complicate this problem or make it easier for the APS to ‘sense’ datasource changes?
    3. Will there be an updated sdk.xsd to account for the new ‘bindable’ attribute in the attribute element?

    Great update!  Thanks as always.

    (0) 
    1. Reiner Hille-Doering Post author

      Hello Michael,

      I glad you like the stuff. Here my comments:

      1. It is not really deprecated and also suggested to be used for components that are intended to be bound (usually) to one data source. It has e.g. also the advantage that you can call in your ZTL this.getDataSource() – which will not work without the attribute.

      2. Yes, there might be such implications – and the probably missing feature to assign a binding from APS programmatically. I’m not yet sure what else could be required in the future.

      3. Yes – it comes with the 1.5 SDK –  and this is also kind of disadvantage of the approach to do an extension to the schema. Karol detected that if you modify and extension with “bindable=”true””, you can’t install it anymore into 1.4 – because it is invalid in regards to the 1.4 version of the schema.

      But as it is really a new feature, I think we can’t anyway not guarantee the backward compatibly of SDK extensions using it.

      (0) 
      1. Mike Howles

        Thanks for the details, Reiner.

        On point 3, yes Karol and I had run into this in the past with 1.3 vs 1.4 SDK with the introduction of new datasource handler type so this is just kind of a status quo and expected.  In the SCN community extensions we manage this as best we can by isolating 1.4 functionality in a separate deployable feature than 1.3, that way users running older versions of DS can continue to use older extensions and likewise users on current/new release can opt to take extensions in more recent feature bundle.  This probably will be approach after 1.5 GA I’d guess, too.  It is manageable at least for us.

        (0) 
  3. Jörg Rose

    Hi Reiner,

    thanks again for the fantastic job. It is good to see that you continue investing in the SDK capabilities.

    I would almost run out of ideas now, if we had custom datasources in standard crosstabs next (I know…) 😉

    Best Regards

    Jörg

    (0) 
  4. Vincent Dechandon

    Hi, nice improvements.

    The greatest is the multiple data sources for sure 🙂 .

    Anyhow, you are talking about a property binding UI ?

    Suppose I have an additionnal properties sheet that has not been built with sapUI5, how can I leverage the multiple data sources in a drop down for example ?

    Do you have any link to a sample that demonstrate that ?

    Thanks.

    Br,

    Vincent

    (0) 
    1. Ingo Hilgefort
      (0) 
  5. Thilo Knötzele

    Dear Reiner,

    thanks for sharing These valuable new Features. One question regarding the “Configurable Cell Limit” – also this one works great in general.

    We have made some tests and found out that if we raise the number to 10 mio (I know that this is not at all recommended, but one customer asked us to try) we always receive “too much data” anyhow. Is there still a built in safety belt that is being used even though the component’s Option and RSADMIN Parameter are set to 10.000.000? Thanks Thilo

    (0) 
  6. Philipp Hinnah

    Hello Reiner,

    One question with regards to “Display Attributes”: you mentioned, that they are part of the result set, if activated in Query Designer.

    Can those display attributes also be fetched with the standard getData() and getDataAsString() methods?

    I haven’t yet installed 1.5 SP1, but I can soon test this. Just wanted to raise the question upfront to shed some light on this…

    Best regards,

    Philipp Hinnah

    (0) 
    1. Reiner Hille-Doering Post author

      Hi Philipp,

      in Result Sets we differentiate between 4 quadrants: Row axis, Column axis, data (“meat”) and magic cell (which has no meaning in SDK). The functions getData and getDataAsString work on data/meat area. Display attributes belong to axis/master data area. For those we have getMembers()  – each having a getAttributeMember().

      Regards,

      Reiner.

      (0) 
  7. Rudra Sonar

    Hello All,

    I am trying to show only an Attribute 0COMP_CODE__0COUNTRY” of the dimension “0COMP_CODE“.

    I have searched a lot, but haven’t found anything related to it.

    According to this post, https://scn.sap.com/thread/3586863 if we have COUNTRY as a navigational attribute in BI, we could do this.
    But I have COUNTRY as a navigational characteristic as well.

    1. When I add COUNTRY attribute of the 0COMP_CODE, I see both as a column.

        I want to know how to hide Company code and display only COUNTRY in a cross table.

    1. 2. When I try to remove dimension 0COMP_CODE, Country is also getting removed.

    1. 3. “0COMP_CODE__0COUNTRY” is a navigational attribute with me; if I only add only 0COMP_CODE__0COUNTRY in a row I don’t see it in a dimension list in a code.

    Please help how to show only attribute and not the dimension,

    (0) 
    1. Reiner Hille-Doering Post author

      Hello Rudra,

      this blog is about SDK. An SDK component could decide to display only a display attribute and not the normal  presentation (key, text etc).

      If you are searching a for a solution for a standard component, e.g. crosstab, you should better start a new discussion thread,

      Thanks,

      Reiner.

      (0) 

Leave a Reply