private void InitializeDB() { this.OrganizationId = Guid.NewGuid(); this.OrganizationName = "MockupOrganization"; // Setup currencies var currencies = new List <Entity>(); foreach (var entity in metadata.Currencies) { Utility.RemoveAttribute(entity, "createdby", "modifiedby", "organizationid", "modifiedonbehalfby", "createdonbehalfby"); if (db.GetEntityOrNull(entity.ToEntityReference()) == null) { db.Add(entity); } } // Setup root business unit var rootBu = metadata.RootBusinessUnit; if (db.GetEntityOrNull(metadata.RootBusinessUnit.ToEntityReference()) == null) { rootBu["name"] = "RootBusinessUnit"; rootBu.Attributes.Remove("organizationid"); this.db.Add(rootBu, false); } this.RootBusinessUnitRef = rootBu.ToEntityReference(); // Setup admin user var admin = new Entity(LogicalNames.SystemUser) { Id = Guid.NewGuid() }; this.AdminUserRef = admin.ToEntityReference(); admin["firstname"] = ""; admin["lastname"] = "SYSTEM"; admin["businessunitid"] = RootBusinessUnitRef; this.db.Add(admin); // Setup default team for root business unit var allTeams = db.GetEntities("team"); if (!allTeams.Any(x => (!x.Contains("teamtype") || x.GetAttributeValue <OptionSetValue>("teamtype").Value == 0) && x.GetAttributeValue <EntityReference>("businessunitid").Id == RootBusinessUnitRef.Id && x.GetAttributeValue <bool>("isdefault"))) { var defaultTeam = Utility.CreateDefaultTeam(rootBu, AdminUserRef); this.db.Add(defaultTeam); // Adding admin user to root business unit default team var teamMembership = new Entity(LogicalNames.TeamMembership); teamMembership["teamid"] = defaultTeam.Id; teamMembership["systemuserid"] = admin.Id; teamMembership.Id = Guid.NewGuid(); this.db.Add(teamMembership); } }
private List <Entity> GetAliasedValuesFromLinkentity(LinkEntity linkEntity, Entity parent, Entity toAdd, IXrmDb db) { var collection = new List <Entity>(); foreach (var linkedRow in db.GetEntities(linkEntity.LinkToEntityName)) { var linkedEntity = linkedRow; if (linkedEntity.Attributes.ContainsKey(linkEntity.LinkToAttributeName) && parent.Attributes.ContainsKey(linkEntity.LinkFromAttributeName)) { var linkedAttr = Utility.ConvertToComparableObject(linkedEntity.Attributes[linkEntity.LinkToAttributeName]); var entAttr = Utility.ConvertToComparableObject(parent.Attributes[linkEntity.LinkFromAttributeName]); if (linkedAttr.Equals(entAttr)) { var aliasedEntity = GetEntityWithAliasAttributes(linkEntity.EntityAlias, toAdd, metadata.EntityMetadata.GetMetadata(toAdd.LogicalName), linkedEntity.Attributes); if (linkEntity.LinkEntities.Count > 0) { var subEntities = new List <Entity>(); foreach (var nestedLinkEntity in linkEntity.LinkEntities) { nestedLinkEntity.LinkFromEntityName = linkEntity.LinkToEntityName; var alliasedLinkValues = GetAliasedValuesFromLinkentity(nestedLinkEntity, linkedEntity, aliasedEntity, db); subEntities.AddRange(alliasedLinkValues.Where(e => Utility.MatchesCriteria(e, linkEntity.LinkCriteria))); } collection.AddRange(subEntities); } else if (Utility.MatchesCriteria(aliasedEntity, linkEntity.LinkCriteria)) { collection.Add(aliasedEntity); } } } } if (linkEntity.JoinOperator == JoinOperator.LeftOuter && collection.Count == 0) { collection.Add(toAdd); } return(collection); }
internal void AddRoleTemplatesForBusinessUnit(IXrmDb db, EntityReference businessUnit) { var allRoleTemplates = db.GetEntities("roletemplate"); foreach (var sr in SecurityRoles.Values.Where(x => x.RoleTemplateId != Guid.Empty).GroupBy(x => x.RoleTemplateId).Select(x => x.Key)) { if (!allRoleTemplates.Any(x => x.Id == sr)) { var roleTemplate = new Entity("roletemplate") { Id = sr }; db.Add(roleTemplate); } } }