Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Qlik Open Lakehouse is Now Generally Available! Discover the key highlights and partner resources here.
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Qlik Sense: How to set Bookmark selection fields and send user to bookmark

My overall goal is to do this:

1) Using .Net scripting, create a new bookmark with a filter determined from the .Net app

2) Send a user's browser to that bookmark.

Below is my code related to creating a bookmark.   It works, except I have not been able to successfully create an expression for bookmarkProperties.SelectionFields.Where().  In my case, I want to create a filter WHERE <column name> = <value>

Regarding item #2, I am using code like this -- I am not clear how I would direct the browser to a specific bookmark.

     String webAddress = "https://<Server>/sense/app/<AppID>/sheet/<SheetID>";

     Process.Start(webAddress);

Thank you

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Linq.Expressions;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using Qlik.Engine;

using Qlik.Sense.Client;

            System.Uri qlikURI = new System.Uri("https://<Server Name>/");

            ILocation location = Qlik.Engine.Location.FromUri(qlikURI);

            using (IHub hub = location.Hub())

            {

                IAppIdentifier appID = location.AppWithName("<App Name");

                IApp application = location.App(appID);

                IEnumerable<ISheet> sheets = application.GetSheets();             

                ISheet thisSheet = null;

                IBookmark bookmark = null;

                foreach (ISheet activeSheet in sheets)

                {

                    if (activeSheet.SheetMetaData.Title == "<Sheet Name>") {

                        thisSheet = activeSheet;

                    }                 

                }                                             

                if (thisSheet != null) {                   

                    Qlik.Sense.Client.BookmarkProperties bookmarkProperties = new BookmarkProperties();

                    bookmarkProperties.SheetId = thisSheet.Id;

                    bookmarkProperties.Title = "New Bookmark";

                    bookmarkProperties.CreationDate = "1/1/2014";                 

                    //bookmarkProperties.SelectionFields.Where();

                    bookmark = application.CreateBookmark("New Bookmark 1",bookmarkProperties);                                 

                }

            }

1 Solution

Accepted Solutions
Not applicable
Author

I would first ask you to use lists instead of instances of objects, that way you can read the properties of generic objects before you instantiate them.

Example for sheetList:

ISheetList sheetList = application.GetSheetList();

foreach (ISheetObjectViewListContainer item in sheetList.Items)

{

    Console.WriteLine(item.Data.Title);

}

This doesn't solve your problems but will make your program faster, and you can react on changes in the lists.

https://help.qlik.com/sense/en-us/developer/index.html#../Subsystems/NetSdk/Content/HowTos/NetSdk_Ho...

To create a Bookmark that reflects an application selection state you need to set the selection state before you create the bookamark.

    System.Uri qlikURI = new System.Uri("https://<Server Name>/");

    ILocation location = Location.FromUri(qlikURI);

    IAppIdentifier appID = location.AppWithName("<App Name>");

    using (IApp application = location.App(appID))

    {

        ISheetList sheetlist = application.GetSheetList();

        ISheet thisSheet = sheetlist.Items

              .First(o => o.Data.Title.Equals("<Sheet Name>"))

              .As<Sheet>();

        IAppField field1 = application.GetAppField("<Field1>");

        field1.SelectAll();

        IAppField field2 = application.GetAppField("<Field2>");

        field2.SelectValues(new[] { 1, 45, 77 }, toggleMode: false, softLock: false);

        var bookmarkProperties = new BookmarkProperties

        {

            SheetId = thisSheet.Id,

            Title = "New Bookmark",

            CreationDate = "2014-10-07T19:43:16.523Z",

            SelectionFields = "<Field1>, <Field2>"

        };

        var bookmark = application.CreateBookmark("<Bookmark1>", bookmarkProperties);

    }

The SelectionFields Property is a comma separated string with the Fields used in the bookmark, this is mainly used to show information in the Qlik Sense client.

A solution to your second question is currently not supported, but could be emulated using extensions.

define(["jquery","qlik"], function($, qlik) {

  paint : function() {

     qlik.currApp().bookmark.apply("<Bookmark1>");

  }

});

Please see the Toolbar Extension Example for more information, https://help.qlik.com/sense/en-us/developer/index.html#../Subsystems/Workbench/Content/CodeExamples/...

Regards,

Johan Tejle

View solution in original post

5 Replies
Not applicable
Author

I would first ask you to use lists instead of instances of objects, that way you can read the properties of generic objects before you instantiate them.

Example for sheetList:

ISheetList sheetList = application.GetSheetList();

foreach (ISheetObjectViewListContainer item in sheetList.Items)

{

    Console.WriteLine(item.Data.Title);

}

This doesn't solve your problems but will make your program faster, and you can react on changes in the lists.

https://help.qlik.com/sense/en-us/developer/index.html#../Subsystems/NetSdk/Content/HowTos/NetSdk_Ho...

To create a Bookmark that reflects an application selection state you need to set the selection state before you create the bookamark.

    System.Uri qlikURI = new System.Uri("https://<Server Name>/");

    ILocation location = Location.FromUri(qlikURI);

    IAppIdentifier appID = location.AppWithName("<App Name>");

    using (IApp application = location.App(appID))

    {

        ISheetList sheetlist = application.GetSheetList();

        ISheet thisSheet = sheetlist.Items

              .First(o => o.Data.Title.Equals("<Sheet Name>"))

              .As<Sheet>();

        IAppField field1 = application.GetAppField("<Field1>");

        field1.SelectAll();

        IAppField field2 = application.GetAppField("<Field2>");

        field2.SelectValues(new[] { 1, 45, 77 }, toggleMode: false, softLock: false);

        var bookmarkProperties = new BookmarkProperties

        {

            SheetId = thisSheet.Id,

            Title = "New Bookmark",

            CreationDate = "2014-10-07T19:43:16.523Z",

            SelectionFields = "<Field1>, <Field2>"

        };

        var bookmark = application.CreateBookmark("<Bookmark1>", bookmarkProperties);

    }

The SelectionFields Property is a comma separated string with the Fields used in the bookmark, this is mainly used to show information in the Qlik Sense client.

A solution to your second question is currently not supported, but could be emulated using extensions.

define(["jquery","qlik"], function($, qlik) {

  paint : function() {

     qlik.currApp().bookmark.apply("<Bookmark1>");

  }

});

Please see the Toolbar Extension Example for more information, https://help.qlik.com/sense/en-us/developer/index.html#../Subsystems/Workbench/Content/CodeExamples/...

Regards,

Johan Tejle

Not applicable
Author

Thank You, that has gotten me very far.

Not applicable
Author

I am trying to accomplish the same thing.  Can you share if you are able to send user directly to the bookmark via URL?

pablodelcerro
Partner - Contributor III
Partner - Contributor III

Hi!

Is it possible to do this throw a QS Extension? I want to create or modify bookmarks but without doing the seleccions, and what I came through is that is only possible with JSON api, am i right?

My real final goal is to convert several variables in several bookmarks, all with only with button on the QS App.

Thanks!

PAblo

jian_zou
Partner - Contributor II
Partner - Contributor II

Hi,

Does anyone know how to get Bookmark selection fields filter definitions?

Say I have a BM created from App UI. I can get all below but the filter definitions something like {<[Time Period]={'YTD'}>}

                        IBookmark bm = app.GetBookmark(myBM);
                        var x1 = bm.SelectionFields;
                        var x2 = bm.MetaAttributes.Title;
                        var x3 = bm.SheetId;
                        var x4 = bm.Id
 
Thank you in advance.