チェックイン/チェックアウトリスト項目のコードを記述しました。これは管理者にはうってつけですが、その他の権限レベルには問題があります。サイトの "_vti_bin/lists.asmx"にあるUpdateListItemsの401の不正なエラーです。ユーザーが "_vti_bin/lists.asmx" Webサービスを表示できることを確認しました。SPServiceを使用してUpdateListItemsが正しく実行されないようにするアクセス許可
//declare variables used for check-in/check-out.
var varName;
var varChecked;
var varID
var varQueryStringVals;
//Check who has checked out the item
function getCheckOutPerson(){
$().SPServices({
operation: "GetListItems",
async: false,
listName: "Communications Services Request Form",
CAMLQuery: "<Query><Where><Eq><FieldRef Name='ID' /><Value Type='Number'>" + varID + "</Value></Eq></Where></Query>",
completefunc: function (xData, Status) {
$(xData.responseXML).SPFilterNode("z:row").each(function() {
varChecked = $(this).attr("ows_CheckedOutTo");
});
}
});
};
$(document).ready(function() {
//Check-in if edits cancelled
$("#cancelBtn").click(function(){
//Check in edited item.
if (varName == varChecked){
$().SPServices({
operation: "UpdateListItems",
async: false,
debug: true,
listName: "Communications Services Request Form",
ID: varID,
valuepairs: [["CheckedOutTo", ""]],
completefunc: function(xData, Status) {}
});
};
});
//get current user
varName = $().SPServices.SPGetCurrentUser({
fieldName: "Title",
debug: false
});
//get current list item ID
varQueryStringVals = $().SPServices.SPGetQueryString();
varID = varQueryStringVals["ID"];
//get checked out name
getCheckOutPerson();
// item checked in or checked out by current user?
if (varChecked == undefined || varName == varChecked){
//check out item
$().SPServices({
operation: "UpdateListItems",
async: false,
debug: true,
listName: "Communications Services Request Form",
ID: varID,
valuepairs: [["CheckedOutTo", varName]],
completefunc: function(xData, Status) {
}
});
};
//checked out message
if (varChecked != undefined && varName != varChecked) {
alert ("You cannot edit this item. It is check out by " + varChecked +".");
history.back();
};
//Display 'checked out to' in dispitem.aspx
getCheckOutPerson();
if ($('.CheckedOut').text('')) {
$('.CheckedOut').append(varChecked);
}
});
function PreSaveAction() {
if (varName != varChecked){
alert ("You cannot make changes to this item. It it checked out to " + varChecked);
return false;
};
//Check in edited item.
$().SPServices({
operation: "UpdateListItems",
async: false,
debug: true,
listName: "Communications Services Request Form",
ID: varID,
valuepairs: [["CheckedOutTo", ""]],
completefunc: function(xData, Status) {}
});
return true;
};
ユーザーは投稿のアクセス許可を持っていますが、フルアクセスを試みても、401の不正なエラーが発生します。 – Calen
また、UpdateListItemsコールでIDを使用しています。コントリビュータレベルのアカウントが正しいIDを取得しています。 – Calen
ええ、それは、ユーザーがリモートAPIを使用する権限を持っていないように、アクセス許可がうんざりしていたことが判明しました。それが問題を引き起こしていたのです。 – Calen