In our Applications, the Configuration List is un-avoidable nowadays. Because, almost every customer wants to change their values during the run time, or many some scenarios like based on the environment, the corresponding Service needs to be called. i.e., For the Development Environment, we need to call a specific URL, for the PROD, we need to call a specific URL. In those cases, we cannot hard code as well. There are so many scenarios we can keep on listing as the advantage of having a configuration list on the Site Collection Level.
Here, we are not going to discuss about that. I wanted to come up with a generic WSP, which should provision my site columns and a list. (Again, this will vary from requirement to requirement for the users.) But what I am trying to make here is a Base Solution, so that anyone can download the solution, modify the site column names and the Schema.xml and get their own SandBox Solution and deploy that.
The solution contains the below major artifacts.
1. Elements.xml – To define all our SiteColumns
2. Schema.xml – List Definition File
3. Elements.xml – List Instance File
4. Two features to provision the Site Columns and the List.
One thing we need to consider is, the order of feature activation. We need to activate the SiteColumn provisioning feature first and then, we need to activate the List Feature.
I have made this project as a SandBox solution as most of the customers are expecting only the SandBox Solution nowadays. The same can be created as a Farm Solution as well without any modification. It depends up on the customer’s choice.
And, the below method can be used to read the value from the Config List.
protected string GetConfigValue(ClientContext clientContext, string strKey, string strConfigCategory)
{
try
{
var spList = clientContext.Web.Lists.GetByTitle("RedirectAppConfigList");
var query = new Microsoft.SharePoint.Client.CamlQuery
{
ViewXml = @"<View>
<Query>
<Where>
<And>
<Eq>
<FieldRef Name='Title'/>
<Value Type='Text'>" + strKey + @"</Value>
</Eq>
<Eq>
<FieldRef Name='ConfigurationCategory'/>
<Value Type='Text'>" + strConfigCategory + @"</Value>
</Eq>
</And>
</Where>
</Query>
</View>"
};
var listItems = spList.GetItems(query);
clientContext.Load(listItems);
clientContext.ExecuteQuery();
if (listItems.Count > 0)
{
var listItem = listItems[0];
clientContext.Load(listItem);
clientContext.ExecuteQuery();
return Convert.ToString(listItem["ConfigurationValue"]);
}
}
catch (Exception ex)
{
return string.Empty;
}
return null;
}
Most Probably, this will used, in the App Development Model.
Happy Coding,
Sathish Nadarajan.
Leave a comment