/// <summary> /// Retrieve an existing feed that is mapped to hold sitelinks. The first /// active sitelinks feed is retrieved by this method. /// </summary> /// <param name="feedMappingService">The feed mapping service.</param> /// <returns>A SiteLinksFeed if a feed is found, or null otherwise.</returns> private static SiteLinksFeed getExistingFeed(FeedMappingService feedMappingService) { Selector selector = new Selector(); selector.fields = new string[] {"FeedId", "FeedMappingId", "PlaceholderType", "Status", "AttributeFieldMappings"}; Predicate placeHolderPredicate = new Predicate(); placeHolderPredicate.field = "PlaceholderType"; placeHolderPredicate.@operator = PredicateOperator.EQUALS; placeHolderPredicate.values = new string[] {PLACEHOLDER_SITELINKS.ToString()}; Predicate statusPredicate = new Predicate(); statusPredicate.field = "Status"; statusPredicate.@operator = PredicateOperator.EQUALS; statusPredicate.values = new string[] {"ACTIVE"}; selector.predicates = new Predicate[] {placeHolderPredicate, statusPredicate}; FeedMappingPage page = feedMappingService.get(selector); if (page != null && page.entries != null && page.entries.Length > 0) { foreach (FeedMapping feedMapping in page.entries) { long? feedId = feedMapping.feedId; long? textAttributeId = null; long? urlAttributeId = null; foreach (AttributeFieldMapping attributeMapping in feedMapping.attributeFieldMappings) { if (attributeMapping.fieldId == PLACEHOLDER_FIELD_SITELINK_LINK_TEXT) { textAttributeId = attributeMapping.feedAttributeId; } else if (attributeMapping.fieldId == PLACEHOLDER_FIELD_SITELINK_URL) { urlAttributeId = attributeMapping.feedAttributeId; } } if (feedId != null && textAttributeId != null && urlAttributeId != null) { SiteLinksFeed siteLinksFeed = new SiteLinksFeed(); siteLinksFeed.SiteLinksFeedId = feedId.Value; siteLinksFeed.LinkTextFeedAttributeId = textAttributeId.Value; siteLinksFeed.LinkUrlFeedAttributeId = urlAttributeId.Value; return siteLinksFeed; } } } return null; }
/// <summary> /// Map the feed for use with Sitelinks. /// </summary> /// <param name="feedMappingService">The feed mapping service.</param> /// <param name="siteLinksFeed">The feed for holding sitelinks.</param> private static void createSiteLinksFeedMapping(FeedMappingService feedMappingService, SiteLinksFeed siteLinksFeed) { // Map the FeedAttributeIds to the fieldId constants. AttributeFieldMapping linkTextFieldMapping = new AttributeFieldMapping(); linkTextFieldMapping.feedAttributeId = siteLinksFeed.LinkTextFeedAttributeId; linkTextFieldMapping.fieldId = PLACEHOLDER_FIELD_SITELINK_LINK_TEXT; AttributeFieldMapping linkUrlFieldMapping = new AttributeFieldMapping(); linkUrlFieldMapping.feedAttributeId = siteLinksFeed.LinkUrlFeedAttributeId; linkUrlFieldMapping.fieldId = PLACEHOLDER_FIELD_SITELINK_URL; // Create the FieldMapping and operation. FeedMapping feedMapping = new FeedMapping(); feedMapping.placeholderType = PLACEHOLDER_SITELINKS; feedMapping.feedId = siteLinksFeed.SiteLinksFeedId; feedMapping.attributeFieldMappings = new AttributeFieldMapping[] {linkTextFieldMapping, linkUrlFieldMapping}; FeedMappingOperation operation = new FeedMappingOperation(); operation.operand = feedMapping; operation.@operator = Operator.ADD; // Save the field mapping. feedMappingService.mutate(new FeedMappingOperation[] {operation}); }