Introduction of SPPersistedObject class

Objective

In this article, I will give a high level introduction of SPPersistedObject class and its uses. I will give one sample also to explain uses of this class.

SPPersistedObject class

  1. This class is inside namespace Microsoft.SharePoint.Administration
  2. This is base class for all administration objects.
  3. It serializes all fields marked with Persisted attribute to XML.
  4. It writes XML BLOB to configuration database.
  5. Configuration data that is stored in persisted object is automatically made available to every process on every server in the farm.

Uses

Consider a scenario when, there is requirement to save configuration information not in Web.config file but in some permanent storage. In this case we will go for SPPersistedObject class.

Example

In this example, I am going to save username and password using SPPersistedObject class. The following example illustrates a custom class that inherits from the SPPersistedObject class where the Peristed attribute is used to specify fields for serialization.

Step 1: Create application

Create an application. For my purpose, I am creating a window application. After creating application add reference of Windows.SharePoint.Services.

Step 2: Create the custom class

Add a class in application. I am giving name here Counter.

Counter.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows;

using Microsoft.SharePoint;

using Microsoft.SharePoint.Administration;

 namespace WindowsFormsApplication3
{
public class Counter :SPPersistedObject
{
[Persisted]
public string Password ;
[Persisted]
public string Name;
public Counter()
{
}
public Counter(String name, SPPersistedObject parent)
: base(name, parent)
{
}
}
}

 Explanation

  1. Extend the class SPPersistedObject in the custom class.
  2. Attribute all the variable to be serialized with [Persisted]
  3. Persisted attribute could only be put on variables. Not on properties
  4. Custom class must have default constructor.

Step 3: Writing data in Configuration data base

Counter counter = new
Counter(“d3”, server.Farm);
 

counter.Name = “dhananjaykumar”;

counter.Password = “password”;

idForFuture = counter.Id;

counter.Update();

Explanation

  1. Server.Farm is the farm on the SPServer. We need to create instance of SPServer by passing server name in constructor.

    SPServer server = new SPServer(“ServerName”);

  2. Counter is custom class and it got constructor which takes two input. First is Name of the SPPersistedObject and second is the Farm.
  3. Counter.Id is returning Id of SPPersistedObject. We could use this ID in future for retrieval of this object from configuration data base.
  4. Counter.Update() is the method to update serialized data .

Step 4: Reading data from Configuration data base

Counter echo = (Counter)server.Farm.GetObject(idForFuture);
MessageBox.Show(echo.Name + echo.Password );

Explanation

  1. SPFarm.Local.GetObject(GUID of Object) is used to fetch the persisted object.
  2. idForFuture is the GUID of the object .

Complete code

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using Microsoft.SharePoint.Administration;

namespace WindowsFormsApplication3

{

public partial class Form1 : Form

{

SPServer server;
Guid idForFuture;

public Form1()
{

InitializeComponent(); 

server = new SPServer(“servername”);

}
private void btnWrite_Click(object sender, EventArgs e)

{
Counter counter = new
Counter(“d3”, server.Farm);

counter.Name = “dhananjaykumar”;
counter.Password = “password”;
idForFuture = counter.Id;
counter.Update();
MessageBox.Show(“Data Persisted”);
}
private void btnRead_Click(object sender, EventArgs e)
{
Counter echo = (Counter)server.Farm.GetObject(idForFuture);
MessageBox.Show(echo.Name + echo.Password );
}
}
}
Conclusion

I explained about SPPersistedObject class and its uses with an example. Please download the attachment code for better understanding. Thanks for reading.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Create a website or blog at WordPress.com