public CamlExpression GetExpression(Func <SPModelQueryFieldInfo, CamlExpression> expressionFactory, bool checkOrderable) { CommonHelper.AccessNotNull(expressionFactory, "expressionFactory"); if (this.FieldAssociations == null) { CommonHelper.AccessNotNull(this.Field.FieldRef, "FieldRef"); return(expressionFactory(this.Field)); } if (!this.FieldAssociations.Queryable) { throw new Exception(String.Format("Member '{0}' must have exactly one SPFieldAttribute with IncludeInQuery set to true", this.Member.Name)); } if (this.FieldAssociations.Fields.Count > 1 && checkOrderable) { throw new Exception(String.Format("Member '{0}' cannot be used in ordering", this.Member.Name)); } CamlExpression expression = Caml.False; foreach (SPModelFieldAssociation association in this.FieldAssociations) { SPModelQueryFieldInfo fieldInfo = new SPModelQueryFieldInfo(visitor.Manager.Site, association); if (this.FieldAssociations.Fields.Count == 1) { return(expressionFactory(fieldInfo)); } expression |= (association.Descriptor.GetContentTypeExpression(visitor.Manager.Descriptor) + expressionFactory(fieldInfo)); } return(expression); }
public SPModelQueryFieldInfo(SPSite site, SPModelFieldAssociation association) : this() { CommonHelper.ConfirmNotNull(site, "site"); CommonHelper.AccessNotNull(association.Attribute, "Attribute"); FieldRef = association.Attribute.ListFieldInternalName; QueryProperty = association.QueryProperty; if (association.Attribute is SPBuiltInFieldAttribute) { SPFieldType fieldType; if (KnownFields.FieldTypeDictionary.TryGetValue(association.Attribute.InternalName, out fieldType)) { FieldType = fieldType; FieldTypeAsString = fieldType.ToString(); if (fieldType == SPFieldType.DateTime) { IncludeTimeValue = !KnownFields.DateOnlyFields.Contains(association.Attribute.InternalName); } } else { SPField field = site.RootWeb.Fields.GetFieldByInternalName(association.Attribute.InternalName); FieldType = field.Type; FieldTypeAsString = field.TypeAsString; if (field.Type == SPFieldType.DateTime) { IncludeTimeValue = ((SPFieldDateTime)field).DisplayFormat == SPDateTimeFieldFormatType.DateTime; } } } else { FieldType = association.Attribute.Type; FieldTypeAsString = association.Attribute.TypeAsString; if (association.Attribute.Type == SPFieldType.DateTime) { IncludeTimeValue = ((SPDateTimeFieldAttribute)association.Attribute).DisplayFormat == SPDateTimeFieldFormatType.DateTime; } } }
public TaxonomyNavigationRequestContext() { this.context = TaxonomyNavigationContext.Current; this.variation = VariationContext.Current; if (context.HasNavigationContext) { this.navigationTerm = context.NavigationTerm; } else { using (new SPSecurity.GrantAdditionalPermissionsInScope(SPBasePermissions.FullMask)) { SPWeb currentWeb = SPContext.Current.Web; string url = TaxonomyNavigationHelper.ResolveFriendlyUrl(currentWeb, SPUrlUtility.CombineUrl(currentWeb.ServerRelativeUrl, currentWeb.RootFolder.WelcomePage)); TaxonomyNavigationHelper.TryGetNavigationTerm(url, out this.navigationTerm, out url); } } if (this.navigationTerm == null) { NavigationTermSet termSet; TaxonomyNavigationHelper.IsRequestingNavigationTermSet(out termSet); this.navigationTermSetItem = termSet; } else { this.navigationTermSetItem = navigationTerm; } if (context.HasFriendlyUrl || context.HasCatalogUrl) { this.serverRelativeRequestUrl = context.ResolvedDisplayUrl; } else if (navigationTermSetItem != null) { this.serverRelativeRequestUrl = navigationTermSetItem.GetResolvedDisplayUrl(null); } else { this.serverRelativeRequestUrl = SPUtility.OriginalServerRelativeRequestPath; } this.variationRelativeRequestUrl = PublishingWebHelper.TrimVariationFromPath(serverRelativeRequestUrl); this.query = HttpUtility.ParseQueryString(HttpContext.Current.Request.Url.Query); query.Remove(null); query.Remove("TermStoreId"); query.Remove("TermSetId"); query.Remove("TermId"); this.queryString = query.AllKeys.Length > 0 ? "?" + query : String.Empty; SPListItem listItem = SPContext.Current.ListItem; if (listItem != null) { this.currentItem = SPModel.TryCreate(listItem); } if (currentItem is ICatalogPage) { ICatalogPageFilter filter = CommonHelper.AccessNotNull(((ICatalogPage)currentItem).Filter, "Filter"); SetCatalogPageFilter(filter); } if (currentItem is ISeoMetaProvider) { seoMeta.Add((ISeoMetaProvider)currentItem); } seoMeta.Add(new SeoMetaListItem(listItem)); for (NavigationTerm t = navigationTerm; t != null; t = t.Parent) { seoMeta.Add(new SeoMetaNavigationTerm(listItem.Web, t)); } }