0

I am debugging the code below and the line Context.ExecuteQueryAsync is not being trigerred. I am not getting any error.

async function updateListItem(listName, itemId, itemProperties, pageurl, context, listItem) {
try {
    $.ajax({
        url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('" + listName + "')/items(" + itemId + ")",
        type: "POST",
        contentType: "application/json;odata=verbose",
        data: JSON.stringify(itemProperties),
        headers: {
            "Accept": "application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val(),
            "X-HTTP-Method": "MERGE",
            "If-Match": '*'
        },
        success: function (data) {
            if (M_DEBUG) {
                console.log("department added");
            }
            console.log('department added');
            // publish the news
            listItem.get_file().publish("Publishing");
            console.log(context);

            try{
            context.executeQueryAsync(
                function () {
                    if (M_DEBUG) {
                        console.log("file published");
                    }
                    console.log(pageurl);
                    // redirect to news page in edit mode
                    window.location.replace(pageurl + "?ControlMode=Edit&DisplayMode=Design");
                },
                function (sender, args) {
                    if (M_DEBUG) {
                        console.log("error while publishing file:" + args.get_message() +
                            '\n' + args.get_stackTrace());
                    }
                }
            );}

            catch(err){
                console.log(err.message);
            }
        },
        error: function (data) {
            if (M_DEBUG) {
                console.log(data);
            }
        }
    });
} catch (err) {
    console.log(err.message);
}

}

2

Ensure the item(file) is checked out before updating.

You can print the error details using error handler as demonstrated below:

$.ajax({
        url: siteurl + "/_api/web/lists/getbytitle('" + listName + "')/items("+itemId+")",
        method: "GET",
        headers: { "Accept": "application/json; odata=verbose" },
        success: function (data) {
            //...
        },
        error: function (data) {
            console.log(JSON.stringify(data));
        }
});

Try the following script to update and publish the item:

Update();
function Update() {
    SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function () {
        var listName = "Pages";   
        var itemId = 1; // Update Item Id here
        var titleVal = "test";
        var itemType = GetItemTypeForListName(listName);
        var itemProperties = {
            "__metadata": { "type": itemType },
            "Title": titleVal    
        };
        var pageurl = "https://tenant.sharepoint.com/Sites/<site>/Pages/p1.aspx";

        var context = new SP.ClientContext();
        var oList = context.get_web().get_lists().getByTitle(listName);
        var listItem = oList.getItemById(itemId);
        context.load(listItem);
        context.load(listItem.get_file());
        context.executeQueryAsync(
            Function.createDelegate(this, function(){
                console.log(listItem.get_file().get_checkOutType());
                console.log(SP.CheckOutType.online);
                if(listItem.get_file().get_checkOutType() !== SP.CheckOutType.online) {
                    checkOutItem(listName,itemId,itemProperties, pageurl, context, listItem);
                }else{
                    //item is checked out
                    updateListItem(listName,itemId,itemProperties, pageurl, context, listItem);
                }

            }),
            Function.createDelegate(this, this.onQueryFailed)
        );      
    });    

}
function checkOutItem(listName,itemId,itemProperties, pageurl,context, listItem){   
    listItem.get_file().checkOut();
    context.executeQueryAsync(function () {
        console.log("successfully item is checked out");
        updateListItem(listName,itemId,itemProperties, pageurl, context, listItem);
    },
    function (sender, args) {
    console.log("failed: " + args.get_message());
    });
}
async function updateListItem(listName, itemId, itemProperties, pageurl,context, listItem) {    
    $.ajax({
        url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('" + listName + "')/items("+itemId+")",
        type: "POST",
        contentType: "application/json;odata=verbose",
        data: JSON.stringify(itemProperties),
        headers: {
            "Accept": "application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val(),
            "X-HTTP-Method": "MERGE",
            "If-Match": "*"
        },
        success: function (data) {          
            console.log('Success');
            //check in 
            listItem.get_file().checkIn();
            // publish
            listItem.get_file().publish("Publishing");
            context.executeQueryAsync(function () {
                    console.log("item is published");
                    window.location.replace(pageurl + "?ControlMode=Edit&DisplayMode=Design");
                },
                function (sender, args) {
                console.log("failed: " + args.get_message());
                });
        },
        error: function (data) {
            console.log(JSON.stringify(data));
        }
    });
}
// Get List Item Type metadata
function GetItemTypeForListName(name) {
    return "SP.Data." + name.charAt(0).toUpperCase() + name.split(" ").join("").slice(1) + "Item";
}  

