2015-07-03 50 views
0

我的javascript不是最好的,并想知道是否有人可以帮我解决这个问题。本质上,我有一个名为PGCount的整数列的库,我希望能够点击这个按钮,它增加了定义变量pgcount的值,它目前是警报,但我有更大的计划,如果只是为了获得预期的结果。Ribbon命令读取值

可悲的是它计数第一个项目两次。

这里是整个模块

<?xml version="1.0" encoding="utf-8"?> 
<Elements xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <CustomAction 
    Id="Ribbon.Library.Actions.AddAButton" 
    Location="CommandUI.Ribbon" 
    RegistrationId="101" 
    RegistrationType="List" 
    Title="PGCount"> 
    <CommandUIExtension> 
     <CommandUIDefinitions> 
     <CommandUIDefinition 
      Location="Ribbon.Library.Share.Controls._children"> 
      <Button Id="Ribbon.Library.Share.NewRibbonButton" 
      Command="CountPGCount" 
      LabelText="Page Count" 
      TemplateAlias="o2" /> 
     </CommandUIDefinition> 
     </CommandUIDefinitions> 
     <CommandUIHandlers> 
     <CommandUIHandler Command="CountPGCount" 
          CommandAction="javascript: 
          var listitem; 
          var pgcounts = 0; 
          getWebProperties(); 
          function getWebProperties() { 
           var ctx = new SP.ClientContext.get_current(); 
           var currentWeb = ctx.get_web(); 
           var currentListGuid = SP.ListOperation.Selection.getSelectedList(); 
           var currentList = currentWeb.get_lists().getById(currentListGuid); 
           var selectedItems = SP.ListOperation.Selection.getSelectedItems(); 
           for (i in selectedItems) { 
            listitem = currentList.getItemById(selectedItems[i].id); 
            ctx.load(listitem); 
            ctx.executeQueryAsync(Function.createDelegate(listitem, function() { 
             var c = listitem.get_fieldValues().PGCount; 
             pgcounts+=c;  
            }), null); 
           };} 
           setTimeout(function() { 
            alert(pgcounts); 
           }, 3000);" 
     EnabledScript="javascript:SP.ListOperation.Selection.getSelectedItems().length >= 1;" /> 
     </CommandUIHandlers> 
    </CommandUIExtension> 
    </CustomAction> 

    <Module Name="Module1"> 
    </Module> 
</Elements> 

任何帮助,将不胜感激!

回答

0

嗯,我必须说,我这一整天都在努力工作! 这不计算与类似项目相同的问题,因为此加载多个项目。冲突总是发生。

现在我知道你很多很酷的Java头会说这是错的,我知道这一点,特别是检查项目数量等,但我不认为这太破旧了,它会我知道帮助某人。如果愿意的话,请随时收拾整理编号:)

<?xml version="1.0" encoding="utf-8"?> 
<Elements xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <CustomAction 
    Id="Ribbon.Library.Actions.AddAButton" 
    Location="CommandUI.Ribbon" 
    RegistrationId="101" 
    RegistrationType="List" 
    Title="PGCount"> 
    <CommandUIExtension> 
     <CommandUIDefinitions> 
     <CommandUIDefinition 
      Location="Ribbon.Library.Share.Controls._children"> 
      <Button Id="Ribbon.Library.Share.NewRibbonButton" 
      Command="CountPGCount" 
      LabelText="Page Count" 
      TemplateAlias="o2" /> 
     </CommandUIDefinition> 
     </CommandUIDefinitions> 
     <CommandUIHandlers> 
     <CommandUIHandler Command="CountPGCount" CommandAction="javascript: 

           var rows = new Array(); 
           var countofitems = -1; 
           var countogpgcounts = 0; 

           getpgcounts(); 

           function getpgcounts() { 
            var context = new SP.ClientContext.get_current(); 
            var web = context.get_web(); 
            var lists = web.get_lists(); 
            var listId = SP.ListOperation.Selection.getSelectedList(); 
            var list = lists.getById(listId); 
            var selectedItems = SP.ListOperation.Selection.getSelectedItems(); 

            rows = []; 

            for (var i in selectedItems) { 
             var id = selectedItems[i].id; 
             rows[i] = list.getItemById(id); 
             context.load(rows[i]); 
             countofitems++; 
            } 

            context.executeQueryAsync(Function.createDelegate(this, show),Function.createDelegate(this, showError)); 
           } 

           function show() { 

            for (i in rows) { 
             var thiscount = rows[i].get_item('PGCount'); 
             countogpgcounts += thiscount; 
             if (i == countofitems) { 
              alert(countogpgcounts); 
             } 
            } 
           } 

           function showError(sender, args) { 
            throw new Error('request failed: ' + args.get_message() + '\n' + args.get_stackTrace()); 
           } 
" 


     EnabledScript="javascript:SP.ListOperation.Selection.getSelectedItems().length >= 1;" /> 
     </CommandUIHandlers> 
    </CommandUIExtension> 
    </CustomAction> 

    <Module Name="Module1"> 
    </Module> 
</Elements>