예제 #1
0
        private void AddConnectionFieldsAutocomplete()
        {
            //standard online regional endpoints
            var onlineDiscoveryServices = new[]
            {
                new DiscoveryAutocomplete("North America", "https://disco.crm.dynamics.com/XRMServices/2011/Discovery.svc"),
                new DiscoveryAutocomplete("North America 2", "https://disco.crm9.dynamics.com/XRMServices/2011/Discovery.svc"),
                new DiscoveryAutocomplete("EMEA", "https://disco.crm4.dynamics.com/XRMServices/2011/Discovery.svc"),
                new DiscoveryAutocomplete("Asia Pacific Area", "https://disco.crm5.dynamics.com/XRMServices/2011/Discovery.svc"),
                new DiscoveryAutocomplete("Oceania", "https://disco.crm6.dynamics.com/XRMServices/2011/Discovery.svc"),
                new DiscoveryAutocomplete("Japan", "https://disco.crm7.dynamics.com/XRMServices/2011/Discovery.svc"),
                new DiscoveryAutocomplete("South America", "https://disco.crm2.dynamics.com/XRMServices/2011/Discovery.svc"),
                new DiscoveryAutocomplete("India", "https://disco.crm8.dynamics.com/XRMServices/2011/Discovery.svc"),
                new DiscoveryAutocomplete("Canada", "https://disco.crm3.dynamics.com/XRMServices/2011/Discovery.svc"),
                new DiscoveryAutocomplete("United Kingdom", "https://disco.crm11.dynamics.com/XRMServices/2011/Discovery.svc"),
            };

            this.AddAutocompleteFunction(new AutocompleteFunction((recordForm) =>
            {
                return(onlineDiscoveryServices);
            }, typeof(DiscoveryAutocomplete), nameof(DiscoveryAutocomplete.Value), new[] { new GridFieldMetadata(nameof(DiscoveryAutocomplete.Name), 120), new GridFieldMetadata(nameof(DiscoveryAutocomplete.Value), 450) }, sortField: nameof(DiscoveryAutocomplete.Name), displayInGrid: false), typeof(XrmRecordConfiguration), nameof(XrmRecordConfiguration.DiscoveryServiceAddress));

            //get the organisations based on details entered
            this.AddAutocompleteFunction(new AutocompleteFunction((recordForm) =>
            {
                var objectRecord = recordForm.GetRecord() as ObjectRecord;
                if (objectRecord == null)
                {
                    return(null);
                }
                var thisConnectionEntered = objectRecord.Instance as XrmRecordConfiguration;
                if (thisConnectionEntered == null)
                {
                    return(null);
                }
                var xrmRecordConfiguration = new XrmRecordConfigurationInterfaceMapper().Map(thisConnectionEntered);
                var xrmConfiguration       = new XrmConfigurationMapper().Map(xrmRecordConfiguration);
                var xrmConnection          = new Xrm.XrmConnection(xrmConfiguration);
                return(xrmConnection
                       .GetActiveOrganisations());;
            }, typeof(Xrm.Organisation), nameof(Xrm.Organisation.UniqueName), new[] { new GridFieldMetadata(nameof(Xrm.Organisation.UniqueName), 100), new GridFieldMetadata(nameof(Xrm.Organisation.FriendlyName), 400) }, sortField: nameof(Xrm.Organisation.FriendlyName), displayInGrid: false, autosearch: false), typeof(XrmRecordConfiguration), nameof(XrmRecordConfiguration.OrganizationUniqueName));
        }
        private void AddConnectionFieldsAutocomplete()
        {
            //existing values for these
            var propertiesForAutocompleteExistingValues = new[]
            {
                new KeyValuePair <string, double>(nameof(SavedXrmRecordConfiguration.Domain), 150),
                new KeyValuePair <string, double>(nameof(SavedXrmRecordConfiguration.Username), 400),
            };

            foreach (var prop in propertiesForAutocompleteExistingValues)
            {
                Func <RecordEntryViewModelBase, IEnumerable <AutocompleteOption> > getExistingValues = (recordForm) =>
                {
                    var parentForm = recordForm.ParentForm;
                    if (parentForm == null)
                    {
                        return(new AutocompleteOption[0]);
                    }
                    var objectRecord = parentForm.GetRecord() as ObjectRecord;
                    if (objectRecord == null)
                    {
                        return(new AutocompleteOption[0]);
                    }
                    var instance = objectRecord.Instance as ISavedXrmConnections;
                    if (instance == null || instance.Connections == null)
                    {
                        return(new AutocompleteOption[0]);
                    }
                    return(instance
                           .Connections
                           .Select(pt => (string)pt.GetPropertyValue(prop.Key))
                           .Where(g => !string.IsNullOrWhiteSpace(g))
                           .Distinct()
                           .Select(s => new AutocompleteOption(s))
                           .ToArray());
                };
                this.AddAutocompleteFunction(new AutocompleteFunction(getExistingValues, gridWidth: prop.Value
                                                                      , isValidForFormFunction: (f) => getExistingValues(f).Any(), displayInGrid: false), typeof(SavedXrmRecordConfiguration), prop.Key);
            }

            //existing values + the standard online regional endpoints
            var onlineDiscoveryServices = new[]
            {
                new DiscoveryAutocomplete("North America", "https://disco.crm.dynamics.com/XRMServices/2011/Discovery.svc"),
                new DiscoveryAutocomplete("North America 2", "https://disco.crm9.dynamics.com/XRMServices/2011/Discovery.svc"),
                new DiscoveryAutocomplete("EMEA", "https://disco.crm4.dynamics.com/XRMServices/2011/Discovery.svc"),
                new DiscoveryAutocomplete("Asia Pacific Area", "https://disco.crm5.dynamics.com/XRMServices/2011/Discovery.svc"),
                new DiscoveryAutocomplete("Oceania", "https://disco.crm6.dynamics.com/XRMServices/2011/Discovery.svc"),
                new DiscoveryAutocomplete("Japan", "https://disco.crm7.dynamics.com/XRMServices/2011/Discovery.svc"),
                new DiscoveryAutocomplete("South America", "https://disco.crm2.dynamics.com/XRMServices/2011/Discovery.svc"),
                new DiscoveryAutocomplete("India", "https://disco.crm8.dynamics.com/XRMServices/2011/Discovery.svc"),
                new DiscoveryAutocomplete("Canada", "https://disco.crm3.dynamics.com/XRMServices/2011/Discovery.svc"),
                new DiscoveryAutocomplete("United Kingdom", "https://disco.crm11.dynamics.com/XRMServices/2011/Discovery.svc"),
            };

            this.AddAutocompleteFunction(new AutocompleteFunction((recordForm) =>
            {
                var parentForm = recordForm.ParentForm;
                if (parentForm == null)
                {
                    return(onlineDiscoveryServices);
                }
                var objectRecord = parentForm.GetRecord() as ObjectRecord;
                if (objectRecord == null)
                {
                    return(onlineDiscoveryServices);
                }
                var instance = objectRecord.Instance as ISavedXrmConnections;
                var otherSavedConnections = instance == null || instance.Connections == null
                    ? new string[0]
                    : instance
                                            .Connections
                                            .Select(pt => (string)pt.GetPropertyValue(nameof(SavedXrmRecordConfiguration.DiscoveryServiceAddress)))
                                            .Where(g => !string.IsNullOrWhiteSpace(g) && !onlineDiscoveryServices.Any(sv => sv.Value.ToLower() == g.ToLower()));
                return(onlineDiscoveryServices
                       .Union(otherSavedConnections.Select(s => new DiscoveryAutocomplete(" ", s))));
            }, typeof(DiscoveryAutocomplete), nameof(DiscoveryAutocomplete.Value), new[] { new GridFieldMetadata(nameof(DiscoveryAutocomplete.Name), 120), new GridFieldMetadata(nameof(DiscoveryAutocomplete.Value), 450) }, sortField: nameof(DiscoveryAutocomplete.Name), displayInGrid: false), typeof(SavedXrmRecordConfiguration), nameof(SavedXrmRecordConfiguration.DiscoveryServiceAddress));

            //get the organisations based on details entered
            this.AddAutocompleteFunction(new AutocompleteFunction((recordForm) =>
            {
                var objectRecord = recordForm.GetRecord() as ObjectRecord;
                if (objectRecord == null)
                {
                    return(null);
                }
                var thisConnectionEntered = objectRecord.Instance as XrmRecordConfiguration;
                if (thisConnectionEntered == null)
                {
                    return(null);
                }
                var xrmRecordConfiguration = new XrmRecordConfigurationInterfaceMapper().Map(thisConnectionEntered);
                var xrmConfiguration       = new XrmConfigurationMapper().Map(xrmRecordConfiguration);
                var xrmConnection          = new Xrm.XrmConnection(xrmConfiguration);
                return(xrmConnection
                       .GetActiveOrganisations());;
            }, typeof(Xrm.Organisation), nameof(Xrm.Organisation.UniqueName), new[] { new GridFieldMetadata(nameof(Xrm.Organisation.UniqueName), 100), new GridFieldMetadata(nameof(Xrm.Organisation.FriendlyName), 400) }, sortField: nameof(Xrm.Organisation.FriendlyName), displayInGrid: false, autosearch: false), typeof(SavedXrmRecordConfiguration), nameof(SavedXrmRecordConfiguration.OrganizationUniqueName));
        }