I wrote this great
(IMO) little snippet to refresh web resources and iframes (which is basically
the same thing) on an MSDYN365 form.
A great thing about the client side library is that it allows you
to control form components even when you're operating from inside another frame
(be aware that this is also a risk, and something you should be aware of).
I made a web resource which lists out data from several different
child-entity records, lets call it RecordLister, and then I have another web
resource which allows for creation of different child-entity records, lets call
it RecordCreator.
When I create new child records from the RecordCreator I want to
refresh the RecordListener resource, but as you might know the
"Xrm.Page.data.refresh" function does not reload the web resources,
it only reloads the data in the native fields. However, since the web resources
are basically iframes it should be possible to reload the content, and luckily
for us there is.
First off, I'm doing this in typescript, and I'm using the
excellent DefinitelyTyped definitions made by Daryl Labar. You should
too!
So here's the code I used to get this to work, and I'll explain it
step by step.
var recordLister = parent.Xrm.Page.ui.controls.get("WebResource_recordlister") as Xrm.Page.FramedControl;
What this bit does is just getting the web resource using the Xrm
client library, and since I’m using DefinitelyTyped I’m casting it to the
specific type I know it is (in this case a FramedControl).
var oldSource = recordLister.getSrc();
Next I’m getting the source url from the control and store it in a
local variable, followed by setting the source to about:blank. This way I’m
keeping the relative URL that was used before, and I’m changing the source
value to make sure the client recognizes the change (setting the value to the
same thing doesn’t trigger a reload). I use about:blank just to make sure that
should anything crash, hang or otherwise work improperly then at least the
frame is blank.
recordLister.SetSrc(oldSource);
Finally I’m setting the source back to its original value, triggering a
reload of the contents.
So that’s an easy way to reload your web resource or iframe using
supported javascript (typescript) client side functions.
Edit:
I have been notified that the xrm definitions of DefinitelyTyped is an effort made by the following:
David Berry
Matt Ngan
Markus Mauch
Daryl LaBar
Tully H
Matt Ngan
Markus Mauch
Daryl LaBar
Tully H
No comments:
Post a Comment