Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tridion 如何获取关键字字段定义数据类型字段类别的TCM URI?_Tridion_Tridion Core Services - Fatal编程技术网

Tridion 如何获取关键字字段定义数据类型字段类别的TCM URI?

Tridion 如何获取关键字字段定义数据类型字段类别的TCM URI?,tridion,tridion-core-services,Tridion,Tridion Core Services,我想获取关键字字段定义数据类型字段的类别的TCM URI 我使用以下链接的代码读取组件的元数据字段:- 我可以在Reference.cs类中看到Category和CategoryFields属性(在提供对核心服务的引用时自动生成),但在Field类中没有定义属性(在上面的code.google链接中定义)来访问Category和CategoryFields属性。我尝试用以下方式定义属性:- public System.Reflection.PropertyInfo Category

我想获取关键字字段定义数据类型字段的类别的TCM URI

我使用以下链接的代码读取组件的元数据字段:-

我可以在Reference.cs类中看到Category和CategoryFields属性(在提供对核心服务的引用时自动生成),但在Field类中没有定义属性(在上面的code.google链接中定义)来访问Category和CategoryFields属性。我尝试用以下方式定义属性:-

     public System.Reflection.PropertyInfo Category
    {
        get { return definition.GetType().GetProperty("Category", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic); }
    }
即使以上都不起作用,请大家分析并回复


提前谢谢

我希望下面的代码解决了您的问题

 Publication publication = GetPublication();

            TcmUri uri = new TcmUri(int.Parse(_itemId), ItemType.Category, publication.Id.ItemId);
            _session = engine.GetSession();
            Category cat = new Category(uri, _session);

            Log.Debug("the uri is " + uri);
            Log.Debug("the cat is " + cat);

            Filter filter = new Filter();
            //filter.Conditions["IsRoot"] = true; // This works with Tridion 2011 only!

            List<Keyword> keys = cat.GetKeywords(filter) as List<Keyword>;
Publication Publication=GetPublication();
TcmUri uri=newtcmuri(int.Parse(_itemId),ItemType.Category,publication.Id.itemId);
_session=engine.GetSession();
类别cat=新类别(uri,会话);
Debug(“uri是”+uri);
Log.Debug(“cat为”+cat);
过滤器=新过滤器();
//filter.Conditions[“IsRoot”]=true;//这只适用于Tridion 2011!
列表键=cat.GetKeywords(过滤器)作为列表;

在上面的代码中,您可以从Cat对象获取类别信息,从keys对象获取所有关键字信息

您需要读取每个SchemaField定义数据,并检查类型是否为
KeywordFieldDefinitionData
,然后获取类别信息。请参阅下面的示例代码段

SchemaFieldData schemaFields=(SchemaFieldData)\u client.ReadSchemaFields(
“tcmuriofschema”,正确,readOptions);
foreach(schemaFields.Fields中的ItemFieldDefinitionData schemaField){
开关(schemaField.GetType().Name){
//处理其他领域。。
//类别链接字段
案例“关键字字段定义数据”:
关键字字段定义数据关键字文本schemaField=(关键字字段定义数据)schemaField;
string LinkedCategoryTitle=关键字TextSchemaField.Category.Title;
字符串LinkedCategoryId=keywordTextSchemaField.Category.IdRef;
打破
违约:
打破
}
}

我是否正确理解您想要获取关键字所在类别的ID(从组件中的关键字字段中读取该关键字)?有趣的问题,您是否有兴趣提交。如果您有时间,请使用相同的SO帐户注册。我认为问题是关于核心服务,而不是TOM.NET。他们还希望从关键字中获取类别URI。此代码显示如何使用其URI获取类别