如何为日期或数字类型的元数据字段赋值?
-
12-12-2019 - |
题
我正在使用以下链接的代码来处理元数据字段:-
https://code.google.com/p/tridion-practice/wiki/ChangeContentOrMetadata
但是当我尝试为日期类型的元数据字段赋值时,我会收到以下xml验证错误:-
" 系统。ServiceModel。FaultException'1 [myPorject.服务会议。CoreServiceFault]:XML验证错误。理由:'Uuid:myUUID:dateField'元素无效-值'10/4/2012 03:04:00AM'根据其数据类型'无效http://www.w3.org/2001/XMLSchema:dateTime'-字符串'10/4/2012 03:04:00AM'不是有效的日期时间值。.(故障细节等于 我的目标。服务会议。CoreServiceFault)"
无论我将值分配为string还是DateTime数据类型,我都会收到相同的错误,我也尝试使用Datetime数据类型重载AddValue方法,但到目前为止没有任何工作。
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标记。
在官方的Tridionapi中,你通常不需要自己做转换,因为它们接受 DateTime
对象并将其转换为适合您的正确格式。但是由于您使用的helper类不是官方API,因此它需要一些快捷方式,并使您将值设置为 string
.
我通常使用 datetime.ToString("u").Replace(" ", "T").Replace("Z", "")
以正确的格式获取日期。
日期字符串应具有如下格式:
- yyyy-mm-ddthh:mm:ss
示例:
- “2012-10-03T09:39:43”
除此之外,您设置的方式日期对我来说似乎有点复杂,因为您正在使用内容和元数据包装器,为什么不这样做:
string myStringDate = "2012-10-03T09:39:43";
fields["DateFieldName"].Value = myStringDate;
component.Metadata = fields.ToString();
. 根据我的c#体验,此类错误由于日期时间格式问题。 您可以尝试以下代码
DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd");
.
我没有用你的代码测试它,但希望它将在您的情况下工作。
您在格式的日期和时间之间缺少“T”分隔符。您确实提到了输出的日期以您尝试重新插入的格式,但无论如何都可以格式化任何输出,而不一定是您必须指定日期的方式。
在此处读到XMLSchema DateTime规范的读取: http://www。w3.org/tr/xmlschema-2/#datetime