I have created an ExtendScript function that builds and populates a ScriptUI dialog. It then opens a template selected by the user. This works well and does everything I want it to do. Now the problem is that I need to run it from an FDK menu. This ExtendScript function takes a single argument.
I though that F_ApiCallClient() would be the way to go, but it's not documented for that usage. Has anyone tried to do this and succeeded? Or perhaps I'm overlooking a really obvious way to do it?
strange, we had the same question a week ago in FrameDev-Yahoo Group. So I can copy + paste:-)
There is not Chance to provide parameters with F_ApiCallClient(). One solution was to write a temporary file in your FDK Client and read this within your ES. I would recommend to write to JSON Format for more complex data structure, as you can use eval() to deserialize this data to an object model very easily.
Few year's ago, I implemented a solution with F_ApiHypertext which works very well:
In your plugin call following, where you call F_ApiCallClient now
F_Sprintf((StringT)message, "message ScriptingSupport Notification FA_Note_PreFunction: docid:<%d> sparm:<%s> iparm:<%d>", docId, sparm, iparm);
F_ApiHypertextCommand can be called anywhere in your script, of course. The message string doesn’t matter. You only need a rule in your script which can handle and parse this
In your script register for “Constants.FA_Note_PreHypertext” and implement Notify-callback which catches this Event
if (sparm.substring(0, “message ScriptingSupport Notification FA_Note_PreFunction:”.length) == “message ScriptingSupport Notification FA_Note_PreFunction:”)
//FA_Note_PreFunction Notification was raised by fdk client
OnHyperTextNotification(Constants.FA_Note_PreFunction, sparm) ;
function OnHyperTextNotification(notification, str)
var idxDocId = str.indexOf("docid:<") + "docid:<".length;
var idxSParm = str.indexOf("sparm:<") + "sparm:<".length;
var idxIParm = str.indexOf("iparm:<") + "iparm:<".length;
var docid = str.substr(idxDocId).substr(0, str.substr(idxDocId).indexOf(">"));
var sparm = str.substr(idxSParm).substr(0, str.substr(idxSParm).indexOf(">"));
var iparm = str.substr(idxIParm).substr(0, str.substr(idxIParm).indexOf(">"));
//invoke Notify or do anything else
Notify (notification, docid, sparm, iparm) ;
I don’t know yet, if it’s possible to get a return value back from ES to FDK.
I hope this is useful
Thank you Markus,
Ingenious, will try that tomorrow!
Once again thank you for the ideas. In the end I changed the scope of the script so that it created its own menu command. I will try your ideas later when I have more time.
That hypertext command solution is really very clever, Markus. I suspect that it is just a fortunate accident that FrameMaker allows this interaction between an FDK client and an ES script. Congratulations for finding it.