voycey/cakephp-salesforce

Salesforce 企业 CakePHP 数据源

安装次数: 152

依赖项: 0

建议者: 0

安全: 0

星标: 5

关注者: 3

分支: 6

公开问题: 0

类型:cakephp-plugin

0.1.5b 2016-01-14 03:24 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:58:23 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License

对于 CakePHP 2.x 及更早版本

请使用 2.x 分支,并遵循该分支下的 README 文件中的说明以获取使用说明

安装

此插件目前处于测试阶段

  • API 兼容,保存和读取功能正常工作
  • 模式与连接缓存功能正常工作
  • 请注意,任何 API 交互都是昂贵的,您应该使用延迟执行方法使用此功能。

您可以使用 composer 将此插件安装到您的 CakePHP 应用程序中。

安装 composer 包的推荐方法

composer require voycey/cakephp-salesforce

信息

由于 3.x 中数据源创建的性质,这对我来说是一段学习曲线。我已尽力遵循其他类似 SQL 的数据源的样式,使用了预加载(如 SQL 源中所示),并且有一个有限的方言。

我希望像在 2.x 数据源中那样对 WSDL 进行一些处理,以便创建模式,但是这不可能,因为我现在需要查看某些字段的状态(可读/可更新),这需要进一步调用 API。

任何 API 连接都将缓存 1 小时(Salesforce 超时时间为 2 小时),在此之后,连接将被刷新(但是这不应该很重要,因为您使用的是延迟执行方法,对吧?)

注意

  1. 此项目依赖于 PHP-Force.com 工具包
  2. 此项目使用 SOAP 而不是 REST(因为某些原因™)
  3. 我仅对此 Contact 和 Account SObjects 进行了测试,Contact 示例已包含在插件中,要创建更多与其他 SObjects 交互的模型,请将 SalesforceContactTable 作为模板复制(请参阅以下说明)。
  4. 请随意提交拉取请求 - 这里有一些我想实现/测试的例子
    1. 本地 Cake 表与 API 表之间的关联(我不确定这实际上是否可行!)
    2. 测试(大多数可能可以从核心测试中获取) - 我不打算做很多,因为要正确测试则需要访问 API。
    3. 测试所有 SObjects(目前我只测试了一些,但根据我对 2.x 版本数据源的实践经验,这通常足以处理所有 SObjects)
    4. 效率提升。

用法

  1. 按上述方式执行 composer require
  2. Plugin::load('Salesforce', ['bootstrap' => true, 'routes' => true]); 添加到您的 bootstrap.php
  3. 在 app.php 中创建连接,如下所示
  'salesforce' => [
     'className' => 'Salesforce\Database\SalesforceConnection',
     'driver' => 'Salesforce\Database\Driver\Salesforce',
     'persistent' => false,
     'username' => getenv("SF_USER"),
     'password' => getenv("SF_PASSWORD"),
     'quoteIdentifiers' => false,
     'my_wsdl' => 'enterprise.wsdl.xml'
  ],
    **Your SF_PASSWORD should be your password + security token**
  1. 获取您的企业 WSDL 并将其放置在应用程序的 config 目录中
  2. 创建一个类似以下的测试控制器
 <?php
    namespace App\Controller;
       
    use App\Controller\AppController;
    use Cake\Event\Event;
       
    class SalesforcesController extends AppController 
    {
       
       public function beforeFilter(Event $event)
       {
           parent::beforeFilter($event);
       }
       
       public function index()
       {
           $this->autoRender = false;
           $this->loadModel('Salesforce.SalesforceContact');
           $query = $this->SalesforceContact->find('all')
                       ->select(['Id','Email','LastName'])
                       ->where(['Email' => "info@salesforce.com"]
                   );
   
           foreach ($query as $row) {
             echo "<pre>";
             print_r($row);
             echo "</pre>";
           }
   
       }
    }

然后浏览到 /salesforces,您应该有一些标准 Salesforce 记录。如果没有,请返回并重复这些步骤。如果您得到一个有趣的错误消息,那么……嗯,抱歉,我相信随着我更多地使用它,它会得到修复。

与其他 Salesforce 项目的接口

这应该简单地扩展 "SalesforcesTable" 而不是 Table 与您选择的项(例如 Account)

 <?php
  namespace App\Model\Table;
  
  use Salesforce\Model\Entity\Salesforce;
  use Salesforce\Model\Table\SalesforcesTable;
  
  class SalesforceAccountTable extends SalesforcesTable
  {
      public $name = "Account";
  
      /**
       * Initialize method
       *
       * @param  array $config The configuration for the Table.
       * @return void
       */
      public function initialize(array $config)
      {
          parent::initialize($config);
  
          $this->table('Account');
          $this->displayField('Name');
          $this->primaryKey('Id');
      }
  }