コード例 #1
0
 public CrmDataSourceView(CrmDataSource owner, string name, HttpContext context)
     : base(owner, name)
 {
     _cancelSelectOnNullParameter = true;
     _owner          = owner;
     _context        = context;
     _crmDataContext = OrganizationServiceContextFactory.Create(_owner.CrmDataContextName);
 }
コード例 #2
0
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            var context = OrganizationServiceContextFactory.Create() as OrganizationServiceContext;

            EntityMetadata = context.RetrieveEntity(EntityName, EntityFilters.Attributes);

            _defaultLangaugeCode = LanguageCode > 0
                                ? LanguageCode
                                : EntityMetadata.DisplayName.UserLocalizedLabel.LanguageCode;
        }
        public CrmSavedQueryColumnsGenerator(string savedQueryName, string crmConnectionStringName)
        {
            _context = string.IsNullOrEmpty(crmConnectionStringName)
                                ? OrganizationServiceContextFactory.Create()
                                : OrganizationServiceContextFactory.Create(crmConnectionStringName);

            _savedQuery = _context.CreateQuery("savedquery").FirstOrDefault(query => query.GetAttributeValue <string>("name") == savedQueryName);

            if (_savedQuery == null)
            {
                throw new ArgumentException("A saved query with the name {0} could not be found.".FormatWith(savedQueryName));
            }
        }
        protected override IEnumerable ExecuteSelect(DataSourceSelectArguments arguments)
        {
            var context = OrganizationServiceContextFactory.Create(Owner.CrmDataContextName);

            var savedQuery = context.CreateQuery("savedquery")
                             .FirstOrDefault(query => query.GetAttributeValue <string>("name") == Owner.SavedQueryName);

            var fetchXml = savedQuery.GetAttributeValue <string>("fetchxml");

            var queryExpression = new FetchExpression(fetchXml);

            var queryResults = context.RetrieveMultiple(queryExpression).Entities;

            var dataTable = queryResults.ToDataTable(context, savedQuery, true);

            return(new DataView(dataTable));
        }
コード例 #5
0
        protected virtual ITemplate GetFormTemplate()
        {
            var context = OrganizationServiceContextFactory.Create() as OrganizationServiceContext;

            var cellTemplateFactory = CreateCellTemplateFactory();

            if (!string.IsNullOrEmpty(TabName))
            {
                var formXml = context.CreateQuery("systemform")
                              .Single(form => form.GetAttributeValue <string>("objecttypecode") == EntityName &&
                                      form.GetAttributeValue <OptionSetValue>("type").Value == 2)
                              .GetAttributeValue <string>("formxml");

                var sections = XDocument.Parse(formXml).XPathSelectElements("form/tabs/tab").Where(
                    tab => tab.XPathSelectElements("labels/label").Any(
                        label => label.Attributes("description").Any(description => description.Value == TabName)
                        )
                    ).SelectMany(tab => tab.XPathSelectElements("columns/column/sections/section"));

                cellTemplateFactory.Initialize(this, new FormXmlCellMetadataFactory(), CellBindings, LanguageCode, ValidationGroup, ShowUnsupportedFields);

                var rowTemplateFactory = new RowTemplateFactory(LanguageCode);

                var sectionTemplates = sections.Select(s => new SectionTemplate(s, LanguageCode, EntityMetadata, cellTemplateFactory, rowTemplateFactory));

                return(new CompositeTemplate(sectionTemplates));
            }

            if (!string.IsNullOrEmpty(SavedQueryName))
            {
                cellTemplateFactory.Initialize(this, new SavedQueryCellMetadataFactory(), CellBindings, LanguageCode, ValidationGroup, ShowUnsupportedFields);

                var layoutXml = context.CreateQuery("savedquery")
                                .Single(view => view.GetAttributeValue <string>("name") == SavedQueryName)
                                .GetAttributeValue <string>("layoutxml");

                var rows = XDocument.Parse(layoutXml).XPathSelectElements("grid/row");

                var rowTemplates = rows.Select(r => new SavedQueryRowTemplate(r, LanguageCode, EntityMetadata, cellTemplateFactory));

                return(new CompositeTemplate(rowTemplates));
            }

            return(new EmptyTemplate());
        }
