dynamic model formula field

  • 1
  • Question
  • Updated 4 weeks ago
  • Doesn't Need an Answer
I'm creating a dynamic model with javascript for a custom component, and getting an error:  "Unable to load Model(s) - JSON deserialization failed: Illegal value for primitive"

I think it has to do with the way I'm attempting to create ui-only formula fields in the model. Can someone take a look?

var timerModel = new mm();
        timerModel.objectName = 'Process_Log__c';
        timerModel.id = "Timer";
        timerModel.doQuery = true;
        timerModel.preventUnloadIfUnsavedChanges = false;
        timerModel.recordsLimit = 0;
        timerModel.fields = [
            { 
                id: 'Start',
                uiOnly: true,
                displaytype: 'DATETIME',
                ogdisplaytype: 'TEXT',
                label: 'Start',
                defaultvaluetype: 'fieldvalue',
                defaultValue: 'NOW',
                readonly: true,
            },
            { 
                id: 'ElapsedMinutes',
                uiOnly: true,
                readonly: true,
                displaytype: 'FORMULA',
                ogdisplaytype: 'TEXT',
                label: 'Elapsed Minutes',
                returntype: 'DOUBLE',
                precision: 3,
                scale: 0,
                formula: [{formula: '(NOW() - {{Start}}) / (1000*60)'}]

            },
            { 
                id: 'ElapsedSeconds',
                uiOnly: true,
                readonly: true,
                displaytype: 'FORMULA',
                ogdisplaytype: 'TEXT',
                label: 'Elapsed Seconds',
                returntype: 'DOUBLE',
                precision: 2,
                scale: 0,
                formula: [{formula: '({{ElapsedMinutes}} - FLOOR({{ElapsedMinutes}}))*60'}]

            },
            { 
                id: 'PrettyTime',
                uiOnly: true,
                readonly: true,
                displaytype: 'FORMULA',
                ogdisplaytype: 'TEXT',
                label: 'Pretty Time',
                returntype: 'TEXT',
                formula: [{
                    formula: 'FLOOR({{ElapsedMinutes}})+":"+IF(LEN(ROUND({{ElapsedSeconds}})) = 1 ,'+
                    ' "0"+ROUND({{ElapsedSeconds}}) , ROUND({{ElapsedSeconds}}))'
                }]

            },
            { 
                id: 'Color',
                uiOnly: true,
                readonly: true,
                displaytype: 'FORMULA',
                ogdisplaytype: 'TEXT',
                label: 'Color',
                returntype: 'TEXT',
                formula: [{
                    formula: 'IF({{ElapsedMinutes}}>'+mintues3+', "'+color3+'",'+
                    ' IF({{ElapsedMinutes}}>'+minutes2+', "'+color2+'",'+
                    ' IF({{ElapsedMinutes}}>'+minutes1+', "'+defaultColor+'","'+color1+'")))'
                }]
            }
        ]; 

Where have I gone wrong?
Photo of Matt Sones

Matt Sones, Champion

  • 32,370 Points 20k badge 2x thumb
  • flummoxed

Posted 4 weeks ago

  • 1
Photo of Matt Sones

Matt Sones, Champion

  • 32,370 Points 20k badge 2x thumb
Nevermind!

I was making the syntax for the formulas more complicated than it needed to be. Here's the working result:

var timerModel = new mm();
        timerModel.objectName = 'Process_Log__c';
        timerModel.id = "Timer";
        timerModel.doQuery = true;
        timerModel.preventUnloadIfUnsavedChanges = false;
        timerModel.recordsLimit = 0;
        // timerModel.createRowIfNoneFound = true;
        timerModel.fields = [
            { 
                id: 'Start',
                accessible: true,
                createable: true,
                defaultValue: "NOW",
                defaultvaluetype: "fieldvalue",
                displaytype: "DATETIME",
                editable: true,
                evaluatedDefaultValue: "NOW",
                label: "Start",
                uiOnly: true,
            },
            { 
                id: "ElapsedMinutes",
                accessible: true,
                calculated: true,
                createable: false,
                displaytype: "DOUBLE",
                editable: false,
                formula: "(NOW() - {{Start}}) / (1000*60)",
                label: "Elapsed Minutes",
                precision: 3,
                scale: 0,
                uiOnly: true
            },
            { 
                id: "ElapsedSeconds",
                accessible: true,
                calculated: true,
                createable: false,
                displaytype: "DOUBLE",
                editable: false,
                formula: "({{ElapsedMinutes}} - FLOOR({{ElapsedMinutes}}))*60",
                label: "Elapsed Seconds",
                precision: 2,
                scale: 0,
                uiOnly: true
            },
            { 
                id: "PrettyTime",
                accessible: true,
                calculated: true,
                createable: false,
                displaytype: "TEXT",
                editable: false,
                label: "Pretty Time",
                length: 255,
                uiOnly: true,
                formula: 'FLOOR({{ElapsedMinutes}})+":"+IF(LEN(ROUND({{ElapsedSeconds}})) = 1 ,'+
                    ' "0"+ROUND({{ElapsedSeconds}}) , ROUND({{ElapsedSeconds}}))'
            },
            { 
                id: "Color",
                accessible: true,
                calculated: true,
                createable: false,
                displaytype: "TEXT",
                editable: false,
                label: "Color",
                length: 255,
                uiOnly: true,
                formula: 'IF({{ElapsedMinutes}}>'+mintues3+', "'+color3+'",'+
                    ' IF({{ElapsedMinutes}}>'+minutes2+', "'+color2+'",'+
                    ' IF({{ElapsedMinutes}}>'+minutes1+', "'+color1+'","'+defaultColor+'")))'
            }
        ];
Photo of Luzie Baumgart

Luzie Baumgart, Official Rep

  • 4,098 Points 4k badge 2x thumb
Hi Matt, sounds good that you could resolve it by yourself - thank you for taking the time to share your solution!