在重定向页面之前获取新创建的记录 ID

Get newly created id of a record before redirecting page

我想在单击保存按钮时以及在重定向页面之前使用 javascript 检索新创建的记录的 ID。

你有什么想法吗?

谢谢!

在 Sugar 7 中执行此操作的一种方法是覆盖 CreateView。

这里是一个 CustomCreateView 示例,它在成功创建新帐户后但在 Sugar 对创建的记录做出反应之前在警报消息中输出新 ID。

custom/modules/Accounts/clients/base/views/create/create.js:

({
    extendsFrom: 'CreateView',

    // This initialize function override does nothing except log to console,
    // so that you can see that your custom view has been loaded.
    // You can remove this function entirely. Sugar will default to CreateView's initialize then.
    initialize: function(options) {
        this._super('initialize', [options]);
        console.log('Custom create view initialized.');
    },

    // saveModel is the function used to save the new record, let's override it.
    // Parameters 'success' and 'error' are functions/callbacks.
    // (based on clients/base/views/create/create.js)
    saveModel: function(success, error) {

        // Let's inject our own code into the success callback.
        var custom_success = function() {
                // Execute our custom code and forward all callback arguments, in case you want to use them.
                this.customCodeOnCreate(arguments)
                // Execute the original callback (which will show the message and redirect etc.)
                success(arguments);
        };

        // Make sure that the "this" variable will be set to _this_ view when our custom function is called via callback.
        custom_success = _.bind(custom_success , this);

        // Let's call the original saveModel with our custom callback.
        this._super('saveModel', [custom_success, error]);
    },

    // our custom code
    customCodeOnCreate: function() {
        console.log('customCodeOnCreate() called with these arguments:', arguments);
        // Retrieve the id of the model.
        var new_id = this.model.get('id');
        // do something with id
        if (!_.isEmpty(new_id)) {
            alert('new id: ' + new_id);
        }
    }
})

我用 Sugar 7.7.2.1 的 Accounts 模块测试了这个,但是应该可以在 Sugar 中的所有其他 sidecar 模块中实现这个。 但是,这 notbackward-c 中的模块有效兼容模式(URL 中带有 #bwc 的模式)。

注意:如果有问题的模块已经有自己的 Base<ModuleName>CreateView,您可能应该从 <ModuleName>CreateView(没有 Base)而不是默认的 CreateView 扩展.

请注意,此代码在 Sugar 升级过程中有很小的几率被破坏,例如如果默认 CreateView 代码收到 saveModel 函数定义中的更改。

此外,如果您想进一步阅读有关扩展视图的内容,可以阅读关于此主题的 SugarCRM 开发博客 post:https://developer.sugarcrm.com/2014/05/28/extending-view-javascript-in-sugarcrm-7/

我使用逻辑钩子解决了这个问题(保存后),供您参考,无论 suitecrm 的版本如何,我都使用 Sugar 6.5。

谢谢!