コード例 #6
0
        protected override IAsyncResult BeginExecuteSelect(
            DataSourceSelectArguments arguments,
            AsyncCallback asyncCallback,
            object asyncState)
        {
            ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Begin");

            if (CanSort)
            {
                arguments.AddSupportedCapabilities(DataSourceCapabilities.Sort);
            }

            if (CanPage)
            {
                arguments.AddSupportedCapabilities(DataSourceCapabilities.Page);
            }

            if (CanRetrieveTotalRowCount)
            {
                arguments.AddSupportedCapabilities(DataSourceCapabilities.RetrieveTotalRowCount);
            }

            string           fetchXml;
            QueryByAttribute query;

            InitializeParameters(out fetchXml, out query);

            // raise pre-event
            CrmDataSourceSelectingEventArgs selectingArgs = new CrmDataSourceSelectingEventArgs(
                Owner,
                arguments,
                fetchXml,
                query);

            OnSelecting(selectingArgs);

            IEnumerable selectResult = null;

            if (selectingArgs.Cancel)
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Cancel");
                return(new SynchronousAsyncSelectResult(selectResult, asyncCallback, asyncState));
            }

            // merge event results
            arguments.RaiseUnsupportedCapabilitiesError(this);
            fetchXml = selectingArgs.FetchXml;

            if (CancelSelectOnNullParameter && string.IsNullOrEmpty(fetchXml) && query == null)
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "CancelSelectOnNullParameter");
                return(new SynchronousAsyncSelectResult(selectResult, asyncCallback, asyncState));
            }

            try
            {
                _client = OrganizationServiceContextFactory.Create(Owner.CrmDataContextName);

                if (!string.IsNullOrEmpty(fetchXml))
                {
                    var fetch = ToFetch(arguments, fetchXml);

                    ADXTrace.Instance.TraceInfo(TraceCategory.Application, "End");

                    return(ExecuteSelect(_client, null, fetch, asyncCallback, asyncState));
                }

                if (query != null)
                {
                    ADXTrace.Instance.TraceInfo(TraceCategory.Application, "QueryByAttribute");

                    // the SortExpression has high priority, apply it to the query
                    AppendSortExpressionToQuery(arguments.SortExpression, order => query.Orders.Add(order));

                    ADXTrace.Instance.TraceInfo(TraceCategory.Application, "End");

                    return(ExecuteSelect(_client, query, null, asyncCallback, asyncState));
                }
            }
            catch (System.Web.Services.Protocols.SoapException ex)
            {
                ADXTrace.Instance.TraceError(TraceCategory.Application, string.Format("{0}\n\n{1}", ex.Detail.InnerXml, ex.ToString()));
            }
            catch (Exception e)
            {
                ADXTrace.Instance.TraceError(TraceCategory.Application, string.Format("Exception: {0}", e.ToString()));

                _client = null;

                return(new SynchronousAsyncSelectResult(e, asyncCallback, asyncState));
            }

            ADXTrace.Instance.TraceInfo(TraceCategory.Application, "End");

            return(new SynchronousAsyncSelectResult(selectResult, asyncCallback, asyncState));
        }
コード例 #7
0
        public IEnumerable ExecuteSelect(
            string entityName,
            string attributeName,
            string sortExpression,
            EntityFilters entityFlags,
            EntityFilters metadataFlags,
            out int rowsAffected)
        {
            rowsAffected = 0;
            IEnumerable result = null;

            var client = OrganizationServiceContextFactory.Create(Owner.CrmDataContextName);

            if (!string.IsNullOrEmpty(entityName) && !string.IsNullOrEmpty(attributeName))
            {
                Tracing.FrameworkInformation("CrmMetadataDataSourceView", "ExecuteSelect", "RetrieveAttributeMetadata: entityName={0}, attributeName={1}, sortExpression={2}", entityName, attributeName, sortExpression);

                var metadata = client.RetrieveAttribute(entityName, attributeName);

                if (metadata is PicklistAttributeMetadata)
                {
                    var picklist = metadata as PicklistAttributeMetadata;

                    var options = picklist.OptionSet.Options.ToArray();

                    if (!string.IsNullOrEmpty(sortExpression))
                    {
                        Array.Sort(
                            options,
                            delegate(OptionMetadata x, OptionMetadata y)
                        {
                            int comparison = 0;

                            if (sortExpression.StartsWith("Value") || sortExpression.StartsWith("OptionValue"))
                            {
                                comparison = x.Value.Value.CompareTo(y.Value.Value);
                            }
                            else if (sortExpression.StartsWith("Label") || sortExpression.StartsWith("OptionLabel"))
                            {
                                comparison = x.Label.UserLocalizedLabel.Label.CompareTo(y.Label.UserLocalizedLabel.Label);
                            }

                            return(!sortExpression.EndsWith("DESC") ? comparison : -comparison);
                        });
                    }

                    result       = options.Select(option => new { OptionLabel = option.Label.UserLocalizedLabel.Label, OptionValue = option.Value });
                    rowsAffected = options.Length;
                }
                else if (metadata is StatusAttributeMetadata)
                {
                    var status = metadata as StatusAttributeMetadata;

                    var options = (StatusOptionMetadata[])status.OptionSet.Options.ToArray();

                    if (!string.IsNullOrEmpty(sortExpression))
                    {
                        Array.Sort(
                            options,
                            delegate(StatusOptionMetadata x, StatusOptionMetadata y)
                        {
                            int comparison = 0;

                            if (sortExpression.StartsWith("Value") || sortExpression.StartsWith("OptionValue"))
                            {
                                comparison = x.Value.Value.CompareTo(y.Value.Value);
                            }
                            else if (sortExpression.StartsWith("Label") || sortExpression.StartsWith("OptionLabel"))
                            {
                                comparison = x.Label.UserLocalizedLabel.Label.CompareTo(y.Label.UserLocalizedLabel.Label);
                            }
                            else if (sortExpression.StartsWith("State"))
                            {
                                comparison = x.State.Value.CompareTo(y.State.Value);
                            }

                            return(!sortExpression.EndsWith("DESC") ? comparison : -comparison);
                        });
                    }

                    result       = options.Select(option => new { OptionLabel = option.Label.UserLocalizedLabel.Label, OptionValue = option.Value });
                    rowsAffected = options.Length;
                }
                else if (metadata is StateAttributeMetadata)
                {
                    var state = metadata as StateAttributeMetadata;

                    var options = (StateOptionMetadata[])state.OptionSet.Options.ToArray();

                    if (!string.IsNullOrEmpty(sortExpression))
                    {
                        Array.Sort(
                            options,
                            delegate(StateOptionMetadata x, StateOptionMetadata y)
                        {
                            int comparison = 0;

                            if (sortExpression.StartsWith("Value") || sortExpression.StartsWith("OptionValue"))
                            {
                                comparison = x.Value.Value.CompareTo(y.Value.Value);
                            }
                            else if (sortExpression.StartsWith("Label") || sortExpression.StartsWith("OptionLabel"))
                            {
                                comparison = x.Label.UserLocalizedLabel.Label.CompareTo(y.Label.UserLocalizedLabel.Label);
                            }
                            else if (sortExpression.StartsWith("DefaultStatus"))
                            {
                                comparison = x.DefaultStatus.Value.CompareTo(y.DefaultStatus.Value);
                            }

                            return(!sortExpression.EndsWith("DESC") ? comparison : -comparison);
                        });
                    }

                    result       = options.Select(option => new { OptionLabel = option.Label.UserLocalizedLabel.Label, OptionValue = option.Value });
                    rowsAffected = options.Length;
                }
            }
            else if (!string.IsNullOrEmpty(entityName))
            {
                Tracing.FrameworkInformation("CrmMetadataDataSourceView", "ExecuteSelect", "RetrieveEntityMetadata: entityName={0}, entityFlags={1}", entityName, entityFlags);

                var metadata = client.RetrieveEntity(entityName, entityFlags);

                result       = metadata.Attributes;
                rowsAffected = metadata.Attributes.Length;
            }
            else
            {
                Tracing.FrameworkInformation("CrmMetadataDataSourceView", "ExecuteSelect", "RetrieveMetadata: metadataFlags={0}", metadataFlags);

                var metadata = client.RetrieveAllEntities(metadataFlags);

                result       = metadata;
                rowsAffected = metadata.Length;
            }

            return(result);
        }