PHP SDK - Bulk Write API

Upload File

Use the below code to upload a CSV file in ZIP format. The response contains the "file_id". Use this ID while making the bulk write request. For more details, refer to the Upload File page of our API guide.

          
          
<?php 
use zcrmsdk\crm\setup\restclient\ZCRMRestClient;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCallBack;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCriteria;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteFieldMapping;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteResource;
use zcrmsdk\crm\utility\ZCRMConfigUtil;
require_once __DIR__ . '/vendor/autoload.php';

class BulkWrite
{
    public function __construct()
    {
            $configuration = array("client_id"=>{client_id},"client_secret"=>{client_secret},"redirect_uri"=>{redirect_url},"currentUserEmail"=>{user_email_id}, "fileUploadUrl" =>{fileUploadUrl});
            ZCRMRestClient::initialize($configuration);
    }

    /** Upload File */
    public static function uploadFile()
    {
        try 
        {
            $write = ZCRMRestClient::getInstance()->getBulkWriteInstance();
            $headers = array();
            $headers["X-CRM-ORG"] = "673575"; // The unique ID (zgid) of your organization obtained through the Organization API
            $headers["feature"] = "bulk-write";// To indicate that this a bulk write operation
            $resp = $write->uploadFile("/Users/Desktop/filename.zip", $headers); // To give the zip file and headers you want to upload.
            echo "HTTP Status Code:" . $resp->getHttpStatusCode()."\n"; // To get http response code
            echo "Status:" . $resp->getStatus()."\n"; // To get response status
            echo "Message:" . $resp->getMessage()."\n"; // To get response message
            echo "Code:" . $resp->getCode()."\n"; // To get status code
            echo "Details:" . json_encode($resp->getDetails())."\n";
            echo "Response Json".json_encode($resp->getResponseJSON())."\n";
            $attach = $resp->getData();
            echo $attach->getId()."\n";// To get Id of the uploaded file.
            echo $attach->getCreatedTime()."\n";
        } catch (Exception $e) 
        {
            var_dump($e);
        }
    }
}
$obj =new BulkWrite();
$obj->uploadFile();
 
Create a Bulk Write Job - Bulk Insert

Use the below code to create a bulk write job to insert records. The response contains the "job_id". Use this ID while making the bulk write request. For more details, refer to the Create a Bulk Write Job page of our API guide.

          
          
<?php 
use zcrmsdk\crm\setup\restclient\ZCRMRestClient;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCallBack;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCriteria;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteFieldMapping;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteResource;
use zcrmsdk\crm\utility\ZCRMConfigUtil;
require_once __DIR__ . '/vendor/autoload.php';

class BulkWrite
{
    public function __construct()
    {
            $configuration = array("client_id"=>{client_id},"client_secret"=>{client_secret},"redirect_uri"=>{redirect_url},"currentUserEmail"=>{user_email_id});
            ZCRMRestClient::initialize($configuration);
    }

