otago/crm

CRM SilverStripe集成

维护者

详细信息

github.com/otago/crm

源代码

问题

安装数: 5,003

依赖项: 0

建议者: 0

安全: 0

星标: 2

关注者: 7

分支: 0

开放问题: 0

类型:silverstripe-vendormodule

5.1.4 2024-08-21 02:39 UTC

This package is auto-updated.

Last update: 2024-09-21 02:47:06 UTC


README

在CRM集成中使用sendBatchRequest

sendBatchRequest是一个强大的函数,用于与CRM交互,允许您在单个HTTP请求中执行多个操作。此方法对于需要高效地在CRM系统中执行多个CRUD(创建、读取、更新、删除)操作的应用程序特别有用。以下是一些使用sendBatchRequest的示例、用例和优点。

如何使用sendBatchRequest

要使用sendBatchRequest,您需要准备一个包含您要执行的操作的数组。数组中的每个操作应指定HTTP方法(POSTGETDELETE等)、目标URL(相对于CRM基本URL),以及如果适用,数据有效载荷。

示例

use OP\CRM;

// Step 1: Define the operations
$operations = [
    [
        'method' => 'DELETE',
        'url' => "/Lead(LeadID=3)",
    ],
    [
        'method' => 'POST',
        'url' => "/Lead",
        'data' => [
            "FirstName" => "John",
            "LastName" => "Doe",
            "Email" => "john.doe@example.com",
            "Phone" => "123-456-7890",
        ],
    ],
];

// Step 2: Send the batch request
$response = CRM::sendBatchRequest($operations);

// Step 3: Optionally Handle the Fibre. If you want to check the fibre result, this will cause it to block
echo $response;

您可以在sendBatchRequest在后台执行时处理其他操作

sendBatchRequest使用Fiber异步执行cURL发送请求。它设置HTTP头,包括Content-Length和带有Bearer令牌的Authorization,并执行cURL会话发送请求。它检查cURL错误和200-299范围之外的HTTP状态码,使用LoggerInterface记录遇到的任何问题。在执行请求并处理错误后,它关闭cURL会话并返回响应。该操作包装在Fiber中,允许它与其他任务并发运行,在返回Fiber对象之前启动Fiber。这种方法通过启用非阻塞I/O操作来提高性能。

何时使用sendBatchRequest

  • 批量数据操作:当您需要同时对CRM数据进行多个操作时,例如一次创建、更新或删除多个记录。
  • 效率:通过减少对CRM服务器的HTTP请求次数,从而最小化网络延迟并提高应用程序的整体性能。
  • 事务性操作:如果您的用例要求将多个操作视为单个事务(即,要么全部成功,要么全部失败)。

sendBatchRequest为何如此出色

  • 性能优化:通过将多个操作捆绑成一个请求,sendBatchRequest显著减少了由HTTP请求/响应周期引起的开销。
  • 简化错误处理:处理错误变得简单,因为即使执行多个操作,也只需要解析单个响应。
  • 增强的可扩展性:频繁与CRM数据交互的应用程序可以更有效地扩展,因为减少的HTTP请求数量降低了客户端和服务器资源的压力。
  • 事务完整性:对于支持事务批次的CRM,sendBatchRequest可以确保一组操作要么全部成功,要么全部失败,保持数据完整性。

注册您的Azure应用程序以与CRM通信

  1. 在您的Microsoft 365环境中创建一个用户帐户,用作Web应用程序的令牌生成器(例如 webtoken@your_organisation.onmicrosoft.com)。
  2. 将用户帐户添加到Dynamics 365,最好具有完全权限。
  3. 在Microsoft Azure Active Directory中,在应用注册区域创建原生应用程序。步骤 3
  4. 在您的本地应用中,转到“所有者”并添加用户账户 步骤 4
  5. 在您的本地应用中,转到“必需权限”并添加“Dynamics CRM Online”。接着,您需要转到 Dynamics 的授权权限并勾选“以组织用户访问 CRM Online”。 步骤 5
  6. 在您的本地应用中,转到“密钥”并生成一个新的密钥。请确保将生成的值保存在某个地方以供以后使用。 步骤 6
  7. 现在您应该已经拥有使用 CRM 模块所需的一切。

如果您将文件存储在 assets 文件夹中,不要忘记使用 .htaccess 来阻止缓存

RedirectMatch 404 ^/assets/jsoncache/.*$

使用环境版本

==================

将应用程序详细信息添加到 .env 文件中

创建一个 .env 文件并添加以下内容

AZUREAPPLICATIONCLIENT="XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX"
AZUREAPPLICATIONSECRET="my secret key that came from azure portal"
AZUREAPPLICATIONENDPOINT="https://login.microsoftonline.com/XXXXXXXXXXXXX/oauth2/token"
AZUREAPPLICATIONRESOURCELOCATION="https://<myorganisationcrmname>.dynamics.com"

==================

使用 Microsoft Dynamics 365 Web API

https://msdn.microsoft.com/en-us/library/mt593051.aspx

==================

示例

将数据发送到 CRM

	try {
	  CRM::request(
	    'https://your_organisation.crm5.dynamics.com/api/data/v8.2/leads',
	    'POST',
	    array(
	      "subject" => "Website Enquiry",
	      "emailaddress1" => $do->YourEmail,
	      "firstname" => $do->YourName,
	      "jobtitle" => $do->Message
	    )
	  );
	} catch ( Exception $e) {
	  throw new SS_HTTPResponse_Exception('failure to connect to crm: '.$e->getMessage());
	}

从 CRM 获取数据 - 只返回姓名和姓氏 - 只返回前 3 页

	try {
	  CRM::request(
	    'https://your_organisation.crm5.dynamics.com/api/data/v8.2/leads?$select=firstname,leadid',
	    'GET',
	    array(),
	    array('Prefer: odata.maxpagesize=3')
	  );
	} catch ( Exception $e) {
	    throw new SS_HTTPResponse_Exception('failure to connect to crm: '.$e->getMessage());
	}

通过 ID 更新对象的字段

	try {
	  CRM::request(
	    'https://your_organisation.crm5.dynamics.com/api/data/v8.2/leads(bf830ffd-2047-e711-8105-70106fa91921)',
	    'PATCH',
	    array(
	      "subject" => "123 Website Enquiry",
	      "email  address1" => $do->YourEmail,
	      "firstname" => $do->YourName,
	      "jobtitle" => $do->Message
	    )
	  );
	} catch ( Exception $e) {
	  throw new SS_HTTPResponse_Exception('failure to connect to crm: '.$e->getMessage());
	}

通过 ID 更新对象的单个字段

	try {
	  CRM::request(
	    'https://your_organisation.crm5.dynamics.com/api/data/v8.2/leads(bf830ffd-2047-e711-8105-70106fa91921)/subject',
	    'PUT',
	    array(
	      "value" => "321 Website Enquiry"
	    )
	  );
	} catch ( Exception $e) {
	  throw new SS_HTTPResponse_Exception('failure to connect to crm: '.$e->getMessage());
	}

通过 ID 删除对象

	try {
	  CRM::request(
	    'https://your_organisation.crm5.dynamics.com/api/data/v8.2/leads(bf830ffd-2047-e711-8105-70106fa91921)',
	    'DELETE'
	  );
	} catch ( Exception $e) {
	  throw new SS_HTTPResponse_Exception('failure to connect to crm: '.$e->getMessage());
	}