2012-10-17 72 views
4

我只是試圖使用GetUserProfileByName服務來獲取來自AD的用戶的一些細節。爲此,我選擇使用JavaScript。經過一點研究和大量修補之後,我設法連接到web服務併成功檢索數據。GetUserProfileByName屬性不一致

我用一個簡單的if語句來比較屬性的'name',以獲得我想要的特定值。

if(xmlDoc.getElementsByTagName("Name")[i].childNodes[0].nodeValue == "Department") 
{ 
    property = xmlDoc.getElementsByTagName("Value")[i].childNodes[0].nodeValue; 
} 

在這一點上,我開始注意到一些差異。我似乎沒有得到我在比較中指定的財產。例如,如果我指定「部門」,它會返回電子郵件。經過很多掙扎之後,我終於決定將所有「名稱」和「值」字段放在兩個數組中,沒有任何比較,並將它們彼此相鄰顯示。

for(i = 0; i < 13 ; i++) 
{ 
    description[i] = xmlDoc.getElementsByTagName("Name")[i].childNodes[0].nodeValue; 
    elements[i] = xmlDoc.getElementsByTagName("Value")[i].childNodes[0].nodeValue; 
} 

我從這次得到的結論是,這兩個領域顯然沒有相互匹配:

UserProfile_GUID: 65f017dc-b892-4afa-8730-5e8f73aa7b86
帳戶名: CAPETOWN \ ANEL5
姓: Abraham
SPS-Phonetic姓:內爾
名字:亞伯拉罕內爾
SPS-PhoneticLastName: 021 ### ####
PreferredName: CRS - 信息Sys系統&技術
SPS-PhoneticDisplayName:承包商
WorkPhone:承包商
部門: ANEL5
名稱: CN =亞伯拉罕內爾,OU =標準,OU =用戶,OU =最終用戶服務,DC = ###,DC = ###,DC = ###
SPS-JOBTITLE: ###@###.###
經理:開普敦市民中心裙樓座

任何想法,爲什麼會是這樣嗎?信息 -

falsefalseUserProfile_GUIDNotSetb21ec99c-2ad9-40a8-9d45-a3273c92ee5afalsefalseAccountNameNotSetCAPETOWN \ AHEYNESfalsefalseFirstNameNotSetAshleyfalsefalseSPS-PhoneticFirstNameNotSetfalsefalseLastNameNotSetHeynesfalsefalseSPS-PhoneticLastNameNotSetfalsefalsePreferredNameNotSetAshley HeynesfalsefalseSPS-PhoneticDisplayNameNotSetfalsefalseWorkPhoneNotSet021 400個#### falsefalseDepartmentNotSetCRS:嘗試與整個XML文檔解析字符串

結果系統& TechfalsefalseTitleNotSetAssistant專業人員職位-SPS-JobTitleNotSetAssistant專業人員職位管理人員NotSetCAPE TOWN \ DSISSINGfalsefalseAboutMeNotSetfalsefalsePersonalSpaceNotSetfalsefalsePictureURLNotSetfalsefalseUserNameNotSetAHEYNESfalsefalseQuickLinksNotSetfalsefalseWebSiteNotSetfalsefalsePublicSiteRedirectNotSetfalsefalseSPS-虛線-lineNotSetfalsefalseSPS-PeersNotSetfalsefalseSPS-ResponsibilityNotSetfalsefalseSPS-SipAddressNotSetfalsefalseSPS-MySiteUpgradeNotSetfalsefalseSPS-ProxyAddressesNotSetfalsefalseSPS-HireDateNotSetfalsefalseSPS-DisplayOrderNotSetfalsefalseSPS-ClaimIDNotSetfalsefalseSPS-ClaimProviderIDNotSetfalsefalseSPS-ClaimProviderTypeNotSetfalsefalseSPS-SavedAccountNameNotSetfalsefalseSPS-ResourceAccountNameNotSetfalsefalseSPS-ObjectExistsNotSetfalsefalseSPS-MasterAccountNameNotSetfalsefalseSPS-DistinguishedNameNotSetCN =阿什利Heynes,OU =開發人員,OU =用戶,OU =最終用戶服務,DC = ##,DC = ##,DC = ##falsefalseSPS-SourceObjectDNNotSetfalsefalseWorkEmailNotSet##.#####.##.##FalsefalseCellPhoneNotSetfalsefalseFaxNotSetfalsefalseOfficeNotSetCape Town Paul Sauer BuildingfalsefalseSPS-Location NotSetfalsefalseSPS-TimeZoneNotSetfalsefalseAssistantNotSetfalsefalseSPS-PastProjectsNotSetfalsefalseSPS-SkillsNotSetfalsefalseSPS-SchoolNotSetfalsefalseSPS-BirthdayNotSetfalsefalseSPS-StatusNotesNotSetfalsefalseSPS-InterestsNotSetfalsefalseSPS-EmailOptinNotSet

+0

返回的XML文檔是什麼樣的?名稱和值是否在XML本身中正確排列?一種可能性是getElementsByTagName()函數不按它們在文檔中出現的順序返回標籤。另一種可能性是可能存在比Name元素更多或更少的Value元素,因此只有通過索引查找時纔會失去同步。我們需要看到XML。 – John

+0

@John:我很抱歉,但我對SharePoint很陌生,並且使用Web服務等。我所做的就是使用JavaScript在頁面上調用Web服務,並將其寫入SharePoint網站上的空白網頁。這是否會創建一個XML並將其存儲在網站的某個位置?我可以指定Web服務來返回XML文檔嗎?當我處理這個問題時,有人懷疑有更多名稱元素是Value元素,但認爲他們將使用Name元素專門爲Value元素編制索引。在這我顯然是錯的。 – Carel

+0

@John:我再次檢查了我的代碼,看到我實際上從Web服務中獲取了一個XML變量。我做了一些Google試圖用_var string = xmlNode將整個xml寫到屏幕上。xml; _這似乎返回了很多Value元素,並且沒有任何類型的XML格式。無論如何,我都將它附加到上面的問題。 – Carel

回答

1

搜索周圍,似乎XML結構本身不適合於您所使用的邏輯。該XML看起來是這樣的:

PropertyData* 
    Name 
    Values 
     ValueData 
      Value 

我不知道每一個基數,但我認爲它的安全遍歷xmlDoc.getElementsByTagName('PropertyData'),然後找到Name和(可能是多個)Value該塊中的元素。

var properties = xmlDoc.getElementsByTagName("PropertyData"); 

for (var i = 0, item; item = properties[i]; ++i) { 
    // search for Name and Value inside here 
} 

更新

它最有可能是由多個值FirstName引起:AbrahamNelAbraham Nel

+0

上面的方法似乎很有趣。 _getElementsByTagName(「PropertyData」); _似乎返回一個xml變量數組。我正在試圖找出如何在這些xml元素中找到這些值:' false公共<值的xmlns:的xsi = 「http://www.w3.org/2001/XMLSchema-instance」 的xsi:type = 「XSD:字符串」>亞伯拉罕' – Carel

+0

@Carel在我創建的循環中,每個'item'都是您可以執行搜索的另一個XML節點。 –

+0

好的,所以我使用_item.getElementsByTagName(「Name」)[0] .childNodes [0] .nodeValue_等進行搜索,但只要我嘗試搜索與**開頭的**值** SPS例如:SPS-PhoneticFirstName循環失敗。如果我用硬編碼的if語句手動搜索這些值的值:'if(i == 8)',我實際上得到了準確的結果。在IE中,它沒有調試工具,它非常難於使用它。 – Carel