Remote Data Sender (XML/JSON)
This plugin allows you to send form data to a third party application in the form of an HTTP(s) request depending on the answers given to form in an XML or JSON format.
To apply this plugin specify the following parameters:
*Remote URL - Specify a third party application URL you would like to send the data to. Use the following format: https://remoteURL.com/.
Logical Expression to Enable sending - Specify the logical expression that should be met to send the request. If this field is blank, the request will always be sent. Use Qx.Ay.Cz notation, where x is a question number, y is an answer option number and z is a column number.
*Format - Select, whether data will be sent in JSON or XML format.
*Data format - Select Compact or Full format. Compact format includes the response data only. Full format will output the full form structure (including unanswered questions) along with the response data.
Choose version - You can specify whether to use the latest changes made to the XML/JSON exporting format or keep your current structure. Select one of the options from the dropdown list:
Use version 1 – uses the current version of the XML/JSON export structure.
Use version 2 – uses the changed version of the XML/JSON export structure.
Always use latest version - uses the latest version of the XML/JSON export structure (this option is set as default).
Versions of the Export Structure
We have made certain additions to the structure of the XML exported file in 2019. allowing users to choose between two versions of the export file formatting.
The following was added to the version 2 of the format:
For the File Upload type of questions, the following information is added about the file being uploaded:
content type
file size
original filename
The RDR request containing the rbrLink parameter (and if the link to RBRs has been made available for each responded in responses.xml) also gives each user a link to download an RBR in PDF format.
The plugins that were set before the introduction of versioning are using the version 1 by default.
Example of the Plugin Setup
For this response, the exported files will have the following structure:
XML format
JSON format
These files contain the following tables:
Respondent
RespondentID - ID of a respondent, unique for the xml file. Field type is integer, field length is 4 bytes, unsigned;
SurveyID - ID of a form/survey that this respondent was taking. Field type is integer, field length is 4 bytes, unsigned;
SurveyName - Name of a form/survey that this respondent was taking;
Completed - Indicates whether the respondent has finished completing the form/survey. 1 - the form/survey has been completed, 0 - it is partially completed by this respondent. Field type is byte, field length is 1 byte, unsigned;
SubmitDateTime- Date and time when the response was submitted. Field type is dateTime;
ResponseLabel - Text label for the response based on responses providedin the form/survey. Field type is string, field length is 1024.
Response
QuestionID - ID of the corresponding question. Field type is integer, filed length is 4 bytes, unsigned;
QuestionType - Type of the corresponding question;
CustomQuestionID - Custom Question identifier;
QuestionText - Text of the question;
Fields - "Fields" array with all answer options/columns related to this question;
AnswerID - ID of the corresponding answer option. Field type is integer, field length is 4 bytes, unsigned;
AnswerType - Type of respective answer option in respective question;
CustomAnswerID - Answer Identifier assigned by the form/survey administrator;
Value - Text value of a response;
Weight - Numeric value of the selected answer option as defined in the form/survey. Field type is decimal, may contain up to 16 numbers in total and up to 5 decimal points;
HasResponse - "True"/"False" field:
For choice questions (Pick one, Checkbox, Dropdown Box, Listbox, Rate along scale), HasResponse will be equal to "true" only for those answer options that were selected by the respondent;
For text questions (Single Line, Numeric Allocation, Multiline, Lookup, File Upload), HasResponse will be equal to "true" if there is data present in the given field;
For Matrix questions, HasResponse will be equal to "true" if a particular column contains data.
DataModelD - ID of Data Model associated with Object Lookup/Multiple Object Lookup question;
Object (only available for questions with type MULTIPLE_LOOKUP) - Object selected in the multiple lookup question;
ObjectID (only available for questions with type MULTIPLE_LOOKUP) - Unique identifier ob an object within the data model. The field type is a string, field length is 65535;
ObjectName (only available for questions with type MULTIPLE_LOOKUP) - Formatted name for selected object. The field type is a string, field length is 65535.
Errors Processing
if there are multiple plugins set up in a form/survey, the requests generated by the plugins will be sent via separate queues. These queues are unique per User Identifier and remote URL.
Depending on the received errors codes, messages sending will be retried according to the following rules:
Code 500. Module retries to send a request after 1,5,25 min, then every 30 min for 3 hours, and then sends it to the error queue.
Codes 408,502,503,504. Module retries to send a request after 1, 5, 25 min, then every 30 min for 24 hours, and then sends it to the error queue.
Module retries to send exceptions without code (timeouts, etc.) after 1, 5, 25 min, then every 30 min for 24 hours.
Other (404,401) codes are logged as errors and module does not try to send a request again.
For more information, please refer to the following table:
HTTP Code(s) | 1st Interval | 2nd Interval | 3rd Interval | 4th Interval | 4th Interval Duration |
500 (Internal Server Error) | 1 minute | 5 minutes | 25 minutes | 30 minutes | 3 hours |
408 (Request Timeout) | 1 minute | 5 minutes | 25 minutes | 30 minutes | 24 hours |
502 (Bad Gateway) | 1 minute | 5 minutes | 25 minutes | 30 minutes | 24 hours |
503 (Service Unavailable) | 1 minute | 5 minutes | 25 minutes | 30 minutes | 24 hours |
504 (Gateway Timeout) | 1 minute | 5 minutes | 25 minutes | 30 minutes | 24 hours |
404 (Not Found) | Does not Resend | ||||
401 (Unauthorized) | Does not Resend | ||||
409 (Conflict) | Does not Resend | ||||
400 (Bad Request) | Does not Resend | ||||
All Other Valid HTTP Codes | Does not Resend | ||||
Exceptions without code (timeouts etc) | 1 minute | 5 minutes | 25 minutes | 30 minutes | 24 hours |
The initial request should happen near real time and if a failure occurs, the retry attempts will wait according to the above. Each request that retries will block all other requests for the same endpoint and the same user that the form belongs to. If there is the same endpoint but different forms that were created by different users – requests will be blocked in separate queues.