My Idea is to get the list of users for particular project in Tridion Publication using Core Services. I tried to get it from GroupMembershipData
. But unfortunatly it is not including Group memberships obtained from an external (LDAP) directory.
So I am trying to get the Group Id using below code. But I am getting Object Reference Null error in the following line :
GroupData group = (GroupData)_client.Read(id, new ReadOptions());
I understood the ID which I am passing is not correct. Because GroupData
is inheriting TrusteeData
. So I can't assign the child to Parent. So please help me to get the Publication ID of Group Members and Users for specific project.
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");
}