Pergunta

Estou usando o código do link a seguir para processar campos de metadados:-

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

Mas quando tento atribuir valor ao campo de metadados do tipo data, recebo o seguinte erro de validação xml: -

"System.Servicemodel.FaultException`1 [Myporject.ServiceReference.coreServicefault]:Erro de validação XML.Razão:O elemento 'uuid:myUUID:dateField' é inválido - O valor '10/4/2012 03:04:00 AM' é inválido de acordo com seu tipo de dados 'http://www.w3.org/2001/XMLSchema:dateTime' - A string '10/4/2012 03:04:00 AM' não é um valor DateTime válido.(O detalhe da falha é igual a MyPorject.ServiceReference.coreServiceFault) "

Não importa se eu atribuo o valor como string ou tipo de dados DateTime, estou recebendo o mesmo erro, também tentei sobrecarregar o método AddValue com um tipo de dados Datetime, mas nada funcionou até agora.

Trecho de código do 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;
    }

Por favor, sugira uma solução para os tipos de dados Data e Número.desde já, obrigado

Foi útil?

Solução 5

Depois de algumas soluções de problemas, finalmente resolvo o problema e junto com o formato da data.Para isso preciso combinar o fuso horário da minha máquina local com o fuso horário do servidor.

E abaixo está o código do método sobrecarregado: –

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

Outras dicas

A mensagem de erro é bastante explícita sobre o fato de que o formato da data está errado: The string '10/4/2012 03:04:00 AM' is not a valid DateTime value.

O formato que Tridion espera é YYYY-MM-DDThh:mm:ss, portanto, sem espaço, sem fuso horário e sem marcador AM/PM.

Nas APIs oficiais do Tridion, você normalmente fica protegido de ter que fazer a conversão sozinho, já que elas aceitam DateTime objetos e converta-os para o formato correto para você.Mas como a classe auxiliar que você usa não é uma API oficial, são necessários alguns atalhos e faz com que você defina o valor como um string.

Eu normalmente uso datetime.ToString("u").Replace(" ", "T").Replace("Z", "") para obter as datas no formato correto.

A String de data deve ter um formato como:

  • AAAA-MM-DDThh:mm:ss

Exemplo:

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

Além disso, a forma como você está definindo a data me parece um pouco complexa, visto que você está usando o wrapper Conteúdo e Metadados, por que não algo assim:

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

De acordo com minha experiência em C#, esse erro ocorre devido a um problema de formato de data e hora.você pode tentar o código abaixo

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

Não testei com o seu código, mas espero que funcione no seu caso.

Está faltando o separador 'T' entre a data e a hora no seu formato.Você mencionou que a data de saída está em um formato que você está tentando reinserir, mas o que quer que seja a saída pode ser formatado de qualquer maneira, e não necessariamente da maneira que você deve especificar a data.

Leia atentamente a especificação XMLSchema dateTime aqui: http://www.w3.org/TR/xmlschema-2/#dateTime

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top