Developer FAQ

I have developed a feature that takes input from website visitors and store it in C1. The data needs a reference to the page it's submitted from so I have created a Page Data Folder type in which to store the data. 

One of the features of this type is that C1 users can attach it to a page as a Page Data Folder (a right click action on the page) enabling them to manage the data relating to a page exactly below this page. I would like to 'steal' this feature but avoid asking my users to do the 'right click' action - I would like the Page Data Folder for my type to show up automatically below a page the first time data is added to the page.

How can I programatically detect if my type have already been attached to a specific page, and how can I programatically attach it if needed?

Answer:

// Sample type used here - change this line:
Type commentItemType = Composite.Types.TypeManager.TryGetType("DynamicType:Composite.Community.PageComments.Item");
if  (commentItemType != null)
{
    Guid commentItemTypeId = commentItemType.GetImmutableTypeId();
IPage currentPage = PageManager.GetPageById(pageId);
    //Check for existing assosiation between page and type
    if  (DataAggregationVisabilityFacade.GetInstanceDefinedAssociationDescriptionIds(currentPage, commentItemType).Any() == false)
    {
        //Create assosiation
        DataAggregationVisabilityFacade.AddAggregationDescription(currentPage, commentItemType, DataAssociationVisabilityRule.OneToOne());
    }
}