Liferay Dynamic Data Mapping API provides comprehensive APIs for creating, managing, and processing dynamic forms and data structures within Liferay Portal.
—
External data source integration for populating form field options dynamically from REST APIs, databases, and other sources.
Core interface for implementing external data sources that can populate form field options.
interface DDMDataProvider {
/**
* Fetches data from external source based on request parameters
*/
DDMDataProviderResponse getData(DDMDataProviderRequest ddmDataProviderRequest)
throws DDMDataProviderException;
}
class DDMDataProviderRequest {
String getDDMDataProviderInstanceId();
Map<String, String> getParameters();
Locale getLocale();
long getCompanyId();
long getGroupId();
}
class DDMDataProviderResponse {
Map<String, List<Map<String, String>>> getData();
int getStatus();
}Configuration and settings for data provider instances.
class DDMDataProviderInstanceSettings {
String getCacheable();
String getPassword();
String getTimeout();
String getUrl();
String getUsername();
Map<String, String> getInputParameters();
Map<String, String> getOutputParameters();
}
interface DDMDataProviderTracker {
DDMDataProvider getDDMDataProvider(String type);
Set<String> getDDMDataProviderTypes();
}@Component
public class RestApiDataProviderExample {
@Reference
private DDMDataProviderInstanceLocalService dataProviderLocalService;
public DDMDataProviderInstance createCountriesDataProvider(long groupId, long userId)
throws PortalException {
// Create data provider form definition
DDMForm settingsForm = new DDMForm();
settingsForm.setDefaultLocale(Locale.US);
// URL field
DDMFormField urlField = new DDMFormField("url", "text");
urlField.setLabel(new LocalizedValue(Locale.US, "API URL"));
urlField.setRequired(true);
settingsForm.addDDMFormField(urlField);
// Timeout field
DDMFormField timeoutField = new DDMFormField("timeout", "numeric");
timeoutField.setLabel(new LocalizedValue(Locale.US, "Timeout (ms)"));
settingsForm.addDDMFormField(timeoutField);
// Create data provider instance
Map<Locale, String> nameMap = Collections.singletonMap(Locale.US, "Countries API");
Map<Locale, String> descriptionMap = Collections.singletonMap(Locale.US, "REST API for country data");
ServiceContext serviceContext = new ServiceContext();
serviceContext.setScopeGroupId(groupId);
return dataProviderLocalService.addDataProviderInstance(
userId, groupId, nameMap, descriptionMap,
settingsForm, "rest", serviceContext
);
}
}class DDMDataProviderException extends PortalException {
DDMDataProviderException(String msg);
DDMDataProviderException(String msg, Throwable cause);
}
interface DDMDataProviderParameterSettings {
String getInputParameterLabel();
String getInputParameterName();
String getInputParameterRequired();
String getInputParameterType();
String getOutputParameterName();
String getOutputParameterPath();
String getOutputParameterType();
}Install with Tessl CLI
npx tessl i tessl/maven-com-liferay--com-liferay-dynamic-data-mapping-api