Lookup data from Handlebars template
Hello,
We're throwing around some different design ideas for a project and one of the ideas would require retrieving configuration data stored with the record from a Handlebars template. Thing XML template being saved to FTP server.
This configuration data is an array of essential key/value pair records, something like this:
{
"config": [{
"name": "supplierSKUId",
"value": "PW"
}, {
"name": "UOMQualifierID",
"value": "UOMQID"
}]
}
From our template, we'd like to do something like this:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<header>
<documentType>TransferOrder</documentType>
<timestamp>{{timeStamp 'UTC'}}</timestamp>
<UOMQualifierID>{{find "config", "name", "UOMQualifierID", "value", ""}}</UOMQualifierID>
That would yield
<UOMQualifierID>UOMQID</UOMQualifierID>
The signature of the helper would be:
{{find <array to search>, <path to property to search>, <value to search for>, <path to property to return>, [, <default value>]}}
That signature is getting a bit long, perhaps the find() helper could return an object and could be used in conjunction with a helper like getValue but one that took an object reference as a parameter, something like this:
<UOMQualifierID>{{getValue (find "config", "name", "UOMQualifierID") "value"}}</UOMQualifierID>
I'm sure if I thought about this longer I could think of more use cases and maybe some overloads to support those use cases, but you get the idea (hopefully) from this example.
My question: Is there a way to do this now?
Follow up question: If not, can we work with you to create this helper?
Regards,
Steve
Comments
Hi Steve,
There is no way currently to add custom helpers. I am unsure exactly what your output should be here, but would this handlebar work for you?
{{#each config}}
<{{name}}>{{value}}</{{name}}>
{{/each}}
Thanks for the reply Orion.
I updated my post to so correct a missing parameter in my "find" helper examples, I also added a section on what I would expect to have returned. Your example will enumerate an array, I'm not looking for that, I want to find an object in an array and use one of it's properties in my template.
Hi Steve, if that is the case, where you can't just take out the config XML elements from your template and list all the elements in order of the config array using the #each helper, which would make a this output:
If the above doesn't work for you, assuming this is for a custom flow and not an Integration App, you can add a JavaScript preMap hook to the import step to separate out the objects into the config array into their own key/value pairs, and use those directly in each corresponding element without a handlebar helper. There currently is no way to add a custom handlebar helper.
Hi Orion,
Thank you for the reply.
I don't want to do this in script, I'm looking for a template only solution. Hopefully my post here will get some attention and there can be consideration for adding this helper or something like it.
I believe these built-in helpers would also work for your use-case without needing a custom one, but I do also hope that at one point custom helpers will be configurable.
<supplierSKUId>{{#each config}}{{#compare name '==' 'supplierSKUId'}}{{value}}{{/compare}}{{/each}}</supplierSKUId>
<UOMQualifierID>{{#each config}}{{#compare name '==' 'UOMQualifierID'}}{{value}}{{/compare}}{{/each}}</UOMQualifierID>
Please sign in to leave a comment.