SharePoint Add-IN JSOM Create List Item Error. "this" is undefined

721 views Asked by At

I need to have my SharePoint Add-In create a list item. I got the function from the OfficeDev Github site here. When I call the function it fails at the line where "this" first appears.

The error is: Unable to set property 'oListItem' of undefined or null reference

// line calling the function
createDELListItem(document.getElementById("resultpanel"), uniqueID, "MTD_On_Demand");

// function
function createDELListItem(resultpanel, extractionID, extractionType) {
        var clientContext;
        var oWebsite;
        var oList;
        var itemCreateInfo;

        clientContext = new SP.ClientContext.get_current();
        oWebsite = clientContext.get_web();
        oList = oWebsite.get_lists().getByTitle("Global_Variable_Store");

        itemCreateInfo = new SP.ListItemCreationInformation();
        // Line throwing the "null or undefined" error
        this.oListItem = oList.addItem(itemCreateInfo);
        //A guid to send with message that uniquely identifies the list item.
        this.oListItem.set_item("ExtractionID", extractionID);
        //A brief title (description) of the variable set here in this list item.
        this.oListItem.set_item("Extraction Type", extractionType);
        //The Variable name
        this.oListItem.set_item("StartTime", convertThisDate);
        //The process descriptor that set the variable. This is set by the code.
        this.oListItem.update();

        clientContext.load(this.oListItem);
        clientContext.executeQueryAsync(
            Function.createDelegate(this, successHandler),
            Function.createDelegate(this, errorHandler)
        );

        function successHandler() {
            resultpanel.innerHTML = "Go to the <a href='../Lists/Global_Variable_Store'>list</a> to see your new item.";
        }

        function errorHandler() {
            resultpanel.innerHTML = "Request failed: " + arguments[1].get_message();
        }
    }

1

There are 1 answers

0
Vadim Gremyachev On BEST ANSWER

It seems this is undefined in your case, i would avoid using the this keyword by replacing the function for creating a list item with:

function addListItem(list,itemProperties,success,error)
{
    var ctx = list.get_context();    
    var itemCreateInfo = new SP.ListItemCreationInformation();
    var listItem = list.addItem(itemCreateInfo);
    for(var name in itemProperties) {
       listItem.set_item(name, itemProperties[name]) 
    }
    listItem.update();
    ctx.load(listItem);
    ctx.executeQueryAsync(
        function() {
          success(listItem);           
        },
        error
    );
}    

Usage

var properties = {
         "ExtractionID" : "----",
         "Extraction Type": "----",   
         "StartTime": "----"            
   };
   var ctx = SP.ClientContext.get_current();
   var web = ctx.get_web();
   var list = web.get_lists().getByTitle("Global_Variable_Store");
   addListItem(list,properties,
         function(contactItem){
            console.log('Item has been created successfully');
         },
         function(sender,args){
            console.log('Error occured while creating item:' + args.get_message());
    });