简体   繁体   中英

Use suitescript to create custom record from API

I need help to resolve this issue.

I have a custom record to record vehicle details for customers. I can add details from UI with no problem but I need to add vehicle details from an API call. I have a clientside script that execute a call to the API and return the data but I'm not able to assign vehicle make and model to the relevant fields.

My make and model fields are lists with model depending on make, ie when make is selected only models for that make will be listed.

In my script I have a switch statement to assign the fields from the API to my custom record fields.

below the screen shot of the Vehicle details custom record (link to it)

Custopm Record Screenshot 1

Below my code from the PageInit fucntion, I've added coments in the code to show what is working and what not. The code use the custom record (screen shot). The try return just USER_ERROR and nothing more.:

    function pageInit(scriptContext) {

        var customer = scriptContext.currentRecord;


// *********** Get current Form used ************************************* //
        var currentForm = customer.getText('customform');

        var posCust = parseInt(currentForm.search("Customer"));
        var posCont = parseInt(currentForm.search("Contact"));

        log.debug('pos Cust', posCust);
        log.debug('pos Cont', posCont);

         if(posCust > 0) {
             var customer = scriptContext.currentRecord;

             log.debug('Form Cust', currentForm);

             var fldUserId = customer.getValue({
                 fieldId: 'custentity_tdg_userid'
             });

             var fldCustId = scriptContext.currentRecord.id;

             log.debug('fldUserId', fldUserId);
             log.debug('fldCustId', fldCustId);
 //
             var regVehCount = customer.getLineCount({
                 sublistId : 'recmachcustrecord_tdg_vehicle_customer'
             });

             if(regVehCount > 0){
                  var fldMake = customer.getSublistValue({
                      sublistId: 'recmachcustrecord_tdg_vehicle_customer',
                      fieldId: 'custrecord_tdg_vehicle_make',
                      line: 0
                  });
                  var fldModel = customer.getSublistValue({
                      sublistId: 'recmachcustrecord_tdg_vehicle_customer',
                      fieldId: 'custrecord_tdg_vehicle_model',
                      line: 0
                  });
                  var fldRegNr = customer.getSublistValue({
                      sublistId: 'recmachcustrecord_tdg_vehicle_customer',
                      fieldId: 'custrecord_tdg_vehicle_reg_nr',
                      line: 0
                  });
                  var fldColour = customer.getSublistValue({
                      sublistId: 'recmachcustrecord_tdg_vehicle_customer',
                      fieldId: 'custrecord_tdg_vehicle_colour',
                      line: 0
                  });


                  log.debug('Field Make', fldMake);
                  log.debug('Field Model', fldModel);
                  log.debug('Field Reg Nr', fldRegNr);
                  log.debug('Field Colour', fldColour);

             }

             alert('This customer has '+ regVehCount +' registered vehicles');


// *************************************** API HTTP call URL ************************************** //


             var urlStr = '*url for api call*?';
             var urlStrJoin = 'userID=';
             var apiKey = '*api key from call*';
             var apiKeyJoin = '&apiKey='
             var userID = fldUserId;
             var urlVal = urlStr+urlStrJoin+userID+apiKeyJoin+apiKey;

             var response = https.request({
                 method : https.Method.GET,
                 url : urlVal
             });

             var responseBody = response.body;

// ********* Parse the result JSON into a JavaScript object before loop through its properties ************ //
             var dataObj = JSON.parse(responseBody);

             // log.debug({
             //     title: 'dataObj length',
             //     details: dataObj.details.length
             // });

 // ****** Get the number of vehicles for the resident ********************* //
                 for (var key of Object.keys(dataObj.details)) {

                     log.debug({
                         title: 'vehicleID Parse ' + key,
                         details: dataObj.details[key]
                     });
                     var vehicleDet = dataObj.details[key];

                     // *********** Get the individual vehicle details ************************ //
                     for (var subkey of Object.keys(vehicleDet)) {
                         log.debug({        // This return the vehicle make 
                             title: 'vehicle details parse ' + subkey,
                             details: vehicleDet[subkey]
                         });
                         var rec = record.create({
                            type :  'customrecord_tdg_cust_vehicle_details',
                             isDynamic : true
                         });

                         rec.setValue({fieldId: 'custrecord_tdg_vehicle_customer', value : fldCustId}); // This assign the customer ID no issues

                        switch (subkey){
                            case 'make' : // search return the make and internal ID, no error on setValue but it is not saved, I get a user error
                                log.debug({title: 'in case before search call'});
                                createSearchVehMake(vehicleDet[subkey].toUpperCase());
                                rec.setValue({fieldId: 'custrecord_tdg_vehicle_make', value: vehMakeId_Glo});
                                log.debug({title: 'vehicle details parse case ' + subkey, details : vehMakeId_Glo});
                                break;
                            case 'model' : // Search return Model with correct Internal ID but I get an error that the reference key is invalid, this field is dependant on make
                                createSearchVehModel(vehMakeId_Glo, vehicleDet[subkey]);
                                rec.setValue({fieldId: 'custrecord_tdg_vehicle_model', value: format.parse({value : vehModelId_Glo, type : format.Type.INTEGER})});
                                log.debug({title: 'vehicle details parse case ' + subkey, details : vehModelId_Glo});
                                break;
                            case 'colour' : // this is not assigned in setValue, Iget a user Error
                                rec.setValue({fieldId: 'custrecord_tdg_vehicle_colour', value: vehicleDet[subkey]});
                                log.debug({title: 'vehicle details parse case ' + subkey, details : vehicleDet[subkey]});
                                break;
                            case 'year' :
                                rec.setValue({fieldId: 'custrecord_tdg_vehicle_year', value: vehicleDet[subkey]});
                                log.debug({title: 'vehicle details parse case ' + subkey, details : vehicleDet[subkey]});
                                break;
                            case 'registrationNumber' : // This is assigned and saved
                               rec.setValue({fieldId: 'custrecord_tdg_vehicle_reg_nr', value: vehicleDet[subkey]});
                                rec.setValue({fieldId: 'name', value: vehicleDet[subkey]});
                                log.debug({title: 'vehicle details parse case ' + subkey, details : vehicleDet[subkey]});
                                break;
                              case 'vinNumber' :
                                rec.setValue({fieldId: 'custrecord_tdg_vehicle_vin_nr', value: vehicleDet[subkey]});
                                log.debug({title: 'vehicle details parse case ' + subkey, details : vehicleDet[subkey]});
                                break;
                        }
                        //customer.setValue({fieldId: 'name', value: email});
                         // name - Registration number
                         // custrecord_tdg_vehicle_make - Vehicle Make
                         // custrecord_tdg_vehicle_model - Vehicle Model
                         // custrecord_tdg_vehicle_colour - Vehicle Colour
                         // custrecord_tdg_vehicle_reg_nr - Registration number
                         // custrecord_tdg_vehicle_vin_nr - VIN number
                         // custrecord_tdg_vehicle_year - Registration Year
// this try is applied for every field, I then get customer ID and Registration number assigned and saved
                         // try {
                         //     var callId = rec.save();
                         //     log.debug('Vehicle record created successfully', 'Id: ' + callId);
                         // } catch (e) {
                         //     log.debug('sigh');
                         //     log.error(e.name);
                         // }
// This try will apply only on all field assignments , but then no data is saved                     }
                     try {
                         var callId = rec.save();
                         log.debug('Vehicle record created successfully', 'Id: ' + callId);
                     } catch (e) {
                         log.debug('sigh');
                         log.error(e.name);
                     }

                 }

    }

    }

I noticed you created the new record in dynamic mode. This is normally done when the order of setting the fields on the record matters. Check the order of the fields you are setting ie if the UI calls for years then the list of Makes is populated, set "Years" first. Also check the optional parameters for the Record.save method.

Separately you logged "log.error(e.name);" try also logging "log.error(e.message);" for more information on the error.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM