不能在sugarcrm 8.0中调用自定义api
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不能在sugarcrm 8.0中调用自定义api相关的知识,希望对你有一定的参考价值。
您好我试图通过Sugarcrm中的代码调用自定义API:
({
extendsFrom: 'RowactionField',
defaultFirsName: 'first_name',
defaultLastName: 'last_name',
initialize: function (options) {
this._super('initialize', [options]);
this.def.first_name = _.isEmpty(this.def.first_name) ? this.defaultFirsName : this.def.first_name;
this.def.last_name = _.isEmpty(this.def.last_name) ? this.defaultLastName : this.def.last_name;
},
/** * Rowaction fields have a default event which calls rowActionSelect */
rowActionSelect: function () {
this.upper_name();
},
upper_name: function () {
var first = this.model.get(this.def.first_name);
var last = this.model.get(this.def.last_name);
var fullName = first + last;
if (fullName) {
app.alert.show('name-check-msg', {
level: 'success',
messages: 'Firstname and Lastname filled.',
autoClose: true
});
}
else {
app.alert.show('name-check-msg', {
level: 'error',
messages: 'First name and last name must be filled.',
autoClose: false
});
}
var self = this;
url = app.api.buildURL('Leads', 'UpperName', null, {
record: this.model.get('id')
});
app.api.call('GET', url, {
success: function (data) {
app.alert.show('itsdone', {
level: 'success',
messages: 'Confirmed to uppercase name.',
autoClose: true
});
},
error: function (error) {
app.alert.show('err', {
level: 'error',
title: app.lang.getAppString('ERR_INTERNAL_ERR_MSG'),
messages: err
});
},
});
}
})
名称为“uppernamebutton.js”,其功能是,它检查firstname和lastname是否为空,并显示错误消息以填充字段,然后将api调用大写名称的第一个字母。
这是自定义api的代码,我将其命名为“UpperNameApi.php”:
<?php
class UpperNameApi extends SugarApi
{
public function registerApiRest()
{
return array(
'UpperNameRequest' => array(
//request type
'reqType' => 'POST',
//endpoint path
'path' => array('Leads', 'UpperName'),
//endpoint variables
'pathVars' => array('module',''),
//method to call
'method' => 'UpperNameMethod',
//short help string to be displayed in the help documentation
'shortHelp' => 'Example endpoint',
//long help to be displayed in the help documentation
'longHelp' => 'custom/clients/base/api/help/MyEndPoint_MyGetEndPoint_help.html',
),
);
}
public function UpperNameMethod($api, $args)
{
if (isset($args['record']) && !empty($args['record'])) {
$bean = BeanFactory::getBean('Leads', $args['record']);
if (!empty($bean->id)) {
$first = $bean->first_name;
$first = ucwords($first);
$bean->first_name = $first;
$last = $bean->last_name;
$last = ucwords($last);
$bean->last_name = $last;
$bean->save();
}
return 'success';
}
return 'failed';
}
}
请帮助那些天才编码器。
从我可以看到你的app.api.call有2个问题:
- 你得到的第一个论点是错误的:
它永远不应该是
'GET'
,而应该是'read'
的GET请求,'update'
的PUT请求,'delete'
用于DELETE请求和'create'
用于POST请求。 正如你指定的reqType => 'POST'
,你应该使用app.api.call('create', url,
- 如果我没有弄错,回调进入第四个参数,而不是第三个参数(那个是有效载荷数据),所以你应该添加一个空对象作为第三个参数并传递第四个回调,你的结果行应该看起来像这样:
app.api.call('create', url, {}, {
编辑:
另外我注意到你在你的函数中使用$args['record']
。您当前正在使用buildURL传递该值,这意味着您可以通过URL的查询字符串设置它,这可能(?)适用于GET以外的请求,但通常以下两种方法之一用于非GET电话,例如POST:
通过端点路径传递记录ID: 单个ID的推荐方式
'path' => array('Leads', '?' 'UpperName'),
'pathVars' => array('module','record',''),
笔记:
path
包含一个占位符?
,它将由具有记录ID的调用者填充。pathVars
将record
置于与路径占位符相同的(第二)位置,这会导致URL的一部分保存到$args['record']
(类似于第一部分保存到$args['module']
,这将始终是'Leads'
用于此API)。
在javascript中,您必须相应地调整API调用URL:
url = app.api.buildURL('/Leads/' + this.model.get('id') + '/UpperName');
请注意ID如何进入URL的第二部分(其中占位符在API中定义)
通过请求有效负载传递记录ID 建议的方法是一次传递多个ID或传递除记录ID之外的其他参数
将记录ID放入app.api.call的数据对象中,以便将其写入$ args。 qazxsw poi
以上是关于不能在sugarcrm 8.0中调用自定义api的主要内容,如果未能解决你的问题,请参考以下文章
SAP Integration Suite用API Management组件发布SugarCRM SOAP API
SAP Integration Suite用API Management组件发布SugarCRM SOAP API
SAP Integration Suite用API Management组件发布SugarCRM SOAP API