2012-07-09 5 views
8

Sto tentando di aggiornare un campo di metadati gestiti di SharePoint (MMD) utilizzando il servizio Web Lists.UpdateListItems ma non funziona.Impossibile aggiornare il campo dei metadati gestiti di SharePoint 2010 con la chiamata al servizio web Lists.UpdateListItems

Ecco la mia richiesta SOAP

<?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> 

Questa richiesta sarà successo aggiornare il "Titolo del documento" (un campo di testo), ma il campo MMD, "anno fiscale", è rimasto invariato e non v'è alcun errore restituito dal il servizio web.

Si noti che il valore della MMD è nel formato "WssId; #TermValue | TermGuid" e il termine è già stato creato per il sito.

Per favore aiuto.

risposta

9

Capito.

Devo utilizzare un nome di campo diverso. L'etichetta per il campo è "Anno fiscale", ma il nome del campo che ha funzionato è in realtà "d3c0ddc947ab4b8c90b6a0fe2d4caf09" anziché "Fiscal_x0020_Year1". Quindi la mia richiesta SOAP sarà simile

<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> 

Per ottenere questo il nome del campo io uso il metodo di servizio Web Lists.GetListContentType per restituire le informazioni campi e potete trovare fieldType "Nota". Ecco un esempio di ciò che SharePoint restituito

<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"/> 

Trovo anche utile per utilizzare il metodo Lists.GetListContentTypes per ottenere il tipo di contenuto impiego id di metodo Lists.GetListContentType chiamata.

---- Aggiornamento - ho scoperto che non c'è bisogno di utilizzare il formato di "WssId; #TermValue | TermGuid". Puoi semplicemente usare "TermValue | TermGuid". Quindi nell'esempio sopra il valore sarebbe "FY 2006 | 7e8205da-57a1-45a3-8147-469b795ad6e8".

Questo è molto utile perché è possibile riutilizzare lo stesso valore su un sito diverso a differenza del precedente valore, in cui è possibile utilizzarlo solo in un sito. Per valori multipli è necessario delimitarne solo con un ";" invece di ";#". Ad esempio "FY 2006 | 7e8205da-57a1-45a3-8147-469b795ad6e8; FY 2007 | 823205da-57a1-45a3-8147-469b795ade13".

+0

E quando si imposta il campo - si può ommit parte Wssid totalmente. Come "FY 2006 | 7e8205da-57a1-45a3-8147-469b795ad6e8" –

0

Grazie per aver menzionato il bit su StaticName. Questo ha messo fine alla mia sofferenza.

Sembrerebbe che per i campi semplici, non collegati a MMS, come Titolo, sia consentita una sintassi di aggiornamento più lenta. Ad esempio, a parte il proprio, il seguente aggiornamento viene elaborato senza errori.

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

Tuttavia, le regole non sono le stesse per i campi collegati a MMS.
Seguendo l'approccio sopra, sono passato ai miei campi MMS. Questo tipo di campo può essere aggiornato con i valori arbitrari se si identifica che da esso è nome descrittivo e l'input un intero, ad es .:

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

Il "20" solo si traduce in qualche termine.
Ho provato molti numeri e sono tornati tutti come lo stesso termine.

In alternativa, se mi avvicino al modo documentato di aggiornamento del valore, mentre identifico ancora il campo con "Attività", il servizio restituisce un errore 0x80020005.

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

Quindi non farlo.
Solo quando le lune sono completamente allineate, trovo il successo. The StaticName è la chiave.

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

Un altro modo per trovare la StaticName è quello di cercare il tipo di campo = "Nota" per ogni campo MMS in risposta a una richiesta GetList. Questa operazione richiede 1 input in meno di GetListContentType. Hai solo bisogno del nome della lista e non di un contentTypeID.

Rock on.

Problemi correlati