你好,我正在尝试通过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”,其函数为,它检查名字和姓氏是否为空,并显示错误消息以填充字段,然后调用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';
}
}
请帮助那些天才程序员。
1条答案
按热度按时间snvhrwxg1#
据我所知,您的www.example.com有两个问题app.api.call:
它 * 永远不 * 应该是
'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的query-string来设置它,它可能(?)适用于GET以外的请求,但是通常以下两种方法之一用于非GET调用,例如POST:通过端点路径传递记录ID:
备注:
path
包含占位符?
,它将由调用者用记录ID填充。pathVars
在与路径中的占位符相同的(第二个)位置具有record
,这导致URL的该部分被保存到$args['record']
中(类似于第一部分被保存到$args['module']
中,对于此API,它将始终是'Leads'
)。在javascript中,您必须相应地调整API调用URL:
请注意ID是如何进入URL的第二部分的(在API中定义占位符的位置)
通过请求有效负载传递记录id
将记录ID放入www.example.com的数据对象中app.api.call,以便写入$args.
app.api.call('create', url, {record: this.model.get('id')}, {