The MSPro Boomi Collection
About
Good Practices & Patterns
Good Practices & Patterns
  • Markus' Boomi Integration
  • Implementation Patterns
    • The Cache Challenge
      • The Get-Or-Create Use-Case
      • PropCache Scripts
    • State Management
      • Example Scenario
      • State-Management in general
      • State-Management Functionality
      • Technical Solutions
        • Boomi File-System Implementation
          • saveState
          • readState & fetchStates
    • Exception Handling
      • Exception vs Error
      • Basic Rules
        • Aggregating Exceptions
      • Exception Handling Pattern
        • User-Defined Exception Messages
        • Catch Exceptions
      • The pattern in practice
        • API Error Handling
          • Single Record Strategy
            • Single Record RES
          • Many Records Strategy (Array)
            • Many Records RES
        • Pre-Condition Check
    • SQL Patterns
      • Script Header
      • General Rules
        • Check using RowCount
        • Check if record exists
        • Pagination and Sorting
        • Parameter - Best Practices
        • Use JSON as a complex parameter
    • Process Patterns
      • Process Route Implementation Pattern
      • Sub-Process or Process Route
    • DateTime
      • The Boomi datetime dilemma
      • Database and Flow
      • Groovy
      • Data Hub
      • Get Current Date
    • Groovy Script Patterns
      • Dynamic Document Properties
      • Dynamic Process Properties
      • Documents
    • Array Elements to Documents
  • MSPro Services
    • Intermediate Storage
      • Example Processes
        • Docs 01 - Update and Create
          • sub.SampleData.Invoice
        • 02 - Upsert and Get
    • Render Templates
  • Tips
Powered by GitBook
On this page
  • Boomi Script
  • Test Class
  1. Implementation Patterns
  2. Groovy Script Patterns

Dynamic Document Properties

Boomi Script

final String userDefinedPropertyBase = 'document.dynamic.userdefined.'
final String DDP_Template = userDefinedPropertyBase + 'DDP_Template'

for (int docNo = 0; docNo < dataContext.getDataCount(); docNo++) {
    String document = _getTextDocument(dataContext, docNo)
    Properties props = dataContext.getProperties(docNo)
    def jsonDoc = js.parseText(document) 

    // *********** Script functionality ************

    String templateText = props.getProperty( DDP_Template, "")
    if( templateText.length() == 0)
        throw new InvalidParameterException("DDP_Template is empty!")
    ...

Test Class

// Define the Dynamic Property Name respecting the base path
String DDP_TemplateName = Document.userDefinedPropertyBase + "DDP_Template"

Properties prop = new Properties()
prop[ DDP_TemplateName] = (new File(TESTDATA_DIR + "/basicTemplate.html")).getText("UTF-8")

	DataContext inDataContext = DataContext.withDocuments(
	[
		Document.fromFile(TESTDATA_DIR + "basicData.json",  prop )
	]
)

Do not use dynamic map initialization in Groovy:

String DDP_TemplateName = Document.userDefinedPropertyBase + "DDP_Template"
Properties prop = new Properties() [ { **DDP_TemplateName** : "abc" } ]

The Groovy dynamic map initialization [ { key : value } ] will not recognize DDP_TemplateName as a variable but as a dynamic property. This is actually the same code:

String DDP_TemplateName = Document.userDefinedPropertyBase + "DDP_Template"
Properties prop = new Properties() [ { **"DDP_TemplateName"** : "abc" } ]

Last updated 1 year ago