corbin_mccumber_donaldson_com
5 months agoIdeator I
Batch Delete Identity Memberships
Hello, We have used the batchloader utility to create new memberships in Innovator. It appears that removals are a bit more difficult due to safeguards in place for the system. What is an easy path ...
- 5 months ago
Hi Corbin,
I've recently had a task to synchronize identitiy assignments between two environments. Unfortunately I haven't found the easier way than to write a simple script (basically it was a .net console app). Here is the classes I've written.
using Aras.IOM; namespace PLM_Utilities.Identities { public class Identity { public string Id { get; private set; } public string KeyedName { get; private set; } public List<Member> Members { get; private set; } = new List<Member>(); // Constructor that builds Identity object from AML item public Identity(Item identityItem, Innovator inn) { Id = identityItem.getID(); KeyedName = identityItem.getProperty("keyed_name"); LoadMembers(identityItem); } private void LoadMembers(Item identityItem) { var members = identityItem.getRelationships(); for (int j = 0; j < members.getItemCount(); j++) { var memRelItem = members.getItemByIndex(j); var memberItem = memRelItem.getRelatedItem(); var member = new Member { RelationID = memRelItem.getID(), Id = memberItem.getID(), KeyedName = memberItem.getProperty("keyed_name") }; Members.Add(member); } } public bool SyncMemberWithOtherIdentity(Innovator inn, Identity identity) { foreach (var member in Members) { RemoveMember(inn, member.RelationID); } foreach (var member in identity.Members) { AddMember(inn, Id, member.KeyedName); } return true; } private void RemoveMember(Innovator inn, string memberId) { var aml = $@"<AML><Item type='Member' id='{memberId}' action='delete'/></AML>"; inn.applyAML(aml); } private void AddMember(Innovator inn, string identityId, string memberName) { Console.WriteLine(memberName); var aml = $@"<AML><Item type='Member' action='add'> <source_id>{identityId}</source_id> <related_id> <Item type='Identity' action='get'> <keyed_name>{System.Security.SecurityElement.Escape(memberName)}</keyed_name> </Item> </related_id> </Item></AML>"; inn.applyAML(aml); } } public class Member { public string Id { get; set; } public string RelationID { get; set; } public string KeyedName { get; set; } } }Hopefully it will help you to get the idea
Best regards, Maksym Archybasov