How to Extend the Content Selection Framework Functionality
This topic describes some of the ways you can extend the Content Selection Framework (CSF). Because the CSF is built on pipelines, you can extend it in many different ways: scoring, selection, recording, and cache loading.
Scoring
You can create pipeline components that score content in different ways. An example of this is the CSF Headlines sample-scoring component that takes into account the publication date for a headline and its priority in order to compute a score for the headline. Scoring components can also be more general, such as a scoring component that uses neural network technologies in order to score content based on its likelihood of a user clicking it or leading to a purchase on your site.
Selection
The CSFSelectWinners pipeline component uses a deterministic selection algorithm when selecting generic content—it selects the content item(s) with the highest scores. You could write a new selection component that instead treats the score of each content item as a probability and uses a random number generator to select from among them.
Recording
Commerce Server 2009 records advertising and other content events to the Internet Information Services (IIS) log file and aggregates near real-time counts of these events in the Campaigns database. You could extend this to provide statistical sampling that you can use with a third-party inventory management module. Alternatively, if your business is aligned with a third-party auditing firm, and that firm provides a plug-in pipeline component that provides a different type of event logging, you could extend this by recording advertising events to a database.
Cache Loading
If you want to target dimensions that are not included in the schema of the Campaigns database, you can override the query that the CSFLoadAdvertisements or CSFLoadDiscounts components use and add the new dimensions to the list in the SELECT query. For example, if you run advertisements on multiple Web sites but want to run them all from the same Campaigns database, you could add a dimension for Site. Then each site would use a slightly different query that includes a WHERE Site = 'sitename' clause. Or maybe each ad on your site is associated with a stock ticker, so you add the ticker dimension to the query and then use this to create filters run by the CSFFilterContent component.