Word macros allow document creators to correct document errors and fine tune the document formatting. Running the macros programatically through Word automation allows to automate the process for added benefits. There are a number of tools and processes that do this with RPE being one of them.
Running macros is limited to the Windows platform and it’s subject to additional limitations such as Word automation not being supported from NT Services ( as it’s the case for running RPE/RRDG running in WAS or Tomcat in Service mode).
To enable macros to run in situations where Word or Word automation is not available the solution is to execute the macros remotely by a dedicated service. Microsoft offers such a service in the form of Word Automation Services. Another solution, the one described in this article, is to a service that runs the macros through Word automation. The caveat of this service is that it cannot run as an NT service, it must run in an interactive desktop ( Apache Tomcat in console mode or node.js).
DISCLAIMER: The solution described in this article is provided as-is without warranty of any kind, express or implied. The service is not part of RPE and it is not supported by IBM.
Run Macro Service
runmacro is such a node.js service that exposes a very simple REST API for running macros. The service comes with an HTML example to help visualize how the service works.
The service code is freely available on Github at https://github.com/dragoscojocari/nodejs-runmacro. You can get its source code via the “Download ZIP” option. See the project’s Readme for details on installation and usage.
DISCLAIMER: the service and the associated example is provided as-is without warranty of any kind, express or implied. This is not part of RPE and it is not officially supported by RPE.
Using the service
To use the service you can either go for the HTML based approach ( which is entirely manual) or use a tool like curl so you can automate the process. Below is the example of the curl command that does this:
curl --form "document=@d:\tmp\testMacro.doc;filename=testMacro.doc" --form macro=insertDate http://127.0.0.1:8000/macro -o d:\tmp\documentAfterMacro.doc
Using the service in RPE
The easiest way to integrate this in RPE is by modifying the runMacro.vbs script from %RPE_HOME%\utils\word. In my environment I have the following:
- a folder for curl. exe and its dependencies in a d:\tools\curl
- a Windows bat file, runRemoteMacro.bat for running the curl. This allows changing the curl command more easily compared to embedding the command directly in the VBS file.
- modified the runMacro.vbs that ships with RPE to invoke the bat file instead of calling Word through automation.
The bat and vbs files are included in the Git repository in the “Client” package.
Once you’ve done these changes the macros will be executed on the remote server instead of the local machine with no changes in the end user experience. However this is limited to Windows machines as you need Windows’ cscript to run the vbs file. For Linux machines the solution is to use post-processing commands.