    /** Create Bulk Write Job */
    /** Insert record */
    public static function createBulkWriteJob()
    {
        $writeJob = ZCRMRestClient::getInstance()->getBulkWriteInstance();// To get ZCRMBulkWrite instance
        $writeJob->setOperation("insert");//To set the type of operation you want to perform on the bulk write job.
        
        $writeJob->setCharacterEncoding("UTF-8");
        
        $callBackIns = ZCRMBulkCallBack::getInstance("https://www.zoho.com", "post");
        $writeJob->setCallback($callBackIns);
        
        $resourceIns = ZCRMBulkWriteResource::getInstance("ModulAPIName", "324555225"); //Specify the ModuleAPIName and the uploaded file Id.
        $resourceIns->setType("data");// To set the type of module that you want to import. The value is data.
        $resourceIns->setIgnoreEmpty(true);//True - Ignores the empty values.The default value is false.
        
        $fieldMappings = ZCRMBulkWriteFieldMapping::getInstance("Last_Name");
        $fieldMappings->setDefaultValue("value", "test");//To set the default value for an empty column in the uploaded file.
        $resourceIns->setFieldMapping($fieldMappings);
        
        $fieldMappings = ZCRMBulkWriteFieldMapping::getInstance("Email", "0");//To get ZCRMBulkWriteFieldMapping instance using Field APIName and column index of the field in the uploaded file.
        $resourceIns->setFieldMapping($fieldMappings);
        
        $fieldMappings = ZCRMBulkWriteFieldMapping::getInstance("Company", "1");
        $resourceIns->setFieldMapping($fieldMappings);
        
        $fieldMappings = ZCRMBulkWriteFieldMapping::getInstance("Phone", "2");
        $resourceIns->setFieldMapping($fieldMappings);
        
        $fieldMappings = ZCRMBulkWriteFieldMapping::getInstance("Website");
        $fieldMappings->setDefaultValue("value", "https://www.zoho.com");
        $resourceIns->setFieldMapping($fieldMappings);

        $writeJob->setResource($resourceIns);// To set ZCRMBulkWriteFieldMapping instance
        
        $response = $writeJob->createBulkWriteJob();// To create bulk write job.
        echo "HTTP Status Code:" . $response->getHttpStatusCode()."\n"; // To get http response code
        echo "Status:" . $response->getStatus()."\n"; // To get response status
        echo "Message:" . $response->getMessage()."\n"; // To get response message
        echo "Code:" . $response->getCode()."\n"; // To get status code
        echo "Details:" . json_encode($response->getDetails())."\n";
        echo "Response Json".json_encode($response->getResponseJSON())."\n";
        
        $record = $response->getData();// To get ZCRMBulkWrite instance.
        
        echo ($record->getJobId())."\n";// To get bulk write job Id.
        
        $created_by = $record->getCreatedBy();
        echo $created_by->getId()."\n";
        echo $created_by->getName()."\n";
    }
}
$obj =new BulkWrite();
$obj->createBulkWriteJob();
 
 
Create a Bulk Write Job - Bulk Update

Use the below code to create a bulk write job to update records. The response contains the "job_id". Use this ID while making the bulk write request. This operation does not create new records when a match is not found in CRM. For more details, refer to the Create a Bulk Write Job page of our API guide.

          
          
<?php 
use zcrmsdk\crm\setup\restclient\ZCRMRestClient;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCallBack;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCriteria;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteFieldMapping;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteResource;
use zcrmsdk\crm\utility\ZCRMConfigUtil;
require_once __DIR__ . '/vendor/autoload.php';

class BulkWrite
{
    public function __construct()
    {
            $configuration = array("client_id"=>{client_id},"client_secret"=>{client_secret},"redirect_uri"=>{redirect_url},"currentUserEmail"=>{user_email_id});
            ZCRMRestClient::initialize($configuration);
    }

    public static function updateBulkWriteJob()
    {
        $writeJob = ZCRMRestClient::getInstance()->getBulkWriteInstance();
        $writeJob->setOperation("update");
        $writeJob->setCharacterEncoding("UTF-8");
        
        $callBackIns = ZCRMBulkCallBack::getInstance("https://www.zoho.com", "post");
        $writeJob->setCallback($callBackIns);
        
        $resourceIns = ZCRMBulkWriteResource::getInstance("ModulAPIName", "324555225"); // 324555225 file upload id
        $resourceIns->setFindBy("Email");// To set a field as a unique field or ID of a record. 
        $resourceIns->setType("data");
        $resourceIns->setIgnoreEmpty(true);
        
        $fieldMappings = ZCRMBulkWriteFieldMapping::getInstance("Last_Name", "0");
        $resourceIns->setFieldMapping($fieldMappings);
        
        
        $fieldMappings = ZCRMBulkWriteFieldMapping::getInstance("Email", "1");
        $resourceIns->setFieldMapping($fieldMappings);
        
        
        $fieldMappings = ZCRMBulkWriteFieldMapping::getInstance("Company", "2");
        $resourceIns->setFieldMapping($fieldMappings);
        
        
        $fieldMappings = ZCRMBulkWriteFieldMapping::getInstance("Phone", "3");
        $resourceIns->setFieldMapping($fieldMappings);
        
        $fieldMappings = ZCRMBulkWriteFieldMapping::getInstance("Contacts", "4");
        $fieldMappings->setFindBy("Email");// To set a field as a unique field or ID of a record. 
        $resourceIns->setFieldMapping($fieldMappings);
        
        $writeJob->setResource($resourceIns);
        
        $response = $writeJob->createBulkWriteJob();
        echo "HTTP Status Code:" . $response->getHttpStatusCode()."\n"; // To get http response code
        echo "Status:" . $response->getStatus()."\n"; // To get response status
        echo "Message:" . $response->getMessage()."\n"; // To get response message
        echo "Code:" . $response->getCode()."\n"; // To get status code
        echo "Details:" . json_encode($response->getDetails())."\n";
        echo "Response Json".json_encode($response->getResponseJSON())."\n";
        
        $record = $response->getData();
        
        echo ($record->getJobId())."\n";
        
        $created_by = $record->getCreatedBy();
        echo $created_by->getId()."\n";
        echo $created_by->getName()."\n";
    }
}
$obj =new BulkWrite();
$obj->updateBulkWriteJob();
 
