Replaceable forms
Forms defined using replaceableForm() may be replaced by other plugins when they’re used. You can use the form ID and the contents to determine which form to replace it by.
You can use replaceable forms for:
- implementing generic plugins, and customising their forms in customer specific plugins.
- implementing backwards compatibility by inspecting the
documentcontents and returning legacy versions of the form for older data.
When is called on a instance()FormDescription object, the "std:form:replace" service is called with two arguments, the form and the document.
To determine which form is being replaced, you must check both form.formId and form.plugin.pluginName as multiple plugins can define forms with the same name.
Returning a new form from that service uses that form instead. If the service isn’t implemented or no service implementation returns a form, the original form is used.
Example
var alternativeForm = P.form("alt0","form/alt0.json");
P.implementService("std:form:replace", function(form, document) {
if(
(form.formId === "form0") &&
(form.plugin.pluginName === "example_plugin")
) {
// NOTE: Could use document contents to choose form
return alternativeForm;
}
});