2012-07-09 8 views
8

मैं Lists.UpdateListItems वेब सेवा का उपयोग कर एक SharePoint प्रबंधित मेटाडेटा (MMD) फ़ील्ड को अपडेट करने का प्रयास कर रहा हूं लेकिन यह काम नहीं कर रहा है।Lists के साथ SharePoint 2010 के प्रबंधित मेटाडेटा फ़ील्ड को अपडेट करने में असमर्थ .UpdateListItems वेब सेवा कॉल

यहाँ मेरी सोप अनुरोध है

<?xml version="1.0" ?> 
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
<S:Body> 
    <UpdateListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
    <listName>My Test List</listName> 
    <updates> 
     <Batch ListVersion="0" PreCalc="TRUE" OnError="Continue"> 
     <Method Cmd="Update" ID="1"> 
      <Field Name="ID">3</Field> 
      <Field Name="Document_x0020_Title">foo</Field> 
      <Field Name="Fiscal_x0020_Year1">13;#FY 2006|7e8205da-57a1-45a3-8147-469b795ad6e8</Field> 
     </Method> 
     </Batch> 
    </updates> 
    </UpdateListItems> 
</S:Body></S:Envelope> 

यह अनुरोध सफलतापूर्वक अपडेट हो जाएगा "दस्तावेज़ शीर्षक" (एक पाठ क्षेत्र), लेकिन एमएमडी क्षेत्र, "वित्तीय वर्ष", अपरिवर्तित था और से कोई त्रुटि दी है वेब सेवा।

ध्यान दें कि एमएमडी का मूल्य "WssId; #TermValue | TermGuid" प्रारूप में है और यह शब्द साइट के लिए पहले से ही बनाया जा चुका है।

कृपया मदद करें।

उत्तर

9

यह पता लगाया।

मुझे एक अलग फ़ील्ड नाम का उपयोग करना होगा। क्षेत्र के लिए लेबल "वित्तीय वर्ष" है, लेकिन "Fiscal_x0020_Year1" के बजाय वास्तव में "d3c0ddc947ab4b8c90b6a0fe2d4caf09" फ़ील्ड नाम काम करता है। तो मेरी सोप अनुरोध

<Method Cmd="Update" ID="1"> 
     <Field Name="ID">3</Field> 
     <Field Name="Document_x0020_Title">foo</Field> 
     <Field Name="d3c0ddc947ab4b8c90b6a0fe2d4caf09">13;#FY 2006|7e8205da-57a1-45a3-8147-469b795ad6e8</Field> 
    </Method> 

की तरह लग रहे इस क्षेत्र को नाम मैं Lists.GetListContentType वेब सेवा विधि का उपयोग खेतों जानकारी लौटने और fieldtype के लिए "नोट" देखने के लिए प्राप्त करने के लिए होगा। यहां बताया गया है SharePoint लौटे

<Field Type="Note" DisplayName="Fiscal Year_0" 
StaticName="d3c0ddc947ab4b8c90b6a0fe2d4caf09" Name="d3c0ddc947ab4b8c90b6a0fe2d4caf09" 
ID="{1afa458b-d50a-4139-ad8d-f1172774de34}" ShowInViewForms="FALSE" Required="FALSE" 
CanToggleHidden="TRUE" SourceID="{77871b4e-f3ba-42dc-8940-ab33fb431099}" Hidden="TRUE" 
Version="1" Customization="" ColName="ntext8" RowOrdinal="0"/> 

मैं भी यह उपयोगी Lists.GetListContentTypes विधि का उपयोग करने Lists.GetListContentType विधि कॉल में सामग्री प्रकार आईडी उपयोग पाने के लिए लगता है का एक उदाहरण है।

---- अद्यतन - मैंने पाया आप के प्रारूप का उपयोग करने की जरूरत नहीं है कि "WssId; #TermValue | TermGuid"। आप बस "TermValue | TermGuid" का उपयोग कर सकते हैं। तो मूल्य के ऊपर उदाहरण में "एफवाई 2006 | 7e8205da-57a1-45a3-8147-469b795ad6e8" होगा।

यह बहुत उपयोगी है क्योंकि आप एक ही मूल्य को पूर्व मूल्य के विपरीत अलग-अलग साइट पर पुन: उपयोग कर सकते हैं, जहां आप इसे केवल एक साइट में उपयोग कर सकते हैं। बहु मूल्य के लिए आपको केवल ";" के साथ इसे सीमित करने की आवश्यकता है के बजाय ";#"। उदाहरण के लिए "एफवाई 2006 | 7e8205da-57a1-45a3-8147-469b795ad6e8; वित्त वर्ष 2007 | 823205da-57a1-45a3-8147-469b795ade13"।

+0

और जब आप मैदान सेट - कहां पूरी तरह से Wssid हिस्सा ommit कर सकते हैं। "एफवाई 2006 | 7e8205da-57a1-45a3-8147-469b795ad6e8" की तरह –

0

स्टेटिकनाम के बारे में थोड़ा सा उल्लेख करने के लिए धन्यवाद। इससे मेरी पीड़ा खत्म हो गई।

ऐसा लगता है कि साधारण फ़ील्ड के लिए, एमएमएस से जुड़े नहीं, जैसे शीर्षक, एक आलसी अद्यतन वाक्यविन्यास की अनुमति है। उदाहरण के लिए, अपने आप पर, निम्न अद्यतन को बिना किसी त्रुटि के संसाधित किया जाता है।

<Field Name="Title">Some Title</Field> 

हालांकि, नियम एमएमएस से जुड़े क्षेत्रों के लिए समान नहीं हैं।
उपरोक्त दृष्टिकोण के बाद, मैं अपने एमएमएस क्षेत्रों में स्थानांतरित हो गया। क्षेत्र के प्रकार मनमाने ढंग से मूल्यों के साथ अद्यतन किया जा सकता है अगर आप इसे यह द्वारा की पहचान दोस्ताना नाम और इनपुट एक पूर्णांक, उदा .:

<Field Name="Activity">20</Field> 

"20" बस कुछ अवधि के लिए अनुवाद है।
मैंने कई संख्याओं की कोशिश की और वे सभी एक ही शब्द के रूप में वापस आए।

वैकल्पिक रूप से, यदि मैं मूल्य को अद्यतन करने के दस्तावेज के तरीके के करीब जाता हूं, जबकि "गतिविधि" के साथ फ़ील्ड की पहचान करते समय, सेवा 0x80020005 त्रुटि देता है।

<Field Name="Activity">HTA|fe951639-7c90-41ee-9888-6ae0e6523120</Field> 

तो ऐसा मत करें।
केवल जब चंद्रमा पूरी तरह से गठबंधन होते हैं तो मुझे सफलता मिलती है। स्टेटिकनाम कुंजी है।

<Field Name="j06a8d8240f84aec987f6a28effa3ae1">HTA|fe951639-7c90-41ee-9888-6ae0e6523120</Field> 

StaticName खोजने के लिए एक और तरीका है के लिए फ़ील्ड प्रकार = प्रत्येक एमएमएस फील्ड के लिए "नोट" एक GetList अनुरोध के जवाब में देखने के लिए है। यह ऑपरेशन GetListContentType से 1 कम इनपुट लेता है। आपको केवल सूची का नाम चाहिए, न कि सामग्री टाइप करें।

रॉक पर।

संबंधित मुद्दे