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

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top