如何为日期或数字类型的元数据字段赋值?

SDL*_*per 1 core-services tridion tridion-2011

我使用以下链接的代码来处理元数据字段: -

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

但是当我尝试为日期类型的元数据字段赋值时,我得到以下xml验证错误: -

"System.ServiceModel.FaultException`1 [myPorject.serviceReference.CoreServiceFault]:XML验证错误.原因:'uuid:myUUID:dateField'元素无效 - 值'10/4/2012 03:04:00 AM'是根据其数据类型'http://www.w3.org/2001/XMLSchema: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;
    }
Run Code Online (Sandbox Code Playgroud)

请为Date和Number数据类型建议解决方案.提前致谢

Fra*_*len 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,因此需要一些快捷方式,并将您设置为a string.

我通常用来datetime.ToString("u").Replace(" ", "T").Replace("Z", "")以正确的格式获取日期.

  • 则DateTime.ToString( "YYYY-MM-DDTHH:MM:SS") (2认同)

Pun*_*ero 5

日期String应具有以下格式:

  • 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();
Run Code Online (Sandbox Code Playgroud)

  • 预览以不同格式显示日期的事实来自于模板代码以该格式输出的事实.在内部,它以"T"而不是空格存储,并以24小时格式而不是"AM/PM"存储.试试Puntero的代码,你会发现他是对的. (2认同)