我在SharePoint中有一个请求流程(自定义列表),需要实施一些业务规则。第一条规则是仅使当前用户能够与一些管理员一起编辑记录。使用OOB“ 创建和编辑访问权限”的问题是,当用户编辑不是他们的记录时,SharePoint不会在警告他们之前尝试警告他们。告诉用户该新闻为时已晚,因此我需要加强自己的安全性,以便不允许该用户进行编辑。
我获得当前用户的代码:
function SetCurrentUsernameToPeoplePicker()
{
var ctx = new SP.ClientContext.get_current();
this.website = ctx.get_web();
this.currentUser = website.get_currentUser();
ctx.load(currentUser);
ctx.executeQueryAsync(Function.createDelegate(this, this.defaultUserSuccess),
Function.createDelegate(this, this. defaultUserFail));
}
function defaultUserSuccess (sender, args)
{
var loginName = currentUser.get_loginName();
console.log('login='+loginName );
}
我不知道如何从屏幕上的“请求者名称”人员选择器中获取用户,因此我尝试使用CAMEL查询来获取用户。我有对象,但无法获取loginName进行比较。我有以下代码:
function retrieveListItems() {
var clientContext = new SP.ClientContext.get_current();
var oList = clientContext.get_web().get_lists().getByTitle('BSMRequests');
var recordId = "14";
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml('<View><Query><Where><Eq><FieldRef Name=\'ID\'/><Value Type=\'Text\'>'+ recordId +'</Value></Eq></Where></Query></View>');
collListItem = oList.getItems(camlQuery);
clientContext.load(collListItem);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded),
Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded(sender, args) {
var listItemEnumerator = collListItem.getEnumerator();
while (listItemEnumerator.moveNext()) {
var oListItem = listItemEnumerator.get_current();
console.log('requestor='+oListItem.get_item('Requestor_x0020_Name'));
}
}
我需要一种方法来获取此记录的“请求者名称”字段的LoginName,或者另一种将当前用户与创建此记录的用户进行比较的方法。有什么建议吗?
如果我理解正确,Requestor_x0020_Name是一个用户字段。
jsom以SP.FieldUserValue对象的形式返回oListItem.get_item('Requestor_x0020_Name'),可以通过oListItem.get_item('Requestor_x0020_Name').get_lookupId()
获得用户ID或通过oListItem.get_item('Requestor_x0020_Name').get_lookupValue()
获得用户名。
对于这种情况,我认为您可以比较用户ID。