Как присвоить значение полю метаданных типа даты или числа?

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

Вопрос

Я использую код следующей ссылки для обработки полей метаданных: -

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

Но когда я пытаюсь присвоить значение полю метаданных типа даты, я получаю следующую ошибку проверки XML: -

"System.ServiceModel.faultexception`1 [myporject.servicereference.coreservicefault]:Ошибка проверки XML.Причина:Элемент 'uuid:myUUID:dateField' недействителен. Значение '04.10.2012 03:04:00 AM' недопустимо в соответствии с его типом данных 'http://www.w3.org/2001/XMLSchema:dateTime'. - Строка «4.10.2012 03:04:00» не является допустимым значением DateTime.(Детали неисправности равны myporject.servicereference.coreservicefault) "

Независимо от того, назначаю ли я значение как строку или тип данных DateTime, я получаю одну и ту же ошибку. Я также пытался перегрузить метод AddValue типом данных Datetime, но пока ничего не помогло.

Фрагмент кода метода AddValue: -

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

Пожалуйста, предложите решение для типа данных «Дата» и «Числовой».заранее спасибо

Это было полезно?

Решение 5

После некоторых проблем съемки я наконец разрешаю проблему и вместе с форматом.Для этого мне нужно сопоставить часовой пояс моей локальной машины с часовым поясом сервера.

А ниже код перегруженного метода: -

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

Другие советы

В сообщении об ошибке совершенно ясно говорится о том, что у вас неправильный формат даты: The string '10/4/2012 03:04:00 AM' is not a valid DateTime value.

Ожидаемый формат Tridion: YYYY-MM-DDThh:mm:ss, поэтому нет пробелов, часового пояса и маркера AM/PM.

В официальных API Tridion вы обычно защищены от необходимости выполнять преобразование самостоятельно, поскольку они принимают DateTime объекты и преобразовать их в нужный вам формат.Но поскольку используемый вами вспомогательный класс не является официальным API, он требует нескольких сокращений и заставляет вас устанавливать значение как string.

Я обычно использую datetime.ToString("u").Replace(" ", "T").Replace("Z", "") чтобы получить даты в правильном формате.

Строка даты должна иметь такой формат:

  • ГГГГ-ММ-ДДТчч:мм:сс

Пример:

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

В дополнение к этому способ установки даты кажется мне немного сложным, учитывая, что вы используете оболочку контента и метаданных, почему бы не что-то вроде этого:

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

Согласно моему опыту C #, такая ошибка возникает из-за выпуска формата DateTime. Вы можете попробовать ниже код

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

Я не проверил его с вашим кодом, но надеюсь, что он будет работать в вашем случае.

Вы не пропустите сепаратор «T» между датой и временем в вашем формате.Вы упомянули, что выходная дата, которая находится в формате, который вы пытаетесь перенести, но все, что вывод может быть отформатирован в любом случае, и не обязательно, как вы должны указать дату.

есть близкий читать в спецификацию Xmlschema DateTime здесь: http:// www.w3.org/tr/xmlschema-2/#dateTime

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top