Difference between revisions of "Resco CRM Connector"

From Resco's Wiki
Jump to: navigation, search
(Data service: add resco inspections)
(GET Select)
 
(38 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
{{Integration TOC}}
 
{{Integration TOC}}
[[Resco Cloud]] server can serve as a stand-alone backend, but it can also connect to other CRM or ERP systems, for example Microsoft Dynamics or Salesforce.
+
Resco CRM connector is a group of web API services that you can use to connect your third-party backend to [[Resco Cloud]] to exchange data between the systems. These are the components involved in Resco CRM Connector.
  
[[File:Crm integration.png]]
+
[[File:Resco crm connector.png|600px]]
  
 
* Your system: any CRM/ERP system
 
* Your system: any CRM/ERP system
* Resco CRM connector: Synchronization module between ERP System and Resco CRM Server
+
* [[Resco CRM Connector]]: Synchronization module between your backend and Resco Cloud
* Resco CRM server: Fully customizable backend for Mobile CRM Client application
+
* [[Resco Cloud]]: Fully customizable backend for Resco mobile apps
* Resco CRM client: End-user CRM application customized for Resco CRM server
+
* [[Resco mobile apps]]: Any of the end-user applications customized for Resco Cloud, such as [[Resco Mobile CRM]]
  
Resco CRM server and client are provided by Resco. Resco CRM server allows you to define schema and stores data for Mobile CRM Client, which is used to display the data.
+
Resco Cloud and mobile apps are provided by Resco. Resco Cloud allows you to define schema and stores data for mobile apps, which is used to display the data.
  
You can now build your own Resco CRM Connector to enable the synchronization between your backend system and the Resco CRM Server. Resco CRM Server acts like a passive module — it does not initiate any synchronization. Mobile CRM Client must initiate the synchronization process to download/upload data. This also applies for Resco CRM Connector. It must determine when/whether to synchronize ERP System data with data stored on the Resco CRM Server. For example, every hour, every day, etc., depends on how current the data must be on the clients. To check whether there are new/updated data on the Resco CRM Server use “GetMaxRowVersion” web service method to get the current row version. If the current row version changed from the last stored row version, there are new changes available on the Resco CRM Server.
+
You can now build your own Resco CRM Connector to enable the synchronization between your backend system and the Resco Cloud. Resco Cloud acts as a passive module — it does not initiate any synchronization. Mobile apps must initiate the synchronization process to download/upload data. This also applies to Resco CRM Connector. It must determine when/whether to synchronize ERP system data with data stored on the Resco Cloud. For example, every hour, every day, etc., depends on how current the data must be on the clients. To check whether there are new/updated data on the Resco Cloud use “GetMaxRowVersion” web service method to get the current row version. If the current row version changed from the last stored row version, there are new changes available on the Resco Cloud.
  
Resco CRM Connector consists of a set of REST web service methods divided into '''metadata service''' and '''data service'''.
+
== Available APIs ==
 +
 
 +
Resco CRM Connector offers three different APIs:
 +
* REST data service - a set of REST web service methods divided into '''metadata service''' and '''data service'''
 +
* [[OData service]]
 +
* [[Questionnaire OData service]] - read-only [https://www.odata.org/ OData v4] API service for accessing questionnaire results
 +
 
 +
This article describes the REST data service.
  
 
== Data types ==
 
== Data types ==
Line 30: Line 37:
 
* RowVersion
 
* RowVersion
 
* PartyList
 
* PartyList
 +
 +
By default, the data type format in data service requests and responses is in invariant culture (for example, the decimal separator is always a dot).
 +
 +
Date fields are in UTC time, in the following format: <code>yyyy-MM-ddTHH:mm:ssZ</code>; for example, <code>2020-12-12T09:00:00</code>. Optionally, you can use syntax defined in [https://www.ietf.org/rfc/rfc3339.txt RFC 3339] to modify this format.
 +
 +
Lookup fields are essentially strings in the following formats:
 +
* <code>entity:id</code> (for create/update requests)
 +
* <code>entity:id:name</code> (for fetch requests)
 +
 +
PartyList fields use the following format (parts in square brackets are optional):
 +
 +
<syntaxhighlight lang="xml>
 +
<party [addressused='rajesh@example.com']>entity:id[:name]</party>
 +
<party [addressused='howard@example.com']>entity:id[:name]</party>
 +
...
 +
</syntaxhighlight>
  
 
== Data service ==
 
== Data service ==
Line 35: Line 58:
 
Data service helps you access and manipulate data on Resco CRM server. The web service URL depends on server settings; whether the server uses domain organization selection or simple URL organization selection.
 
Data service helps you access and manipulate data on Resco CRM server. The web service URL depends on server settings; whether the server uses domain organization selection or simple URL organization selection.
  
* URL organization base web service URL is: <code>https://example.com/rest/v1/data/{organization}</code>
+
* URL organization base web service URL is: <code><nowiki>https://example.com/rest/v1/data/{organization}</nowiki></code>
* Domain organization base web service URL is: <code>https://{organization}.example.com/rest/v1/data</code>
+
* Domain organization base web service URL is: <code><nowiki>https://{organization}.example.com/rest/v1/data</nowiki></code>
* Resco Cloud server uses the following domain organization selection: <code>https://{organization}.rescocrm.com/rest/v1/data</code>
+
 
* Resco Inspections cloud server uses the following domain organization selection: <code>https://inspections.resco.net/rest/v1/data/{organization}</code>
+
;Examples
 +
* Resco Cloud server uses the following domain organization selection: <code><nowiki>https://{organization}.rescocrm.com/rest/v1/data</nowiki></code>
 +
* Resco Inspections cloud server uses the following domain organization selection: <code><nowiki>https://inspections.resco.net/rest/v1/data/{organization}</nowiki></code>
 +
* Resco Routes cloud server uses the following domain organization selection: <code><nowiki>https://routes.resco.net/rest/v1/data/{organization}</nowiki></code>
  
 
=== Web request requirements ===
 
=== Web request requirements ===
Line 75: Line 101:
 
|-
 
|-
 
| POST || ExecuteMultiple
 
| POST || ExecuteMultiple
 +
|-
 +
| POST || ExportProject
 +
|-
 +
| POST || ImportProject
 
|}
 
|}
  
Line 83: Line 113:
 
No parameters.
 
No parameters.
  
Sample URL: <code>https://{organization}.rescocrm.com/rest/v1/data/WhoAmI</code>
+
Sample URL: <code><nowiki>https://{organization}.rescocrm.com/rest/v1/data/WhoAmI</nowiki></code>
  
 
Response:
 
Response:
Line 101: Line 131:
 
No parameters.
 
No parameters.
  
Sample URL: <code>https://{organization}.rescocrm.com/rest/v1/data/GetMaxRowVersion</code>
+
Sample URL: <code><nowiki>https://{organization}.rescocrm.com/rest/v1/data/GetMaxRowVersion</nowiki></code>
  
 
Response:
 
Response:
Line 112: Line 142:
 
=== GET Select ===
 
=== GET Select ===
  
Template URL:
+
Template URL: <code>.../{entity}?$select={select}&$filter={filter}&$orderby={orderby} &$skip={skip}&$top={top}</code>
 
 
<code>.../{entity}?$select={select}&$filter={filter}&$orderby={orderby} &$skip={skip}&$top={top}</code>
 
  
 
Returns list of entities.
 
Returns list of entities.
Line 173: Line 201:
 
|}
 
