Susan Posted September 29, 2016 Posted September 29, 2016 I am using table rules for this document. I've attached a screenshot showing how the bottom "quote" table is printing copy I don't want. I am using fields “Quote” and “Recipient Name_cal”. Can I put a rule within my table rule to suppress the “-Namel” if there is no copy in the “Quote” field. Below is my table rule for the bottom on the screen shot, fields are highlighted in red: if(FusionPro.Composition.isPreview == true || FusionPro.inValidation == true) { Rule("OnJobStart"); } //Get a count of the total number of records in the external data file numRecsExtDF = externalDF.recordCount; /*============================================================================= || Create arrays to hold values that match the CID of the client's record ||=============================================================================*/ var QuoteMatch = []; var RecipientMatch = []; // Step through the external data file and push matches into their respective variables if there is a match for (var i=1; i <= numRecsExtDF; i++) { if (externalDF.GetFieldValue(i, 'Fund') == Field("Fund")) { QuoteMatch.push(TaggedTextFromRaw(externalDF.GetFieldValue(i, 'Quote'))); RecipientMatch.push(TaggedTextFromRaw(externalDF.GetFieldValue(i, 'Recipient Name_cal'))); } } /*============================================================================= || Create the table ||=============================================================================*/ new FPTable; var myTable = new FPTable; myTable.AddColumns(47000); // interate through the length of the arrays (data matches from external data file) and create rows for (var i = 0; i < QuoteMatch.length; i++) { // TABLE CONTENT FORMATTING var row = myTable.AddRow(); for (var c = 0; c < myTable.Columns.length; c++) { row.SetContents(QuoteMatch, RecipientMatch); var cell = row.Cells[c]; cell.Font = "Gotham-Book"; cell.PointSize = "10"; cell.TextColor = "Black"; cell.ShadeColor = "Black"; cell.Margins = { Top:20, Bottom:100, Right:20, Left:20}; cell.VAlign = "Left"; cell.HAlign = "Left"; // CREATE CONTENT FOR EXTERNAL DATA FILE RECORDS row.SetContents(QuoteMatch + " –"+'<f name=Gotham-Medium>'+ RecipientMatch); } } return myTable.MakeTags(); Quote
Dan Korn Posted September 29, 2016 Posted September 29, 2016 You don't really need to suppress table rows where the quote is empty; you need to simply not output them in the first place. Since you're building up an array of quotes, and then outputting all of the items in that array to the table, you can just not put empty quotes into the array, in this part of the code: // Step through the external data file and push matches into their respective variables if there is a match for (var i = 1; i <= numRecsExtDF; i++) { if (externalDF.GetFieldValue(i, 'Fund') == Field("Fund")) { var quote = TaggedTextFromRaw(externalDF.GetFieldValue(i, 'Quote')); var recipient = TaggedTextFromRaw(externalDF.GetFieldValue(i, 'Recipient Name_cal')); if (quote) { QuoteMatch.push(quote); RecipientMatch.push(recipient); } } } Quote
step Posted September 29, 2016 Posted September 29, 2016 Is there a reason you're using a table for that layout? It seems to me you could simplify things by just doing this: return externalDF.FindRecords('Fund', Field("Fund")) .map(function(s){ var quote = TaggedTextFromRaw(externalDF.GetFieldValue(s, 'Quote')); var name = TaggedTextFromRaw(externalDF.GetFieldValue(s, 'Recipient Name_cal')); return quote ? [quote, '<f name=Gotham-Medium>' + name].filter(function(p) { return RawTextFromTagged(p); }).join(' - ') : ''; }).filter(String).join('<br>'); But if you want to use a table for some reason, this change should give you the results you want: if(FusionPro.Composition.isPreview == true || FusionPro.inValidation == true) { Rule("OnJobStart"); } //Get a count of the total number of records in the external data file numRecsExtDF = externalDF.recordCount; /*============================================================================= || Create arrays to hold values that match the CID of the client's record ||=============================================================================*/ var QuoteMatch = []; var RecipientMatch = []; // Step through the external data file and push matches into their respective variables if there is a match for (var i=1; i <= numRecsExtDF; i++) { if (externalDF.GetFieldValue(i, 'Fund') == Field("Fund")) { [color="Red"]if (quote = TaggedTextFromRaw(externalDF.GetFieldValue(i, 'Quote'))) QuoteMatch.push(quote); RecipientMatch.push(TaggedTextFromRaw(externalDF.GetFieldValue(i, 'Recipient Name_cal'))); }[/color] } } /*============================================================================= || Create the table ||=============================================================================*/ new FPTable; var myTable = new FPTable; myTable.AddColumns(47000); // interate through the length of the arrays (data matches from external data file) and create rows for (var i = 0; i < QuoteMatch.length; i++) { // TABLE CONTENT FORMATTING var row = myTable.AddRow(); for (var c = 0; c < myTable.Columns.length; c++) { var cell = row.Cells[c]; cell.Font = "Gotham-Book"; cell.PointSize = "10"; cell.TextColor = "Black"; cell.ShadeColor = "Black"; cell.Margins = { Top:20, Bottom:100, Right:20, Left:20}; cell.VAlign = "Left"; cell.HAlign = "Left"; // CREATE CONTENT FOR EXTERNAL DATA FILE RECORDS row.SetContents(QuoteMatch[i] + " –"+'<f name=Gotham-Medium>'+ RecipientMatch[i]); } } return myTable.MakeTags(); Quote
Susan Posted September 29, 2016 Author Posted September 29, 2016 Thanks for the help. I was able to get the results I needed using your rule (not the table rule) but I was wondering if there is a way I can keep the quotes from breaking when I use an overflow page. I've attached a sample pdf. When I assign "keep with next paragraph" or change widows to 99 it treats the <Quote External Data Rule> as one object and knocks it all over to the next page. Below is the changes I made to your rule. //Create an empty variable that will be populated with a //string of text that lists the customer's purchases returnStr = ''; //The following if statement will detect if we are currently in preview //mode or editing this rule (versus composing output). If so, the script //will manually call the OnJobStart rule so the link to the external //data file can be established. OnJobStart is called automatically when //a full composition is run. if(FusionPro.Composition.isPreview == true || FusionPro.inValidation == true) { Rule("OnJobStart"); } return externalDF.FindRecords('Fund', Field("Fund")) .map(function(s){ var quote = TaggedTextFromRaw(externalDF.GetFieldValue(s, 'Quote')); var name = TaggedTextFromRaw(externalDF.GetFieldValue(s, 'Recipient Name_cal')); return quote ? ['<f name=Gotham-Book>'+ '"' +quote, '<f name=Gotham-Medium>' + name].filter(function(p) { return RawTextFromTagged(p); }).join('" - ') : ''; }).filter(String).join('<br><br>'); Quote
Recommended Posts
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.