doForms SOAP Web Service API

The SOAP API provides programmatic access to the doForms portal. These APIs enable you add, update and delete information used by your portal.

The doForms REST API documentation can be found here.

Enabling Web Services


Most of the web services work with the specified forms designed in the doForms portal. Others work with the dispatching, tracking and support data related items - lookup tables for example.

Each published Project / Form may be assigned a Web Service ID (WSID), and password for the services to work. This is done via the Manage Integrations Web  Services page.

Each service may be enabled and disabled based on the activities planned so you can manage which services should be in use.

These services are quota based, please see the section under Quota Limits section

Quota Limits


LimitType
50Get data requests (retrieving a form data record) per mobile license per WSID
50Dispatch requests (sending a dispatch) per mobile license per WSID
100GPS track point requests (reading a GPS track) per mobile license
1,000,000Total lookup table write operations (uploading a lookup table) per account
1,000,000Total lookup table read operations (downloading a lookup table) per account

Quota limits are based on daily usage starting at midnight UTC.

Note that during the 7 days immediately following the creation of a WSID, we provide higher limits on "Get data requests" to permit adequate testing of your software.

The lookup table limits are measured in read and write operations, not in number of rows. A good rule of thumb is that the number of read or write operations is approximately 4 X number of rows X number of fields. So a lookup table with 10,000 records and 10 fields would use approximately 400,000 write operations to upload.

Customers requiring higher use limits should contact support@doForms.com.

We reserve the right to change these limits at any time with or without notice in order to maintain the performance and reliability of the doForms website.

Connecting to a Web Service


