Как присвоить значение полю метаданных типа даты или числа?
-
12-12-2019 - |
Вопрос
Я использую код следующей ссылки для обработки полей метаданных: -
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