Использование сервисов Tridion Core, как получить членов группы, в которых членство в группах получено из внешнего (LDAP) каталога?


2

Моя идея - получить список пользователей для конкретного проекта в публикации Tridion с помощью Core Services. Я попытался получить его от GroupMembershipData. Но, к сожалению, это не включает членство в группах, полученное из внешнего (LDAP) каталога.

Так что я пытаюсь получить идентификатор группы, используя нижеприведенный код. Но я получаю Object Reference Null error в следующей строке:

GroupData group = (GroupData)_client.Read(id, new ReadOptions());    

Я понял, что идентификатор, который я передаю, неверен. Потому что GroupData наследует TrusteeData. Поэтому я не могу назначить ребенка родительскому. Поэтому, пожалуйста, помогите мне получить идентификатор публикации членов группы и пользователей для конкретного проекта.

protected void UserProjectUserCheck_Click(object sender, EventArgs e) 
{ 
    ICoreService _client = Utility.GetCoreServiceSettings(); 
    PublicationsFilterData filterData = new PublicationsFilterData(); 
    var publicationList = _client.GetSystemWideListXml(filterData); 
    PopulateProjectSpecificUserList(publicationList); 
} 

private void PopulateProjectSpecificUserList(XElement publicationList) 
{ 
    string PublicationID = ""; 
    XmlDocument xmlDoc = new XmlDocument(); 
    string results = string.Empty; 
    IEnumerable<XElement> elementList = publicationList.Elements(); 
    foreach(XElement elem in elementList) 
    { 
     if (elem.Attribute("Title").Value.ToString().ToLower().Contains("polo") && elem.Attribute("Title").Value.ToString().Trim().StartsWith("05")) 
     { 
      PublicationID = elem.Attribute("ID").Value.ToString(); 
     } 
    } 
    ICoreService _client = Utility.GetCoreServiceSettings(); 
    PublicationData pub = (PublicationData)_client.Read(PublicationID, null); 

    AccessControlListData t = pub.AccessControlList; 

    string id = string.Empty;  
    foreach(var usrGroups in t.AccessControlEntries) 
    { 
     id = usrGroups.Trustee.IdRef; 
    }   

    GroupData group = (GroupData)_client.Read(id, new ReadOptions()); 

    var searchDn = ((DirectoryGroupMappingData)group.ClaimMappings.First()).SearchDN; 
    var directoryServiceName = ((DirectoryGroupMappingData)group.ClaimMappings.FirstOrDefault()).DirectoryServiceName; 
    var result = _client.GetListDirectoryServiceGroupMembers(directoryServiceName, searchDn); 

    TridionItemList.DocumentContent = result.ToString(); 
    TridionItemList.TransformSource = Server.MapPath(@".\ProjectSpecificUserList.xslt"); 
} 
2

принадлежность к группе LDAP не в TRIDION, так зачем пытаться получить их из TRIDION? Вы должны запросить сервер LDAP для получения этой информации.

Конечно, вы также, возможно, захотите связаться с Tridion, чтобы получить информацию, которую есть.

  0

Итак, каково ваше заключение? 22 авг. 172017-08-22 13:24:30

  0

То, что вы должны запросить сервер LDAP напрямую 22 авг. 172017-08-22 14:34:21

+1

Да, Dominic верен, TridionCoreService получит группы Tridion, а не группы LDAP. 22 авг. 172017-08-22 15:17:49

  0

Большое спасибо @Dominic Cronin и @ Chris Mills. Но моя цель - получить группы только от Tridion. Пусть видят в будущем, может быть, в web-9 есть такое будущее. Огромное спасибо. Вернусь к вам в будущем, если что-то потребуется. 23 авг. 172017-08-23 10:44:36