SPDataStore.CreateIndicator Method
Saves an indicator object as a content type in a SharePoint list.
Namespace: Microsoft.PerformancePoint.Scorecards.Store
Assembly: Microsoft.PerformancePoint.Scorecards.Store (in Microsoft.PerformancePoint.Scorecards.Store.dll)
Syntax
'Declaration
Public Function CreateIndicator ( _
listUrl As String, _
newElement As Indicator _
) As Indicator
'Usage
Dim instance As SPDataStore
Dim listUrl As String
Dim newElement As Indicator
Dim returnValue As Indicator
returnValue = instance.CreateIndicator(listUrl, _
newElement)
public Indicator CreateIndicator(
string listUrl,
Indicator newElement
)
Parameters
listUrl
Type: System.StringThe server-relative URL of the SharePoint list to save the object to. Example: /BI Center/Lists/PerformancePoint Content.
newElement
Type: IndicatorThe indicator object to save, which specifies a value for the required Name property.
Return Value
Type: Indicator
The new object, which contains updated information such its location and version number.
Implements
IBIMonitoringStore.CreateIndicator(String, Indicator)
Examples
The following code example shows how to use a private method to create an indicator and to call CreateIndicator(String, Indicator) to save it to the repository. The example uses a helper method (GetImageAsString) to convert images from a resource file.
Before you can compile this code example, you must do the following:
Configure your development environment and create a C# class library project in Visual Studio. For information about configuring a development environment, see Setting Up the Development Environment for SharePoint 2010 on Windows Vista, Windows 7, and Windows Server 2008.
Add the Microsoft.PerformancePoint.Scorecards.Client, Microsoft.PerformancePoint.Scorecards.ServerCommon, and Microsoft.PerformancePoint.Scorecards.Store, and System.Drawing DLLs as references to your Visual Studio project. For more information about PerformancePoint Services in Microsoft SharePoint Server 2010 DLLs, see PerformancePoint Services DLLs Used in Development Scenarios.
Add the following using directives:
using Microsoft.PerformancePoint.Scorecards.Indicators using Microsoft.PerformancePoint.Scorecards.Store; using System.Drawing; using System.IO;
Add an embedded resource file named Resource1 to your project that contains five image-type resources named nodata, red, orange, yellow, and green. These images represent the five states of the indicator.
// Create an indicator, based on the following parameters:
// - indicatorName is the name for the indicator.
// - listUrl is the server-relative URL of the list to save the indicator to. Example:
// "/BI Center/Lists/PerformancePoint Content"
// This method returns the new indicator.
private Indicator CreateIndicator(string indicatorName, string listUrl)
{
if (String.IsNullOrEmpty(indicatorName))
throw new ArgumentException("The name must not be null or empty.");
if (String.IsNullOrEmpty(listUrl))
throw new ArgumentException("The list URL must not be null or empty.");
Indicator newIndicator = new Indicator();
newIndicator.Name.Text = indicatorName;
newIndicator.Description.Text = "Created with the SDK.";
// A centered indicator type is used with "closer to target" scoring.
newIndicator.IndicatorType = IndicatorType.Centered;
// Centered indicators need between four and 20 bands.
// Use the GetImageAsString method to convert images from a resource file.
IndicatorBand noData = new IndicatorBand();
noData.BackColor = Color.Gray.ToArgb().ToString();
noData.Color = Color.Black.ToArgb().ToString();
noData.ImageData = GetImageAsString(Resource1.nodata);
noData.ToolTip = "No Data";
IndicatorBand redBand = new IndicatorBand();
redBand.BackColor = Color.Red.ToArgb().ToString();
redBand.Color = Color.Black.ToArgb().ToString();
redBand.ImageData = GetImageAsString(Resource1.red);
redBand.ToolTip = "Off Target";
IndicatorBand orangeBand = new IndicatorBand();
orangeBand.BackColor = Color.Orange.ToArgb().ToString();
orangeBand.Color = Color.Black.ToArgb().ToString();
orangeBand.ImageData = GetImageAsString(Resource1.orange);
orangeBand.ToolTip = "Slightly Off Target";
IndicatorBand yellowBand = new IndicatorBand();
yellowBand.BackColor = Color.Yellow.ToArgb().ToString();
yellowBand.Color = Color.Black.ToArgb().ToString();
yellowBand.ImageData = GetImageAsString(Resource1.yellow);
yellowBand.ToolTip = "Close to Target";
IndicatorBand greenBand = new IndicatorBand();
greenBand.BackColor = Color.Green.ToArgb().ToString();
greenBand.Color = Color.Black.ToArgb().ToString();
greenBand.ImageData = GetImageAsString(Resource1.green);
greenBand.ToolTip = "On Target";
newIndicator.NoDataIndicatorBand = noData;
// Add the bands, starting with the worst (represents values that are lower than
// the target and are getting increasingly closer to the target).
newIndicator.IndicatorBands.Add(redBand);
newIndicator.IndicatorBands.Add(orangeBand);
newIndicator.IndicatorBands.Add(yellowBand);
newIndicator.IndicatorBands.Add(greenBand);
// Add the bands in reverse order (represents positive values getting increasingly
// further from the target).
newIndicator.IndicatorBands.Add(greenBand);
newIndicator.IndicatorBands.Add(yellowBand);
newIndicator.IndicatorBands.Add(orangeBand);
newIndicator.IndicatorBands.Add(redBand);
// Call the CreateIndicator method to save the new indicator to the specified list.
// TODO: Handle exceptions from this call.
return SPDataStore.GlobalDataStore.CreateIndicator(listUrl, newIndicator);
}
// Converts an Image object to its base64 string representation.
// - image is an Image object (in this example from a resource file).
// This method returns a string that contains the base64 representation of the image.
private string GetImageAsString(Image image)
{
string base64String;
if (null == image)
{
throw new ArgumentNullException("image");
}
using (MemoryStream mStream = new MemoryStream())
{
image.Save(mStream, image.RawFormat);
Byte[] bytes = mStream.ToArray();
base64String = System.Convert.ToBase64String(bytes, 0, bytes.Length);
}
return base64String;
}