0

さて、これは私をひどく困惑させました。以下のjavascriptのブロックで何時間も試してみた後、IEのjavascriptデバッガーで同じエラーが発生します。

私が得ているエラーはSCRIPT5007です:プロパティ'get_id'の値を取得できません:オブジェクトがnullまたは未定義です。

そして、以下は私のコードです:

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変数を2回使用しています。1回は9行目です。

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

そして再びGetUrlの内部:

var items = sdlist.getItems(query);

execureQueryAsyncクロージャに名前の競合があります。この問題を修正することから始めます。どのアイテムコレクションを参照しますか?元のアイテム変数をロードすることを意味しますか?

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