Mappable parameters
Types of fields
Date parameters
Use the date and time type parameters instead of asking users to format the date and time themselves. These values should be formatted in the backend to support Make's format.


Processing of date parameters
When a field is a type "date", it should be possible to use our keyword "now" as a value. The field should accept ISO-8601 date format and if the service requires only the date (no time) or a different format like timestamp, this formatting should happen inside the module.
Communication:
{
"url": "/api/users",
"method": "POST",
"body": {
"name": "{{parameters.name}}",
"birthday": "{{formatDate(parameters.birthday, 'YYYY-MM-DD')}}",
"due_date": "{{formatDate(parameters.due_date, 'X')}}"
},
"response": {
"output": "{{body}}"
}
}
Parameters:
[
{
"name": "name",
"type": "text",
"label": "Name"
},
{
"name": "birthday",
"type": "date",
"label": "Birthday"
},
{
"name": "due_date",
"type": "date",
"label": "Due Date"
}
]
Support of array aggregators
If the API doesn't support arrays or arrays of collection, you need to implement an IML function that enables the use of array aggregators.

Remote procedure calls (RPCs)
For every parameter where options are listed dynamically (values pulled from the API), there should be an RPC implemented, especially when you need to provide an ID (or raw value) instead of a label. For example, if you have a lot of customers and you don’t remember their IDs, the RPC will display a list of names / emails and fill in the ID for you. Also, RPCs help the user to understand the behavior and outputs of the module before building the logic of their scenario.
If there are many RPCs nested to each other, you need to implement an additional select which allows users to choose whether they will map the deepest parameter from previous modules or whether they will follow every RPC to select every parameter in order to get into the deepest parameter.

Edit mode
The edit mode ("mode": "edit"
) is used in modules where the RPCs should be switched off by default. Those modules are - UPDATE, GET, DELETE etc.
There are two main reasons why this is used:
To reduce module load time: If you click on the module to open it, all options for all RPCs need to be loaded before it opens. By using
mode:edit
, the module opens right away and RPC options are loaded when you open the select field. Imagine a module to create a donut:RPC for the type of dough
RPC for the icing color or flavor
RPC for the type of sprinkles
RPC for filling options With this setup, the module will take a long time to load, especially if the API server is busy.
If we expect the user will want to map the value, not select from the list. For example, in a Watch for new orders > Mark order as received module, map the Order ID from the previous module.
Edit mode is also recommended in modules that will always be working with the lowest entity, for example, an attachment for an e-mail in a module.
Mappable:false
When the "mappable": false
parameter is used, the mapping toggle is hidden.
Some field types should use the "mappable:false"
parameter, for example, select
. With this type of field, for which a user should select from a list of options, having a map toggle is unnecessary and may confuse the user.

Messages (banners)
There are three distinct message types available, each with a specific icon and guidelines for appropriate use. The recommended length of the message is 50 to 300 characters.
Information (blue)

Warning (yellow)

Danger (red)

ID finder
The ID finder allows users to identify items within a module by entering search criteria. The ID finder can either be the only search method for a field or it can be included in a list of multiple search methods.
The ID finder window can either include a single search criterion (keyword or exact match) or multiple search criteria. There are specific guidelines to follow when implementing the ID finder, both within the module and the ID finder itself.
Support for custom query and filter options
Certain APIs provide support for custom queries or filters when searching records, such as invoices. In Make, our goal is to offer query and filter capabilities to both regular and advanced users.
Therefore we have implemented two methods of achieving this functionality, and ideally users should be able to choose between the two options.
Predefined query
We have utilized the familiar filter setup format found in Scenario Builder. With this approach, users are not required to learn the query format. Instead, they can simply set up the query in a manner similar to configuring filters.
When the module is executed, a custom IML function constructs the query, adhering to the specified format.
Custom query
Users have the option to manually compose their own queries. This feature is particularly valuable when the API supports new operators that are not yet available within the module.
To assist users in leveraging the query field effectively, the following helpful information should be provided:
Query format: The guidelines for structuring the query.
Example of a functional query: An illustrative sample query as reference.
API documentation URL: Direct access to the API documentation with query specification.
Search filters


Labels
Labels are available for:
Array(s)
Array item(s)
Default to
Item
This should be consistent and related to the label of the array. For example, if the label of an array is
Recipients
, the label of an array item should beRecipient
.
Button(s) to add an array item
Default to
Add item
.The button label should be consistent and related to the label of array items. For example, if the label of an array item is
Recipient
, the label of the button should beAdd recipient
.

//If the API is expecting an array of collection
// {
// "recipients": [
// {
// "name": "abc"
// }
// ]
// }
[
{
"name": "recipients",
"type": "array",
// Label of the array
"label": "Recipients",
"spec": {
"type": "collection",
// Label of array item(s)
"label": "Recipient",
"spec": [
{
"name": "name",
"type": "text",
"label": "Name",
"required": true
}
]
},
"labels": {
// Label of the button to add an array item
"add": "Add recipient"
}
}
]
Universal module
If possible, provide a universal module.
The prefix path of the URL should not contain the version of the API, to ensure that users can use any version of the API. Even if there is no other version, it is good practice in case there is one in the future.
The hint under the URL should contain the correct prefix path of the URL, together with an example of a postfix path of the URL.
The example should be “ready-to-use”. We recommend using methods for retrieving a record in the example (GET).

Last updated