Create a Bulk Write Job - Bulk Upsert

Use the below code to create a bulk write job to upsert records. The response contains the "job_id". Use this ID while making the bulk write request. This operation updates an existing record, and create new records, if it does not exist already. For more details, refer to the Create a Bulk Write Job page of our API guide.

          
          
<?php 
use zcrmsdk\crm\setup\restclient\ZCRMRestClient;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCallBack;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCriteria;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteFieldMapping;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteResource;
use zcrmsdk\crm\utility\ZCRMConfigUtil;
require_once __DIR__ . '/vendor/autoload.php';

class BulkWrite
{
    public function __construct()
    {
            $configuration = array("client_id"=>{client_id},"client_secret"=>{client_secret},"redirect_uri"=>{redirect_url},"currentUserEmail"=>{user_email_id});
            ZCRMRestClient::initialize($configuration);
    }

    public static function upsertBulkWriteJob()
    {
        $writeJob = ZCRMRestClient::getInstance()->getBulkWriteInstance();
        $writeJob->setOperation("upsert");
        $writeJob->setCharacterEncoding("UTF-8");
        
        $callBackIns = ZCRMBulkCallBack::getInstance("https://www.zoho.com", "post");
        $writeJob->setCallback($callBackIns);
        
        $resourceIns = ZCRMBulkWriteResource::getInstance("ModulAPIName", "324555225"); // 324555225 file upload id
        $resourceIns->setFindBy("Email");
        $resourceIns->setType("data");
        $resourceIns->setIgnoreEmpty(true);
        
        $fieldMappings = ZCRMBulkWriteFieldMapping::getInstance("Last_Name", "0");
        $resourceIns->setFieldMapping($fieldMappings);
        
        $fieldMappings = ZCRMBulkWriteFieldMapping::getInstance("Email", "1");
        $resourceIns->setFieldMapping($fieldMappings);
        
        $fieldMappings = ZCRMBulkWriteFieldMapping::getInstance("Company", "2");
        $resourceIns->setFieldMapping($fieldMappings);
         
        $fieldMappings = ZCRMBulkWriteFieldMapping::getInstance("Phone", "3");
        $resourceIns->setFieldMapping($fieldMappings);
        
        $fieldMappings = ZCRMBulkWriteFieldMapping::getInstance("Contacts", "4");
        $fieldMappings->setFindBy("Email");
        $resourceIns->setFieldMapping($fieldMappings);
        
        $writeJob->setResource($resourceIns);
       
        $response = $writeJob->createBulkWriteJob();
        echo "HTTP Status Code:" . $response->getHttpStatusCode()."\n"; // To get http response code
        echo "Status:" . $response->getStatus()."\n"; // To get response status
        echo "Message:" . $response->getMessage()."\n"; // To get response message
        echo "Code:" . $response->getCode()."\n"; // To get status code
        echo "Details:" . json_encode($response->getDetails())."\n";
        echo "Response Json".json_encode($response->getResponseJSON())."\n";
        
        $record = $response->getData();
        
        echo ($record->getJobId())."\n";
        
        $created_by = $record->getCreatedBy();
        echo $created_by->getId()."\n";
        echo $created_by->getName()."\n";
    }
}
$obj =new BulkWrite();
$obj->upsertBulkWriteJob();
 
Get Bulk Write Job Details

Use the below code to know the status of the bulk write job scheduled previously. For more details, refer to Get Job Details page of our API guide.

          
          
