我使用以下链接的代码来处理元数据字段: -
https://code.google.com/p/tridion-practice/wiki/ChangeContentOrMetadata
但是当我尝试为日期类型的元数据字段赋值时,我得到以下xml验证错误: -
” System.ServiceModel.FaultException`1 [myPorject.serviceReference.CoreServiceFault]:XML验证错误。原因:'uuid:myUUID:dateField'元素无效 - 根据其数据类型'http://www.w3.org/2001/XMLSchema,值'10 / 4/2012 03:04:00 AM'无效: dateTime' - 字符串'10 / 4/2012 03:04:00 AM'不是有效的DateTime值..(故障详细信息等于 myPorject.serviceReference.CoreServiceFault)“
无论我将值分配为字符串还是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;
}
请为Date和Number数据类型建议解决方案。提前致谢
答案 0 :(得分:6)
错误消息非常清楚您的日期格式错误:The string '10/4/2012 03:04:00 AM' is not a valid DateTime value
。
Tridion期望的格式为YYYY-MM-DDThh:mm:ss
,因此没有空格,没有时区,也没有AM / PM标记。
在官方的Tridion API中,您通常不必自己进行转换,因为它们接受DateTime
个对象并将其转换为正确的格式。但由于您使用的助手类不是官方API,因此需要一些快捷方式,并将您设置为string
。
我通常使用 datetime.ToString("u").Replace(" ", "T").Replace("Z", "")
以正确的格式获取日期。
答案 1 :(得分:5)
日期字符串的格式应为:
示例:
除此之外,您设置日期的方式对我来说似乎有点复杂,因为您使用的是内容和元数据包装器,为什么不是这样的:
string myStringDate = "2012-10-03T09:39:43";
fields["DateFieldName"].Value = myStringDate;
component.Metadata = fields.ToString();
答案 2 :(得分:2)
根据我的C#体验,此类错误是由于日期时间格式问题引起的。 你可以尝试下面的代码
DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd");
我没有使用您的代码对其进行测试,但希望它可以适用于您的情况。
答案 3 :(得分:1)
您在格式中缺少日期和时间之间的“T”分隔符。您确实提到输出的日期是您尝试重新插入的格式,但输出的内容无论如何都可以格式化,而不一定是您必须指定日期的方式。
在此处仔细阅读XMLSchema dateTime规范:http://www.w3.org/TR/xmlschema-2/#dateTime
答案 4 :(得分:0)
经过一些麻烦后我终于解决了这个问题以及日期格式。为此,我需要将本地计算机的时区与服务器的时区进行匹配。
以下是重载方法的代码: -
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");
}