2012-07-03 47 views
0

好的,這一個讓我認真難住,嘗試了幾個小時的JavaScript塊以下的事情後,我仍然在IE的JavaScript調試器中得到同樣的錯誤。Sharepoint javascript get_id錯誤

我得到的錯誤是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查詢,但在這一點上,我真的不知道,任何幫助,將不勝感激, 謝謝!

+0

我還要解釋一下,單步調試代碼,ITEMID似乎有一個值,然而,一旦調試器到達它似乎失去了價值的迴歸,當我懸停在itemID這一點上它只是說未定義。 –

+0

因此,在控制檯中,如果您手動查找'get_id',是否確認函數存在?在其他瀏覽器中會發生什麼(或者,對於SharePoint而言,你僅限於IE?) – Utkanos

+0

是的,只是IE不幸。 –

回答

0

您正在使用items變量兩次,一次是在第9行:

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

又一次裏面的getURL:

var items = sdlist.getItems(query); 

。在你的execureQueryAsync關閉名稱衝突。我會開始解決這個問題。你想參考哪些項目集合?你的意思是加載原始項目變量:

ctx.load(items); 
var items = sdlist.getItems(query); 
+0

我明白你的意思了,命名衝突可能會讓javascript產生混淆,讓我修復這些並回復給你。 –

+0

修復了命名衝突,但仍然得到相同的錯誤,感謝您發現這些錯誤。 –