Is there a way for the document printer template to skip rendering elements that are empty strings?
[SORTED ORDER TAGS]
-- Format for order tags
<Table FontSize="10" CellSpacing="0" Margin="0" Padding="0">
<Table.Columns>
<TableColumn Width="45*"/>
<TableColumn Width="15*"/>
<TableColumn Width="20*"/>
<TableColumn Width="20*"/>
</Table.Columns>
<TableRowGroup>
<TableRow>
<TableCell Padding="0"><Paragraph Margin="0" TextAlignment="Left"><![CDATA[[= F(TN('{ORDER TAG PRICE}')) != 0 ? ' {ORDER TAG NAME}' : '']]]></Paragraph></TableCell>
<TableCell Padding="0"><Paragraph Margin="0" TextAlignment="Center">[= F(TN('{ORDER TAG PRICE}')) != 0 ? F({ORDER TAG QUANTITY}*{QUANTITY},'#.#') : '']</Paragraph></TableCell>
<TableCell Padding="0"><Paragraph Margin="0" TextAlignment="Center">[= F(TN('{ORDER TAG PRICE}')) != 0 ? '{ORDER TAG PRICE}' : '']</Paragraph></TableCell>
<TableCell Padding="0"><Paragraph Margin="0" TextAlignment="Right">[= F(TN('{ORDER TAG PRICE}')) != 0 ? F({ORDER TAG PRICE}*{ORDER TAG QUANTITY}*{QUANTITY}) : '']</Paragraph></TableCell>
</TableRow>
</TableRowGroup>
</Table>
Wrapping the whole thing in ternary expression works.
[SORTED ORDER TAGS]
-- Format for order tags
[=TN('{ORDER TAG PRICE}') != 0 ? '<Table FontSize="10" CellSpacing="0" Margin="0" Padding="0"><Table.Columns><TableColumn Width="45*"/><TableColumn Width="15*"/><TableColumn Width="20*"/><TableColumn Width="20*"/></Table.Columns><TableRowGroup><TableRow><TableCell Padding="20,0,0,0"><Paragraph Margin="0" TextAlignment="Left">{ORDER TAG NAME}</Paragraph></TableCell><TableCell Padding="0"><Paragraph Margin="0" TextAlignment="Center">' + F({ORDER TAG QUANTITY}*{QUANTITY},'#.#') + '</Paragraph></TableCell><TableCell Padding="0"><Paragraph Margin="0" TextAlignment="Center">{ORDER TAG PRICE}</Paragraph></TableCell><TableCell Padding="0"><Paragraph Margin="0" TextAlignment="Right">' + F({ORDER TAG PRICE}*{ORDER TAG QUANTITY}*{QUANTITY}) + '</Paragraph></TableCell></TableRow></TableRowGroup></Table>' : '']
But you wont be able to sanitize the name with <![CDATA[{ORDER TAG NAME}]]> within the ternary expression. And you don’t want to experience this error mid service when printing templates
Automation > Scripts > Add Script
Name: Utils
Handler: util
Script:
function xmlEncode(text) {
return text.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F]/g, '');
}
Since you cant use native CDATA to sanitize text, you have to call this script to clean up
{CALL:util.xmlEncode('{ORDER TAG NAME}')}
[SORTED ORDER TAGS]
-- Format for order tags
[=TN('{ORDER TAG PRICE}') != 0 ? '<Table FontSize="10" CellSpacing="0" Margin="0" Padding="0"><Table.Columns><TableColumn Width="45*"/><TableColumn Width="15*"/><TableColumn Width="20*"/><TableColumn Width="20*"/></Table.Columns><TableRowGroup><TableRow><TableCell Padding="20,0,0,0"><Paragraph Margin="0" TextAlignment="Left">{CALL:util.xmlEncode('{ORDER TAG NAME}')}</Paragraph></TableCell><TableCell Padding="0"><Paragraph Margin="0" TextAlignment="Center">' + F({ORDER TAG QUANTITY}*{QUANTITY},'#.#') + '</Paragraph></TableCell><TableCell Padding="0"><Paragraph Margin="0" TextAlignment="Center">{ORDER TAG PRICE}</Paragraph></TableCell><TableCell Padding="0"><Paragraph Margin="0" TextAlignment="Right">' + F({ORDER TAG PRICE}*{ORDER TAG QUANTITY}*{QUANTITY}) + '</Paragraph></TableCell></TableRow></TableRowGroup></Table>' : '']