Skip to main content

Version: 23.10

Form Dynamic Data

The Form Dynamic Data service provides forms with dynamic data in real-time while the user is interacting with the form.

Service Invoke Parameters

Parameters are not nullable except where otherwise indicated.

ParameterDescription
svcDefSvcDef
A service definition value object.
txnTxn
Nullable. A transaction record value object.
requestHttpServletRequest
A HTTP servlet request.
userUser
Nullable. An authenticated user.

Script Result

The script returns a JSON string value to be bound into the HTML form's data model.

Error Handling

If your Groovy script throws an error, the FormDynamicDataServlet will return a HTTP 500 error code back to the form. It is up to the form to handle the error returned. The system logs the error to the Journey Manager database event log specifying an event type of 'Error'.

Templates

Service

import com.avoka.core.groovy.GroovyLogger as logger
import com.avoka.tm.vo.*
import javax.servlet.http.*

class FluentDynamicData {

/*
* Perform Form Dynamic Data service call.
*
* returns: REST response text data
*/
String invoke(SvcDef svcDef, Txn txn, HttpServletRequest request, User user) {

// TODO: replace with data lookup call

String data = '''{
"address": {
"firstLine": "123 Wall Street"
}
}'''

return data
}
}

Unit Test Template

import com.avoka.core.groovy.GroovyLogger as logger
import com.avoka.tm.svc.*
import com.avoka.tm.test.*
import com.avoka.tm.util.*
import com.avoka.tm.vo.*
import org.junit.Test

class UnitTest extends AbstractJUnitTest {

/*
* Perform service unit test
*
* throws: exception if unit test fails
*/
@Test
void testAddressFirstLine() throws Exception {

Txn txn = new MockVoBuilder().createTxnOpened()
MockRequest request = new MockRequest()

Map params = [
"svcDef": svcDef,
"txn": txn,
"request": request,
"user": null
]

String result = (String) new ServiceInvoker(svcDef).invoke(params)

logger.info result

Path path = new Path(result)

assert "123 Wall Street" == path.val("address.firstLine")
}
}