Skip to main content
rombanks
Inspiring
November 10, 2019
Question

Latest FM scripting guide not up to date

  • November 10, 2019
  • 5 replies
  • 3335 views

Hello fellows,

Just downloaded the latest FM scripting guide and discovered that it does not cover the latest versions of FM in the File Save function.

The last save constant listed is FV_SaveFmtInterchange110. Are you aware of any upcoming doc. update?

 

Thanks!

Roman

This topic has been closed for replies.

5 replies

Klaus Göbel
Legend
November 17, 2019

Hi Roman,

let's restart the celebration:

 

file.Save(file.Name, params, returnParamsp);

1. Insert alert("Error: " + FA_errno) or $.writeln("Error: " + FA_errno) after this line, so you can check, if  it works.

 

VERY IMPORTANT:

You have to write "$.writeln("Error: " + FA_errno)", not only "$.writeln(FA_errno)".

Because there's a bug in ESTK that doesnt display a message, if it only contains numeric characters.

 

2. When there's a notification in your script and the script stops on error, the registration will remain.

And everytime notification get's active it calls the OLD version of the script, that still is registered.

 

So after a script breaks, you have to remove the registration manually

 

File -> Script - Catalog

 

Registered -> unregister

 

Also, if you close the script, you have to unregister programatically (remove the registration)

 

 

rombanks
rombanksAuthor
Inspiring
November 21, 2019

Hi Klaus,

 

Thank you for your valuable input and sorry for the delayed response!!

I added alert("Error: " + FA_errno) under file.Save. When saving a book, I either get no error (and in this case, the book is not saved as FM13) or I get "Error: 0", in which case it works. The notifier function behavior is inconsistent. It may work or it may not. I saw this behavior in the previous versions of FM. Unfortunately, there is no good news in FM19 either...

 

Best Regards,

Roman 

Inspiring
October 19, 2021

Hi Everyone,

 

Decided to revive this thread as the same inconsistent behavior is present in FM2020 as well. The notification function is triggered consistently only when hitting the Run button before performing the FM action that triggers the script executiion (in this case, saving a file or a book as FM13).

 

Anyone else has noticed this issue in the new FM?

 

Thanks!

Klaus Göbel
Legend
November 17, 2019

Hi Roman,

 

I've just did a quick test with your code with a little modification.

This modification was just to add a book object (ActiveBook).

 

Here's the whole script that should work for you:

var oBook = app.ActiveBook;
SaveToFM13(oBook) ;

function SaveToFM13(file) 
{	
    if(file.ObjectValid()) 
    {
        var params = GetSaveDefaultParams();
        var returnParamsp = new PropVals();
        var i;
        i = GetPropIndex(params, Constants.FS_FileType);
        params[i].propVal.ival = Constants.FV_SaveFmtBinary130;
        i = GetPropIndex(params, Constants.FS_SaveAsModeName);
            params[i].propVal.ival = Constants.FV_SaveAsNameProvided;
        i = GetPropIndex (params, Constants.FS_SaveMode);
            params[i].propVal.ival = Constants.FV_ModeSaveAs;
        file.Save(file.Name, params, returnParamsp);
        return; 
        }
}

 

If you say, it doesn't work, what exactly doesn't work?

Which Error / FA_errno

 

 

rombanks
rombanksAuthor
Inspiring
November 17, 2019

Hi Klaus, 

 

Thank you for your response and for the input!

 

I actually forgot to add a book saving case for the notifier function. So I did, and it solved the problem.

Thank you very much for your help!

 

My Best Regards,

Roman

 

 

rombanks
rombanksAuthor
Inspiring
November 17, 2019

Update: the celebration has started too early. This notification script works very inconsistently in FM19. Although I transfered the script into Autorun, I actually need to select it to and hit Run to make it work. In addition, it saves FM15 files as FM13 only if they are opened as standalone files and not from the book. Here is my updated code. Any input is appreciated! I get no error - just "Result: undefined".

 

 

#target framemaker

Notification (Constants.FA_Note_PostSaveDoc, Constants.FA_Note_PostSaveBook, true);

