1

我想获取所有字段以及元数据模式的元数据字段的类型/数据类型。

我已经编写了下面的示例代码来实现该功能,并且我能够获取名称、描述等,但找不到任何具有类型/数据类型的属性。如果你们中的任何人有任何想法,请建议...

var client = new SessionAwareCoreService2010Client();

client.ClientCredentials.Windows.ClientCredential.UserName = "myUserName";
client.ClientCredentials.Windows.ClientCredential.Password = "myPassword";
client.Open();

if (client.State == System.ServiceModel.CommunicationState.Opened)
{
    var schemaUri = "tcm:1-47-8";
    var fields= client.ReadSchemaFields(schemaUri, true, new ReadOptions());
    var fieldName =   fields.MetadataFields[0].Name;
}
4

2 回答 2

6

要知道字段的类型,您只需检查该字段的 .NET 类型。我通常使用“is”检查,但如果需要,您也可以调用 GetType。

例如:

var client = new SessionAwareCoreService2010Client();

client.ClientCredentials.Windows.ClientCredential.UserName = "myUserName";
client.ClientCredentials.Windows.ClientCredential.Password = "myPassword";
client.Open();

if (client.State == System.ServiceModel.CommunicationState.Opened)
{
    var schemaUri = "tcm:1-47-8";
    var fields= client.ReadSchemaFields(schemaUri, true, new ReadOptions());
    foreach (var field in fields.MetadataFields)
    {
        if (field is SingleLineTextFieldDefinitionData)
        {
            // Do something specifically for single-line text fields
        }
    }
}
于 2012-08-24T13:22:38.180 回答
2

ReadSchemaFields方法仅公开字段的定义。因此,它本质上是您在模式中定义字段时输入的属性的包装器。

内容和元数据分别由ComponentData.Content和公开ComponentData.Metadata。但这些都是作为 XML 字符串公开的,因此您必须自己解析它们。

如果您(可以理解)不这么认为,请查看此帮助程序类:http ://code.google.com/p/tridion-practice/wiki/ChangeContentOrMetadata

您可能还想阅读我对这个问题的回答:Updating Components using the Core Service in SDL Tridion 2011

于 2012-08-24T12:19:20.530 回答