|}
  
Sample URL: <syntaxhighlight lang="xml">https://{organization}.rescocrm.com/rest/v1/data/account?$select=name,address1_city,emailaddress1&$filter=name%20LIKE%20’C%’&$orderby=address1_city&$skip=2&$top=5</syntaxhighlight>
+
Sample URL: <code><nowiki>https://{organization}.rescocrm.com/rest/v1/data/account?$select=name,address1_city,emailaddress1&$filter=name%20LIKE%20’C%’&$orderby=address1_city&$skip=2&$top=5</nowiki></code>
  
 
Response:
 
Response:
Line 227: Line 255:
 
Fetch query. Return list of entities defined by fetch.
 
Fetch query. Return list of entities defined by fetch.
  
Sample URL: <code>https://{organization}.rescocrm.com/rest/v1/data</code>
+
Sample URL: <code><nowiki>https://{organization}.rescocrm.com/rest/v1/data</nowiki></code>
  
 
Request:
 
Request:
Line 288: Line 316:
 
Default PrimaryKey is “id”.
 
Default PrimaryKey is “id”.
  
Sample URL: <code>https://{organization}.rescocrm.com/rest/v1/data/Create</code>
+
Sample URL: <code><nowiki>https://{organization}.rescocrm.com/rest/v1/data/Create</nowiki></code>
  
 
Request:
 
Request:
Line 310: Line 338:
 
Create multiple entities. The entity is defined same as for Create method.
 
Create multiple entities. The entity is defined same as for Create method.
  
Sample URL: <code>https://{organization}.rescocrm.com/rest/v1/data/CreateMultiple</code>
+
Sample URL: <code><nowiki>https://{organization}.rescocrm.com/rest/v1/data/CreateMultiple</nowiki></code>
  
 
Request:
 
Request:
Line 338: Line 366:
 
{create} (optional) — Determine whether the entity should be created if it does not exist.
 
{create} (optional) — Determine whether the entity should be created if it does not exist.
  
Sample URL: <code>https://{organization}.rescocrm.com/rest/v1/data/Update</code>
+
Sample URL: <code><nowiki>https://{organization}.rescocrm.com/rest/v1/data/Update</nowiki></code>
  
Optional URL: <code>https://{organization}.rescocrm.com/rest/v1/data/Update?$create=true</code>
+
Optional URL: <code><nowiki>https://{organization}.rescocrm.com/rest/v1/data/Update?$create=true</nowiki></code>
  
  
Line 361: Line 389:
 
{create} (optional) — Determine whether the entity should be created if it does not exist.
 
{create} (optional) — Determine whether the entity should be created if it does not exist.
  
Sample URL: <code>https://{organization}.resccrm.com/rest/v1/data/UpdateMultiple</code>
+
Sample URL: <code><nowiki>https://{organization}.rescocrm.com/rest/v1/data/UpdateMultiple</nowiki></code>
  
Optional URL: <code>https://{organization}.resccrm.com/rest/v1/data/UpdateMultiple?$create=true</code>
+
Optional URL: <code><nowiki>https://{organization}.rescocrm.com/rest/v1/data/UpdateMultiple?$create=true</nowiki></code>
  
 
Request:
 
Request:
Line 386: Line 414:
 
Delete entity. Optional, the primary key can be specified by “PrimaryKey” attribute. Default PrimaryKey is “id”.
 
Delete entity. Optional, the primary key can be specified by “PrimaryKey” attribute. Default PrimaryKey is “id”.
  
Sample URL: <code>https://{organization}.resccrm.com/rest/v1/data/Delete</code>
+
Sample URL: <code><nowiki>https://{organization}.rescocrm.com/rest/v1/data/Delete</nowiki></code>
  
 
Request:
 
Request:
Line 405: Line 433:
 
Delete multiple entities. The entity is defined the same way as for Delete method.
 
Delete multiple entities. The entity is defined the same way as for Delete method.
  
Sample URL: <code>https://{organization}.resccrm.com/rest/v1/data/DeleteMultiple</code>
+
Sample URL: <code><nowiki>https://{organization}.rescocrm.com/rest/v1/data/DeleteMultiple</nowiki></code>
  
 
Request:
 
Request:
Line 427: Line 455:
 
* Delete – Delete entity
 
* Delete – Delete entity
  
Sample URL: <code>https://{organization}.resccrm.com/rest/v1/data/Execute</code>
+
Sample URL: <code><nowiki>https://{organization}.rescocrm.com/rest/v1/data/Execute</nowiki></code>
  
 
Request:
 
Request:
Line 444: Line 472:
 
</Response></syntaxhighlight>
 
</Response></syntaxhighlight>
  
=== Post ExecuteMultiple ===
+
=== POST ExecuteMultiple ===
  
Allow to execute specified operations on multiple entities, such as Create, Update, Upsert and Delete.
+
Allow to execute specified operations on multiple entities, such as Create, Update, Upsert, and Delete.
* ContinueOnError – Determine whether to continue executing operation on error.
+
* ContinueOnError – Determine whether to continue executing an operation on error.
 
* TransactionType – Determine transaction operation:
 
* TransactionType – Determine transaction operation:
* None – execute multiple will not run in transaction
+
* None – execute multiple will not run in a transaction
 
* RollbackOnError – execute multiple transaction will roll back on error
 
* RollbackOnError – execute multiple transaction will roll back on error
 
* CommitOnError – execute multiple transaction will commit on error
 
* CommitOnError – execute multiple transaction will commit on error
Line 459: Line 487:
 
* Delete – Delete entity
 
* Delete – Delete entity
  
Sample URL: <code>https://{organization}.resccrm.com/rest/v1/data/ExecuteMultiple</code>
+
Sample URL: <code><nowiki>https://{organization}.rescocrm.com/rest/v1/data/ExecuteMultiple</nowiki></code>
  
 
Request:
 
Request:
Line 505: Line 533:
 
 </Response>
 
 </Response>
 
</MultipleResponse></syntaxhighlight>
 
</MultipleResponse></syntaxhighlight>
 +
 +
=== POST ExportProject ===
 +
 +
Export the complete app project definition to a file. You need to specify project name or ID as a parameter.
 +
 +
Sample URL:
 +
 +
<code><nowiki>https://{organization}.rescocrm.com/rest/v1/data/ExportProject?$id={id}</nowiki></code>
 +
 +
<code><nowiki>https://{organization}.rescocrm.com/rest/v1/data/ExportProject?$name={name}</nowiki></code>
 +
 +
Response: Binary project data.
 +
 +
=== POST ImportProject (and publish) ===
 +
 +
Replace the content of an existing app project with the imported file. Specify destination project ID or name. The project must already exist. Use <code>&$publish=true</code> to automatically publish the project.
 +
 +
Sample URL:
 +
 +
<code><nowiki>https://{organization}.rescocrm.com/rest/v1/data/ImportProject?$id={id}&$publish={publish}</nowiki></code>
 +
 +
<code><nowiki>https://{organization}.rescocrm.com/rest/v1/data/ImportProject?$name={name}&$publish={publish}</nowiki></code>
 +
 +
BODY:
 +
 +
Binary project data.
 +
 +
== Sample C# project ==
 +
 +
For your convenience, we have prepared a C# project that implements the data service.
 +
 +
* https://rescocrm.com/docs/RescoCRM.SDK.zip - source code for Visual Studio
 +
* https://www.nuget.org/packages/Resco.Cloud.Client/ - library with regular updates
 +
 +
== See also ==
 +
 +
Resco also offers you a development kit that allows you to develop your own plugins for Resco Cloud. Plugins can be used in [[Admin_Console#Processes|processes]]:
 +
 +
* [https://rescocrm.com/docs/RescoCRM.Plugin.SDK.zip RescoCRM Plugin SDK]
  
  
 
[[Category:Resco Cloud]]
 
[[Category:Resco Cloud]]

Latest revision as of 13:45, 13 May 2021

Integration with third-party systems

Resco CRM Connector (web APIs):




Resco CRM connector is a group of web API services that you can use to connect your third-party backend to Resco Cloud to exchange data between the systems. These are the components involved in Resco CRM Connector.

Resco crm connector.png

Resco Cloud and mobile apps are provided by Resco. Resco Cloud allows you to define schema and stores data for mobile apps, which is used to display the data.

You can now build your own Resco CRM Connector to enable the synchronization between your backend system and the Resco Cloud. Resco Cloud acts as a passive module — it does not initiate any synchronization. Mobile apps must initiate the synchronization process to download/upload data. This also applies to Resco CRM Connector. It must determine when/whether to synchronize ERP system data with data stored on the Resco Cloud. For example, every hour, every day, etc., depends on how current the data must be on the clients. To check whether there are new/updated data on the Resco Cloud use “GetMaxRowVersion” web service method to get the current row version. If the current row version changed from the last stored row version, there are new changes available on the Resco Cloud.

Available APIs

Resco CRM Connector offers three different APIs:

This article describes the REST data service.

Data types

  • UniqueIdentifier
  • String
  • Integer
  • Float
  • Decimal
  • DateTime
  • Picklist
  • PicklistMap
  • Boolean
  • Money
  • Binary
  • Lookup
  • RowVersion
  • PartyList

By default, the data type format in data service requests and responses is in invariant culture (for example, the decimal separator is always a dot).

Date fields are in UTC time, in the following format: yyyy-MM-ddTHH:mm:ssZ; for example, 2020-12-12T09:00:00. Optionally, you can use syntax defined in RFC 3339 to modify this format.

Lookup fields are essentially strings in the following formats:

  • entity:id (for create/update requests)
  • entity:id:name (for fetch requests)

PartyList fields use the following format (parts in square brackets are optional):

<party [addressused='rajesh@example.com']>entity:id[:name]</party>
<party [addressused='howard@example.com']>entity:id[:name]</party>
...

Data service

Data service helps you access and manipulate data on Resco CRM server. The web service URL depends on server settings; whether the server uses domain organization selection or simple URL organization selection.

  • URL organization base web service URL is: https://example.com/rest/v1/data/{organization}
  • Domain organization base web service URL is: https://{organization}.example.com/rest/v1/data
Examples
  • Resco Cloud server uses the following domain organization selection: https://{organization}.rescocrm.com/rest/v1/data
  • Resco Inspections cloud server uses the following domain organization selection: https://inspections.resco.net/rest/v1/data/{organization}
  • Resco Routes cloud server uses the following domain organization selection: https://routes.resco.net/rest/v1/data/{organization}

Web request requirements

Method: GET/POST

Content-Type: application/xml; charset=utf-8

Authorization: Basic BASE64(login:password)

Methods

POST WhoAmI
POST GetMaxRowVersion
GET Select
POST Fetch
POST Create
POST CreateMultiple
POST Update
POST UpdateMultiple
POST Delete
POST DeleteMultiple
POST Execute
POST ExecuteMultiple
POST ExportProject
POST ImportProject

POST WhoAmI

Return organization ID and user ID.

No parameters.

Sample URL: https://{organization}.rescocrm.com/rest/v1/data/WhoAmI

Response:

<?xml version=“1.0” encoding=“utf-8“?>
<WhoAmI xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance“><OrganizationId>87ddc2f8-d0d1-4ad6-a925-5765a7a46edd</ OrganizationId><UserId>601d9d17-89b4-e111-9c9a-00155d0b710a</UserId>
</WhoAmI>

POST GetMaxRowVersion

Return max row version for the database. Row version is counter of every change in database. It helps to determine changes from last synchronization. Each entity has system attribute “rowversion” which determine the version (or timestamp) of last change for the specified row.

No parameters.

Sample URL: https://{organization}.rescocrm.com/rest/v1/data/GetMaxRowVersion

Response:

<?xml version=“1.0” encoding=“utf-8“?>
<string>3665</string>

GET Select

Template URL: .../{entity}?$select={select}&$filter={filter}&$orderby={orderby} &$skip={skip}&$top={top}

Returns list of entities.

Parameters:

{entity} determine the entity to retrieve, optionally, you can specify entity id to retrieve in the following format: account(guid’300a4f0b-99dc-4ba5-95bd-d41abf61dc10′)
{select} determine attributes to retrieve, separated by comma
{filter} determine entity filter
{orderby} – determine sort, optionally include “desc” keyword. Separated by comma.
{skip} – determine number of entities to skip
{top} – determine number of entities to return

A condition is defined like: {left identifier} {comparison statement} {right identifier} {and/or} .... The left identifier is always the attribute name.

Comparison statements can be any of following:

eq, =, == equal
ne, !=, <> not equal
gt, > greater than
ge, >= greater than equal
lt, < less than
le, <= less than equal
like, not-like like or not like

Right identifier can be any of following:

string value “string”, or ‘string’
integer value 0, 1, 2, ….
null, not-null

Conditions can be joined using:

and &&
or ||

Sample URL: https://{organization}.rescocrm.com/rest/v1/data/account?$select=name,address1_city,emailaddress1&$filter=name%20LIKE%20’C%’&$orderby=address1_city&$skip=2&$top=5

Response:

<?xml version=“1.0” encoding=”utf-8“?>
<EntitySet xmlns=“http://schemas.resco.net/XRM/OrganizationService“><Metadata PrimaryEntity=“account“>
  <Attributes>
   <Attribute EntityName=“account” AttributeName=“name” Name=“name” Type=“String“/>
   <Attribute EntityName=“account” AttributeName=“address1_city” Name=“address1 _city” Type=“String“/>
   <Attribute EntityName=“account” AttributeName=“emailaddress1” Name=“emailaddress1” Type=“String“/>
   <Attribute EntityName=“account” AttributeName=“id” Name=”id” Type=“UniqueIdentifier“/>
  </Attributes></Metadata><Entities>
  <Entity EntityName=“account“>
   <name>Cash and Carry Bikes</name>
   <address1_city>Dallas</address1_city>
   <emailaddress1>someone@example.com</emailaddress1>
   <id>b9ca6c78-4e0b-df11-a3d5-0003ff9c98bb</id>
  </Entity>
  <Entity EntityName=“account“>
   <name>Convenient Bike Shop</name>
   <address1_city>Everett</address1_city>
   <emailaddress1>someone@example.com</emailaddress1>
   <id>bdca6c78-4e0b-df11-a3d5-0003ff9c98bb</id>
  </Entity>
   <Entity EntityName=“account“>
   <name>Cheap n Best bikes</name>
   <address1_city>Redmond</address1_city>
   <emailaddress1>someone@example.com</emailaddress1>
   <id>bbca6c78-4e0b-df11-a3d5-0003ff9c98bb</id>
  </Entity>
   <Entity EntityName=“account“>
   <name>Cool Ride Store</name>
   <address1_city>Seattle</address1_city>
   <emailaddress1>someone@example.com</emailaddress1>
   <id>beca6c78-4e0b-df11-a3d5-0003ff9c98bb</id>
  </Entity>
   <Entity EntityName=“account“>
   <name>Certified Bicycle Supply</name>
   <address1_city>West Covina</address1_city>
   <emailaddress1>someone@example.com</emailaddress1>
   <id>baca6c78-4e0b-df11-a3d5-0003ff9c98bb</id>
  </Entity></Entities>
</EntitySet>

POST Fetch

Fetch query. Return list of entities defined by fetch.

Sample URL: https://{organization}.rescocrm.com/rest/v1/data

Request:

<fetch page=“2  count=“5” paging-cookie=“optional PagingCookie from previous fetch“><entity name=“account“>
  <attribute name=“id” />
  <attribute name=“name” />
  <order attribute=“name” descending=“true” />
  <filter>
   <condition attribute=“name” operator=“like” value=“b%” />
  </filter></entity>
</fetch>

Response:

<?xml version=“1.0” encoding=”utf-8“?>
<EntitySet xmlns=“http://schemas.resco.net/XRM/OrganizationService“><Metadata PrimaryEntity=“account“>
  <Attributes>
   <Attribute EntityName=“account” AttributeName=“id” Type=“UniqueIdentifier“/>
   <Attribute EntityName=“account” AttributeName=“name” Name=“id” Name=“name” Type=“String“/>
  </Attributes></Metadata><Entities>
  <Entity EntityName=“account“>
   <id>b3ca6c78-4e0b-df11-a3d5-0003ff9c98bb</id>
   <name>Bikes unlimited</name>
  </Entity>
  <Entity EntityName=“account“>
   <id>b2ca6c78-4e0b-df11-a3d5-0003ff9c98bb</id>
   <name>Bike-o-maniac store</name>
  </Entity>
  <Entity EntityName=“account“>
   <id>b1ca6c78-4e0b-df11-a3d5-0003ff9c98bb</id>
   <name>Bike Universe</name>
  </Entity>
  <Entity EntityName=“account“>
   <id>b0ca6c78-4e0b-df11-a3d5-0003ff9c98bb</id>
   <name>Bike Products and Accessories</name>
  </Entity>
  <Entity EntityName=“account“>
   <id>afca6c78-4e0b-df11-a3d5-0003ff9c98bb</id>
   <name>Bike Experts</name>
  </Entity></Entities><MoreRecords>true</MoreRecords><PagingCookie>&lt;cookie page=”2″&gt;&lt;name last=”Bike  Experts” descending=”1″ /&gt;&lt;id last=”afca6c78-4e0b-df11-a3d5-0003ff9c98bb” /&gt;&lt;/cookie&gt;</PagingCookie>
</EntitySet>

POST Create

Create entity and return entity ID. Optional, primary key can be specified by “PrimaryKey” attribute.

Default PrimaryKey is “id”.

Sample URL: https://{organization}.rescocrm.com/rest/v1/data/Create

Request:

<Entity EntityName=‘account‘ [PrimaryKey=’name;address1_city‘]><id>1607A7F7-C16F-4E19-849C-BAD37FF59F5C</id><name>My Name</name><address1_city>Bratislava</address1_city><revenue>123456.789</revenue>
</Entity>

Response:

<?xml version=“1.0” encoding=“utf-8“?>
<guid>1607a7f7-c16f-4e19-849c-bad37ff59f5c</guid>

POST CreateMultiple

Create multiple entities. The entity is defined same as for Create method.

Sample URL: https://{organization}.rescocrm.com/rest/v1/data/CreateMultiple

Request:

<Entities xmlns=‘http://schemas.resco.net/XRM/EntitySet‘><Entity EntityName=‘account‘>
  <id>FE400D92-EFD6-4856-A0B4-94C63212D5C8</id>
  <name>My Name 1</name>
  <address1_city>Bratislava</address1_city>
  <revenue>123456.789</revenue></Entity><Entity EntityName=‘account‘>
  <id>D008549E-842F-46EC-9F76-ECC5F20A550D</id>
  <name>My Name 2</name>
  <address1_city>Bratislava</address1_city>
  <revenue>987654.321</revenue></Entity>
</Entities>

POST Update?$create={create}

Update entity. Optional, the primary key can be specified by “PrimaryKey” attribute. Default PrimaryKey is “id”.

Parameter:

{create} (optional) — Determine whether the entity should be created if it does not exist.

Sample URL: https://{organization}.rescocrm.com/rest/v1/data/Update

Optional URL: https://{organization}.rescocrm.com/rest/v1/data/Update?$create=true


Request:

<Entity EntityName=‘account‘ [PrimaryKey=‘name;address1_city‘]><id>1607A7F7-C16F-4E19-849C-BAD37FF59F5C</id><name>My Name 2</name><address1_city>Bratislava</address1_city><revenue>987654.321</revenue>
</Entity>

POST UpdateMultiple?$create={create}

Update multiple entities. The entity is defined the same way as for Update method.

Parameter:

{create} (optional) — Determine whether the entity should be created if it does not exist.

Sample URL: https://{organization}.rescocrm.com/rest/v1/data/UpdateMultiple

Optional URL: https://{organization}.rescocrm.com/rest/v1/data/UpdateMultiple?$create=true

Request:

<Entities xmlns=‘http://schemas.resco.net/XRM/EntitySet‘><Entity EntityName=‘account‘>
  <id>FE400D92-EFD6-4856-A0B4-94C63212D5C8</id><name>My Name 1</name>
  <address1_city>Bratislava</address1_city>
  <revenue>123456.789</revenue></Entity><Entity EntityName=‘account‘>
  <id>D008549E-842F-46EC-9F76-ECC5F20A550D</id>
  <name>My Name 2</name>
  <address1_city>Bratislava</address1_city>
  <revenue>987654.321</revenue></Entity>
</Entities>

POST Delete

Delete entity. Optional, the primary key can be specified by “PrimaryKey” attribute. Default PrimaryKey is “id”.

Sample URL: https://{organization}.rescocrm.com/rest/v1/data/Delete

Request:

<Entity EntityName=‘account‘><id>1607A7F7-C16F-4E19-849C-BAD37FF59F5C</id>
</Entity>

With PrimaryKey:

<Entity EntityName=‘account‘ PrimaryKey=‘name;address1_city‘><name>My Name 3</name><address1_city>Bratislava</address1_city>
</Entity>

POST DeleteMultiple

Delete multiple entities. The entity is defined the same way as for Delete method.

Sample URL: https://{organization}.rescocrm.com/rest/v1/data/DeleteMultiple

Request:

<Entities xmlns=‘http://schemas.resco.net/XRM/EntitySet‘><Entity EntityName=‘account‘>
  <id>FE400D92-EFD6-4856-A0B4-94C63212D5C8</id> </Entity><Entity EntityName=‘account‘>
  <id>D008549E-842F-46EC-9F76-ECC5F20A550D</id></Entity>
</Entities>

POST Execute

Allow to execute specified operation on entity, such as Create, Update, Upsert and Delete.

Action:

  • Create – Create entity
  • Update – Update entity
  • Upsert – If exist, Update entity; otherwise Create entity
  • Delete – Delete entity

Sample URL: https://{organization}.rescocrm.com/rest/v1/data/Execute

Request:

<Entity EntityName=‘account‘ Action= Create‘ [PrimaryKey=‘name;address1_city‘] xmlns=‘http://schemas.resco.net/XRM/Execute‘><id>1607A7F7-C16F-4E19-849C-BAD37FF59F5C</id><name>My Name</name><address1_city>Bratislava</address1_city><revenue>123456.789</revenue>
</Entity>

Response:

<Response Action=“Create” xmlns=“http://schemas.resco.net/XRM/Execute“><Result Type=“guid“>1607a7f7-c16f-4e19-849c-bad37ff59f5c</Result>
</Response>

POST ExecuteMultiple

Allow to execute specified operations on multiple entities, such as Create, Update, Upsert, and Delete.

  • ContinueOnError – Determine whether to continue executing an operation on error.
  • TransactionType – Determine transaction operation:
  • None – execute multiple will not run in a transaction
  • RollbackOnError – execute multiple transaction will roll back on error
  • CommitOnError – execute multiple transaction will commit on error

Action:

  • Create – Create entity
  • Update – Update entity
  • Upsert – If exist, Update entity; otherwise Create entity
  • Delete – Delete entity

Sample URL: https://{organization}.rescocrm.com/rest/v1/data/ExecuteMultiple

Request:

<ExecuteMultiple TransactionType=‘RollbackOnError‘ ContinueOnError=‘false‘ xmlns=‘http://schemas.resco.net/XRM/Execute‘><Entity EntityName=‘account‘ Action=‘Create‘>
  <id>1607A7F7-C16F-4E19-849C-BAD37FF59F5C</id>
  <name>My Name</name>
  <address1_city>Bratislava</address1_city>
  <revenue>123456.789</revenue></Entity><Entity EntityName=‘account‘ Action=‘Update‘>
  <id>1607A7F7-C16F-4E19-849C-BAD37FF59F5C</id>
  <name>My Name 2</name></Entity><Entity EntityName=‘account‘ Action=‘Upsert‘>
  <id>2607A7F7-C16F-4E19-849C-BAD37FF59F5C</id>
  <name>My Name 3</name>
  <revenue2>987654.321</revenue2></Entity><Entity EntityName=‘account‘ Action=‘Delete‘>
  <id>1607A7F7-C16F-4E19-849C-BAD37FF59F5C</id></Entity>
</ExecuteMultiple>

Response:

<?xml version=“1.0” encoding=“utXRMf-8“?>
<MultipleResponse xmlns=“http://schemas.resco.net/XRM/Execute“><Response Action=“Create“>
  <Result Type=“guid“>1607a7f7-c16f-4e19-849c-bad37ff59f5c</Result> </Response><Response Action=“Update“>
  <Result Type=“bool“>true</Result></Response><Response Action=“Upsert“>
  <Fault xmlns=“http://schemas.resco.net/XRM/XRMServiceError“>
   <Code>500</Code>
   <Reason>KeyNotFoundException</Reason>
   <Detail>The given attribute ‘revenue2’ was not present in the entity metadata.</Detail>
   <StackTrace></StackTrace>
  </Fault></Response><Response Action=“Delete“>
  <Result Type=“bool“>true</Result></Response>
</MultipleResponse>

POST ExportProject

Export the complete app project definition to a file. You need to specify project name or ID as a parameter.

Sample URL:

https://{organization}.rescocrm.com/rest/v1/data/ExportProject?$id={id}

https://{organization}.rescocrm.com/rest/v1/data/ExportProject?$name={name}

Response: Binary project data.

POST ImportProject (and publish)

Replace the content of an existing app project with the imported file. Specify destination project ID or name. The project must already exist. Use &$publish=true to automatically publish the project.

Sample URL:

https://{organization}.rescocrm.com/rest/v1/data/ImportProject?$id={id}&$publish={publish}

https://{organization}.rescocrm.com/rest/v1/data/ImportProject?$name={name}&$publish={publish}

BODY:

Binary project data.

Sample C# project

For your convenience, we have prepared a C# project that implements the data service.

See also

Resco also offers you a development kit that allows you to develop your own plugins for Resco Cloud. Plugins can be used in processes: