Previously on FM8 on Solaris, FM used the structapp.fm file saved in the fminit structure below the folder containing the book files. Is this possible with the current versions on Windows?
As far as I understand, FM parses the structapp.fm in the FM installation and in \Users\<user>\AppData\Roaming\Adobe\FrameMaker\<version>\structapps.fm
Sinse we are a large project with a lot of people needing to update the same book, we want to avoid having to setup the application on every PC on the network.
How can I achieve this?
Since you want to change FM's default behavior, you will have to change the configuration at least once. There are two techniques you can use to make sure all users get updates to your structured applications:
1. Change the location of FM's structure directory, which by default is …\Adobe FrameMaker 2019\Structure. You can specify a different directory, possibly on a network drive, in the [Directories] section of maker.ini. Once all your user's systems are configured to use your own directory, you can define its structapps.fm as you want. The relevant specification in the default maker.ini is:
Here, the pathname "structure" is relative to …\Adobe FrameMaker 2019\fminit. You can enter an absolute pathname as well.
Note that, like structapps.fm, when you launch FM, it reads two versions of maker.ini. First, it reads the one in FM's installation directory, which is the same for all users using a particular computer. Next, it reads any changes in the maker.ini file stored in a particular user's %appdata% folder.
2. Change structapps.fm, either the one in the structure directory or the one in each user's %appdata%. Note that if you make your changes in the structure directory, users do not need to make changes in their personal version in %appdata% for your particular project.
A variation of this approach is to put the definition of your own applications in a separate file and include that file as a text inset in one of the two structapps.fm files. That way, if the file used as a text inset is on a network, you can change it once and all users will receive the changes. You can create the imported file by saving an existing structapps.fm under whatever name you want and editing it to contain only a single XML application.
Using a text inset based on the default structapps.fm file limits you to defining one XML application in the imported file because there must be a root element for the imported flow. I have a variation of the structapps.fm template that defines a textinset element that can contain definitions of multiple XML or SGML applications. Within the next few days, I will post a link to that template.
Warning on the above: if you make your customizations in FM's installation directory, make sure that updates to FM do not overwritte them.
Thank you very much for your answer, which defines the possibilities and limitations I need to consider.
I see from the maker.ini file that the StructureDir is defined relative to FMHome, not fminit. I use FM 2015. Maybe that has changed? Anyway, it doesn't matter.
I see that the $STRUCTDIR environment variable is used in the strucapps.fm file. I thought this might be equal to StructureDir, but this seems to be relative to fminit. Do you now how to change $STRUCTDIR?
Correction: Looks like $STRUCTDIR = StructureDir. Hopefully this meand that changing StructureDir equally changes $STRUCTDIR.
Neeeds testing. 🙂