<?php 
use zcrmsdk\crm\setup\restclient\ZCRMRestClient;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCallBack;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCriteria;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteFieldMapping;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteResource;
use zcrmsdk\crm\utility\ZCRMConfigUtil;
require_once __DIR__ . '/vendor/autoload.php';

class BulkWrite
{
    public function __construct()
    {
            $configuration = array("client_id"=>{client_id},"client_secret"=>{client_secret},"redirect_uri"=>{redirect_url},"currentUserEmail"=>{user_email_id});
            ZCRMRestClient::initialize($configuration);
    }

    public static function getBulkWriteJobDetails()
    {
        $writeJob = ZCRMRestClient::getInstance()->getBulkWriteInstance(null,"428376527"); // To get ZCRMBulkWrite instance using bulk write job Id.
        
        $response = $writeJob->getBulkWriteJobDetails();// To get bulk write job details
        
        echo "HTTP Status Code:" . $response->getHttpStatusCode()."\n"; // To get http response code
        echo "Status:" . $response->getStatus()."\n"; // To get response status
        echo "Message:" . $response->getMessage()."\n"; // To get response message
        echo "Code:" . $response->getCode()."\n"; // To get status code
        echo "Details:" . json_encode($response->getDetails())."\n";
        echo "Response Json".json_encode($response->getResponseJSON())."\n\n\n";
        
        $write = $response->getData();// To get ZCRMBulkWrite instance
        echo $write->getStatus()."\n";// To get bulk read job status.
        echo $write->getCharacterEncoding()."\n";
        echo $write->getJobId()."\n";// To get bulk read job Id.
        
        $callback = $write->getCallback();// To get ZCRMBulkCallBack instance
        echo $callback->getUrl()."\n";
        echo $callback->getMethod()."\n";
        
        $result = $write->getResult();// To get ZCRMBulkResult instance
        if($result != null)
        {
            echo $result->getDownloadUrl()."\n";//To get the download URL from which you can download the result(CSV file) of the bulk write job.
        }
        
        echo $write->getCreatedBy()->getId()."\n";
        echo $write->getCreatedBy()->getName()."\n";
        
        echo $write->getOperation()."\n";
        echo $write->getCreatedTime()."\n";
        
        
        foreach($write->getResources() as $resource)
        {
            echo $resource->getStatus()."\n";// To get the status of the bulk write job for that module.
            echo $resource->getMessage()."\n";
            echo $resource->getType()."\n";
            echo $resource->getModuleAPIName()."\n";
            echo $resource->getFindBy()."\n";
            foreach($resource->getFieldMapping() as $fieldMapping)
            {
                echo $fieldMapping->getFieldAPIName()."\n";
                echo $fieldMapping->getIndex()."\n";
                echo $fieldMapping->getFindBy()."\n";
                echo $fieldMapping->getFormat()."\n";
                if($fieldMapping->getDefaultValue() != null )
                {
                    foreach($fieldMapping->getDefaultValue() as $key=>$value)
                    {
                        echo $key." : ".$value."\n";
                    }
                }
            }
            
            $file = $resource->getFileStatus();// To get ZCRMBulkWriteFileStatus instance
            echo $file->getStatus()."\n";
            echo $file->getFileName()."\n";// To get the name of the CSV file which will get downloaded.
            echo $file->getAddedCount()."\n";
            echo $file->getSkippedCount()."\n";
            echo $file->getUpdatedCount()."\n";
            echo $file->getTotalCount()."\n";
        }
       
    }
}
$obj =new BulkWrite();
$obj->getBulkWriteJobDetails();
 
 
Download Result

Use the below code to download the result of the bulk write job. The response contains a zip file. Extract it to get the CSV file. For more details, refer to the Download Result page of our API guide.

          
          
<?php 
use zcrmsdk\crm\setup\restclient\ZCRMRestClient;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCallBack;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCriteria;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteFieldMapping;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteResource;
use zcrmsdk\crm\utility\ZCRMConfigUtil;
require_once __DIR__ . '/vendor/autoload.php';

class BulkWrite
{
    public function __construct()
    {
            $configuration = array("client_id"=>{client_id},"client_secret"=>{client_secret},"redirect_uri"=>{redirect_url},"currentUserEmail"=>{user_email_id});
            ZCRMRestClient::initialize($configuration);
    }

