/// <summary> /// Creates an artifact for a given rule, ensuring the available attributes are populated on the artifact /// </summary> /// <param name="rule"></param> public void CreateArtifact(mcs_artifactrule rule) { var newArtifact = new mcs_artifact() { mcs_name = rule.mcs_name, mcs_ArtifactRuleId = rule.ToEntityReference(), [ArtifactLookupName] = _entityTarget.ToEntityReference(), mcs_ArtifactType = rule.mcs_ArtifactType, mcs_CommentsInstructions = rule.mcs_CommentsInstructions, mcs_ReviewStatus = new OptionSetValue(100000002) // Pending Review }; // add portal Account, Contact, Incident lookups to Artifact if (AccountId != Guid.Empty) { newArtifact.mcs_AccountId = new EntityReference("account", AccountId); } if (ContactId != Guid.Empty) { newArtifact.mcs_Contactid = new EntityReference("contact", ContactId); } if (IncidentId != Guid.Empty) { newArtifact.mcs_CaseId = new EntityReference("incident", IncidentId); } // Set Association field based on Rule Specifier Lookup and or Specifier newArtifact.mcs_Association = GetArtifactAssociationByRule(rule); newArtifact.EntityState = EntityState.Created; _orgService.Create(newArtifact); }
/// <summary> /// Conditionally checks specifier and specifier lookup fields to determine the association value for a given artifact rule and entity target /// </summary> /// <param name="rule"></param> /// <returns></returns> public string GetArtifactAssociationByRule(mcs_artifactrule rule) { string association = null; if (rule.mcs_SpecifierLookup == null && rule.mcs_Specifier != null) { association = (rule.mcs_Specifier.StartsWith("\"") && rule.mcs_Specifier.EndsWith("\"")) ? rule.mcs_Specifier.Replace("\"", "") : (string)_entityTarget[rule.mcs_Specifier]; } else if (rule.mcs_SpecifierLookup != null && _entityTarget.Contains(rule.mcs_SpecifierLookup)) { // if lookup specified, retrieve string field for Association var lookup = (EntityReference)_entityTarget[rule.mcs_SpecifierLookup]; var specifierEntity = _orgService.Retrieve(lookup.LogicalName, lookup.Id, new ColumnSet(new string[] { rule.mcs_Specifier })); association = (string)specifierEntity[rule.mcs_Specifier]; } return(association); }