Skip to main content
Participating Frequently
May 19, 2023
Answered

UXPScript save file error with InDesign Server 2023

  • May 19, 2023
  • 2 replies
  • 1176 views

I'm running UXPScript over SOAP request with InDesign Server 2023 running locally on my Windows machine. At the moment, UXPScript doesn't support arguments or returns, but it will run UXPScript if you send it in inside the <scriptText> tag like so (outer XML not shown):

<scriptText>
// actual script contents
</scriptText>

 

According to the documentation, we should have access to a "node-like" fs-module: https://developer.adobe.com/indesign/uxp/reference/uxp-api/reference-js/Modules/FileSystem/. It mentions that you can use "plugin-specific storage schemes" such as "plugin:", "plugin-data:", and "plugin-temp:", as well as a native "file:" scheme. Since I'm not developing a plugin, using a "file:" URI seems like the correct route. 

 

So the file I need to write within a folder that I created and have access to looks something like C:\Users\Me\Documents\temp_working_folder\data.json. So if I translate that to a file URI like the docs suggest, that gives me file:///C:/Users/Me/Documents/temp_working_folder/data.json.

 

When I try to use fs.writeFile, however, I get the following error:

 

TypeError: Cannot read properties of undefined (reading '_processWriteOptions')

 

Has anyone else gotten this error? Or has anyone successfully written data to a file on their file system using the "file:" URI scheme?

This topic has been closed for replies.
Correct answer Peter Kahrel

At the moment, UXPScript doesn't support arguments or returns

 

As of ID 18.3, which became available this week, it does.

2 replies

Peter Kahrel
Community Expert
Peter KahrelCommunity ExpertCorrect answer
Community Expert
May 19, 2023

At the moment, UXPScript doesn't support arguments or returns

 

As of ID 18.3, which became available this week, it does.

Participating Frequently
May 19, 2023

@Peter Kahrel Thanks for the info! I will be trying to update so I can access this feature. I just finished prototyping a solution to get around the lack of arguments/returns, it will be nice to use the intended way now that it is ready.

Inspiring
May 19, 2023

Hi Darryl,

this snipped worked for me:

const fs = require("fs");
fs.writeFileSync(`file:C:/Users/JF/test.json`, JSON.stringify(data), {flag: "w",});

Hope this will help you.

 

Participating Frequently
May 19, 2023

@Jakob Frey Thank you!

 

To clarify some more for future readers, I found out additional information through some experimentation. It turns out their API documentation says that "mode" defaults to "w". But not including "w" gave me the error indicated in my original post. Once I explicitly included the mode as "w", it started to work (with a caveat). The caveat is that the promise fromthe asynchronous version (fs.writeFile) would never complete. But when I use the synchronous version (fs.writeFileSync) it completes successfully.

 

With that ability worked out, I found workarounds for including the arguments in the script and creating a result.json at a known location to get around the lack of support for arguments and returns with UXPScript. According to @Peter Kahrel, however, UXPScript now supports arguments and returns with ID 18.3 (which is great news). So hopefully I will update and that will make my workaround moot. But at least I know how to successfully write a file! 🤣

 

Thank you to both of you guys for the support! 🙏