Forum Discussion
Passing access_token to custom visual (dynamically)
trying to pass an access_token to my custom visual.
If I use capabilities and data mapping, I end up with a lot of values because I am also passing some objectids and statuses. The access token value get copied and passed for every objectid value.
Is there another way to pass a single value (the token) to the visual?
I've tried properties but with no luck as the token is dynamic so needs to be pass dynamically to the visual (it refreshes every hour)
4 Replies
- dm-pSuper User
Hi pieduke88,
Properties would be your only option for a scalar value. If this is data-bound (and it sounds like it is if it's in your dataset), can you make this a measure and specify that the property use conditional formatting?
Outside of this, the only alternative would be to use the HTTP fetch API to poll/resync your token from within your visual (assuming that (a) it's an option, (b) you haven't tried this already, and (c) your endpoint allows access from null origin iframes).
Regards,
Daniel
- pieduke88Frequent Visitor
thanks - I can set it to a measure but how would do I the mapping?
- dm-pSuper User
Hi pieduke88,
The documentation shows you how to implement, but if you want a simple example using the simple template visual you get when using pbiviz new:
Add Property and Slice to Settings
First, we'll add a property called testToken to capabilities.json:
{ ... "objects": { "dataPoint": { "properties": { ... "testToken": { "type": { "text": true } } } } }, ... }In settings.ts, we'll first add our imports, e.g.:
import powerbiVisualsApi from "powerbi-visuals-api"; import VisualEnumerationInstanceKinds = powerbiVisualsApi.VisualEnumerationInstanceKinds;Add a new property to the DataPointCardSettings class, e.g.:
/** * Data Point Formatting Card */ class DataPointCardSettings extends FormattingSettingsCard { ... // Simple text input testToken = new formattingSettings.TextInput({ name: "testToken", displayName: "Test Token", value: "", placeholder: "Enter or assign token", // conditional formatting specifier instanceKind: VisualEnumerationInstanceKinds.ConstantOrRule }); name: string = "dataPoint"; displayName: string = "Data colors"; slices: Array<FormattingSettingsSlice> = [ ... // existing slices this.testToken, // Ensure that new property is added to the card ]; }Note that the object for this property needs the include the instanceKind to tell Power BI that it is a conditional formatting property.
Verify Conditional Formatting is Available
Save all changes and ensuring that the visual is reloaded, check the formatting pane. You should now see the card with the conditional formatting option, e.g.:
Use the dialog to browse to and select a suitable text measure from your model and then click OK. Your property will update to show that a measure is now assigned, e.g.:
Accessing the Property
This can now be accessed from your settings, just like any other property. For example, I can add the following to my visual's update method after the settings have been processed:
console.log( "Token value:", this.formattingSettings.dataPointCard.testToken.value );And I'll see this in my browser console, e.g.:
----
Hopefully this will help you get started. Good luck!
Daniel
- pieduke88Frequent Visitor
how would that work?