2013-01-10 3 views
3

전달 된 항목 개체가 Tridion에서 결제되는지 여부를 확인하는 작은 함수를 작성하려고합니다. 그렇다면 "true"를 반환하고 또한 Tridion 2011 핵심 서비스를 사용하여 항목을 체크 아웃 한 사용자의 세부 정보를 얻고 싶습니다.tridion coreservices를 사용하여 체크 아웃 한 사용자 상세 정보뿐만 아니라 현재 구성 요소가 체크 아웃 상태인지 확인하는 방법

나는 우리가을 찾을 수 있지만 식별 가능한 개체 만 반환한다는 것을 알고 있습니다. CoreServiceClientTryCheckoutCheckout이 있습니다.

답변

11

항목의 LockType을 확인해야합니다. 이 일을 고려하십시오

SessionAwareCoreService2010Client client = new SessionAwareCoreService2010Client(); 
ComponentData data = (ComponentData)client.Read("tcm:300-85609", new ReadOptions()); 
FullVersionInfo info = (FullVersionInfo)data.VersionInfo; 

전체 버전 정보에는 필요한 모든 정보 (예 : CheckOutUser 및 LockType)가 포함되어 있습니다. 집합 LockType은 Tridion.ContentManager.Data.ContentManagement.LockType에 의해 정의 된 열거이며, 플래그 다음과 같은 설정이 포함

  • 없음을 - 항목이 잠겨 있지 않습니다.
  • CheckedOut - 항목이 체크 아웃되었습니다. 이는 임시 (편집) 잠금, 영구 잠금 (사용자가 수행 한 명시 적 체크 아웃) 또는 워크 플로우 잠금 중 하나를 의미 할 수 있습니다.
  • 영구 - 항목이 영구적으로 체크 아웃되었거나, 명시 적 체크 아웃 조치를 사용 중입니다.
  • NewItem - 항목이 아직 만들어지지 않았지만 아직 체크인되지 않은 새 항목입니다.
  • InWorkflow - 항목이 워크 플로우에 있습니다.
+0

@ 크리스 ... 감사하는 집합 LockType와 내가 모두 세부 사항 –

+0

대답은 집합 LockType 값은 실제로 비트 값이며, 또한 플래그를'가질 수 –

0

다음은 사용자 세부 정보가 포함 된 ItemCheckedout의 세부 정보를 가져 오는 샘플 코드입니다.

public static Dictionary<bool,string> ItemCheckedOutDetails(string ItemUri, CoreServiceClient client, ReadOptions readOpt, ItemType itemType) 
{ 
    Dictionary<bool, string> itemDetails = null; 
    FullVersionInfo itemInfo = null; 
    if (itemType == ItemType.Component) 
    { 
     // reading the component data 
     var itemData = (ComponentData)client.Read(ItemUri, readOpt); 
     itemInfo = (FullVersionInfo)itemData.VersionInfo; 
    } 
    else if (itemType == ItemType.Page) 
    { 
     // reading the page data 
     var itemData = (PageData)client.Read(ItemUri, readOpt); 
     itemInfo = (FullVersionInfo)itemData.VersionInfo; 
    } 
    else if (itemType == ItemType.StructureGroup) 
    { 
     // reading the structuregroup data 
     var itemData = (StructureGroupData)client.Read(ItemUri, readOpt); 
     itemInfo = (FullVersionInfo)itemData.VersionInfo; 
    } 
    else if (itemType == ItemType.Publication) 
    { 
     // reading the Publication data 
     var itemData = (PublicationData)client.Read(ItemUri, readOpt); 
     itemInfo = (FullVersionInfo)itemData.VersionInfo; 
    } 
    else if (itemType == ItemType.ComponentTemplate) 
    { 
     // reading the component template data 
     var itemData = (ComponentTemplateData)client.Read(ItemUri, readOpt); 
     itemInfo = (FullVersionInfo)itemData.VersionInfo; 
    } 
    else if (itemType == ItemType.PageTemplate) 
    { 
     // reading the Page template data 
     var itemData = (PageTemplateData)client.Read(ItemUri, readOpt); 
     itemInfo = (FullVersionInfo)itemData.VersionInfo; 
    } 
    else if (itemType == ItemType.MultimediaType) 
    { 
     // reading the Multimedia Type data 
     var itemData = (MultimediaTypeData)client.Read(ItemUri, readOpt); 
     itemInfo = (FullVersionInfo)itemData.VersionInfo; 
    } 

    if (itemInfo != null) 
    { 
     if (itemInfo.LockType.Value == LockType.CheckedOut) 
     { 
      itemDetails.Add(true, itemInfo.CheckOutUser.Title); 
     } 
    } 
    return itemDetails; 
} 
+0

이상으로 업데이트 된 사용자 정보뿐만 아니라 체크 아웃 원하는대로 돌아갑니다 집합 LockType .Permanent'는'LockType.Checkout' 옆에 설정됩니다. 후자의 if 문은 다음과 같아야합니다. 'if ((itemInfo.LockType.Value & LockType.CheckedOut) == LockType.CheckedOut) { itemDetails.Add (true, itemInfo.CheckOutUser.Title); } ' –

+0

LockType.CheckedOut이 LockType.Reserved로 대체 된 것으로 보입니다. 항목이 LockType.CheckOut으로 설정되어 있어도 항목이 LockType.Reserved 인 경우 CheckOutUser는 비어 있습니다. –

+0

이것은 Manoj의 코드에서 다음과 같아야한다는 것을 의미합니다 :'if (((objVersion.LockType.Value & LockType.CheckedOut) == LockType.CheckedOut) && ((objVersion.LockType.Value & LockType.Reserved) == 0))' –