0

好吧,这让我很困惑,在使用下面的 javascript 块尝试了几个小时之后,我仍然在 IE 的 javascript 调试器中遇到同样的错误。

我得到的错误是 SCRIPT5007: Unable to get value of the property 'get_id': object is null or undefined。

以下是我的代码:

AS.SP.ClientActions.ClientProgramEdit_Status = new AS.SP.ClientActions.ButtonStatus();
AS.SP.ClientActions.Can_ClientProgramEdit = function (groupID) {

var OnError = function (sender, args) {
    AS.SP.ClientActions.ClientProgramEdit_Status.enabled = false;
    RefreshCommandUI();
};

var items = AS.SP.ClientActions.GetSelectedItems();
var count = CountDictionary(items);
if (count === 1) {
    var itemID = items[0].id;
    if (AS.SP.ClientActions.ClientProgramEdit_Status.itemID != itemID) {
        AS.SP.ClientActions.ClientProgramEdit_Status.itemID = itemID;
        AS.SP.ClientActions.ClientProgramEdit_Status.enabled = false;

        AS.SP.ClientActions.GetUrl(function (rootUrl) {
            var fragments = AS.SP.Navigation.ParseUri(rootUrl);

            var ctx = new SP.ClientContext(fragments.path); 
            var web = ctx.get_web();
            var props = web.get_allProperties();

            ctx.load(web);
            ctx.load(props);
            ctx.executeQueryAsync(function () {

                var listId = 'Client Programs';
                var sdlist = web.get_lists().getByTitle(listId);

                var locationID = props.get_item('WL_ITEM_ID');
                var query = new SP.CamlQuery();
                query.set_viewXml('<View><Query><Where><And><Eq><FieldRef Name="len_cp_Location" /><Value Type="Text">' + locationID + '</Value></Eq><Eq><FieldRef Name="len_cp_Client_Status" /><Value Type="Text">Inactive</Value></Eq></And></Where></Query><ViewFields><FieldRef Name="Title" /></ViewFields></View>');
                var items = sdlist.getItems(query);
                ctx.load(items);
                ctx.executeQueryAsync(function () {
                    var item = items.itemAt(0);
                    var itemID = item.get_id();

                    if (itemID == "WL_ITEM_ID") {
                        AS.SP.ClientActions.ClientProgramEdit_Status.enabled = true;
                        RefreshCommandUI();
                    }
                }, OnError);
            }, OnError);
        });
    }
}

return AS.SP.ClientActions.ClientProgramEdit_Status.enabled;
}

我的理论是我的 CAML 查询做错了,但此时我真的不知道,对此的任何帮助将不胜感激,谢谢!

4

1 回答 1

0

您正在使用该items变量两次,一次在第 9 行:

var items = AS.SP.ClientActions.GetSelectedItems();

再次在 GetUrl 中:

var items = sdlist.getItems(query);

您的 execureQueryAsync 闭包中存在名称冲突。我将从解决这个问题开始。您想参考哪些项目集合?您的意思是加载原始 items 变量:

 ctx.load(items); 
 var items = sdlist.getItems(query);
于 2012-07-03T18:46:58.517 回答