Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
0

UpdateBook

Community Beginner ,
Nov 18, 2011 Nov 18, 2011

Copy link to clipboard

Copied

Hi,

I'm a newbie 🙂

Could someone please post an example of how to update a book using the UpdateBook method?

This would be a useful starting-point for explaining how to work with PropVals, I think.

If you do not do this the correct way, you can crash FrameMaker. Guess how I know?

The PropVals thing is what's got me stumped. According to the scripting guide: "Note: Always initialize the pointer to the property list that you specify for updateReturnParamspp to null before you call UpdateBook().

To get a property list to specify for the updateParamsp parameter, use GetUpdateBookDefaultParams() or create the list from scratch."

That's what I don't really understand.

Thanks!

Jason

TOPICS
Scripting

Views

834
Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Guest
Nov 18, 2011 Nov 18, 2011

Copy link to clipboard

Copied

LATEST

Short answer first:

          var bk = app.ActiveBook;

          var updateParams = GetUpdateBookDefaultParams();

          var retParams = AllocatePropVals (1);

          bk.UpdateBook (updateParams , retParams);

Longer answer:

Learning to wrap your head around "the PropVals thing" is probably the single steepest part of the FM scripting learning curve, esp. if you come from a JavaScript background. The PropVals object is how FM represents many types of property lists.

The object itself is an array of PropVal objects. Each PropVal has two main properties: a propIdent number, which identifies what the property is, and a TypedVal object called propVal, which holds the value for that property.

Each propVal has a property called valType, which identifies a datatype. What other properties the TypedVal has is dependant on the datatype, e.g., sval for strings, ival for signed intergers.

So if we go back to updating your book--we could modify the default parameters to skip updating XRefs like this:

          var bk = app.ActiveBook;

          var updateParams = GetUpdateBookDefaultParams();//Returns the array of PropVals

          var retParams = AllocatePropVals (1); //"initializes the pointer"

          var xProp = GetPropIndex (updateParams, Constants.FS_UpdateBookXRefs);

          updateParams[xProp].propVal.ival = false; //ival = 0 would mean the same thing

          bk.UpdateBook (updateParams , retParams);

Several of the other threads on this board can provide more examples of working with PropVals. You can see my struggles with this subject here.

Votes

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines