Resco CRM Server Guide

How to integrate Resco CRM with other back-end systems using web services

Integrating Resco CRM with other back-end systems using web services (Data, Metadata)

This document consists of three major parts. The first one briefly describes Resco CRM Server; the second one talks about the integration of the server with other CRM or ERP systems. The last one is a detailed description of the web services that are used for the synchronization of the Resco CRM Server with your back-end system.

Meet Resco CRM Server

Resco CRM provides you with a data storage with customizable data scheme; it can be cloud-based or on premise. You can connect Resco CRM to other CRM or non-CRM servers, or use it independently.

You can use Resco CRM web client (that comes with the server) to view the data stored on the server. An important part of the server is also a configuration and administration console. This admin tool allows you to manage all the devices and users related to your CRM organization created on the server, and the configuration tool allows you to configure the data scheme, layout and business logic of the CRM system.

Resco CRM integration

001

YOUR BACKEND SYSTEM — Any CRM/ERP System

Resco CRM Connector — Synchronization module between ERP System and Resco CRM Server.

Resco CRM Server — Fully customizable back end for Mobile CRM Client application.

Resco CRM Client — End-user CRM application customized for Resco CRM server.

 

Resco CRM Server and Client are provided by Resco. Resco CRM Server allows defining schema and stores the data for Mobile CRM Client, which is used to display the data.

You can now build your own Resco CRM Connector to enable the synchronization between your back-end 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.

Resco CRM Connector

Consist of a set of REST Web Service methods divided into Metadata Service and Data service.

Data Types

UniqueIdentifier

String

Integer

Float

Decimal

DateTime

Picklist

PicklistMap

Boolean

Money

Binary

Lookup

RowVersion

PartyList

Resco CRM Connector — 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

Resco’s Mobile CRM Cloud server uses domain organization selection: https://{organization}.rescocrm.com/rest/v1/data

 

Web Request requirements:

Method: GET/POST

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

Authorization: Basic BASE64(login:password)

 

Methods:
1. POST WhoAmI
2. POST GetMaxRowVersion
3. GET Select
4. POST Fetch
5. POST Create
6. POST CreateMultiple
7. POST Update
8. POST UpdateMultiple
9. POST Delete
10. POST DeleteMultiple
11. POST Execute
12. POST ExecuteMultiple

 

1. POST WhoAmI

Return organization ID and user ID.

No parameters.

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

 

Response:

<?xml version=1.0encoding=utf-8?>

<WhoAmI xmlns:xsd=http://www.w3.org/2001/XMLSchemaxmlns:xsi=http://www.w3.org/2001/XMLSchema-instance>          

<OrganizationId>87ddc2f8-d0d1-4ad6-a925-5765a7a46edd</ OrganizationId>          

<UserId>601d9d17-89b4-e111-9c9a-00155d0b710a</UserId>

</WhoAmI>

 

2. 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.0encoding=utf-8?>

<string>3665</string>

 

3. 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
following format: account(guid’300a4f0b-99dc-4ba5-95bd-d41abf61dc10′)
{select} – determine attributes to retrieve, separated by comma
{filter} – determine entity filter. Condition is defined like:
{left identifier} {comparison statement} {right identifier} {and/or} ……
The left identifier is always the attribute name.
Comparison statements can by 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, ||
{orderby} – determine sort, optionally include “desc” keyword. Separated by comma.
{skip} – determine number of entities to skip
{top} – determine number of entities to return

 

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.0encoding=”utf-8?>

<EntitySet xmlns=http://schemas.resco.net/XRM/OrganizationService>

<Metadata PrimaryEntity=account>

<Attributes>

<Attribute EntityName=accountAttributeName=nameName=name” Type=String/>

<Attribute EntityName=account” AttributeName=address1_city” Name=address1 _cityType=String/>

<Attribute EntityName=account” AttributeName=emailaddress1” Name=emailaddress1Type=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>

 

4. POST Fetch

Fetch query. Return list of entities defined by fetch.
Sample URL: https://{organization}.rescocrm.com/rest/v1/data

Request:

<fetch page=2count=5paging-cookie=optional PagingCookie from previous fetch>

<entity name=account>

<attribute name=id/>

<attribute name=name/>

<order attribute=namedescending=true/>

<filter>

<condition attribute=nameoperator=likevalue=b%/>

</filter>

</entity>

</fetch>

 

Response:

<?xml version=1.0encoding=”utf-8?>

<EntitySet xmlns=http://schemas.resco.net/XRM/OrganizationService>

<Metadata PrimaryEntity=account>

<Attributes>

<Attribute EntityName=accountAttributeName=id” Type=UniqueIdentifier/>

<Attribute EntityName=accountAttributeName=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>

 

5. 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.0encoding=utf-8?>

<guid>1607a7f7-c16f-4e19-849c-bad37ff59f5c</guid>

 

6. 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>

 

7. 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>

 

8. 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}.resccrm.com/rest/v1/data/UpdateMultiple

Optional URL: https://{organization}.resccrm.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>

 

9. POST Delete

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

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

 

Request:

<Entity EntityName=account>

<id>1607A7F7-C16F-4E19-849C-BAD37FF59F5C</id>

</Entity>

 

With PrimaryKey:

<Entity EntityName=accountPrimaryKey=name;address1_city>

<name>My Name 3</name>

<address1_city>Bratislava</address1_city>

</Entity>

 

10. POST DeleteMultiple

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

Sample URL: https://{organization}.resccrm.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>

 

11. 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}.resccrm.com/rest/v1/data/Execute

 

Request:

<Entity EntityName=accountAction=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=Createxmlns=http://schemas.resco.net/XRM/Execute>

<Result Type=guid>1607a7f7-c16f-4e19-849c-bad37ff59f5c</Result>

</Response>

 

12. Post ExecuteMultiple

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

 

ContinueOnError – Determine whether to continue executing operation on error.

TransactionType – Determine transaction operation:

None – execute multiple will not run in 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}.resccrm.com/rest/v1/data/ExecuteMultiple

 

Request:

<ExecuteMultiple TransactionType=RollbackOnErrorContinueOnError=falsexmlns=http://schemas.resco.net/XRM/Execute>

<Entity EntityName=accountAction=Create>

<id>1607A7F7-C16F-4E19-849C-BAD37FF59F5C</id>

<name>My Name</name>

<address1_city>Bratislava</address1_city>

<revenue>123456.789</revenue>

</Entity>

<Entity EntityName=accountAction=Update>

<id>1607A7F7-C16F-4E19-849C-BAD37FF59F5C</id>

<name>My Name 2</name>

</Entity>

<Entity EntityName=accountAction=Upsert>

<id>2607A7F7-C16F-4E19-849C-BAD37FF59F5C</id>

<name>My Name 3</name>

<revenue2>987654.321</revenue2>

</Entity>

<Entity EntityName=accountAction=Delete>

<id>1607A7F7-C16F-4E19-849C-BAD37FF59F5C</id>

</Entity>

</ExecuteMultiple>

 

Response:

<?xml version=1.0encoding=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>