Issue while using Bean CreateRecord - Transaction Log

A custom functionality has been developed on SugarCRM Mobile App, using the SugarCRM Mobile SDK. The functionality that is required to achieved is to capture the user's current geolocation and send to SugarCRM , in a one minute interval. This has been achieved through a custom module creation.

The customer module contains the geolocation details such as longitude and latitude.

When the user is connected to a internet(wifi connection /mobile data connection) and is online via the SugarCRM App, this custom module functionality that was coded for works fine, however when the user is offline, SugarCRM should be able to store all such geolocation details captured in the transaction log. Subsequently when the user gets to online mode, the mobile app is expected to send this information into SugarCRM.

Additional Information : As there are two ways in which a record can get created within the SugarCRM (Mobile App and User Interaction)

1: A Record gets created through built in API, this is working as expected.
2: Creating a Bean of the specific Module, this is not working as expected and is generating an error "Resource Not Found", since there is no transaction log that gets created as a result of Bean CreateRecord function call.

import customization from '%app.core%/customization';
import NomadView from '%app.views%/nomad-view';
import device from '%app.core%/device';
import dialog from '%app.core%/dialog';

var dialogTest;

const CustomDialog = customization.extend(NomadView, {
    template: 'custom-dialog',
	_bodyScroll: true,
	events() {
        return {
            'click button#btn_showDialog':this.showDialog,
            'click button#btn_closeDialog':this.closeDialog, 
            'click button#btn_createBean':this.createBeanCustom, 
        };
    },
	
    headerConfig: {
        title:'Custom Dialog',
        buttons: {
            mainMenu: true,
        },
    },

    initialize(options) {
        this._super(options);			
    },
	
	showDialog() {
		dialogTest.showModal();
	},
	
	closeDialog() {
		dialogTest.close();
	},
	
	createBeanCustom(){
		var bean = app.data.createBean('Notes', {id: generateUUID(), name:'Custom Mobile Note'});	
		bean.save(null, {
			fields: Object.keys(bean.attributes),
			hasCustomSuccessAlert: true,
			success: model => {
				
			},
			error: () => {
				
			},
		});
	},
		
	onAfterRender() {		
		dialogTest = document.getElementById("myDialog");
	}
});

function generateUUID() { // Public Domain/MIT
    var d = new Date().getTime();//Timestamp
    var d2 = ((typeof performance !== 'undefined') && performance.now && (performance.now()*1000)) || 0;//Time in microseconds since page-load or 0 if unsupported
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
        var r = Math.random() * 16;//random number between 0 and 16
        if(d > 0){//Use timestamp until depleted
            r = (d + r)%16 | 0;
            d = Math.floor(d/16);
        } else {//Use microseconds since page-load if supported
            r = (d2 + r)%16 | 0;
            d2 = Math.floor(d2/16);
        }
        return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
    });
}

customization.registerRoutes([
    {
        name: 'custom-dialog',
        steps: 'custom-dialog',
        handler() {
            app.controller.loadScreen(CustomDialog);
        },
    },
]);


//Adding menu to the main menu
customization.registerMainMenuItem({
    label: 'Custom Dialog',    
    route: 'custom-dialog',
    rank: 3, 
});

module.export = CustomDialog;

  • this got fixed, from the code it was trying to set the id that caused the issue, Since the record is new, it should not require to set the ID, it should get generated on the server-side when a record is created. 

    the line has been changed from 

    var bean = app.data.createBean('Notes', {id: generateUUID(), name:'Custom Mobile Note'});

    to

    var bean = app.data.createBean('Notes', {name:'Custom Mobile Note'});

    this fixes the issue