2013-01-25 8 views
6

Tôi muốn tìm URI TCM của một danh mục cho các trường KeywordFieldDefinitionData loại.Cách nhận URI TCM của danh mục cho KeywordFieldDefinitionDạng loại dữ liệu?

Tôi đang sử dụng bên dưới đoạn code để đọc trường siêu dữ liệu của một thành phần: -

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

tôi có thể thấy loại và CategoryFields thuộc tính trong lớp Reference.cs (tự động tạo ra khi refence đến dịch vụ cốt lõi được đưa ra) nhưng không có thuộc tính nào được định nghĩa trong lớp Field (được định nghĩa ở trên đoạn code.google link) để truy cập các thuộc tính Category và CategoryFields. Tôi đã cố gắng xác định thuộc tính theo cách sau: -

 public System.Reflection.PropertyInfo Category 
    { 
     get { return definition.GetType().GetProperty("Category", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic); } 
    } 

Ngay cả trên không hoạt động, bất kỳ ai trong các bạn vui lòng phân tích điều này và trả lời.

Cảm ơn trước!

+0

Tôi có hiểu chính xác rằng bạn muốn nhận ID của Danh mục mà từ khóa có trong đó không (Từ khóa được đọc từ KeywordField trong một Component)? –

+0

Câu hỏi thú vị, chúng tôi có thể quan tâm đến bạn trong cam kết với [Đề xuất cụ thể theo Vùng 51 Tridion] không (http://area51.stackexchange.com/proposals/38335/tridion?referrer=gPujQMxthNCNn9xqeeO2NA2). Đăng ký bằng cùng một tài khoản SO nếu bạn có thời gian. –

Trả lời

4

Bạn cần phải đọc mỗi SchemaField định nghĩa dữ liệu và kiểm tra xem loại là KeywordFieldDefinitionData và sau đó nhận được thông tin thể loại. Vui lòng xem đoạn mã mẫu bên dưới.

SchemaFieldsData schemaFields = (SchemaFieldsData)_client.ReadSchemaFields(
       "tcmuriofschema", true, readOptions); 
foreach (ItemFieldDefinitionData schemaField in schemaFields.Fields) { 
    switch (schemaField.GetType().Name) { 
     // handle other fields.. 
     // CategoryLink Fields 
     case "KeywordFieldDefinitionData": 
       KeywordFieldDefinitionData keywordTextSchemaField = (KeywordFieldDefinitionData)schemaField; 
       string LinkedCategoryTitle = keywordTextSchemaField.Category.Title; 
       string LinkedCategoryId = keywordTextSchemaField.Category.IdRef; 
       break; 
     default: 
       break; 
    } 
} 
0

Tôi hy vọng vào mã bên dưới giải quyết vấn đề của bạn

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>; 

trong đoạn code trên bạn có thể nhận được thông tin loại từ đối tượng Cát và tất cả các thông tin từ khóa từ khóa đối tượng

+0

Tôi nghĩ câu hỏi là về Dịch vụ cốt lõi chứ không phải TOM.NET. Ngoài ra, họ muốn nhận được danh mục URI từ từ khóa. Mã này hiển thị việc nhận Danh mục bằng URI của nó –