Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Michael_Tarallo
Employee
Employee

Playing with Extensions in Sense

As you know, extensions provide additional functionality that extend the capability of many products. QlikView has this capability, so it only makes sense to have it in Qlik Sense too - no pun intended.

I'd like to point out that Extensions are not limited to just visualizations. You can implement other types of functionality, including those available from the Qlik Sense API. (This will become more relative when the Qlik Sense Server is released later this year. See the ToolBar extension to see a simple example of this.)

If you want to check out the current example extensions that are available with Sense you can perform the following steps:

  1. Go to C:\Users\<user>\Documents\Qlik\Examples\Extensions
  2. Copy the complete folder of the extension you want to C:\Users\<user>\Documents\Qlik\Sense\Extensions
  3. Restart Desktop

So for example - if you want to use the PeopleChart:

Take the complete folder from C:\Users\<user>\Documents\Qlik\Examples\Extensions

1.PNG.png

Copy to it to:

C:\Users\<user>\Documents\Qlik\Sense\Extensions

2.PNG.png

After Desktop starts, go to the design interface in an app:

3.PNG.png

Use as you would by adding measures and dimensions

4.PNG.png

Enjoy!

Regards,
Mike Tarallo
Qlik
57 Replies
justin_morley
Creator
Creator

Hi Martien,

I've had this one answered already. In order to get more rows of data back you need to use the getData callback. Erik posted some pseudo-code here:

http://community.qlik.com/thread/131776

The idea is you should page the data in and start building the visualisation before the whole set has been retrieved so for big quantities of data the user doesn't think their browser has crashed!

Hope this helps.

Justin

Brian_Munz
Employee
Employee

This is correct.  I'm not sure what the plans are in the future for row limits, but in actuality I've been told that it doesn't go be row, but by cell and the limit is 10,000.  So if you have two columns, you could do 5000 rows.  3 columns, 3333 rows, etc.  I haven't fully tested this, but it seems to be the case.

Anyway, I'm working on a function that automagically pages through all of the data and returns a giant aggregated object.  Once I get it done, I'll post it up to Branch.

justin_morley
Creator
Creator

Hi Brian,

Looking forward to seeing what you come up with.

To be honest I've come across a couple of snags trying to do the same:

- Firstly, the paint method is called twice in the current version of Sense. This has been discussed in other posts on the site, so is known to Qlik. The upshot of this is I'm seeing the same page twice. This is easy enough to code against.

- Secondly, on my final page of data, the objects are coming in corrupted for some reason: 3002 objects, 3000 of which are absolutely fine, but the last two are broken. Only two members of a three member array appearing.

I'm going to bang my head against that for a bit before I give in!

Cheers,

Justin

Brian_Munz
Employee
Employee

Hmmm...that's pretty interesting.  Could you send me (privately if needed) the app you're using and I could potentially package it up to send in to R&D to troubleshoot?

Thanks.

justin_morley
Creator
Creator

It's probably something strange I'm doing.

The app is attached. It's a bunch of spurious random data in a meaningless visualisation so fair game.

It appears to render fine, but if you debug in Chrome, the Javascript engine has a whinge because I'm referring to a reference on an array which doesn't exist.

Thanks

Not applicable

Does the draw method execute twice on all updates or only when data / selection canges?

justin_morley
Creator
Creator

Hi Johan,

Good question, just quickly tested this. The paint method fires twice on initially building the app (e.g. on hitting F5), but once on changing data selection or resizing the form.

My particular app fails to render under these latter two circumstances due to the issue mentioned above where three membered arrays become two in my final page.

Not applicable

The second repaint most probably is due to the properties pane activating, forcing the extension to re-size.

call-chain with empty sheet, adding extension

onStateChanged

suppressOnPaint

prePaint

updateData

paint

paint

call-chain with empty sheet property panel showing, adding extension

onStateChanged

suppressOnPaint

prePaint

updateData

paint

Brian_Munz
Employee
Employee

You're right, the second initialization is due to the resize function.  The default resize function is this:

resize: function ( $element, layout ) {

  this.paint( $element, layout );

},

So the resize function gets called alongside the paint when the extension first loads, causing the paint to fire twice.  To avoid this, I guess you could put a check in the resize function that detects if the viz has already been drawn and is already the right size.  If so, don't call paint again.  There's probably other better ways to detect this also.

justin_morley
Creator
Creator

That's interesting to know.

Like I said I have been easily able to code round the problem because the data set should be distinct, I only have to check a single row of data, so the check isn't very expensive.

A wider point about paging of data: I think the mechanism for paging data in Sense should be made native, intuitive and easy, as technically everyone making generic extensions will have to write something to handle large data sets. A recommended out of the box library call for instance. Do you agree? I see no reason why developers should have to crank out code to handle paging every time they create extensions. It seems to me that you'd not want to handle paging in any given extension in exceptional circumstances.