Let the platform do the work

How to Check for Duplicate Records

Overview

An PHP example demonstrating how to check for duplicate records using the v11 /<module>/duplicateCheck REST POST endpoint.

Duplicate Records

Authenticating

First, you will need to authenticate to the Sugar API. An example is shown below:

  <?php

$instance_url = "http://{site_url}/rest/v11";
$username = "admin";
$password = "password";

//Login - POST /oauth2/token
$auth_url = $instance_url . "/oauth2/token";

$oauth2_token_arguments = array(
    "grant_type" => "password",
    //client id - default is sugar. 
    //It is recommended to create your own in Admin > OAuth Keys
    "client_id" => "sugar", 
    "client_secret" => "",
    "username" => $username,
    "password" => $password,
    //platform type - default is base.
    //It is recommend to change the platform to a custom name such as "custom_api" to avoid authentication conflicts.
    "platform" => "custom_api" 
);

$auth_request = curl_init($auth_url);
curl_setopt($auth_request, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_setopt($auth_request, CURLOPT_HEADER, false);
curl_setopt($auth_request, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($auth_request, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($auth_request, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($auth_request, CURLOPT_HTTPHEADER, array(
    "Content-Type: application/json"
));

//convert arguments to json
$json_arguments = json_encode($oauth2_token_arguments);
curl_setopt($auth_request, CURLOPT_POSTFIELDS, $json_arguments);

//execute request
$oauth2_token_response = curl_exec($auth_request);

//decode oauth2 response to get token
$oauth2_token_response_obj = json_decode($oauth2_token_response);
$oauth_token = $oauth2_token_response_obj->access_token;

More information on authenticating can be found in the How to Authenticate and Log Out example and /oauth2/logout endpoint documentation.

Retrieving Duplicates

Next, we will need to identify the records that are duplicates using the /<module>/duplicateCheck endpoint.

  //Check for duplicate records - POST /<module>/duplicateCheck

$url = $instance_url . "/Accounts/duplicateCheck";
//Set up the Record details
$record = array(
    'name' => 'Test Record',
);

$curl_request = curl_init($url);
curl_setopt($curl_request, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_setopt($curl_request, CURLOPT_HEADER, false);
curl_setopt($curl_request, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl_request, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_request, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($curl_request, CURLOPT_HTTPHEADER, array(
    "Content-Type: application/json",
    "oauth-token: {$oauth_token}"
));

//convert arguments to json
$json_arguments = json_encode($record);
curl_setopt($curl_request, CURLOPT_POSTFIELDS, $json_arguments);
//execute request
$curl_response = curl_exec($curl_request);
//decode json
$createdRecord = json_decode($curl_response);

//display the created record
print_r($createdRecord);
curl_close($curl_request);

More information on the filter API can be found in the /<module>/duplicateCheck documentation.

Request Payload

The data sent to the server is shown below:

  {
   "name":"Test Record"
}

Response

The data received from the server is shown below:

  {
    "next_offset": -1,
    "records": [{
        "id": "7f6ea7be-60d6-11e6-8885-a0999b033b33",
        "name": "Test Record",
        "date_entered": "2016-08-12T14:48:25-07:00",
        "date_modified": "2016-08-12T14:48:25-07:00",
        "modified_user_id": "1",
        "modified_by_name": "Administrator",
        "modified_user_link": {
            "full_name": "Administrator",
            "id": "1",
            "_acl": {
                "fields": [],
                "delete": "no",
                "_hash": "8e11bf9be8f04daddee9d08d44ea891e"
            }
        },
        "created_by": "1",
        "created_by_name": "Administrator",
        "created_by_link": {
            "full_name": "Administrator",
            "id": "1",
            "_acl": {
                "fields": [],
                "delete": "no",
                "_hash": "8e11bf9be8f04daddee9d08d44ea891e"
            }
        },
        "description": "Test Data 1",
        "deleted": false,
        "facebook": "",
        "twitter": "",
        "googleplus": "",
        "account_type": "",
        "industry": "",
        "annual_revenue": "",
        "phone_fax": "",
        "billing_address_street": "",
        "billing_address_street_2": "",
        "billing_address_street_3": "",
        "billing_address_street_4": "",
        "billing_address_city": "",
        "billing_address_state": "",
        "billing_address_postalcode": "",
        "billing_address_country": "",
        "rating": "",
        "phone_office": "",
        "phone_alternate": "",
        "website": "",
        "ownership": "",
        "employees": "",
        "ticker_symbol": "",
        "shipping_address_street": "",
        "shipping_address_street_2": "",
        "shipping_address_street_3": "",
        "shipping_address_street_4": "",
        "shipping_address_city": "",
        "shipping_address_state": "",
        "shipping_address_postalcode": "",
        "shipping_address_country": "",
        "parent_id": "",
        "sic_code": "",
        "duns_num": "",
        "parent_name": "",
        "member_of": {
            "name": "",
            "id": "",
            "_acl": {
                "fields": [],
                "_hash": "654d337e0e912edaa00dbb0fb3dc3c17"
            }
        },
        "campaign_id": "",
        "campaign_name": "",
        "campaign_accounts": {
            "name": "",
            "id": "",
            "_acl": {
                "fields": [],
                "_hash": "654d337e0e912edaa00dbb0fb3dc3c17"
            }
        },
        "following": true,
        "my_favorite": false,
        "tag": [],
        "assigned_user_id": "1",
        "assigned_user_name": "Administrator",
        "assigned_user_link": {
            "full_name": "Administrator",
            "id": "1",
            "_acl": {
                "fields": [],
                "delete": "no",
                "_hash": "8e11bf9be8f04daddee9d08d44ea891e"
            }
        },
        "team_count": "",
        "team_count_link": {
            "team_count": "",
            "id": "1",
            "_acl": {
                "fields": [],
                "_hash": "654d337e0e912edaa00dbb0fb3dc3c17"
            }
        },
        "team_name": [{
            "id": "1",
            "name": "Global",
            "name_2": "",
            "primary": true
        }],
        "email": [],
        "email1": "",
        "email2": "",
        "invalid_email": "",
        "email_opt_out": "",
        "email_addresses_non_primary": "",
        "_acl": {
            "fields": {}
        },
        "_module": "Accounts",
        "duplicate_check_rank": 8
    }, {
        "id": "868b4f16-60d6-11e6-bdfc-a0999b033b33",
        "name": "Test Record",
        "date_entered": "2016-08-12T14:48:37-07:00",
        "date_modified": "2016-08-12T14:48:37-07:00",
        "modified_user_id": "1",
        "modified_by_name": "Administrator",
        "modified_user_link": {
            "full_name": "Administrator",
            "id": "1",
            "_acl": {
                "fields": [],
                "delete": "no",
                "_hash": "8e11bf9be8f04daddee9d08d44ea891e"
            }
        },
        "created_by": "1",
        "created_by_name": "Administrator",
        "created_by_link": {
            "full_name": "Administrator",
            "id": "1",
            "_acl": {
                "fields": [],
                "delete": "no",
                "_hash": "8e11bf9be8f04daddee9d08d44ea891e"
            }
        },
        "description": "Test Data 2",
        "deleted": false,
        "facebook": "",
        "twitter": "",
        "googleplus": "",
        "account_type": "",
        "industry": "",
        "annual_revenue": "",
        "phone_fax": "",
        "billing_address_street": "",
        "billing_address_street_2": "",
        "billing_address_street_3": "",
        "billing_address_street_4": "",
        "billing_address_city": "",
        "billing_address_state": "",
        "billing_address_postalcode": "",
        "billing_address_country": "",
        "rating": "",
        "phone_office": "",
        "phone_alternate": "",
        "website": "",
        "ownership": "",
        "employees": "",
        "ticker_symbol": "",
        "shipping_address_street": "",
        "shipping_address_street_2": "",
        "shipping_address_street_3": "",
        "shipping_address_street_4": "",
        "shipping_address_city": "",
        "shipping_address_state": "",
        "shipping_address_postalcode": "",
        "shipping_address_country": "",
        "parent_id": "",
        "sic_code": "",
        "duns_num": "",
        "parent_name": "",
        "member_of": {
            "name": "",
            "id": "",
            "_acl": {
                "fields": [],
                "_hash": "654d337e0e912edaa00dbb0fb3dc3c17"
            }
        },
        "campaign_id": "",
        "campaign_name": "",
        "campaign_accounts": {
            "name": "",
            "id": "",
            "_acl": {
                "fields": [],
                "_hash": "654d337e0e912edaa00dbb0fb3dc3c17"
            }
        },
        "following": true,
        "my_favorite": false,
        "tag": [],
        "assigned_user_id": "1",
        "assigned_user_name": "Administrator",
        "assigned_user_link": {
            "full_name": "Administrator",
            "id": "1",
            "_acl": {
                "fields": [],
                "delete": "no",
                "_hash": "8e11bf9be8f04daddee9d08d44ea891e"
            }
        },
        "team_count": "",
        "team_count_link": {
            "team_count": "",
            "id": "1",
            "_acl": {
                "fields": [],
                "_hash": "654d337e0e912edaa00dbb0fb3dc3c17"
            }
        },
        "team_name": [{
            "id": "1",
            "name": "Global",
            "name_2": "",
            "primary": true
        }],
        "email": [],
        "email1": "",
        "email2": "",
        "invalid_email": "",
        "email_opt_out": "",
        "email_addresses_non_primary": "",
        "_acl": {
            "fields": {}
        },
        "_module": "Accounts",
        "duplicate_check_rank": 8
    }]
}

Download

You can download the full API example here.