public CrmDataSourceView(CrmDataSource owner, string name, HttpContext context) : base(owner, name) { _cancelSelectOnNullParameter = true; _owner = owner; _context = context; _crmDataContext = OrganizationServiceContextFactory.Create(_owner.CrmDataContextName); }
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)); }
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()); }
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)); }
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); }