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

ImportExport Show/Hide settings?

Community Beginner ,
Mar 12, 2015 Mar 12, 2015

Copy link to clipboard

Copied

Hello,

I have just tested the ImportExportVariables which is going to be very usefull for large books where we want to make a selective import of the variables (on a given file of the book, only import the variables that are useful for this particular file).

I would like to do the same thing for the condition tags Show/hide settings. Be able to import only the Condition Tags (and their show/hide settings) that are usefull for a particular file of a book instead of propagating all the condition tags to all the files.

Is there a Extend script for that or could you give indications for modifying the ImportExport variable to make it support condition tags as well?

Cheers,

Bruno

[Thread moved to scripting section by moderator]

TOPICS
Scripting

Views

812

Translate

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

correct answers 1 Correct answer

Community Expert , Mar 20, 2015 Mar 20, 2015

Here is a function I use to see if a document is already open:

function docIsOpen (filename) {

   

    // Make a File object from the file name.

    var oFile = File (filename);

    // Uppercase the filename for easy comparison.

    var sFile = oFile.fullName.toUpperCase ();

    // Make an object to return.

    var oDoc = {doc: 0, docIsOpen: false};

    // Loop through the open documents in the session.

    var doc = app.FirstOpenDoc;

    while (doc.id) {

        // Compare the document’s name w

...

Votes

Translate

Translate
Community Beginner ,
Mar 20, 2015 Mar 20, 2015

Copy link to clipboard

Copied

I found a solution to my above need (see sample code below).

One problem I still have is to allow the script to QUICKLY detect that I only have a few opened files within a book and therefore the script should only update the already opened files.

Currently the only solution I found to detect that a file is already opened it to actually open it with the Open() method and check the status of Constants.FV_FileAlreadyOpen and then closing it back if I do not need to update it.

I have not found a solution to be able to detect within the list of book files, which one is already open and which one not, without actually opening all files (which takes time with 40+ fm files in the book if only a couple of them need an update).

Cheers,

Bruno

                        CondFmtId = currDoc.GetNamedCondFmt (condFmtName);

                         if (!CondFmtId.ObjectValid())

                            {

                                 if(condFmtName == "")

                                {

                                    alert("Found an empty condition tag name, aborting the import process.\nCheck the attribute file!");

                                    abort = true;

                                    return;

                                }

                                else

                                {

                                    alert("Condition tag " + condFmtName + " is not valid, aborting the import process.\nCheck the attribute file!" );

                                    abort = true;

                                    return;

                                }

                            }

                        if(CondFmtId.CondFmtIsShown == 0 && condFmtDef == "SHOW")

                        {

                            CondFmtId.CondFmtIsShown = 1;

                            if(!currDocModified)

                                    Console("Modified document \'"+currDoc.Name +"\' ");

                            Console("Changed condition tag \'" +condFmtName+  "\' from \'HIDE\' to \'SHOW\'");

                            currDocModified = true;

                            modifiedCount++;

                        }

                        else if(CondFmtId.CondFmtIsShown == 1 && condFmtDef == "HIDE")

                        {

                            CondFmtId.CondFmtIsShown = 0;

                            if(!currDocModified)

                                Console("Modified document \'"+currDoc.Name +"\' ");

                            Console("Changed condition tag \'" +condFmtName+  "\' from \'SHOW\' to \'HIDE\'");

                            currDocModified = true;

                            modifiedCount++;

                        }

Votes

Translate

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
Community Expert ,
Mar 20, 2015 Mar 20, 2015

Copy link to clipboard

Copied

Here is a function I use to see if a document is already open:

function docIsOpen (filename) {

   

    // Make a File object from the file name.

    var oFile = File (filename);

    // Uppercase the filename for easy comparison.

    var sFile = oFile.fullName.toUpperCase ();

    // Make an object to return.

    var oDoc = {doc: 0, docIsOpen: false};

    // Loop through the open documents in the session.

    var doc = app.FirstOpenDoc;

    while (doc.id) {

        // Compare the document’s name with the one we are looking for.

        if (File (doc.Name).fullName.toUpperCase () === sFile) {

            // The document we are looking for is open.

            // Add it to the object and return it.

            oDoc.doc = doc;

            oDoc.docIsOpen = true;

            return oDoc;

        }

        doc = doc.NextOpenDocInSession;

    }

    return oDoc; // Document is not open; return the “empty” object.

}

You can call it by passing in a book components name:

var oDoc = docIsOpen (bookComp.Name);

It returns a JavaScript object with two members: doc is the document object it if open, or 0 if it is not; docIsOpen is 1 if the document is open and 0 if it is not. If you use the function alone, you don't really need to do it this way, but I will usually use it in with another function that opens the document if it isn't already open. As a result, I need to keep track of whether the document was already open, or if I opened it with the script. Please let me know if you have any questions or comments. -Rick

Votes

Translate

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
Community Beginner ,
Mar 23, 2015 Mar 23, 2015

Copy link to clipboard

Copied

LATEST

Thank you very much Rick. That is exactly what I needed, and makes the script so much faster when only a subset of the book needs an update.

Cheers,

Bruno

Votes

Translate

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