The content you're reading is getting on in years
This post is on the older side and its content may be out of date.
Be sure to visit our blogs homepage for our latest news, updates and information.
public
void
CreateData()
{
List<Dictionary<Guid,
string
>> albumCollection =
new
List<Dictionary<Guid,
string
>>()
{
new
Dictionary<Guid,
string
>()
{
{Guid.NewGuid(),
"album 1 for artist 1"
},
{Guid.NewGuid(),
"album 2 for artist 1"
},
{Guid.NewGuid(),
"album 3 for artist 1"
}
},
new
Dictionary<Guid,
string
>()
{
{Guid.NewGuid(),
"album 1 for artist 2"
},
{Guid.NewGuid(),
"album 2 for artist 2"
},
{Guid.NewGuid(),
"album 3 for artist 2"
}
}
};
foreach
(var collection
in
albumCollection)
{
foreach
(KeyValuePair<Guid,
string
> kvp
in
collection)
{
CreateAndPublishAlbum(kvp.Key, kvp.Value);
}
}
CreateAndPublishArtist(
"artist 1"
,
"Rock"
, albumCollection[0].Keys.ToArray());
CreateAndPublishArtist(
"artist 2"
,
"Pop"
, albumCollection[1].Keys.ToArray());
}
public
void
CreateAndPublishAlbum(Guid itemId,
string
title)
{
DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager();
Type albumsType = TypeResolutionService.ResolveType(
"Telerik.Sitefinity.DynamicTypes.Model.RelatedDataTest.Albums"
);
DynamicContent albumsItem = dynamicModuleManager.CreateDataItem(albumsType, itemId, dynamicModuleManager.Provider.ApplicationName);
// This is how values for the properties are set
albumsItem.SetValue(
"Title"
, title);
albumsItem.SetValue(
"Owner"
, SecurityManager.GetCurrentUserId());
albumsItem.SetValue(
"PublicationDate"
, DateTime.Now);
albumsItem.SetValue(
"UrlName"
,
new
Lstring(Regex.Replace(title, UrlNameCharsToReplace, UrlNameReplaceString)));
// We can now call the following to publish the item
ILifecycleDataItem publishedAlbumsItem = dynamicModuleManager.Lifecycle.Publish(albumsItem);
//You need to set appropriate workflow status
albumsItem.SetWorkflowStatus(dynamicModuleManager.Provider.ApplicationName,
"Published"
);
// You need to call SaveChanges() in order for the items to be actually persisted to data store
dynamicModuleManager.SaveChanges();
}
//Publish a new artists item
public
void
CreateAndPublishArtist(
string
title,
string
musicStyle, Guid[] albums)
{
DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager();
Type artistsType = TypeResolutionService.ResolveType(
"Telerik.Sitefinity.DynamicTypes.Model.RelatedDataTest.Artists"
);
DynamicContent artistsItem = dynamicModuleManager.CreateDataItem(artistsType);
// This is how values for the properties are set
artistsItem.SetValue(
"Name"
, title);
artistsItem.SetValue(
"Owner"
, SecurityManager.GetCurrentUserId());
artistsItem.SetValue(
"Albums"
, albums);
artistsItem.SetValue(
"MusicStyle"
, musicStyle);
artistsItem.SetValue(
"UrlName"
,
new
Lstring(Regex.Replace(title, UrlNameCharsToReplace, UrlNameReplaceString)));
// We can now call the following to publish the item
ILifecycleDataItem publishedArtistsItem = dynamicModuleManager.Lifecycle.Publish(artistsItem);
//You need to set appropriate workflow status
artistsItem.SetWorkflowStatus(dynamicModuleManager.Provider.ApplicationName,
"Published"
);
// You need to call SaveChanges() in order for the items to be actually persisted to data store
dynamicModuleManager.SaveChanges();
}
private
const
string
UrlNameCharsToReplace = @
"[^\w\-\!\$\'\(\)\=\@\d_]+"
;
private
const
string
UrlNameReplaceString =
"-"
;
As you can see two artists and six albums are created. Albums IDs are passed to the artists “Albums” fields so that the relations are set. Every artists has three albums. The next step will be to configure the widgets that are created with the custom content types. For this purpose we have added two new properties in the widgets. Place both content types widgets in a single page and in the albums widget advanced settings set RelatedDataTypeName to the content type name of the artist type (Telerik.Sitefinity.DynamicTypes.Model.RelatedDataTest.Artists). Set RelatedDataFieldName property in the same widget to the name the field of the related type where the id’s of the items are stored – in this case “Albums” field of the artist content type. Save and publish. When the page is viewed in the front end and an artist is selected the corresponding albums will be displayed.
With the latest version of Sitefinity Thunder comes a very nice option to create items selector for your related data in the backend which will ease the process. Have a look at the documentation article about configuring the new selector control.
Here you can find a video that goes through all of the configuration steps.
View all posts from The Progress Team on the Progress blog. Connect with us about all things application development and deployment, data integration and digital business.
Let our experts teach you how to use Sitefinity's best-in-class features to deliver compelling digital experiences.
Learn MoreSubscribe to get all the news, info and tutorials you need to build better business apps and sites
Progress collects the Personal Information set out in our Privacy Policy and the Supplemental Privacy notice for residents of California and other US States and uses it for the purposes stated in that policy.
You can also ask us not to share your Personal Information to third parties here: Do Not Sell or Share My Info
We see that you have already chosen to receive marketing materials from us. If you wish to change this at any time you may do so by clicking here.
Thank you for your continued interest in Progress. Based on either your previous activity on our websites or our ongoing relationship, we will keep you updated on our products, solutions, services, company news and events. If you decide that you want to be removed from our mailing lists at any time, you can change your contact preferences by clicking here.