Jump to content

inserting pages after sets using OnRecordStart rule


Recommended Posts

The job I am trying to set up is a form that has 12 pages to a set and after the 12th page I need to insert a letter. The complex part (for me is that the sets and letters can be different languages. Through page usage, I have set the names for the PDF pages. For example, I have a English form front and back, and the English letter front and back, a Chinese form front and back and a Chinese letter front and back and so on. I think there are 14 different languages, so the PDF has 56 pages.

 

The spreadsheet has a field for the sequence which is populated with a number 1 -12 for each record, and there is also a field for language.

I am using the OnRecordStart rule, and when I compose the PDF, the form pages look like they get added correctly, but it is not adding the letter page. Here is a sample of the OnRecordStart rule:

 

if ((Field("LCLanguage") == "ENGLISH-USCAN")) {

FusionPro.Composition.SetBodyPageUsage("C23A EN front", true)

FusionPro.Composition.SetBodyPageUsage("C23A EN Back", true)

}

 

else if ((Field("LCLanguage") == "CHINESE")) {

FusionPro.Composition.SetBodyPageUsage("C23A CH Front", true)

FusionPro.Composition.SetBodyPageUsage("C23A CH Back", true)

 

}

 

else if ((Field("LCLanguage") == "PORTUGUESE")) {

FusionPro.Composition.SetBodyPageUsage("C23A PO Front", true)

FusionPro.Composition.SetBodyPageUsage("C23A PO Back", true)

 

}

 

else if ((Field("LCLanguage") == "SPANISH")) {

FusionPro.Composition.SetBodyPageUsage("C23A SP Front", true)

FusionPro.Composition.SetBodyPageUsage("C23A SP Back", true)

 

}

 

else if ((Field("LCLanguage") == "ENGLISH-USCAN") && (Field("SequenceID") == "12")) {

FusionPro.Composition.SetBodyPageUsage("MMR Letter EN Front", true)

FusionPro.Composition.SetBodyPageUsage("MMR Letter EN Back", true)

 

}

 

else if ((Field("LCLanguage") == "CHINESE") && (Field("SequenceID") == "12")) {

FusionPro.Composition.SetBodyPageUsage("MMR Letter CH Front", true)

FusionPro.Composition.SetBodyPageUsage("MMR Letter CH Back", true)

 

}

 

else if ((Field("LCLanguage") == "PORTUGUESE") && (Field("SequenceID") == "12")) {

FusionPro.Composition.SetBodyPageUsage("MMR Letter PO Front", true)

FusionPro.Composition.SetBodyPageUsage("MMR Letter PO Back", true)

 

}

 

else if ((Field("LCLanguage") == "SPANISH") && (Field("SequenceID") == "12")) {

FusionPro.Composition.SetBodyPageUsage("MMR Letter SP Front", true)

FusionPro.Composition.SetBodyPageUsage("MMR Letter SP Back", true)

 

}

 

With my limited knowledge of creating rules, this one has stumped me. Any help would be greatly appreciated.

 

Thanks

Jim

Link to comment
Share on other sites

Where and how should I post the job?

 

Sorry for being such a newbie.

Under the box where you type a reply, click "Go Advanced", and then you can scroll down and click "Manage Attachments." Or, if you prefer not to post the job to this public forum, you can contact Support.

Link to comment
Share on other sites

Jim

I don't think you are are ever setting the letter pages to be used.

Take out the word "else" in the "else if" where you start setting the page usage for the letters. This will start a new condition statement to set the page usage.

 

else if ((Field("LCLanguage") == "ENGLISH-USCAN") && (Field("SequenceID") == "12")) {

Link to comment
Share on other sites

Okay, thanks. I see what the problem is now. You have a whole series of "else if" blocks, and only one ever gets run for the record. Basically, the code block after the first "if" condition that resolves to true gets run, but then nothing else does.

 

For instance, in record 12 in your data, the language field value is "CHINESE", so this block gets run:

else if ((Field("LCLanguage") == "CHINESE")) {
FusionPro.Composition.SetBodyPageUsage("C23A CH Front", true)
FusionPro.Composition.SetBodyPageUsage("C23A CH Back", true)

}

But this never does:

else if ((Field("LCLanguage") == "CHINESE") && (Field("SequenceID") == "12")) {
FusionPro.Composition.SetBodyPageUsage("MMR Letter CH Front", true)
FusionPro.Composition.SetBodyPageUsage("MMR Letter CH Back", true)

}

Because the "else if" is exclusionary, so since a previous "if" statement met one of the conditions, it can't also meet any other "else" condition.

 

Also, from the code you posted, when you get to the end of the 12 page sequence, it looks like you have it set to only turn on the back of the "C23A" page at the end of the sequence, but I assume you still want the front and back of that, and then the front and back of the "MMR Letter" page, correct?

 

So, I think you want to write the rule like so, to handle the "C23A" pages separately from the "MMR Letter" pages:

if ((Field("LCLanguage") == "ENGLISH-USCAN")
   || (Field("LCLanguage") == "ENGLISH-OVERSEAS")
   || (Field("LCLanguage") == "ENGLISH-INDIA")
   || (Field("LCLanguage") == "HINDI-INDIA")) {
    FusionPro.Composition.SetBodyPageUsage("C23A EN Front", true)
    FusionPro.Composition.SetBodyPageUsage("C23A EN Back", true)

}

else if ((Field("LCLanguage") == "CHINESE")) {
    FusionPro.Composition.SetBodyPageUsage("C23A CH Front", true)
    FusionPro.Composition.SetBodyPageUsage("C23A CH Back", true)

}

else if ((Field("LCLanguage") == "FRENCH")) {
    FusionPro.Composition.SetBodyPageUsage("C23A FR Front", true)
    FusionPro.Composition.SetBodyPageUsage("C23A FR Back", true)

}

else if ((Field("LCLanguage") == "GERMAN")) {
    FusionPro.Composition.SetBodyPageUsage("C23A GE Front", true)
    FusionPro.Composition.SetBodyPageUsage("C23A GE Back", true)

}

else if ((Field("LCLanguage") == "JAPANESE")) {
    FusionPro.Composition.SetBodyPageUsage("C23A JA Front", true)
    FusionPro.Composition.SetBodyPageUsage("C23A JA Back", true)

}

else if ((Field("LCLanguage") == "KOREAN")) {
    FusionPro.Composition.SetBodyPageUsage("C23A KO Front", true)
    FusionPro.Composition.SetBodyPageUsage("C23A KO Back", true)

}

else if ((Field("LCLanguage") == "PORTUGUESE")) {
    FusionPro.Composition.SetBodyPageUsage("C23A PO Front", true)
    FusionPro.Composition.SetBodyPageUsage("C23A PO Back", true)

}

else if ((Field("LCLanguage") == "SPANISH")) {
    FusionPro.Composition.SetBodyPageUsage("C23A SP Front", true)
    FusionPro.Composition.SetBodyPageUsage("C23A SP Back", true)

}


if (Field("SequenceID") == "12") {
   if ((Field("LCLanguage") == "ENGLISH-USCAN")
       || (Field("LCLanguage") == "ENGLISH-OVERSEAS")
       || (Field("LCLanguage") == "ENGLISH-INDIA")
       || (Field("LCLanguage") == "HINDI-INDIA")) {
        FusionPro.Composition.SetBodyPageUsage("MMR Letter EN Front", true)
        FusionPro.Composition.SetBodyPageUsage("MMR Letter EN Back", true)

   }

   else if ((Field("LCLanguage") == "CHINESE")) {
        FusionPro.Composition.SetBodyPageUsage("MMR Letter CH Front", true)
        FusionPro.Composition.SetBodyPageUsage("MMR Letter CH Back", true)

   }

   else if ((Field("LCLanguage") == "FRENCH")) {
        FusionPro.Composition.SetBodyPageUsage("MMR Letter FR Front", true)
        FusionPro.Composition.SetBodyPageUsage("MMR Letter FR Back", true)

   }

   else if ((Field("LCLanguage") == "GERMAN")) {
        FusionPro.Composition.SetBodyPageUsage("MMR Letter GE Front", true)
        FusionPro.Composition.SetBodyPageUsage("MMR Letter GE Back", true)

   }

   else if ((Field("LCLanguage") == "JAPANESE")) {
        FusionPro.Composition.SetBodyPageUsage("MMR Letter JA Front", true)
        FusionPro.Composition.SetBodyPageUsage("MMR Letter JA Back", true)

   }

   else if ((Field("LCLanguage") == "KOREAN")) {
        FusionPro.Composition.SetBodyPageUsage("MMR Letter KO Front", true)
        FusionPro.Composition.SetBodyPageUsage("MMR Letter KO Back", true)

   }

   else if ((Field("LCLanguage") == "PORTUGUESE")) {
        FusionPro.Composition.SetBodyPageUsage("MMR Letter PO Front", true)
        FusionPro.Composition.SetBodyPageUsage("MMR Letter PO Back", true)

   }

   else if ((Field("LCLanguage") == "SPANISH")) {
        FusionPro.Composition.SetBodyPageUsage("MMR Letter SP Front", true)
        FusionPro.Composition.SetBodyPageUsage("MMR Letter SP Back", true)

   }
}

Although, this can be somewhat simplified with a switch statement, like so:

switch (Field("LCLanguage"))
{
   case "ENGLISH-USCAN":
   case "ENGLISH-OVERSEAS":
   case "ENGLISH-INDIA":
   case "HINDI-INDIA":
       FusionPro.Composition.SetBodyPageUsage("C23A EN Front", true)
       FusionPro.Composition.SetBodyPageUsage("C23A EN Back", true)
       break;

   case "CHINESE":
       FusionPro.Composition.SetBodyPageUsage("C23A CH Front", true)
       FusionPro.Composition.SetBodyPageUsage("C23A CH Back", true)
       break;

   case "FRENCH":
       FusionPro.Composition.SetBodyPageUsage("C23A FR Front", true)
       FusionPro.Composition.SetBodyPageUsage("C23A FR Back", true)
       break;

   case "GERMAN":
       FusionPro.Composition.SetBodyPageUsage("C23A GE Front", true)
       FusionPro.Composition.SetBodyPageUsage("C23A GE Back", true)
       break;

   case "JAPANESE":
       FusionPro.Composition.SetBodyPageUsage("C23A JA Front", true)
       FusionPro.Composition.SetBodyPageUsage("C23A JA Back", true)
       break;

   case "KOREAN":
       FusionPro.Composition.SetBodyPageUsage("C23A KO Front", true)
       FusionPro.Composition.SetBodyPageUsage("C23A KO Back", true)
       break;

   case "PORTUGUESE":
       FusionPro.Composition.SetBodyPageUsage("C23A PO Front", true)
       FusionPro.Composition.SetBodyPageUsage("C23A PO Back", true)
       break;

   case "SPANISH":
       FusionPro.Composition.SetBodyPageUsage("C23A SP Front", true)
       FusionPro.Composition.SetBodyPageUsage("C23A SP Back", true)
       break;
}

if (Field("SequenceID") == "12")
{
   switch (Field("LCLanguage"))
   {
       case "ENGLISH-USCAN":
       case "ENGLISH-OVERSEAS":
       case "ENGLISH-INDIA":
       case "HINDI-INDIA":
           FusionPro.Composition.SetBodyPageUsage("MMR Letter EN Front", true)
           FusionPro.Composition.SetBodyPageUsage("MMR Letter EN Back", true)
           break;

       case "CHINESE":
           FusionPro.Composition.SetBodyPageUsage("MMR Letter CH Front", true)
           FusionPro.Composition.SetBodyPageUsage("MMR Letter CH Back", true)
           break;

       case "FRENCH":
           FusionPro.Composition.SetBodyPageUsage("MMR Letter FR Front", true)
           FusionPro.Composition.SetBodyPageUsage("MMR Letter FR Back", true)
           break;

       case "GERMAN":
           FusionPro.Composition.SetBodyPageUsage("MMR Letter GE Front", true)
           FusionPro.Composition.SetBodyPageUsage("MMR Letter GE Back", true)
           break;

       case "JAPANESE":
           FusionPro.Composition.SetBodyPageUsage("MMR Letter JA Front", true)
           FusionPro.Composition.SetBodyPageUsage("MMR Letter JA Back", true)
           break;

       case "KOREAN":
           FusionPro.Composition.SetBodyPageUsage("MMR Letter KO Front", true)
           FusionPro.Composition.SetBodyPageUsage("MMR Letter KO Back", true)
           break;

       case "PORTUGUESE":
           FusionPro.Composition.SetBodyPageUsage("MMR Letter PO Front", true)
           FusionPro.Composition.SetBodyPageUsage("MMR Letter PO Back", true)
           break;

       case "SPANISH":
           FusionPro.Composition.SetBodyPageUsage("MMR Letter SP Front", true)
           FusionPro.Composition.SetBodyPageUsage("MMR Letter SP Back", true)
           break;
   }
}

(Continued in next post; stick with me!)

Link to comment
Share on other sites

(Continued from previous post.)

 

But that's still a bit repetitive, so it can actually be reduced a bit further, like so:

var LetterFront = "";
var LetterBack = "";

switch (Field("LCLanguage"))
{
   case "ENGLISH-USCAN":
   case "ENGLISH-OVERSEAS":
   case "ENGLISH-INDIA":
   case "HINDI-INDIA":
       FusionPro.Composition.SetBodyPageUsage("C23A EN Front", true);
       FusionPro.Composition.SetBodyPageUsage("C23A EN Back", true);
       LetterFront = "MMR Letter EN Front";
       LetterBack = "MMR Letter EN Back";
       break;

   case "CHINESE":
       FusionPro.Composition.SetBodyPageUsage("C23A CH Front", true);
       FusionPro.Composition.SetBodyPageUsage("C23A CH Back", true);
       LetterFront = "MMR Letter CH Front";
       LetterBack = "MMR Letter CN Back";
       break;

   case "FRENCH":
       FusionPro.Composition.SetBodyPageUsage("C23A FR Front", true);
       FusionPro.Composition.SetBodyPageUsage("C23A FR Back", true);
       LetterFront = "MMR Letter FR Front";
       LetterBack = "MMR Letter FR Back";
       break;

   case "GERMAN":
       FusionPro.Composition.SetBodyPageUsage("C23A GE Front", true);
       FusionPro.Composition.SetBodyPageUsage("C23A GE Back", true);
       LetterFront = "MMR Letter GE Front";
       LetterBack = "MMR Letter GE Back";
       break;

   case "JAPANESE":
       FusionPro.Composition.SetBodyPageUsage("C23A JA Front", true);
       FusionPro.Composition.SetBodyPageUsage("C23A JA Back", true);
       LetterFront = "MMR Letter JA Front";
       LetterBack = "MMR Letter JA Back";
       break;

   case "KOREAN":
       FusionPro.Composition.SetBodyPageUsage("C23A KO Front", true);
       FusionPro.Composition.SetBodyPageUsage("C23A KO Back", true);
       LetterFront = "MMR Letter KO Front";
       LetterBack = "MMR Letter KO Back";
       break;

   case "PORTUGUESE":
       FusionPro.Composition.SetBodyPageUsage("C23A PO Front", true);
       FusionPro.Composition.SetBodyPageUsage("C23A PO Back", true);
       LetterFront = "MMR Letter PO Front";
       LetterBack = "MMR Letter PO Back";
       break;

   case "SPANISH":
       FusionPro.Composition.SetBodyPageUsage("C23A SP Front", true);
       FusionPro.Composition.SetBodyPageUsage("C23A SP Back", true);
       LetterFront = "MMR Letter SP Front";
       LetterBack = "MMR Letter SP Back";
       break;
}

if (Field("SequenceID") == "12")
{
   FusionPro.Composition.SetBodyPageUsage(LetterFront, true);
   FusionPro.Composition.SetBodyPageUsage(LetterBack, true);
}

Although that suggests a further code reduction:

var MainFront = "";
var MainBack = "";
var LetterFront = "";
var LetterBack = "";

switch (Field("LCLanguage"))
{
   case "ENGLISH-USCAN":
   case "ENGLISH-OVERSEAS":
   case "ENGLISH-INDIA":
   case "HINDI-INDIA":
       MainFront = "C23A EN Front";
       MainBack = "C23A EN Back";
       LetterFront = "MMR Letter EN Front";
       LetterBack = "MMR Letter EN Back";
       break;

   case "CHINESE":
       MainFront = "C23A CH Front";
       MainBack = "C23A CH Back";
       LetterFront = "MMR Letter CH Front";
       LetterBack = "MMR Letter CN Back";
       break;

   case "FRENCH":
       MainFront = "C23A FR Front";
       MainBack = "C23A FR Back";
       LetterFront = "MMR Letter FR Front";
       LetterBack = "MMR Letter FR Back";
       break;

   case "GERMAN":
       MainFront = "C23A GE Front";
       MainBack = "C23A GE Back";
       LetterFront = "MMR Letter GE Front";
       LetterBack = "MMR Letter GE Back";
       break;

   case "JAPANESE":
       MainFront = "C23A JA Front";
       MainBack = "C23A JA Back";
       LetterFront = "MMR Letter JA Front";
       LetterBack = "MMR Letter JA Back";
       break;

   case "KOREAN":
       MainFront = "C23A KO Front";
       MainBack = "C23A KO Back";
       LetterFront = "MMR Letter KO Front";
       LetterBack = "MMR Letter KO Back";
       break;

   case "PORTUGUESE":
       MainFront = "C23A PO Front";
       MainBack = "C23A PO Back";
       LetterFront = "MMR Letter PO Front";
       LetterBack = "MMR Letter PO Back";
       break;

   case "SPANISH":
       MainFront = "C23A SP Front";
       MainBack = "C23A SP Back";
       LetterFront = "MMR Letter SP Front";
       LetterBack = "MMR Letter SP Back";
       break;
}

FusionPro.Composition.SetBodyPageUsage(MainFront, true);
FusionPro.Composition.SetBodyPageUsage(MainBack, true);

if (Field("SequenceID") == "12")
{
   FusionPro.Composition.SetBodyPageUsage(LetterFront, true);
   FusionPro.Composition.SetBodyPageUsage(LetterBack, true);
}

You're probably starting to see the pattern now. We can still reduce it even further, like so:

var LangCode = "";

switch (Field("LCLanguage"))
{
   case "ENGLISH-USCAN":
   case "ENGLISH-OVERSEAS":
   case "ENGLISH-INDIA":
   case "HINDI-INDIA":
       LangCode = "EN";
       break;

   case "CHINESE":
       LangCode = "CH";
       break;

   case "FRENCH":
       LangCode = "FR";
       break;

   case "GERMAN":
       LangCode = "GE";
       break;

   case "JAPANESE":
       LangCode = "JA";
       break;

   case "KOREAN":
       LangCode = "KO";
       break;

   case "PORTUGUESE":
       LangCode = "PO";
       break;

   case "SPANISH":
       LangCode = "SP";
       break;
}

FusionPro.Composition.SetBodyPageUsage("C23A " + LangCode + " Front", true);
FusionPro.Composition.SetBodyPageUsage("C23A " + LangCode + " Back", true);

if (Field("SequenceID") == "12")
{
   FusionPro.Composition.SetBodyPageUsage("MMR Letter " + LangCode + " Front", true);
   FusionPro.Composition.SetBodyPageUsage("MMR Letter " + LangCode + " Back", true);
}

But we're not done yet! Are you seeing the pattern? With only one exception, the two-letter language code is just the first two letters of the language field value. So we don't need that mapping with the switch statement at all!

 

Check this out:

var LangCode = Field("LCLanguage").substring(0, 2);

// one exception case
if (Field("LCLanguage") == "HINDI-INDIA")
   LangCode = "EN";

FusionPro.Composition.SetBodyPageUsage("C23A " + LangCode + " Front", true);
FusionPro.Composition.SetBodyPageUsage("C23A " + LangCode + " Back", true);

if (Field("SequenceID") == "12")
{
   FusionPro.Composition.SetBodyPageUsage("MMR Letter " + LangCode + " Front", true);
   FusionPro.Composition.SetBodyPageUsage("MMR Letter " + LangCode + " Back", true);
}

That's your entire rule. You don't need anything else.

 

There is one more thing we can do to simplify the job a bit more. If the data file is really always just sets of 12 records, then you don't need the SequenceID field. You can determine whether you're on the 12th record of each set by the FusionPro.Composition.inputRecordNumber property and the modulus (remainder) operator, like so:

var LangCode = Field("LCLanguage").substring(0, 2);

// one exception case
if (Field("LCLanguage") == "HINDI-INDIA")
   LangCode = "EN";

FusionPro.Composition.SetBodyPageUsage("C23A " + LangCode + " Front", true);
FusionPro.Composition.SetBodyPageUsage("C23A " + LangCode + " Back", true);

if (FusionPro.Composition.inputRecordNumber % 12 == 0) // every 12th record
{
   FusionPro.Composition.SetBodyPageUsage("MMR Letter " + LangCode + " Front", true);
   FusionPro.Composition.SetBodyPageUsage("MMR Letter " + LangCode + " Back", true);
}

Or, if you want to be one of the really cool kids:

var LangCode = Field("LCLanguage").substring(0, 2);

if (LangCode == "HI") // exception case for "HINDI-INDIA"
   LangCode = "EN";

FusionPro.Composition.SetBodyPageUsage("C23A " + LangCode + " Front", true);
FusionPro.Composition.SetBodyPageUsage("C23A " + LangCode + " Back", true);

// every 12th record:
FusionPro.Composition.SetBodyPageUsage("MMR Letter " + LangCode + " Front", FusionPro.Composition.inputRecordNumber % 12);
FusionPro.Composition.SetBodyPageUsage("MMR Letter " + LangCode + " Back", FusionPro.Composition.inputRecordNumber % 12);

:cool:

Link to comment
Share on other sites

Jon, Thanks for your input…

 

Dan…WOW….

 

My templates are usually very easy, this is the toughest ones I have had to do. Thanks for all the help.

 

BTW, where does one learn all of this at? Are there books or something I can use as a reference?

 

Jim

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...