无法在Sugarcrm 8.0中调用自定义api

时间:2019-02-20 01:12:46

标签: php rest api backbone.js sugarcrm

您好,我试图通过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
                });
            },
        });
    }
})

请帮助那些天才的编码器。

1 个答案:

答案 0 :(得分:0)

据我所知,您的app.api.call有2个问题:

  • 第一个参数是错误的:
    从不应该为'GET',但是对于GET请求,它应该为
    • 'read'
    • 'update'(用于PUT请求),
    • 'delete'(用于DELETE请求)和
    • 'create'(用于POST请求)。 / li>
    按照您指定的reqType => 'POST',您应该使用app.api.call('create', url,
  • 如果我没记错的话,回调应该放在 forth 参数中,而不是 third (该参数用于有效载荷数据)中,所以您应该添加一个空对象作为第三个参数,并在第四个参数中传递回调,则结果行应如下所示: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');