It is possible to remotely make calls from a client script to a server script and vice-versa. This requires sending a prompt script that causes the recipient to execute the script via a remote proxy. The following example script defines a variable named callback and sends a prompt script to the client. The result is executing this script through a remote proxy.
/////////////////////////////////////////////////////////// // Operation definitions to add to an element: (paste into Operations.ini) // // [Enter Trouble Ticket] // description=Trouble Ticket... // context=element // target=dname:root=Elements // permission=manage // type=serverscript // operation=// @debug off \nload( "examples/ticket.fs" ); // // Set our log category formula.setLogCategory( "Ticket" ) // Log startup formula.log.info( "Starting trouble ticket script" ) // Create our object which will be the "callback" from the client // Note: this is standard javascript syntax for creating an object with named properties/values var callback = { setTicketInfo: function( reason ) { // We'll log what the user did, to simulate connecting to the ticketing system. formula.log.info( "User created trouble ticket:" ) formula.log.info( " Element: " + element ) formula.log.info( " Reason: " + reason ) // Let's notify the user that we did what was asked. session.sendMessage( 'Trouble ticket created for ' + element + '. Content:\n\n' + reason ) }, cancel: function() { formula.log.info( "User cancelled trouble ticket creation" ) session.sendMessage( 'Trouble ticket cancelled for ' + element + '.' ) } } // We're going to send this callback and a prompt script to the client, which will // then cause execution to this script through remote proxy. var clientTicketScript = "\ // @opt -1 \ // @debug off \ var result = prompt( 'Enter trouble ticket information for ' + elementName + ':', \ 'Trouble Ticket' ) \ if( ! result ) \ callback.cancel() \ else \ callback.setTicketInfo( result )\ " // // Now, send the dialog script to the user who invoked this script // // Note: this script is sent to variables, called "callback" and "elementName" // The callback is wrapped via a remote proxy using the formula.util.makeRemote() // function. The element name is simply the element name of the element // the user initiated this ticket for. // formula.log.info( "Sending dialog script to client" ) session.invokeScript( 'Enter Trouble Ticket', clientTicketScript, [ formula.util.makeRemote( callback ), element.name ], [ 'callback', 'elementName' ] ) formula.log.info( "Done!" )