private void ValidateInformation(string formatString, string entityLogicalName, IOrganizationService service) { var request = new RetrieveEntityRequest { LogicalName = entityLogicalName, EntityFilters = Microsoft.Xrm.Sdk.Metadata.EntityFilters.Attributes }; var response = (RetrieveEntityResponse)service.Execute(request); var tokens = FormatStringHelper.TokeniseString(response.EntityMetadata.Attributes, formatString); var unknownFields = tokens.Where(t => t.Status == AttributeTokenStatus.UnknownAttribute).Select(t => t.Name); if (unknownFields.Any()) { throw new InvalidOperationException(string.Format("Fields [{0}] do not exist on entity [{1}].", string.Join(", ", unknownFields), entityLogicalName)); } var unsupportedFields = tokens.Where(t => t.Status == AttributeTokenStatus.UnsupportedType); if (unsupportedFields.Any()) { throw new InvalidOperationException(string.Format("The following fields have unsupported types: [{0}].", string.Join(", ", unsupportedFields.Select(t => string.Format("{0}: {1}", t.Name, t.AttributeMetadata.AttributeType.ToString()))))); } }
private void ProcessConfiguration(IOrganizationService service, Entity changeEntity, Entity preChangeEntity, Entity configuration, ITracingService tracer) { var formatString = configuration.GetAttributeValue <string>(CrmData.FieldConcatenationConfiguration_FormatString); var fieldName = configuration.GetAttributeValue <string>(CrmData.FieldConcatenationConfiguration_FieldName); var request = new RetrieveEntityRequest { LogicalName = changeEntity.LogicalName, EntityFilters = Microsoft.Xrm.Sdk.Metadata.EntityFilters.Attributes }; var response = (RetrieveEntityResponse)service.Execute(request); var tokens = FormatStringHelper.TokeniseString(response.EntityMetadata.Attributes, formatString); // Check that something we're interested in changed var changedAttributes = changeEntity.Attributes.Select(a => a.Key); if (tokens.Any(t => changedAttributes.Contains(t.Name))) { var result = FormatStringHelper.FormatString(service, formatString, tokens, changeEntity, preChangeEntity); changeEntity.Attributes[fieldName] = result; } }