【问题标题】:Read-Only Button for List Item in SharepointSharepoint 中列表项的只读按钮
【发布时间】:2011-11-22 08:49:42
【问题描述】:

我遇到了以下 Sharepoint 问题:我创建了一个功能区按钮,上面写着“只读”。当我在列表中并检查一些项目时,我想将这些项目设置为只读。 功能区按钮效果很好,当我发出警报或其他事情时,我会得到答案。所以这不可能是问题。我做了以下事情:

var listitem;
var roleAssgn;
var Assgn;
var selectedItems;

function readonly() {
    selectedItems = SP.ListOperation.Selection.getSelectedItems();
    var currentListGuid = SP.ListOperation.Selection.getSelectedList();

    var context = SP.ClientContext.get_current();
    var currentWeb = context.get_web();
    var currentList = currentWeb.get_lists().getById(currentListGuid);

     for (k in selectedItems) {
        listitem = currentList.getItemById(selectedItems[k].id);
        context.load(listitem, 'RoleAssignments');
        context.executeQueryAsync(Function.createDelegate(this, this.readonlyPerItem), Function.createDelegate(this, this.failed));
    }
}

function readonlyPerItem(sender, args) {
    var k;
    var Assgn;
    var r;
  context = SP.ClientContext.get_current();
  roleAssgn = listitem.get_roleAssignments();

  for(r in roleAssgn){
        Assgn = roleAssgn[r];
        alert("1");
        context.load(Assgn, 'RoleDefinitionBindings');
        alert("2");
        context.executeQueryAsync(Function.createDelegate(this, this.readonlyPerRoleA), Function.createDelegate(this, this.failed));
    }
}

function readonlyPerRoleA(sender, args) {
    var bindings = Assgn.get_roleDefinitionBindings();
    var member = Assgn.get_member();
}

function failed(sender, args) {
        alert("FAIL");
}

这在收到警报之前效果很好。警报 1 有效,但警报 2 无效。调试器说:该对象不支持属性“get_$h”。 这发生在 sp_runtime.js 中:

SP.DataRetrievalWithExpressionString.$1Q_0(a.get_$h(),d)

我真的没有看到问题。这是一个错误还是不可能?

【问题讨论】:

    标签: javascript sharepoint list


    【解决方案1】:

    好的,我使用了另一种方法来执行此操作,并想让您知道它对我的工作方式。我在 Ribbon Menu 中使用了一个 JS 来调用另一个网站,这只是一个空站点。我添加了参数(listguid、siteurl 和 itemid 的逗号分隔)。 然后该站点只打印“True”或“False”。这个响应将被我的 Ribbon JS 捕获并显示一些消息是否有效。这是我的功能区 JS:

    <CustomAction
        Id="ReadOnlyButton"
        RegistrationId="101"
        RegistrationType="List"
        Location="CommandUI.Ribbon"
        Sequence="15"
        Rights="ManageLists"
        Title="Set Readonly">
        <CommandUIExtension>
          <CommandUIDefinitions>
            <CommandUIDefinition
              Location="Ribbon.Documents.Manage.Controls._children">
              <Button
                Id="Ribbon.Documents.ReadOnly"
                Command="ReadOnly"
                Sequence="15"
                Image16by16="/_layouts/1031/images/formatmap16x16.png"
                Image16by16Left="-80"
                Image16by16Top="-128"
                Image32by32="/_layouts/1031/images/formatmap32x32.png"
                Image32by32Left="-160"
                Image32by32Top="-256"
                Description="Read Only"
                LabelText="Read Only" 
                TemplateAlias="o1"/>
            </CommandUIDefinition>
          </CommandUIDefinitions>
          <CommandUIHandlers>
            <CommandUIHandler
             Command="ReadOnly"
             CommandAction="javascript:
               var nid;
               function getItemIds()
               {
                 var itemIds = '';
                 var items = SP.ListOperation.Selection.getSelectedItems();
                 var item;
                 for(var i in items)
                 {
                   item = items[i];
                   if(itemIds != '')
                   {
                     itemIds = itemIds + ',';
                   }
                   itemIds = itemIds + item.id;               
                 }
                 return itemIds;
               }
               function handleReadyStateChange()
               {
                 if (client.readyState == 4)
                 {
                   if (client.status == 200) 
                   {
                     SP.UI.Notify.removeNotification(nid);
                     if(client.responseText == 'True') {                  
                      nid = SP.UI.Status.addStatus('The Rights has been set successfully', '', true);
                      SP.UI.Status.setStatusPriColor(nid, 'green');
                     } else {
                      nid = SP.UI.Status.addStatus('Error while setting Rights', '', true);
                      SP.UI.Status.setStatusPriColor(nid, 'red');
                     }
    
                      window.setTimeout('SP.UI.Status.removeStatus(\'' + nid + '\')', 5000);
                   }
                 }
               }
               function invokeReadOnly()
               {
                 var itemLength = 0;
                 var params = 'itemids=' + getItemIds(); 
                 for (var i=0;i&lt;params.length;i++) { if (',' == params.substr(i,1)) { itemLength++; } } 
    
                 if(itemLength > 0) {
                  nid = SP.UI.Notify.addNotification('Rights set for ' + (itemLength +1) + ' elements...', true);
                 } else {
                  nid = SP.UI.Notify.addNotification('Set Rights...', true);
                 }
    
                 var site='{SiteUrl}'; 
                 var url = site + '/_layouts/ReadOnly.aspx?listId={ListId}';
                 client = null;
                 client = new XMLHttpRequest();
                 client.onreadystatechange =  handleReadyStateChange;
                 client.open('POST', url, true);         
                 client.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
                 client.setRequestHeader('Content-length', params.length);
                 client.send(params);
               }      
               invokeReadOnly();"
    
          EnabledScript="javascript:
               function enableReadOnly()
               {
                 var items = SP.ListOperation.Selection.getSelectedItems();
                 return (items.length > 0);
               }
               enableReadOnly();"/>
          </CommandUIHandlers>
        </CommandUIExtension>
      </CustomAction>
    

    这是我背后的网站(ReadOnly.aspx):

    protected void Page_Load(object sender, EventArgs e)
    {
        string itemidsAll = Page.Request["itemids"];
        string listId = Page.Request["listId"];
        bool set = true;
    
        if (!String.IsNullOrEmpty(itemidsAll))
        {
            string[] itemIds = itemidsAll.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
            int item = 0;
    
            SPSite _site = null;
            SPListItem spitem = null;
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                _site = new SPSite(SPContext.Current.Site.ID);
            });
            using (SPWeb web = _site.OpenWeb())
            {
                web.AllowUnsafeUpdates = true;
                SPList doclib = SPContext.Current.Web.Lists.GetList(new Guid(listId), false);                
    
                foreach (string itemId in itemIds)
                {
                    if (Int32.TryParse(itemId, out item))
                    {
                        spitem = doclib.GetItemById(item);
                        set &= SetItem(spitem, SPContext.Current, ref _site);
                    }
                }
    
                web.AllowUnsafeUpdates = false;
            }
            _site.Dispose();
        }
    
        Response.Clear();
        Response.Write(set.ToString());
        Response.End();  
    }
    

    SetItem-Method 用于设置权限。你可以在那里使用你自己的东西:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      相关资源
      最近更新 更多