您好,我试图通过sugarcrm中的此代码调用自定义api:
func
名称是“ uppernamebutton.js”,其功能是,它会检查名字和姓氏是否为空,并会显示一条错误消息以填充字段,然后将api调用名称的大写字母。 >
这是自定义api的代码,我将其命名为“ UpperNameApi.php”:
({
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
});
},
});
}
})
请帮助那些天才的编码器。
答案 0 :(得分:0)
据我所知,您的app.api.call有2个问题:
'GET'
,但是对于GET请求,它应该为'read'
,'update'
(用于PUT请求),'delete'
(用于DELETE请求)和'create'
(用于POST请求)。 / li> reqType => 'POST'
,您应该使用app.api.call('create', url,
app.api.call('create', url, {}, {
编辑:
我还注意到您在函数中使用$args['record']
。
您当前正在使用buildURL传递该值,这意味着您通过URL的查询字符串进行设置,这可能适用于(GET)以外的请求,但是通常以下两种方式之一用于非GET通话,例如开机自检:
通过端点路径传递记录ID:
单个ID的推荐方式
'path' => array('Leads', '?' 'UpperName'),
'pathVars' => array('module','record',''),
注意:
path
包含占位符?
,呼叫者将使用记录ID填充占位符。pathVars
的{{1}}与路径的占位符相同(第二个位置),这导致URL的该部分被保存到record
中(类似于第一部分保存到$args['record']
中,对于该API,该值始终为$args['module']
。在javascript中,您将必须相应地调整API调用网址:
'Leads'
请注意ID如何进入URL的第二部分(在API中定义占位符的地方)
通过请求有效负载传递记录ID
建议一次传递乘法ID或传递记录ID以外的其他参数的方法
将记录ID放入app.api.call的数据对象中,以便将其写入$ args。
url = app.api.buildURL('/Leads/' + this.model.get('id') + '/UpperName');