Come assegnare il valore al campo dei metadati del tipo o del tipo di numero?
-
12-12-2019 - |
Domanda
Sto usando il seguente codice di collegamento per elaborare i campi Metadati: -
https://code.google.com/p/tridion-practice/ Wiki / ChangeContentORMetadata
Ma quando provo ad assegnare il valore al campo dei metadati del tipo di data, ottengo il seguente errore di convalida XML: -
" Sistema.servicemodel.faultException`1. [myporject.servicereference.coreserviceFault]: errore di convalida XML. Motivo: l'elemento 'uuid: myuuid: datefield' è invalido - il valore '10 / 4/2012 03:04:00 AM 'non è valido in base al suo tipo di dati "http://www.w3.org/2001/xmlschema: DateTime '- La stringa '10 / 4/2012 03:04:00 AM' non è un valore datetime valido .. (Dettaglio di guasto è uguale a myporject.servicereference.coreserviceFault) "
Non importa se assegnamento del valore come tipo di dati di stringa o dati che sto ottenendo lo stesso errore, ho anche provato a sovraccaricare il metodo AddValue con un tipo di dati di DateTime ma nulla ha funzionato finora.
Snippet del codice del metodo AddValue: -
public void AddValue(string value1)
{
string value = string.IsNullOrEmpty(value1) ? null : value1; ;
XmlElement newElement = fields.AddFieldElement(definition);
if (value != null) newElement.InnerText = value;
}
.
Si prega di suggerire soluzione per la data e il tipo di dati del numero. Grazie in anticipo
Soluzione 5
Dopo alcuni problemi di ripresa, finalmente risolvo il problema e insieme al formato di data.Per questo ho bisogno di abbinare il fuso orario della mia macchina locale con il fuso orario del server.
e sotto è il codice del metodo sovraccaricato: -
public void AddValue(DateTime value1)
{
DateTime value = value1 == null ? DateTime.MinValue : value1;
XmlElement newElement = fields.AddFieldElement(definition);
if (value != null) newElement.InnerText = value.ToString("yyyy-MM-ddThh:mm:ss");
}
. Altri suggerimenti
Il messaggio di errore è abbastanza esplicito sul fatto che il formato della data è errato: The string '10/4/2012 03:04:00 AM' is not a valid DateTime value
.
Il formato Tridion si aspetta è YYYY-MM-DDThh:mm:ss
, quindi nessun spazio, nessuna zona temporale e nessun marker AM / PM.
In Tridion API ufficiali è tipicamente schermato dal dover fare la conversione da solo, poiché accettano oggetti DateTime
e convertilo nel formato corretto per te.Ma dal momento che la classe Helper che usi non è un'API ufficiale, ci vogliono alcune scorciatoie e ti consente di impostare il valore come string
.
Io uso in genere datetime.ToString("u").Replace(" ", "T").Replace("Z", "")
per ottenere le date nel formato destro.
La stringa della data dovrebbe avere un formato come:
- .
- yyyy-mm-ddthh: mm: ss
Esempio:
- .
- "2012-10-03t09: 39: 43"
Oltre a ciò, il modo in cui stai impostando la data sembra un po 'complesso per me, dato che stai usando il contenuto e il wrapper dei metadati, perché non qualcosa del genere:
string myStringDate = "2012-10-03T09:39:43";
fields["DateFieldName"].Value = myStringDate;
component.Metadata = fields.ToString();
. Secondo la mia esperienza C # tale errore arriva a causa del problema del formato DateTime. Puoi provare sotto il codice
DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd");
.
Non l'ho mai testato con il tuo codice ma spero che funzionerà nel tuo caso.
Ti manca il separatore "T" tra la data e l'ora nel tuo formato.Hai detto che la data che viene emessa è in un formato che stai cercando di reinserire, ma qualunque sia la produzione può essere formattata in ogni modo, e non necessariamente il modo in cui devi specificare la data.
Avere una chiusura letta alla specifica XMLSchema DateTime qui: http:// www.w3.org/tr/xmlschema-2/#datetime