    /** Download Bulk Write Result */
    public static function downloadBulkWriteResult()
    {
        $write= ZCRMRestClient::getInstance()->getBulkWriteInstance();// To get ZCRMBulkWrite instance
        $response = $write->downloadBulkWriteResult("https://download-accl.zoho.com/v2/crm/673045/bulk-write/3477061494004/347794004.zip");// Download bulk write result
        $fp = fopen("/Users/Desktop/".$response->getFileName(), "w"); // $filePath - absolute path where downloaded file has to be stored.
        echo "HTTP Status Code:" . $response->getHttpStatusCode();
        echo "File Name:" . $response->getFileName();
        $stream = $response->getFileContent();
        //         var_dump($stream);
        fputs($fp, $stream);
        fclose($fp);
    }
}
$obj =new BulkWrite();
$obj->downloadBulkWriteResult();
 
Download the CSV file and Get Records

Use the below code to download the zip file, extract the CSV file, and display the records as instances.

          
          
<?php 
use zcrmsdk\crm\setup\restclient\ZCRMRestClient;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCallBack;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCriteria;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteFieldMapping;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteResource;
use zcrmsdk\crm\utility\ZCRMConfigUtil;
require_once __DIR__ . '/vendor/autoload.php';

class BulkWrite
{
    public function __construct()
    {
            $configuration = array("client_id"=>{client_id},"client_secret"=>{client_secret},"redirect_uri"=>{redirect_url},"currentUserEmail"=>{user_email_id});
            ZCRMRestClient::initialize($configuration);
    }

    /** Download the zip and Get list of record instances*/
    public static function downloadANDGetRecords()
    {
        try
        {
            $recordIns = ZCRMRestClient::getInstance()->getBulkWriteInstance(null, "234244", "ModuleAPIName"); // 234244 bulk write job id
            $fileResponse =  $recordIns->downloadANDGetRecords("/Users/Desktop", "https://download-accl.zoho.com/v2/crm/673045/bulk-write/3477061494004/347794004.zip"); // To download the zip and get list of record instances.
            while($fileResponse->hasNext())
            {
                $record = $fileResponse->next();
                echo $record->getEntityId()."\n";
                echo $record->getFieldValue("Company")."\n";
                echo $record->getModuleAPIName()."\n";
                $owner= $record->getOwner();
                if($owner!=null)
                {
                    echo $owner->getId()."\n";
                }
                echo $record->getStatus()."\n";
                echo $record->getErrorMessage()."\n";
                echo $record->getRecordRowNumber()."\n";
                foreach($record->getData() as $key => $value)
                {
                    echo "Key\t:".$key."\tValue:".$value."\n";
                }
                // $fileResponse->close(); // use this method close the file reader
            }
        }
        catch (Exception $e)
        {
            print_r($e);
        }
    }
}
$obj =new BulkWrite();
$obj->downloadANDGetRecords();
 
Get Records from File

Use the below code to fetch all the records from the file mentioned in the file path.

          
          
<?php 
use zcrmsdk\crm\setup\restclient\ZCRMRestClient;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCallBack;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCriteria;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteFieldMapping;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteResource;
use zcrmsdk\crm\utility\ZCRMConfigUtil;
require_once __DIR__ . '/vendor/autoload.php';

class BulkWrite
{
    public function __construct()
    {
            $configuration = array("client_id"=>{client_id},"client_secret"=>{client_secret},"redirect_uri"=>{redirect_url},"currentUserEmail"=>{user_email_id});
            ZCRMRestClient::initialize($configuration);
    }

    public static function GetRecordsFromFile()
    {
        try
        {
            $recordIns = ZCRMRestClient::getInstance()->getBulkWriteInstance(null, null, "ModuleAPIName");
            $fileResponse =  $recordIns->getRecords("/Users/Desktop", "zip_file_name or csv_file_name");
            while($fileResponse->hasNext())
            {
                $record = $fileResponse->next();
                echo $record->getEntityId()."\n";
                echo $record->getFieldValue("Company")."\n";
                echo $record->getModuleAPIName()."\n";
                $owner= $record->getOwner();
                if($owner!=null)
                {
                    echo $owner->getId()."\n";
                }
                echo $record->getStatus()."\n";
                echo $record->getErrorMessage()."\n";
                echo $record->getRecordRowNumber()."\n";
                foreach($record->getData() as $key => $value)
                {
                    echo "Key\t:".$key."\tValue:".$value."\n";
                }
//                 $fileResponse->close();// use this method close the file reader
            }
        }
        catch (Exception $e)
        {
            print_r($e);
        }
    }
}
$obj =new BulkWrite();
$obj->GetRecordsFromFile();
 
