Ribbon命令读取值

时间:2015-07-03 14:15:55

标签: javascript sharepoint ribbon csom

我的javascript不是最好的,并且想知道是否有人可以帮我解决这个问题。基本上我有一个名为PGCount的整数列的库,我希望能够单击此按钮并将其添加到已定义变量pgcount的值,它当前是警报但我有更大的计划,如果只是为了得到它期望的结果。

可悲的是,它计算了第一项两次。

这是整个模块

<?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>

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分: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>