Comment attribuer une valeur pour le champ de métadonnées de la date ou du numéro de type?

StackOverflow https://stackoverflow.com//questions/12702329

Question

Je suis en utilisant le lien suivant du code pour traiter les champs de métadonnées:-

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

Mais quand j'essaie d'attribuer une valeur pour le champ de métadonnées de type date, puis je reçois le code xml suivant erreur de validation:-

" Système.ServiceModel.FaultException`1 [myPorject.serviceReference.CoreServiceFault]:Erreur de validation XML.Raison:Le "uuid:myUUID:dateField' élément n'est pas valide, La valeur "10/4/2012 03:04:00 AM' est pas valide selon son type de données "http://www.w3.org/2001/XMLSchema:dateTime" - La chaîne '10/4/2012 03:04:00' n'est pas valide valeur DateTime..(Faute Détail est égal à myPorject.serviceReference.CoreServiceFault)"

Peu importe si je affecter la valeur de chaîne ou de type de données DateTime j'obtiens la même erreur, j'ai également essayé de surcharger le AddValue méthode avec un type de données Datetime mais rien n'a fonctionné jusqu'à présent.

AddValue méthode de l'extrait de code:-

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

S'il vous plaît suggérer une solution pour à la fois la Date et le Numéro de type de données.Merci d'avance

Était-ce utile?

La solution 5

Après avoir eu des problèmes de prise de vue, je résolvez enfin le problème et avec le format de date.Pour cela, je dois faire correspondre le fuseau horaire de ma machine locale avec le fuseau horaire du serveur.

et ci-dessous est le code de méthode surchargée: -

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

Autres conseils

Le message d'erreur est assez explicite sur le fait que votre format de la date est erronée: The string '10/4/2012 03:04:00 AM' is not a valid DateTime value.

Le format Tridion attend est YYYY-MM-DDThh:mm:ss, donc pas d'espace, pas de temps horaire et sans AM/PM du marqueur.

Dans officiel Tridion Api sont généralement à l'abri de devoir faire la conversion vous-même, puisqu'ils acceptent DateTime les objets et les convertir dans le format correct pour vous.Mais depuis la classe helper vous utilisez n'est pas une officielle de l'API, il prend quelques raccourcis et vous fait vous définissez la valeur d'un string.

Je l'utilise généralement datetime.ToString("u").Replace(" ", "T").Replace("Z", "") pour obtenir les dates dans le bon format.

La chaîne de date doit avoir un format comme:

  • aaaa-mm-mm-ddthh: mm: ss

Exemple:

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

En plus de cela, la manière dont vous définissez la date semble un peu complexe pour moi, étant donné que vous utilisez le contenu et les métadonnées wrapper, pourquoi pas quelque chose comme ceci:

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

Selon mon expérience C # une telle erreur est due au problème du format DateTime. Vous pouvez essayer ci-dessous le code

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

Je ne l'ai pas testé avec votre code mais j'espère que cela fonctionnera dans votre cas.

Vous manquez le séparateur 'T' entre la date et l'heure de votre format.Vous avez mentionné que la date de la sortie est dans un format que vous essayez de réinsérer, mais quelle que soit la production, vous pouvez être formaté de toute façon, et pas nécessairement la façon dont vous devez spécifier la date.

avoir une lecture proche de la spécification Datetime XMLSCHEMA ICI: http:// www.w3.org/tr/xmlschema-2/#dateTime

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top