Difference between revisions of "Document Template Classes"

From AgileApps Support Wiki
imported>Aeric
imported>Aeric
Line 48: Line 48:


====Changing Field Data====
====Changing Field Data====
This example substitutes the name of the state for its abbreviation, when processing a Customer record:
:<syntaxhighlight lang="java" enclose="div">
:<syntaxhighlight lang="java" enclose="div">
HashMap Stats = (HashMap)context.get("Statistics");
public void procesData(TemplateContext context, String object,String record)
Stats.put("notes", "Testing update from custom data source");
{
    HashMap customerMap = (HashMap)context.get("Customers");
Object createdUsr = Stats.get("created_id");
    String state = customerMap.get("state").toString();
//Functions.debug(createdUsr.getClass());
    if ("CA".equals(state)) { customerMap.put("state","California"); }
if (createdUsr instanceof HashMap)
}
{
HashMap createdUser = (HashMap)Stats.get("created_id");
String state = createdUser.get("state").toString();
if("CA".equals(state)){
createdUser.put("state","California");
</syntaxhighlight>
</syntaxhighlight>



Revision as of 22:04, 5 April 2012

__TBD: In progress...__

About Print Template Classes

You can use a method in a Print Template Class to manipulate the data that a Print Template has available for processing. Here's how it works:

  • The TemplateContext contains a HashMap for each record the Print Template can process, indexed by a string:
  • "objectName" - Contains the data for the record the Print Template was invoked on
  • "createdUsr" - Contains USER object data for the person who created the record.
  • "modifiedUsr" - Contains USER object data for the person who most recently modified the record.

__TBD: Are the names correct? Are there any other maps?__

  • To a Print Template, then, a data object is simply a HashMap that is present in the TemplateContext.
  • That object is passed to a method in your Print Template class. By manipulating the HashMaps it contains, you change the data that the Print Template will be processing. You can even add new "objects", by adding additional HashMaps.

Coding a Method in a Print Template Class

In a Print Template, a data reference has the form $objectName.fieldname. To access, create, or modify data in your code, you will do one or more of the following operations:

  • Retrieve an object's HashMap from the TemplateContext: TemplateContext.get("objectName");
  • Add or update a data HashMap: TemplateContext.put("objectName", HashMap);
  • Get a field from data HashMap: HashMap.get("fieldName");
  • Add or update a field in a data HashMap: HashMap.put("fieldName",value);
    where value is typically a string or a nested HashMap.

__TBD: Nesting works, yes?__

Configuring a Print Template to use a Specified Class and Method

--select the class, and the method to use

Methods that take following arguments are listed:

  • com.platform.api.TemplateContext - The container that the print template gets its data from.
  • String (objectName) - The name of the object the print template was invoked on.
  • String (recordID) - The ID of the record on which it was invoked.

__TBD:
TemplateContext is in new javadocs, yes?
objectName is passed in, yes?
Does return value have to be void?__

Accessing Lookup Target Records

__TBD: Is nested data stored like this?__ Data from lookup-target records is stored as a nested map. For example, to get data for the template variable $Order.customer.name:

  1. HashMap orderMap = TemplateContext.get("Order")
    gets the Order HashMap from the context.
  2. HashMap customerMap = orderMap.get("customer")
    gets the lookup-target record for the customer field.
  3. String name = customerMap.get("name")
    gets the customer's name.

Examples

Changing Field Data

This example substitutes the name of the state for its abbreviation, when processing a Customer record:

public void procesData(TemplateContext context, String object,String record)
{
    HashMap customerMap = (HashMap)context.get("Customers");
    String state = customerMap.get("state").toString();
    if ("CA".equals(state)) { customerMap.put("state","California"); }
}

Example: Adding a New Field

Example: Adding a New Object

This code creates a new ProductSupplier "object" (as far as the Print Template is concerned), and adds it to the TenantContext (context).

public void procesData(TemplateContext context, String object,String record)
{
    HashMap<String, Object> productSupplierMap = new HashMap<String, Object>();
    map.put("supplierName", "Stuff R' Us");
    map.put("phone", "408-555-0987");
    context.put("ProductSupplier", productSupplierMap);
}

After that method has run, the Print Template can use the variable $ProductSupplier.phone, just as though the data had originated in the platform.