var oDoc = app.ActiveDoc;
var oBook = app.ActiveBook;

function Notify (note, object, sparam, iparam) {

    switch (note) {
        case Constants.FA_Note_PostSaveDoc :
        SaveToFM13(oDoc);
        break;
        case Constants.FA_Note_PostSaveBook :
        SaveToFM13(oBook);
        break;
    }
}

function SaveToFM13(file) 
{	
    if(file.ObjectValid()) 
    {
        var params = GetSaveDefaultParams();
        var returnParamsp = new PropVals();
        var i;
        i = GetPropIndex(params, Constants.FS_FileType);
        params[i].propVal.ival = Constants.FV_SaveFmtBinary130;
        i = GetPropIndex(params, Constants.FS_SaveAsModeName);
            params[i].propVal.ival = Constants.FV_SaveAsNameProvided;
        i = GetPropIndex (params, Constants.FS_SaveMode);
            params[i].propVal.ival = Constants.FV_ModeSaveAs;
        file.Save(file.Name, params, returnParamsp);
        return; 
        }
}

 

 

Klaus Göbel
Legend
November 15, 2019

Hi Rombanks,

I've tested your last code and it works for me.

But one another question: in your function:

function SaveToFM13(file)

 what is file?

I think it's a book object?

And what doesn't work?

Which FA_errno?

 

And I don't understand that line:

if(doc.ObjectValid() | book.ObjectValid()) 

is doc the same as file?

then it should be

if (file.ObjectValid())

 

Sorry for my late response, but I couldn't log in for this afternoon

rombanks
rombanksAuthor
Inspiring
November 17, 2019

Hi Klaus,

I appreciate your response!

I don't understand why it doesn't work for me. "file" is just a var placeholder for either "doc" or "book". If  I understand correctly, the name of the variables to handle in the function declaration doesn't really matter. They are replaced by the relevant variables when calling a function. At least this is so in Python. 

 

if(doc.ObjectValid() | book.ObjectValid()) means "perform the save operation when either an .FM file or a .Book file is active."

My Best Regards,
Roman
Klaus Göbel
Legend
November 12, 2019

Hi Rombanks

 

you also have to use further parameters:


i = GetPropIndex(params, Constants.FS_SaveAsModeName);
params[i].propVal.ival = Constants.FV_SaveAsNameProvided;

i = GetPropIndex ( params, Constants.FS_SaveMode );
params[i].propVal.ival = Constants.FV_ModeSaveAs;

 

Sorry for my delayed and short answer, but I'm out of office for some days

rombanks
rombanksAuthor
Inspiring
November 13, 2019

Hi Klaus,

I appreciate your response and the input!

Actually, it came as a surprise. I've never seen these params in use for saving a doc/book.

I tried adding them, but it didn't work for some reason. Here is the updated code:

 

...

function SaveToFM13(file) 
{	
    
    if(doc.ObjectValid() | book.ObjectValid()) 
    {
        var params = GetSaveDefaultParams();
        var returnParamsp = new PropVals();
        var i;
        i = GetPropIndex(params, Constants.FS_FileType);
        params[i].propVal.ival = Constants.FV_SaveFmtBinary130;
        i = GetPropIndex(params, Constants.FS_SaveAsModeName);
            params[i].propVal.ival = Constants.FV_SaveAsNameProvided;
        i = GetPropIndex (params, Constants.FS_SaveMode);
            params[i].propVal.ival = Constants.FV_ModeSaveAs;
        file.Save(file.Name, params, returnParamsp);
        return; 
        }
}

 

Klaus Göbel
Legend
November 10, 2019

Hi Rombanks,

it never does ;-))

 

When you want to know about the API while coding, you should also have a look at :

- FDK Programmer Guide: An introduction to the FDK and the details on how to set up your development environment

- The complete API reference  

rombanks
rombanksAuthor
Inspiring
November 10, 2019

Hi Klaus,

Thank you for your input! Glad to hear that at least the FDK PG is up to date.

 

Best Regards,

Roman