voycey / cakephp-salesforce
Salesforce 企业 CakePHP 数据源
0.1.5b
2016-01-14 03:24 UTC
Requires
- php: >=5.4.16
- cakephp/cakephp: ~3.0
- developerforce/force.com-toolkit-for-php: ^1.0@dev
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-14 18:58:23 UTC
README
对于 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 小时),在此之后,连接将被刷新(但是这不应该很重要,因为您使用的是延迟执行方法,对吧?)
注意
- 此项目依赖于 PHP-Force.com 工具包
- 此项目使用 SOAP 而不是 REST(因为某些原因™)
- 我仅对此 Contact 和 Account SObjects 进行了测试,Contact 示例已包含在插件中,要创建更多与其他 SObjects 交互的模型,请将 SalesforceContactTable 作为模板复制(请参阅以下说明)。
- 请随意提交拉取请求 - 这里有一些我想实现/测试的例子
- 本地 Cake 表与 API 表之间的关联(我不确定这实际上是否可行!)
- 测试(大多数可能可以从核心测试中获取) - 我不打算做很多,因为要正确测试则需要访问 API。
- 测试所有 SObjects(目前我只测试了一些,但根据我对 2.x 版本数据源的实践经验,这通常足以处理所有 SObjects)
- 效率提升。
用法
- 按上述方式执行 composer require
- 将
Plugin::load('Salesforce', ['bootstrap' => true, 'routes' => true]);
添加到您的 bootstrap.php - 在 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**
- 获取您的企业 WSDL 并将其放置在应用程序的
config
目录中 - 创建一个类似以下的测试控制器
<?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'); } }