Detailed instructions on how to connect to a SOAP web service are beyond the scope of this manual. The doForms web services follow the W3C SOAP Specification Version 1.2 (http://www.w3.org/TR/soap/). We recommend using a tool such as soapUI (http://www.soapui.org/) for exploring and testing a doForms web service.

You can get a quick view of your doForms data for a specific WSID by using the address listed under URL on the Manage > Integrations > Web services page. Note that this address does not provide any control of format or the number of records to return, and performance may be poor for large forms.

The doForms web service can be accessed at the following addresses:

Reading Submission Data


Most users of the doForms web services use them to retrieve data records submitted from mobile devices so that these data records can be integrated into another information system.

In many case this process centers around one method: "getUnReadData". This method is used for reading data records that have not been previously read by your client application. The "DataFormat" argument determines if data is returned in CSV, JSON or XML.

The "NumberOfRec" argument determines how many records are returned with each request. We strongly recommend making this value less than 100 for reliability. An empty response will be returned when there are no more data records to read.

In the simplest case, this method is used with the "isAutoUpdate" argument equal to "1". Doing so automatically removes any record that is read with the getUnReadData from the unread data queue so it will not be re-read with subsequent calls of this method. In other cases, you may want to have more control over when a record is marked as read. For example if integrity checks are performed on each returned record. In this case, use the getUnReadData method with the "isAutoUpdate" argument equal to "0". Then use the markUnReadDataAsRead method to manually mark successfully read records from the unread record queue.

The "read" value is saved with the record. This means that it is not possible to use multiple WSIDs for a single form in order to receive multiple streams of the same submissions. Once a record is marked as "read" by one WSID, the record will not be returned by any other WSID.

In doForms there is a distinction between a record that is newly submitted by a mobile device to the doForms website and a previously submitted record that is edited on the doForms website. The getUnReadData method reads both newly submitted records and edited records.

If you need more control over which records are read, consider using the getRecordKeyByReceivedDateRange and getDataByRecordKey methods which will enable you to identify and get specific records based on the date:time in UTC when a record was received by the doForms website. Alternatively, use the getRecordKeyByDateRange method if you want to do this based on the "Date_Created" which is the date:time that the record was created on the mobile device (not recommended).

With all of the "get" methods above, you may also want to delete data records from the doForms website after they have been read. In this case, use the "deleteDataByRecordKey" method . Note that even if the record is to be deleted, it must also be marked as "read" using markUnReadDataAsRead to avoid an error if using the getUnReadData method.

Downloading Media Files

The output of the web services contains the URL address for each attached media file. If you wish to download media files, request them directly using the provided URL.

Integration Tips / Best Practices

  • Methods have a quota limit. Requests will be rejected if you reach your quota limit.
  • Each form data record has two auto generated unique key fields. Please be sure to use to the value from the correct key field when using a specific method:
    • RecordKey – This is a long text value that is more efficient than RecordId. This is referred to as "Record_Key" in exports. 
    • RecordId – RecordId is a shorter human readable value that contains an auto increment number at the end. This is referred to as "Form_Record" field in the View data and Dispatch tabs and in exports. 
  • Both RecordKey and RecordId are unique for every record.
  • Some of the API methods described here use and/or return two different date:time values:
    • Date_Created – This is the date:time when a record is first saved as complete on a mobile device (or on the website).
    • Date_Received – This is the date:time when a record was first received by the website.
  • Date_Received is the the most reliable method for preventing overlapping record ranges. Since doForms works in connected AND disconnected manner, records may not become available to the web services until some time after the Date_Created time.
  • All date/time values are returned in the UTC/GMT time zone. You can use the Time Zone parameter that is returned by the newest version of the getDataByRecordKey method to calculate the local Date_Created.
  • Note that in all cases the "[WS ID]" and "[Password]" refer to a specific doForms project/form web service.
  • Fields are not guaranteed to always be returned in the same order. Use the field name instead of the index when parsing data.

Managing Lookup Data


Lookup data can be managed using the following methods:

METHODDESCRIPTION
addLookupTableData

Create a lookup table, including the column structure. Once set, the column structure can't be changed. This method should only be called once for each lookup table.

appendLookupTableData2

Add records to an existing lookup table. Set the COMPLETE parameter to 1 on the last batch of records to append. The changes will not be sent to the app until a COMPLETE = 1.

deleteLookupTableData

Clear the data from an existing lookup table. If not all records could be deleted in a single request, the hasMoreRecords node will contain "true". Continue calling deleteLookupTableData until hasMoreRecords = "false".

updateLookupTableData

A convenience method that deletes records from the lookup table and then appends records. This method may return an error if not all records could be cleared in a single request. In this case use deleteLookupTableData and appendLookupTableData2 individually.

Current Service Methods


Please note the latest method may have a number appended to its name. This is the revision of the method due to deprecation or changes to the interface. Deprecated methods are listed at the end of this document.

NAMEDESCRIPTION
addLookupTableDataAdd a new lookup table. Note that this method is subject to the Quota Limits described above.
appendLookupTableData2

Append new rows to an existing lookup table. Note that this method is subject to the Quota Limits described

above.

checkValidWebserviceVerify that a WSID is valid.
deleteDataDelete data records by the RecordId.
deleteDataByRecordKeyDelete data records by the RecordKey.
deleteDispatchDelete dispatch records based RecordKey.
deleteLookupTableDataDelete all rows in an existing lookup table.
getDataByRecordKey9Get the detail of a data record with the specified RecordKey in a specified format.
getFormRecordCountGet the total number of data records for a specific WSID.
getFormTemplate2Get the form structure in XML format for a specific WSID.
getGPSTrackingPoints

Get all the tracking points that are within a certain date range (created on the mobile unit) for a specific mobile unit. Note that this method is subject to the Quota Limits described above.

getLookupTableDataGet the content of a lookup table. Note that this method is subject to the Quota Limits described above.
getLookupTableList

Get a list of all lookup tables in the account. Includes only the Lookup Table key, name, description and the column list.

getMobileUnitsGet a list of all the mobile units in an account.
getRecordKeyByDateRangeGet a list of the RecordKeys in a WSID that were created in a given date range. (Date_Created)
getRecordKeyByEditedDateRangeGet a list of the RecordKeys in a WSID that were edited in a given date range.
getRecordKeyByReceivedDateRange

Get a list of the RecordKeys in a WSID that were received in a given date range. (Date_Received)

getUnReadDataGet data records that have not been previously read. See description under Reading Data. Note that this method is subject to the Quota Limits described above.
getWsIDList2Get a list of active WSIDs in an account that use the provided password.
listDispatchGet a list of dispatch record headers based on status. Includes only RecordKey, MobileNumber, Date Completed, and Date Submitted.
markUnReadDataAsReadMark data records as "read" to remove the them from the next request to getUnReadData.
submissionDispatch2Send a dispatch record for a specific WSID. Note that this method is subject to the Quota Limits described above.
updateLookupTableDataUpdate an existing lookup table. Note that this method is subject to the Quota Limits described above.

Service Methods


getWsIDList2

Return the list of active WSIDs for an account which match the password.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:getWsIDList2>
<arg0_java_lang_String>[Account Name]</arg0_java_lang_String>
<arg1_java_lang_String>[WS Password]</arg1_java_lang_String>
<arg2_int>[ResponseFormat]</arg2_int>
</ser:getWsIDList2>
</soapenv:Body>
</soapenv:Envelope>

Where:

  • [Account Name] is the Account name or Website name
  • [WS Password] is the WS Password
  • [ResponseFormat]: 1 = CSV, 2 = XML, 3 = JSON

getFormTemplate2

Get the form structure in XML format.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:getFormTemplate2>
<arg0_java_lang_String>[WS ID]</arg0_java_lang_String>
<arg1_java_lang_String>[Password]</arg1_java_lang_String>
</ser:getFormTemplate2>
</soapenv:Body>
</soapenv:Envelope>

checkValidWebservice

Check if a WSID is valid or not.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:checkValidWebservice>
<arg0_java_lang_String>[WS ID]</arg0_java_lang_String>
<arg1_java_lang_String>[Password]</arg1_java_lang_String>
</ser:checkValidWebservice>
</soapenv:Body>
</soapenv:Envelope>

Returns:

  • True if the WS is valid
  • False if the WS is invalid

getFormRecordCount

Get the total records for a specific WSID.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:getFormRecordCount>
<arg0_java_lang_String>[WS ID]</arg0_java_lang_String>
<arg1_java_lang_String>[Password]</arg1_java_lang_String>
</ser:getFormRecordCount>
</soapenv:Body>
</soapenv:Envelope>

Returns:

  • Number of records

getUnReadData

Download records that have not been previously downloaded, including new records. Note that this method is subject to the quota limits.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:getUnReadData>
<arg0_java_lang_String>[WS ID]</arg0_java_lang_String>
<arg1_java_lang_String>[Password]</arg1_java_lang_String>
<arg2_int>[DataFormat]</arg2_int>
<arg3_int>[NumberOfRec]</arg3_int>
<arg4_int>[isAutoUpdate]</arg4_int>
</ser:getUnReadData>
</soapenv:Body>
</soapenv:Envelope>

Where:

  • [DataFormat]: 1 = CSV, 2 = XML
  • [NumberOfRec]: the number of records to be downloaded. Due to the existing limits from GAE, we recommend to just read less than 100 records for each call.
  • [isAutoUpdate]: 1-the downloaded records will be automatically set to "read" and will not be returned in next calls; 0-the downloaded records are still kept as "unread"
  • Note: If using isAutoUpdate=0, you should use the markUnReadDataAsRead method to manually mark the records as read in order to avoid service limitations on number of records read daily.

Returns:

  • CSV format:
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <tns:getUnReadDataResponse xmlns:tns="services.wss.portal.doforms.mdt.com" targetNamespace="services.wss.portal.doforms.mdt.com">
          <return>CSV DATA HERE</return>
        </tns:getUnReadDataResponse>
      </soap:Body>
    </soap:Envelope>

markUnReadDataAsRead

Mark the unread data as "read" to remove the corresponding record from the getUnReadData call

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:markUnReadDataAsRead>
<arg0_java_lang_String>[RecordKey]</arg0_java_lang_String>
</ser:markUnReadDataAsRead>
</soapenv:Body>
</soapenv:Envelope>

Where:

  • [RecordKey]: The RecordKey which is extracted from the "@recordKey" field returned getUnReadData method.

getRecordKeyByReceivedDateRange

Return a list of the RecordKeys in a given received date range which is the date:time that the record is received by the website.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:getRecordKeyByReceivedDateRange>
<arg0_java_lang_String>[WS ID]</arg0_java_lang_String>
<arg1_java_lang_String>[Password]</arg1_java_lang_String>
<arg2_java_lang_String>[From Date]</arg2_java_lang_String>
<arg3_java_lang_String>[To Date]</arg3_java_lang_String>
</ser:getRecordKeyByReceivedDateRange>
</soapenv:Body>
</soapenv:Envelope>

Where:

  • [From Date]: the UTC date:time in MM/dd/yyyy HH:mm:ss format
  • [To Date]: the UTC date:time in MM/dd/yyyy HH:mm:ss format

getRecordKeyByEditedDateRange

Return a list of the RecordKeys in a given date range when the records are edited.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:getRecordKeyByEditedDateRange>
<arg0_java_lang_String>[WS ID]</arg0_java_lang_String>
<arg1_java_lang_String>[Password]</arg1_java_lang_String>
<arg2_java_lang_String>[From Date]</arg2_java_lang_String>
<arg3_java_lang_String>[To Date]</arg3_java_lang_String>
</ser:getRecordKeyByEditedDateRange>
</soapenv:Body>
</soapenv:Envelope>

Where:

  • [From Date]: the UTC date:time in MM/dd/yyyy HH:mm:ss format
  • [To Date]: the UTC date:time in MM/dd/yyyy HH:mm:ss format

getRecordKeyByDateRange

Return a list of the RecordKeys in a given submitted date range.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:getRecordKeyByDateRange>
<arg0_java_lang_String>[WS ID]</arg0_java_lang_String>
<arg1_java_lang_String>[Password]</arg1_java_lang_String>
<arg2_java_lang_String>[From Date]</arg2_java_lang_String>
<arg3_java_lang_String>[To Date]</arg3_java_lang_String>
</ser:getRecordKeyByDateRange>
</soapenv:Body>
</soapenv:Envelope>

Where:

  • [From Date]: the UTC date:time in MM/dd/yyyy HH:mm:ss format
  • [To Date]: the UTC date:time in MM/dd/yyyy HH:mm:ss format

getDataByRecordKey9

Get the detail of a record with the specified RecordKey in a specified format. Note that this method is subject to the Use Limits described above.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:getDataByRecordKey9>
<arg0_java_lang_String>[WS ID]</arg0_java_lang_String>
<arg1_java_lang_String>[Password]</arg1_java_lang_String>
<arg2_java_lang_String>[RecordKey]</arg2_java_lang_String>
<arg3_int>[ResponseFormat]</arg3_int>
<arg4_int>[DatetimeFormat]</arg4_int>
<arg5_int>[OptionFormat]</arg5_int>
</ser:getDataByRecordKey9>
</soapenv:Body>
</soapenv:Envelope>

Where:

  • [RecordKey]: The RecordKey which is extracted from the "@recordKey" field returned by the "getRecordKeyByDateRange" method
  • [ResponseFormat]: 1=CSV, 2=XML, 3=JSON
  • [DatetimeFormat]: The format used for date and time fields.
    • 0 = yyyy-MM-ddTHH:mm:ss (UTC)
    • 1 = MM/dd/yyyy HH:mm:ss (local time with GMT offset)
    • 2 = Form fields use the format from Advanced format or Website > Settings in local time. System fields use yyyy-MM-ddTHH:mm:ss (UTC). 
  • [OptionFormat]: The format for Choose one and Choose multiple fields:
    • 0 = Underlying value
    • 1 = Caption value
    • 2 = Underlying value + Caption value

submissionDispatch2

Send a record to a device as a Dispatch.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:submissionDispatch2>
<arg0_java_lang_String>[WS ID]</arg0_java_lang_String>
<arg1_java_lang_String>[Password]</arg1_java_lang_String>
<arg2_java_lang_String>[recordsToSubmit]</arg2_java_lang_String>
</ser:submissionDispatch>
</soapenv:Body>
</soapenv:Envelope>

Where:

  • [recordsToSubmit] is a CSV data string including headers and corresponding values concatenated by @END_LINE; 

Example [recordsToSubmit]:

"@mobileNumber","string_question","integer_question","decimal_question","date_question","Time_question","Date_Time_question","select_multiple_question","select_one_question","geopoint_question","barcode_question"@END_LINE;"0909707606","sent using wss to the mobile device 0909707606 #9","11","12.5","2012-07-06","23:59:59","2012-07-21T23:59:59","option_a option_c","option_3","10.687 106.23 5420","898777907"


  • The “@mobileNumber” is a system field. If this field is blank or omitted, the submitted record status will be set to “Pending”. Otherwise, the record will be delivered to the mobile unit whose mobile number is set in this field and the status set to "Sent".
  • "@Scheduled_Time" is a system field. If the dispatch job should be started at a specific time, populate this field with a date and time value. Use ISO format (e.g. "2012-07-21T23:59:59") in the local time zone of the account.
  • "@Scheduled_Duration_Hour" is a system field. Only valid if @Scheduled_Time is populated. The number of hours the dispatch job is expected to take.

listDispatch

Return a list of Records headers based on status, only included RecordKey, and base header fields(MobileNumber, Date Completed, Date Submitted).

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:listDispatch>
<arg0_java_lang_String>[WS ID]</arg0_java_lang_String>
<arg1_java_lang_String>[Password]</arg1_java_lang_String>
<arg2_int>[DispatchStatus]</arg2_int>
<arg3_int>[ResponseFormat]</arg3_int>
</ser:listDispatch>
</soapenv:Body>
</soapenv:Envelope>

Where:

  • [DispatchStatus]: 1 = Pending, 2 = Scheduled, 3 = Sent, 4 = Received, 5 = Viewed, 6 = Rejected, 7 = Completed, 100 = All
  • [ResponseFormat]: 1 = CSV, 2 = XML, 3 = JSON

deleteDataByRecordKey

Delete data records by RecordKey.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:deleteDataByRecordKey>
<arg0_java_lang_String>[RecordKeys]</arg0_java_lang_String>
</ser:deleteDataByRecordKey>
</soapenv:Body>
</soapenv:Envelope>

Where:

  • [RecordKeys]: The list of the RecordKey separated by a comma (",").
  • The RecordKey which is extracted from the "@recordKey" field returned by the "getRecordKeyByDateRange" method.

Returns:

  • True: The web service is valid.
  • False: The web service is invalid.

deleteData

Delete records by the RecordId.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:deleteData>
<arg0_java_lang_String>[Record IDs]</arg0_java_lang_String>
</ser:deleteData>
</soapenv:Body>
</soapenv:Envelope>

Where:

  • [Record IDs] The list of the record ID separated by a comma (","). Note that the record ID is the "Form_Record" field on the View Data tab.

Returns:

  •  0 = Success
  • -1 = System error
  • -2 = No record found

deleteDispatch

Deletes Dispatch records based on RecordKeys.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:deleteDispatch>
<arg0_java_lang_String>[WS ID]</arg0_java_lang_String>
<arg1_java_lang_String>[Password]</arg1_java_lang_String>
<arg2_java_lang_String>[RecordKeys]</arg2_java_lang_String>
<arg3_int>[ResponseFormat]</arg3_int>
</ser:deleteDispatch>
</soapenv:Body>
</soapenv:Envelope>

Where:

  • [RecordKeys]: the list of the RecordKey concatenated by a comma
  • [ResponseFormat]: 1=CSV, 2=XML, 3=JSON

getLookupTableList

Return the Lookup Table list that includes only the Lookup Table key, name, description and the column list.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:getLookupTableList>
<arg0_java_lang_String>[ACCOUNT NAME]</arg0_java_lang_String>
<arg1_java_lang_String>[EMAIL]</arg1_java_lang_String>
<arg2_java_lang_String>[PASSWORD]</arg2_java_lang_String>
<arg3_int>[ResponseFormat]</arg3_int>
</ser:getLookupTableList>
</soapenv:Body>
</soapenv:Envelope>

Where:

  • [ACCOUNT NAME]: your doForms account name
  • [EMAIL]: The email address which used to login into mydoForms
  • [PASSWORD]: The password which used to login into mydoForms
  • [ResponseFormat]: 1 = CSV, 2 = XML, 3 = JSON

An example of a reponse in CSV format:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Root version="1.0">
    <StatusCode>200</StatusCode>
    <ErrorMessage>Success</ErrorMessage>
    <Data>
        <error_message/>
        <error_code/>
        <Result>
            <![CDATA[key, tableName, description, columnsName
                aglteWRvZm9ybXNyFQsSDkxvb2t1cFRhYmxlTXN0GIIGDA,"DS1","Sample Table 1","STATION,STATION_NAME,ELEVATION,LATITUDE,LONGITUDE,DATE,HLY-CLDH-NORMAL,Completeness Flag,HLY-HTDH-NORMAL,Completeness Flag"
                aglteWRvZm9ybXNyFQsSDkxvb2t1cFRhYmxlTXN0GJEGDA,"DS2","Sample Table 2","STATION,STATION_NAME,ELEVATION,LATITUDE,LONGITUDE,DATE,HLY-CLDH-NORMAL,Completeness Flag,HLY-HTDH-NORMAL,Completeness Flag"]]>
    </Data>
</Root>


getLookupTableData

Get the content of a Lookup Table. Note that this method is subject to the Use Limits described above.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:getLookupTableData>
<arg0_java_lang_String>[ACCOUNT NAME]</arg0_java_lang_String>
<arg1_java_lang_String>[EMAIL]</arg1_java_lang_String>
<arg2_java_lang_String>[PASSWORD]</arg2_java_lang_String>
<arg3_java_lang_String>[LU KEY]</arg3_java_lang_String>
<arg4_int>[OFFSET]</arg4_int>
<arg5_int>[LIMIT]</arg5_int>
<arg6_int>[ResponseFormat]</arg6_int>
</ser:getLookupTableData>
</soapenv:Body>
</soapenv:Envelope>

Where:

  • [ACCOUNT NAME]: your doForms account name
  • [EMAIL]: The email address which used to login into mydoForms
  • [PASSWORD]: The password which used to login into mydoForms
  • [LU KEY]: The Lookup Table key which returned by getLookupTableList
  • [OFFSET]: The row position will be returned
  • [LIMIT]: The number of rows will be returned (Note: return all rows if [LIMIT] is -1.)
  • [ResponseFormat]: 1 = CSV, 2 = XML, 3 = JSON

An example of a reponse in CSV format

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Root version="1.0">
    <StatusCode>200</StatusCode>
    <ErrorMessage>Success</ErrorMessage>
    <Data>
        <error_message/>
        <error_code/>
        <Result>
            <![CDATA["STATION","STATION_NAME","ELEVATION","LATITUDE","LONGITUDE","DATE","HLY-CLDH-NORMAL","Completeness Flag","HLY-HTDH-NORMAL","Completeness Flag" "GHCND:USW00003947","KANSAS CITY INTERNATIONAL AIRPORT MO US","306.3","39.2972","-94.7306","20100101 00:00","0","C","375","C" "GHCND:USW00003947","KANSAS CITY INTERNATIONAL AIRPORT MO US","306.3","39.2972","-94.7306","20100101 01:00","0","C","380","C" "GHCND:USW00003947","KANSAS CITY INTERNATIONAL AIRPORT MO US","306.3","39.2972","-94.7306","20100101 02:00","0","C","384","C"]]>
        </Result>
    </Data>
</Root>

addLookupTableData

Add a new Lookup Table. Note that this method is subject to the Use Limits described above.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:addLookupTableData>
<arg0_java_lang_String>[ACCOUNT NAME]</arg0_java_lang_String>
<arg1_java_lang_String>[EMAIL]</arg1_java_lang_String>
<arg2_java_lang_String>[PASSWORD]</arg2_java_lang_String>
<arg3_java_lang_String>[LU NAME]</arg3_java_lang_String>
<arg4_java_lang_String>[DESCRIPTION]</arg4_java_lang_String>
<arg5_java_lang_String>[DATA SOURCE]</arg5_java_lang_String>
<arg6_int>[ResponseFormat]</arg6_int>
</ser:addLookupTableData>
</soapenv:Body>
</soapenv:Envelope>

Where:

  • [ACCOUNT NAME]: your doForms account name
  • [EMAIL]: The email address which used to login into mydoForms
  • [PASSWORD]: The password which used to login into mydoForms
  • [LU NAME]: The Lookup Table name
  • [DESCRIPTION]: The Lookup Table description
  • [DATA SOURCE]: The datasource in CSV format. The @END_LINE; is used as a carriage return for each row and the first row is the header.
  • [ResponseFormat]: 1 = CSV, 2 = XML, 3 = JSON

An example DATA SOURCE parameter:

"STATION","STATION_NAME","ELEVATION","LATITUDE","LONGITUDE","DATE","HLY-CLDH-NORMAL","Completeness Flag","HLY-HTDH-NORMAL","Completeness Flag"@END_LINE;"GHCND:USW00003947","KANSAS CITY INTERNATIONAL AIRPORT MO US","306.3","39.2972","-94.7306","20100101 00:00","0","C","375","C"@END_LINE; "GHCND:USW00003947","KANSAS CITY INTERNATIONAL AIRPORT MO US","306.3","39.2972","-94.7306","20100101 01:00","0","C","380","C"

updateLookupTableData

Update an existing Lookup Table. Note that this method is subject to the Use Limits described above.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:updateLookupTableData>
<arg0_java_lang_String>[ACCOUNT NAME]</arg0_java_lang_String>
<arg1_java_lang_String>[EMAIL]</arg1_java_lang_String>
<arg2_java_lang_String>[PASSWORD]</arg2_java_lang_String>
<arg3_java_lang_String>[LU NAME]</arg3_java_lang_String>
<arg4_java_lang_String>[DESCRIPTION]</arg4_java_lang_String>
<arg5_java_lang_String>[LU KEY]</arg5_java_lang_String>
<arg6_java_lang_String>[DATA SOURCE]</arg6_java_lang_String>
<arg7_int>[ResponseFormat]</arg7_int>
</ser:updateLookupTableData>
</soapenv:Body>
</soapenv:Envelope>
  • Where:
  • [ACCOUNT NAME]: your doForms account name
  • [EMAIL]: The email address which used to login into mydoForms
  • [PASSWORD]: The password which used to login into mydoForms
  • [LU NAME]: The Lookup Table name
  • [DESCRIPTION]: The Lookup Table description
  • [LU KEY]: The Lookup Table key which returned by getLookupTableList
  • [DATA SOURCE]: The datasource in CSV format. The @END_LINE; is used as a carriage return for each row and the first row is the header. Note: the number of fields in the new datasource must be same withthe current datasource.
  • [ResponseFormat]: 1 = CSV, 2 = XML, 3 = JSON

An example DATA SOURCE:

"STATION","STATION_NAME","ELEVATION","LATITUDE","LONGITUDE","DATE","HLY-CLDH-NORMAL","Completeness Flag","HLY-HTDH-NORMAL","Completeness Flag"@END_LINE;"GHCND:USW00003947","KANSAS CITY INTERNATIONAL AIRPORT MO US","306.3","39.2972","-94.7306","20100101 00:00","0","C","375","C"@END_LINE; "GHCND:USW00003947","KANSAS CITY INTERNATIONAL AIRPORT MO US","306.3","39.2972","-94.7306","20100101 01:00","0","C","380","C"

appendLookupTableData2

Append new rows to an existing Lookup Table. Note that this method is subject to the Use Limits described above.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:appendLookupTableData2>
<arg0_java_lang_String>[ACCOUNT NAME]</arg0_java_lang_String>
<arg1_java_lang_String>[EMAIL]</arg1_java_lang_String>
<arg2_java_lang_String>[PASSWORD]</arg2_java_lang_String>
<arg3_java_lang_String>[LU NAME]</arg3_java_lang_String>
<arg4_java_lang_String>[DESCRIPTION]</arg4_java_lang_String>
<arg5_java_lang_String>[LU KEY]</arg5_java_lang_String>
<arg6_java_lang_String>[DATA SOURCE]</arg6_java_lang_String>
<arg7_int>[RESPONSE FORMAT]</arg7_int>
<arg8_int>[COMPLETE]</arg8_int>
</ser:appendLookupTableData2>
</soapenv:Body>
</soapenv:Envelope>

Where:

  • [ACCOUNT NAME]: your doForms account name
  • [EMAIL]: The email address which used to login into mydoForms
  • [PASSWORD]: The password which used to login into mydoForms
  • [LU NAME]: The Lookup Table name
  • [DESCRIPTION]: The Lookup Table description
  • [LU KEY]: The Lookup Table key which returned by getLookupTableList
  • [DATA SOURCE]: The datasource in CSV format. The @END_LINE; is used as a carriage return for each row and the first row is the header. Note: the number of fields in the new datasource must be same with the current datasource.
  • [RESPONSE FORMAT]: 1 = CSV, 2 = XML, 3 = JSON
  • [COMPLETE]: 1 if this is the last append call. 0 if additional append calls will be made.

An example DATA SOURCE:

"STATION","STATION_NAME","ELEVATION","LATITUDE","LONGITUDE","DATE","HLY-CLDH-NORMAL","Completeness Flag","HLY-HTDH-NORMAL","Completeness Flag"@END_LINE; "GHCND:USW00003947","KANSAS CITY INTERNATIONAL AIRPORT MO US","306.3","39.2972","-94.7306","20100101 00:00","0","C","375","C"@END_LINE; "GHCND:USW00003947","KANSAS CITY INTERNATIONAL AIRPORT MO US","306.3","39.2972","-94.7306","20100101 01:00","0","C","380","C"

deleteLookupTableData

Delete all rows of an existing Lookup Table.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:deleteLookupTableData>
<arg0_java_lang_String>[ACCOUNT NAME]</arg0_java_lang_String>
<arg1_java_lang_String>[EMAIL]</arg1_java_lang_String>
<arg2_java_lang_String>[PASSWORD]</arg2_java_lang_String>
<arg3_java_lang_String>[LU KEY]</arg3_java_lang_String>
<arg4_int>[ResponseFormat]</arg4_int>
</ser:deleteLookupTableData>
</soapenv:Body>
</soapenv:Envelope>

Where:

  • [ACCOUNT NAME]: your doForms account name
  • [EMAIL]: The email address which used to login into mydoForms
  • [PASSWORD]: The password which used to login into mydoForms
  • [LU KEY]: The Lookup Table key which returned by getLookupTableList
  • [ResponseFormat]: 1 = CSV, 2 = XML, 3 = JSON

getMobileUnits

Get a list of all the mobile units connected to an account.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:getMobileUnits>
<arg0_java_lang_String>>[ACCOUNT NAME]</arg0_java_lang_String>
<arg1_java_lang_String>>[EMAIL]</arg1_java_lang_String>
<arg2_java_lang_String>[PASSWORD]</</arg2_java_lang_String>
<arg3_int>[ResponseFormat]</arg3_int>
</ser:getMobileUnits>
</soapenv:Body>
</soapenv:Envelope>

Where:

  • [ACCOUNT NAME]: your doForms account name
  • [EMAIL]: The email address which used to login into mydoForms
  • [PASSWORD]: The password which used to login into mydoForms
  • [ResponseFormat]: 1 = CSV, 2 = XML, 3 = JSON

getGPSTrackingPoints

Get all the tracking points that are within a certain date range (created and received on the mobile devices) for a specific mobile unit.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="services.wss.portal.doForms.mdt.com">
<soapenv:Header/>
<soapenv:Body>
<ser:getGPSTrackingPoints>
<arg0_java_lang_String>[ACCOUNT NAME]</arg0_java_lang_String>
<arg1_java_lang_String>[EMAIL]</arg1_java_lang_String>
<arg2_java_lang_String>[PASSWORD]</arg2_java_lang_String>
<arg3_java_lang_String>[MOBILE KEY]</arg3_java_lang_String>
<arg4_java_lang_String>["FROM" DATE]</arg4_java_lang_String>
<arg5_java_lang_String>["TO" DATE]</arg5_java_lang_String>
<arg6_int>[ResponseFormat]</arg6_int>
</ser:getGPSTrackingPoints>
</soapenv:Body>
</soapenv:Envelope>

Where:

  • [ACCOUNT NAME]: your doForms account name
  • [EMAIL]: The email address which used to login into mydoForms
  • [PASSWORD]: The password which used to login into mydoForms
  • [MOBILE KEY]: The mobile key which returned by the getMobileUnits method
  • ["FROM" DATE]: the date:time when the GPS values are created and received on the mobile device
  • ["FROM" DATE]: the date:time when the GPS values are created and received on the mobile device
  • [ResponseFormat]: 1 = CSV, 2 = XML, 3 = JSON, 4 = KML, 5 = GPX

Deprecated Methods


Although deprecated methods remain in the API, their use is discouraged, and deprecation indicates that the feature may be removed in the future.

Features are deprecated rather than immediately removed in order to provide backward compatibility, and to allow time to bring existing code into compliance with the new standard.

The following methods are deprecated:

  • appendLookupTableData
  • deleteData getFormTemplate
  • getFormDataWithDateRange
  • getDataByRecordKey
  • getDataByRecordKey2
  • getDataByRecordKey3
  • getDataByRecordKey4
  • getDataByRecordKey5
  • getDataByRecordKey6
  • getDataByRecordKey7
  • getDataByRecordKey8
  • getGPSTrackingPointsByMobileNumber
  • getRecordKeyByDateRange
  • getRecordKeyByDateRange2
  • getRecordKeyByEditedDateRange
  • getRecordKeyByEditedDateRange2
  • getRecordKeyByReceivedDateRange
  • getRecordKeyByReceivedDateRange2
  • getUnReadData
  • getUnReadData2
  • getWsIDList
  • getWsIDList2
  • submissionDispatch

Sample Code


Please note these sample are not meant for production use. Review the documentation before adapting any code listed here for your own use.