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

From AgileApps Support Wiki
imported>Aeric
 
(49 intermediate revisions by 3 users not shown)
Line 1: Line 1:
===Creating the Template File===
<noinclude>__TOC__</noinclude>
An MS Word document can be used as a document template. To do so, it is only necessary to insert record variables into a standard MS Word document.
 
''Learn More:''
:* [[Document Templates]]
:* [[Document Templates#Accessing Related Records|Accessing Related Records]]
 
==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.
# 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|
:* The <tt>.docx</tt> file is stored in an XML format the platform can work with.
:* A <tt>.doc</tt> file is in a binary (numeric) format that won't work.
:* The AgileApps document template feature does not support the documents generated through Microsoft Cloud (www.office.com).
:* The access to the file should be unrestricted.
:* A file type conversion could lead to an error when sending the email. }}
 
==Working with Template Variables==


===Inserting Template Variables===
===Inserting Template Variables===
To insert a template variable:
To insert a template variable:
#  
# Begin to [[Add a Document Template]] or '''[Edit]''' an existing template.<br>The [[Template Variable Tool]] appears.
 
#:[[File:TemplateVariableTool.jpg]]
===Inserting an Image Stored in an Object Record===
#:
To insert an image:
# 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, right click on the field, and select "Edit Field..."
#* Or click '''Insert > Quick Parts > Field'''
#: The Field dialog opens.
#:
# Select the field type:
#* '''Categories:''' Mail Merge
#* '''Field names:''' MergeField
    {{Note|The RTA field type is not supported in document templates of type .docx/.ppt. If you use RTA field type, then when you print the document template, Rich Text Area field is printed with HTML tags.}}
:8. Under '''Field Properties''', specify:
:* '''Field name:''' Paste the variable name you copied in Step #5.
:9. Click '''[OK]'''


... use the platform <tt>IMG</tt> tag in an HTML <tt>img</tt> element.
===Testing Boolean Values===
{{:Common:Testing Boolean Values in Velocity}}


;Format:
===Convert Currency Variables to Numbers===
:<tt><nowiki><img src="IMG</nowiki></tt><u><b>{$</b></u>''objectName''<u>.</u>''imageFieldName''<u><b>}</b></u><tt>"></tt>
{{:Common:Convert Variables to Numbers}}
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.}}
==Inserting an Image Stored in an Object Record==
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


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


;Example:
;Example:
:<tt><nowiki><img src=”IMG{$Customer.logo_image}”></nowiki></tt>
:<tt><nowiki>IMG{$Customer.logo_image}</nowiki></tt>
 
<!--
===Inserting a Chart===
==Inserting a Chart==
To insert a chart:
To insert a chart:
#
# Select a placeholder image to replace.
 
# Right click on the image. Choose '''Size...'''
...use the platform <tt>CHART</tt> tag in an HTML <tt>img</tt> element.
# Click the '''Alt Text''' tab
# In the '''Alternative Text''' area, type in a platform <tt>CHART</tt> tag  


;Format:
{{:CHART Tag}}
:<tt><nowiki><img src="CHART</nowiki></tt><u><b>{$</b></u>''report_id''<u><b>}</b></u><tt>"></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>
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.}}
'''Example #1 -''' A chart with no optional arguments:
:<tt><nowiki>CHART{c5cc43653b1b49db8142bc844735c209}</nowiki></tt>


;Result:
'''Example #2 -''' A chart of Orders taken by the owner of the current record:
:A URL for the generated chart is inserted into the generated page. When viewed, the chart image is displayed.
:<tt><nowiki>CHART{c5cc43653b1b49db8142bc844735c209, chart-title=Orders by $Order.owner.full_name, owner_id=$Order.owner.id}</nowiki></tt>
-->
==Processing Related Records==
{{:Common:Processing Related Records in MS Office}}


'''Example #1 -''' Inserting a chart with no optional arguments:
<noinclude>
:<tt><nowiki><img src="CHART{c5cc43653b1b49db8142bc844735c209}"></nowiki></tt>


'''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 04:55, 6 June 2023

An MS Word document can be used as a document template. To do so, it is only necessary to insert record variables into a standard MS Word document.

Learn More:

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.
  • The AgileApps document template feature does not support the documents generated through Microsoft Cloud (www.office.com).
  • The access to the file should be unrestricted.
  • A file type conversion could lead to an error when sending the email.

Working with Template Variables

Inserting Template Variables

To insert a template variable:

  1. Begin to Add a Document 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, right click on the field, and select "Edit Field..."
    • Or click Insert > Quick Parts > Field
    The Field dialog opens.
  7. Select the field type:
    • Categories: Mail Merge
    • Field names: MergeField

Notepad.png

Note: The RTA field type is not supported in document templates of type .docx/.ppt. If you use RTA field type, then when you print the document template, Rich Text Area field is printed with HTML tags.

8. Under Field Properties, specify:
  • Field name: Paste the variable name you copied in Step #5.
9. Click [OK]

Testing Boolean Values

Boolean values are seen in Velocity as strings with the value "Yes" or "No". So a test of a boolean field looks something like this:

#if ($BooleanField == "Yes"), or
#if ($BooleanField == "No")

Or, similarly,

#if ($BooleanField != "Yes"
#if ($BooleanField != "No")

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 to a number that can be used in calculations:

#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}

Processing Related Records

Finding Related-Record Variables

Related Object variables are found using the Template Variable Tool.

Here, in the Email Template for Claims, the related ClaimItems object is being chosen from the category list:

TemplateVariableToolRelatedObjects.png

Within that group, the Item Name field is listed, along with other fields in the ClaimITems object. Once selected, the variable name appears in the Variable area, along with the loop it needs to be surrounded by for processing:

#foreach( $ClaimItems_record in $ClaimItems ) $ClaimItems_record.item_name #end

If a loop already exists, you would use only the variable name part:

$ClaimItems_record.item_name

Notepad.png

Note:
For a many-to-many relationship like one between Claims and Tags, the variable looks like this:

$Claims_Tags_record.related_to_Tags.tag_name

where:

  • $Claims_Tags is the Junction Object that produces the many-to-many relationship
  • related_to_Tags is the name of the Lookup field in the Junction Object that references a Tags record
  • tag_name is the field to display
  • The "dot" separator (.) joins each of the segments in the variable name

Using Related-Record Variables

For HTML, you insert related records into a table by putting loop-controls around code that specifies the format for a row:

#foreach($i in $Order_Items)
     <tr>...row contents here...</tr>
#end

The problem in MS Office tables is that there is no place "outside the row" to put those loop controls.

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

  • @before-row#foreach($i in $Order_Items)
  • @after-row#end
Considerations
  • The constructs only need to be specified once in the row, in the first cell.
  • Between them, include the field that will be displayed in the cell
  • Like the fields, the loop construct are inserted into the cell as fields
  • Insert > Quick Parts > Field, Category: Mail Merge, Field type: MergeField
  • Or copy an existing field, right click, and select the Edit Field... option
  • For other cells in the row, specify the field to include in that cell, without the extra constructs
Example
Cell 1:
«@before-row#foreach($i in $Order_Items)»
«
$i.item»
«
@after-row#end»
Cell 2:
«$i.quantity»
and so on...
The resulting table will look something like this (with line breaks included in the first cell to make it more readable):
WordTemplateRelatedRecordVaraibles.png
Sample Template: OrderInvoiceWordTemplate.docx
Learn more: Solution: use @before-row @after-row