Download the CSV file and Get Failed Records

Use the below code to download the CSV from the zip file and fetch only the instances of records that failed getting inserted/updated/upserted.

          
          
<?php 
use zcrmsdk\crm\setup\restclient\ZCRMRestClient;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCallBack;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCriteria;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteFieldMapping;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteResource;
use zcrmsdk\crm\utility\ZCRMConfigUtil;
require_once __DIR__ . '/vendor/autoload.php';

class BulkWrite
{
    public function __construct()
    {
            $configuration = array("client_id"=>{client_id},"client_secret"=>{client_secret},"redirect_uri"=>{redirect_url},"currentUserEmail"=>{user_email_id});
            ZCRMRestClient::initialize($configuration);
    }

    public static function downloadandGetFaildRecords()
    {
        try
        {
            $recordIns = ZCRMRestClient::getInstance()->getBulkWriteInstance(null, "234244", "ModuleAPIName"); // 234244 bulk write job id
            $fileResponse =  $recordIns->downloadANDGetFailedRecords("/Users/Desktop", "https://download-accl.zoho.com/v2/crm/673045/bulk-write/3477061494004/347794004.zip"); // File download url
            while($fileResponse->hasNext())
            {
                $record = $fileResponse->next();
                echo $record->getEntityId()."\n";
                echo $record->getFieldValue("Company")."\n";
                echo $record->getModuleAPIName()."\n";
                
                $owner= $record->getOwner();
                if($owner!=null)
                {
                    echo $owner->getId()."\n";
                }
                echo $record->getStatus()."\n";
                echo $record->getErrorMessage()."\n";
                echo $record->getRecordRowNumber()."\n";
                foreach($record->getData() as $key => $value)
                {
                    echo "Key\t:".$key."\tValue:".$value."\n";
                }
                // $fileResponse->close();// use this method close the file reader
            }
        }
        catch (Exception $e)
        {
            print_r($e);
        }
    }
}
$obj =new BulkWrite();
$obj->downloadandGetFaildRecords();
 
Get Failed Records

Use the below code to fetch the list of records that failed getting inserted/updated/upserted from the specified file.

          
          
<?php 
use zcrmsdk\crm\setup\restclient\ZCRMRestClient;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCallBack;
use zcrmsdk\crm\bulkcrud\ZCRMBulkCriteria;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteFieldMapping;
use zcrmsdk\crm\bulkcrud\ZCRMBulkWriteResource;
use zcrmsdk\crm\utility\ZCRMConfigUtil;
require_once __DIR__ . '/vendor/autoload.php';

class BulkWrite
{
    public function __construct()
    {
            $configuration = array("client_id"=>{client_id},"client_secret"=>{client_secret},"redirect_uri"=>{redirect_url},"currentUserEmail"=>{user_email_id});
            ZCRMRestClient::initialize($configuration);
    }

    /** Get the list of failed record instances */
    public static function listofFailedRecords()
    {
        try
        {
            $recordIns = ZCRMRestClient::getInstance()->getBulkWriteInstance(null, null, "ModuleAPIName");
            $fileResponse =  $recordIns->getFailedRecords("/Users/Desktop", "zip_file_name");
            while($fileResponse->hasNext())
            {
                $record = $fileResponse->next();
                echo $record->getEntityId()."\n";
                echo $record->getFieldValue("Company")."\n";
                echo $record->getModuleAPIName()."\n";
                $owner= $record->getOwner();
                if($owner!=null)
                {
                    echo $owner->getId()."\n";
                }
                echo $record->getStatus()."\n";
                echo $record->getErrorMessage()."\n";
                echo $record->getRecordRowNumber()."\n";
                foreach($record->getData() as $key => $value)
                {
                    echo "Key\t:".$key."\tValue:".$value."\n";
                }
                // $fileResponse->close();// use this method close the file reader
            }
        }
        catch (Exception $e)
        {
            print_r($e);
        }
    }
}
$obj =new BulkWrite();
$obj->getListofFailedRecords();