function onQueryFailed(sender, args) {
    console.log('Request failed. ' + args.get_message() +
    '\n' + args.get_stackTrace());
}

Update: check out item before redirecting page.

Update();
function Update() {
    SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function () {
        var listName = "Pages";   
        var itemId = 1; // Update Item Id here
        var titleVal = "test";
        var itemType = GetItemTypeForListName(listName);
        var itemProperties = {
            "__metadata": { "type": itemType },
            "Title": titleVal    
        };
        var pageurl = "https://tenant.sharepoint.com/Sites/<site>/Pages/p1.aspx";

        var context = new SP.ClientContext();
        var oList = context.get_web().get_lists().getByTitle(listName);
        var listItem = oList.getItemById(itemId);
        context.load(listItem);
        context.load(listItem.get_file());
        context.executeQueryAsync(
            Function.createDelegate(this, function(){
                console.log(listItem.get_file().get_checkOutType());
                console.log(SP.CheckOutType.online);
                if(listItem.get_file().get_checkOutType() !== SP.CheckOutType.online) {
                    checkOutItem(listName,itemId,itemProperties, pageurl, context, listItem);
                }else{
                    //item is checked out
                    updateListItem(listName,itemId,itemProperties, pageurl, context, listItem);
                }

            }),
            Function.createDelegate(this, this.onQueryFailed)
        );      
    });    

}
function checkOutItem(listName,itemId,itemProperties, pageurl,context, listItem){   
    listItem.get_file().checkOut();
    context.executeQueryAsync(function () {
        console.log("successfully item is checked out");
        updateListItem(listName,itemId,itemProperties, pageurl, context, listItem);
    },
    function (sender, args) {
    console.log("failed: " + args.get_message());
    });
}
async function updateListItem(listName, itemId, itemProperties, pageurl,context, listItem) {    
    $.ajax({
        url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('" + listName + "')/items("+itemId+")",
        type: "POST",
        contentType: "application/json;odata=verbose",
        data: JSON.stringify(itemProperties),
        headers: {
            "Accept": "application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val(),
            "X-HTTP-Method": "MERGE",
            "If-Match": "*"
        },
        success: function (data) {          
            console.log('Success');
            //check in 
            listItem.get_file().checkIn();
            // publish
            listItem.get_file().publish("Publishing");
            context.executeQueryAsync(function () {
                    console.log("item is published");
                    //redirect page
                    redirectPage(listItem,context,pageurl)
                },
                function (sender, args) {
                console.log("failed: " + args.get_message());
                });
        },
        error: function (data) {
            console.log(JSON.stringify(data));
        }
    });
}
// Get List Item Type metadata
function GetItemTypeForListName(name) {
    return "SP.Data." + name.charAt(0).toUpperCase() + name.split(" ").join("").slice(1) + "Item";
}

function redirectPage(listItem,context,pageurl){
    listItem.get_file().checkOut();
    context.executeQueryAsync(function () {
        console.log("successfully item is checked out");
        window.location.replace(pageurl + "?ControlMode=Edit&DisplayMode=Design");
    },
    function (sender, args) {
    console.log("failed: " + args.get_message());
    });
}  

function onQueryFailed(sender, args) {
    console.log('Request failed. ' + args.get_message() +
    '\n' + args.get_stackTrace());
}
| improve this answer | |
  • i added only the error handler code but still nothing appears on the console menu. – Keshav Taurah Aug 21 '18 at 10:03
  • test with the code I provided above – JoannaW_MSFT Aug 21 '18 at 10:06
  • it worked but can you give some more explanation for the code please – Keshav Taurah Aug 21 '18 at 11:11
  • i do get an alert that tell me to check out the page to edit it, doesn't the above code check it out before redirecting? – Keshav Taurah Aug 21 '18 at 11:46
  • You can check out the item before redirecting. check my update. – JoannaW_MSFT Aug 22 '18 at 1:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.