Difference between revisions of "Create an MS Word Print Template"

From LongJump Support Wiki
imported>Aeric
imported>Aeric
 
(30 intermediate revisions by the same user not shown)
Line 1: Line 1:
===Creating the Template File===
===Creating the Template File===
# On your local system, create a Word document  
# On your local system, create a Word document  
# Add boilerplate text and place-holder images.
# Add boilerplate text and placeholder images.
# Add place-holder images for any record images or charts you plan to add. Size them appropriately.
# Insert template variables, record-specific images, and/or charts, as explained below.
# Insert template variables, record-specific images, and/or charts, as explained below.
# Save it in <tt>.docx</tt> format.
# Save it in <tt>.docx</tt> format.
{{Note|<br>The <tt>.docx</tt> file is stored in an XML format the platform can work with.<br>A <tt>.doc</tt> file is in a binary (numeric) format that won't work.}}
{{Note|<br>The <tt>.docx</tt> file is stored in an XML format the platform can work with.<br>A <tt>.doc</tt> file is in a binary (numeric) format that won't work.}}


===Adding Template Variables===
===Inserting Template Variables===
To insert a template variable:
# Begin to [[Add a Print Template]] or '''[Edit]''' an existing template.<br>The [[Template Variable Tool]] appears.
#:[[File:TemplateVariableTool.jpg]]
#:
# Select the '''Category''' of fields to choose from.<br>(Fields in the current object or [[Related Objects]], User fields, or Company fields)
# Under '''Fields''', scroll down the list to find fields in the current record or in a [[Lookup]] target record.
# Select the field to add.<br>The variable name appears.
# Copy the variable name to the clipboard.
# In the template file, create a field:
#* Press Ctrl+F9 ('''Insert > Quick Parts > Field''')
#:
# Right click on the field
# Select "Edit Field..."<br>The Field dialog opens.
# Specify field type:
#* '''Categories:''' Mail Merge
#* '''Field names:''' MergeField
#:
# Under '''Field Properties''', specify:
#* '''Field name:''' Paste the variable name you copied in Step #5.
#:
# Click '''[OK]'''
 
===Working with Template Variables===
 
====Convert Currency Variables to Numbers====
{{:Common:Convert Variables to Numbers}}


===Inserting an Image Stored in an Object Record===
===Inserting an Image Stored in an Object Record===
To insert an image into a Print Template, use the platform <tt>IMG</tt> tag in an HTML <tt>img</tt> element.
To insert an image:
# Select a placeholder image to replace.
# Right click on the image. Choose '''Size...'''
# Click the '''Alt Text''' tab
# In the '''Alternative Text''' area, type in a platform <tt>IMG</tt> tag  


;Format:
{{:IMG Tag}}
:<tt><nowiki><img src="IMG</nowiki></tt><u><b>{$</b></u>''objectName''<u>.</u>''imageFieldName''<u><b>}</b></u><tt>"></tt>
where:
:* '''objectName -''' The name of the current object. (This variable is in {{Velocity}} format. The object name effectively creates a namespace, ensuring that there is no conflict with another variable that might have the same name.)
:* '''imageFieldName -''' The name of the field in the current record that contains the image to display, joined to the object name by a "dot" (.).


{{Important|The braces <u>{</u>...<u>}</u> and other underlined characters in this syntax are ''literals''. Type them in exactly as shown.}}
;Example:
:<tt><nowiki>IMG{$Customer.logo_image}</nowiki></tt>
<!--
===Inserting a Chart===
To insert a chart:
# Select a placeholder image to replace.
# Right click on the image. Choose '''Size...'''
# Click the '''Alt Text''' tab
# In the '''Alternative Text''' area, type in a platform <tt>CHART</tt> tag


;Result:
{{:CHART Tag}}
:The URL for the image is inserted into the generated page. When viewed, the image is displayed.


;Example:
'''Example #1 -''' A chart with no optional arguments:  
:<tt><nowiki><img src=”IMG{$Customer.logo_image}></nowiki></tt>
:<tt><nowiki>CHART{c5cc43653b1b49db8142bc844735c209}</nowiki></tt>
 
'''Example #2 -''' A chart of Orders taken by the owner of the current record:
:<tt><nowiki>CHART{c5cc43653b1b49db8142bc844735c209, chart-title=Orders by $Order.owner.full_name, owner_id=$Order.owner.id}</nowiki></tt>
-->
===Accessing Related Records===
When processing related records, you generally want to insert rows into a table. In HTML, you would do that by putting the loop-controls around an individual row:
:<tt>#foreach($d in $developers)</tt>
: &nbsp; &nbsp; &nbsp;<tt>&lt;tr></tt>...row contents here...<tt>&lt;/tr></tt>
:<tt>#end</tt>


===Inserting a Chart===
The problem is that, in MS Word, there is no place "outside the row" to put the loop controls.  
To insert a chart into a Print Template, use the platform <tt>CHART</tt> tag in an HTML <tt>img</tt> element.  


;Format:
The solution is to use two special constructs that go into the first cell of the row:
:<tt><nowiki><img src="CHART</nowiki></tt><u><b>{$</b></u>''report_id''<u><b>}</b></u><tt>"></tt>
:* <tt>@before-row#foreach($d in $developers)</tt>
:<tt><nowiki><img src="CHART</nowiki></tt><u><b>{$</b></u>''report_id'', <u>chart-title=</u>''Your Title'', ''field1''<u>=</u>''value'', ...<u><b>}</b></u><tt>"></tt>
:* <tt>@after-row#end</tt>
where:
:* '''report_id -''' A required argument that gives the ID of the report that generates the chart. 
:* '''chart-title -''' An optional argument containing text for a chart title.
:* '''field1 -''' An optional record field. Only records with a matching value will be included in the generated chart. Up to three fields and values can be specified in the comma-separated list. (More can be specified, but only the first three are used.)


{{Important|The braces <u>{</u>...<u>}</u> and other underlined characters in this syntax are ''literals''. Type them in exactly as shown.}}
:;Considerations:
::* The constructs only need to be specified once in the row, in the first cell.
::* Each construct is inserted as a field in the cell ('''Insert > Quick Parts > Field''')
::* Between them, include the field that will be displayed in the cell
:;Example:
:: <tt>'''&laquo;'''@before-row#foreach($d in $developers)'''&raquo;<br>&laquo;'''$d.Name'''&raquo;<br>&laquo;'''@after-row#end'''&raquo;'''</tt>


;Result:
''Learn more:'' [http://code.google.com/p/xdocreport/wiki/DocxReportingJavaMainListFieldAdvancedTable#Solution:_use_@before-row_@after-row Solution: use @before-row @after-row]
:A URL for the generated chart is inserted into the generated page. When viewed, the chart image is displayed.


'''Example #1 -''' Inserting a chart with no optional arguments:  
===Learn More===
:<tt><nowiki><img src="CHART{c5cc43653b1b49db8142bc844735c209}"></nowiki></tt>
:* [[Print Templates]]
:* [[Print Templates#Accessing Related Records|Accessing Related Records]]
<noinclude>


'''Example #2 -''' Inserting a chart of Orders taken by the owner of the current record:
[[Category:Presentation | 5]]
:<tt><nowiki><img src="CHART{c5cc43653b1b49db8142bc844735c209, chart-title=Orders by $Order.owner.full_name, owner_id=$Order.owner.id}"></nowiki></tt>
[[Category:Tutorials]]
</noinclude>

Latest revision as of 17:53, 14 September 2012

Creating the Template File

  1. On your local system, create a Word document
  2. Add boilerplate text and placeholder images.
  3. Add place-holder images for any record images or charts you plan to add. Size them appropriately.
  4. Insert template variables, record-specific images, and/or charts, as explained below.
  5. Save it in .docx format.

Notepad.png

Note:
The .docx file is stored in an XML format the platform can work with.
A .doc file is in a binary (numeric) format that won't work.

Inserting Template Variables

To insert a template variable:

  1. Begin to Add a Print Template or [Edit] an existing template.
    The Template Variable Tool appears.
    TemplateVariableTool.jpg
  2. Select the Category of fields to choose from.
    (Fields in the current object or Related Objects, User fields, or Company fields)
  3. Under Fields, scroll down the list to find fields in the current record or in a Lookup target record.
  4. Select the field to add.
    The variable name appears.
  5. Copy the variable name to the clipboard.
  6. In the template file, create a field:
    • Press Ctrl+F9 (Insert > Quick Parts > Field)
  7. Right click on the field
  8. Select "Edit Field..."
    The Field dialog opens.
  9. Specify field type:
    • Categories: Mail Merge
    • Field names: MergeField
  10. Under Field Properties, specify:
    • Field name: Paste the variable name you copied in Step #5.
  11. Click [OK]

Working with Template Variables

Convert Currency Variables to Numbers

When you want to do calculations on a currency field in Velocity, you need to create a number from the currency strings delivered by the platform. That string has the form $ 24.95. The following code converts it into a number:

#set($n = 0.00)
#set($s = $YourObject.currency_field.substring(2) )
#set($n = $n.parseDouble($s)

where:

  • $n = 0.00 creates an instance of the double-precision float class (Double)
  • $YourObject.currency_field.substring(2) removes the first two characters from the currency string. (The $ sign and the space that follows it.)
  • parseDouble($s) converts the resulting string into a double-precision float--a number that can be used in calculations.

Inserting an Image Stored in an Object Record

To insert an image:

  1. Select a placeholder image to replace.
  2. Right click on the image. Choose Size...
  3. Click the Alt Text tab
  4. In the Alternative Text area, type in a platform IMG tag
IMG Tag
IMG{$objectName.imageFieldName}

where:

  • objectName - The name of the current object. (This variable is in Velocity format. The object name effectively creates a namespace, ensuring that there is no conflict with another variable that might have the same name.)
  • imageFieldName - The name of the field in the current record that contains the image to display, joined to the object name by a "dot" (.).

Warn.png

Important: This syntax uses braces: {...}. The braces and other underlined characters in this syntax are literals. Type them in exactly as shown.

Result
The URL for the image is inserted into the generated page. When viewed, the image is displayed.
Example
IMG{$Customer.logo_image}

Accessing Related Records

When processing related records, you generally want to insert rows into a table. In HTML, you would do that by putting the loop-controls around an individual row:

#foreach($d in $developers)
     <tr>...row contents here...</tr>
#end

The problem is that, in MS Word, there is no place "outside the row" to put the loop controls.

The solution is to use two special constructs that go into the first cell of the row:

  • @before-row#foreach($d in $developers)
  • @after-row#end
Considerations
  • The constructs only need to be specified once in the row, in the first cell.
  • Each construct is inserted as a field in the cell (Insert > Quick Parts > Field)
  • Between them, include the field that will be displayed in the cell
Example
«@before-row#foreach($d in $developers)»
«
$d.Name»
«
@after-row#end»

Learn more: Solution: use @before-row @after-row

Learn More