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())))));
            }
        }
Пример #2
0
        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;
            }
        }