Pregunta

Estoy usando el código del siguiente enlace para procesar campos de metadatos: -

https://code.google.com/p/tridion-practice/wiki/ChangeContentOrMetadata

Pero cuando intento asignar valor al campo de metadatos del tipo de fecha, aparece el siguiente error de validación xml: -

"System.ServiceModel.faultException`1 [myporeject.serviceReference.coreservicefault]:Error de validación XML.Razón:El elemento 'uuid:myUUID:dateField' no es válido - El valor '10/4/2012 03:04:00 AM' no es válido según su tipo de datos 'http://www.w3.org/2001/XMLSchema:dateTime' - La cadena '4/10/2012 03:04:00 a. m.' no es un valor de fecha y hora válido.(El detalle de la falla es igual a myporject.serviceReference.coreservicefault) "

No importa si asigno el valor como cadena o como tipo de datos DateTime, recibo el mismo error. También intenté sobrecargar el método AddValue con un tipo de datos Datetime pero nada ha funcionado hasta ahora.

Fragmento de código del método AddValue: -

     public void AddValue(string value1)
    {
        string value = string.IsNullOrEmpty(value1) ? null : value1; ;
        XmlElement newElement = fields.AddFieldElement(definition);
        if (value != null) newElement.InnerText = value;
    }

Sugiera una solución para el tipo de datos Fecha y Número.gracias de antemano

¿Fue útil?

Solución 5

Después de algunos problemas para mostrar, finalmente resolví el problema y junto con el formato de fecha.Para esto necesito coincidir con la zona horaria de mi máquina local con la zona horaria del servidor.

y abajo es el código de método sobrecargado: -

      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");
    }

Otros consejos

El mensaje de error es bastante explícito sobre el hecho de que el formato de fecha es incorrecto: The string '10/4/2012 03:04:00 AM' is not a valid DateTime value.

El formato que Tridion espera es YYYY-MM-DDThh:mm:ss, por lo que no hay espacio, ni zona horaria ni marcador AM/PM.

En las API oficiales de Tridion normalmente no tienes que realizar la conversión tú mismo, ya que aceptan DateTime objetos y convertirlos al formato correcto para usted.Pero dado que la clase auxiliar que utiliza no es una API oficial, requiere algunos atajos y le obliga a establecer el valor como string.

normalmente uso datetime.ToString("u").Replace(" ", "T").Replace("Z", "") para obtener las fechas en el formato correcto.

La cadena de fecha debe tener un formato como:

  • yyyy-mm-ddthh: mm: ss

Ejemplo:

  • "2012-10-03T09: 39: 43"

Además de eso, la forma en que está configurando la fecha parece un poco complejo para mí, dado que está utilizando el contenido y el envoltorio de metadatos, ¿por qué no algo así:

string myStringDate = "2012-10-03T09:39:43";
fields["DateFieldName"].Value = myStringDate;
component.Metadata = fields.ToString();

Según mi C # Experiencia, dicho error viene debido al problema de formato DateTime. Puede intentarlo por debajo del código

DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd");

No lo he probado con su código, pero espero que funcione en su caso.

Le falta el separador 'T' entre la fecha y la hora en su formato.Mencionó que la fecha de salida está en un formato que está intentando volver a insertar, pero lo que sea que se envíe puede formatearse de todos modos, y no necesariamente la forma en que debe especificar la fecha.

Tener una lectura cercana a la especificación de DateTime XMLSchema aquí: http:// www.w3.org/tr/xmlschema-2/#DateTime

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top