Notifications.ReadAlertSubscriptions Method
Gets the alert subscription information for the current user.
Namespace: [Notifications Web service]
Service reference: http://ServerName:32843/[Project Service Application GUID]/PSI/Notifications.svc
Web service reference: http://ServerName/ProjectServerName/_vti_bin/PSI/Notifications.asmx?wsdl
Syntax
'Declaration
<SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Notifications/ReadAlertSubscriptions", RequestNamespace := "https://schemas.microsoft.com/office/project/server/webservices/Notifications/", _
ResponseNamespace := "https://schemas.microsoft.com/office/project/server/webservices/Notifications/", _
Use := SoapBindingUse.Literal, ParameterStyle := SoapParameterStyle.Wrapped)> _
Public Function ReadAlertSubscriptions As AlertSubscriptionInfoDataSet
'Usage
Dim instance As Notifications
Dim returnValue As AlertSubscriptionInfoDataSet
returnValue = instance.ReadAlertSubscriptions()
[SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Notifications/ReadAlertSubscriptions", RequestNamespace = "https://schemas.microsoft.com/office/project/server/webservices/Notifications/",
ResponseNamespace = "https://schemas.microsoft.com/office/project/server/webservices/Notifications/",
Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
public AlertSubscriptionInfoDataSet ReadAlertSubscriptions()
Return Value
Type: [Notifications Web service].AlertSubscriptionInfoDataSet
AlertSubscriptionInfoDataSet with alert subscription status for the current user.
Remarks
Project Server Permissions
Permission |
Description |
---|---|
Non-standard |
User must be a resource. |
Allows the user to self-manage notifications. Global permission. |
|
Allows the user to manage notifications relating to other resources. Global permission. |
Examples
This example retrieves the current user's alert subscription information and displays it on the console.
Please see Prerequisites for ASMX-Based Code Samples for critical information on running this code sample.
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Net;
using System.Web.Services.Protocols;
using System.Threading;
using PSLibrary = Microsoft.Office.Project.Server.Library;
namespace Microsoft.SDK.Project.Samples.ReadAlertSubscriptions
{
class Program
{
[STAThread]
static void Main()
{
try
{
#region Setup
const string PROJECT_SERVER_URI = "https://ServerName/ProjectServerName/";
const string NOTIFICATIONS_SERVICE_PATH = "_vti_bin/psi/notifications.asmx";
// Set up the Web service objects
NotificationsWebSvc.Notifications notificationsSvc = new NotificationsWebSvc.Notifications();
notificationsSvc.Url = PROJECT_SERVER_URI + NOTIFICATIONS_SERVICE_PATH;
notificationsSvc.UseDefaultCredentials = true;
#endregion
NotificationsWebSvc.AlertSubscriptionInfoDataSet alertSubscriptionDs = notificationsSvc.ReadAlertSubscriptions();
WriteTablesToConsole(alertSubscriptionDs.Tables);
}
#region Error Handling and Final
catch (SoapException ex)
{
PSLibrary.PSClientError error = new PSLibrary.PSClientError(ex);
PSLibrary.PSErrorInfo[] errors = error.GetAllErrors();
string errMess = "==============================\r\nError: \r\n";
for (int i = 0; i < errors.Length; i++)
{
errMess += "\n" + ex.Message.ToString() + "\r\n";
errMess += "".PadRight(30, '=') + "\r\nPSCLientError Output:\r\n \r\n";
errMess += errors[i].ErrId.ToString() + "\n";
for (int j = 0; j < errors[i].ErrorAttributes.Length; j++)
{
errMess += "\r\n\t" + errors[i].ErrorAttributeNames()[j] + ": " + errors[i].ErrorAttributes[j];
}
errMess += "\r\n".PadRight(30, '=');
}
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(errMess);
}
catch (WebException ex)
{
string errMess = ex.Message.ToString() +
"\n\nLog on, or check the Project Server Queuing Service";
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Error: " + errMess);
}
catch (Exception ex)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Error: " + ex.Message);
}
finally
{
Console.ResetColor();
Console.WriteLine("\r\n\r\nPress any key...");
Console.ReadKey();
}
#endregion
}
private static void WriteTablesToConsole(System.Data.DataTableCollection theTables)
{
Console.ForegroundColor = ConsoleColor.DarkGreen;
foreach (System.Data.DataTable table in theTables)
{
int[] columnWidths = new int[table.Columns.Count];
int tableWidth = 0;
string dataString;
Console.WriteLine("Table: " + table.TableName);
// Write out the column names and get their spacing
StringBuilder tableRow = new StringBuilder();
for (int i = 0; i < table.Columns.Count; i++)
{
columnWidths[i] = GetColumnWidth(table.Columns[i]);
tableRow.Append(table.Columns[i].ColumnName.PadRight(columnWidths[i]));
tableWidth += columnWidths[i];
}
// add a space so it won't wrap
tableWidth += 1;
// make the console as wide as the widest table
Console.BufferWidth = (Console.BufferWidth > tableWidth ? Console.BufferWidth : tableWidth);
tableRow.Append("\r\n");
Console.Write(tableRow.ToString());
// Write out the data
foreach (DataRow row in table.Rows)
{
tableRow = new StringBuilder();
for (int i = 0; i < table.Columns.Count; i++)
{
dataString = row[i].ToString();
// truncate output if it is wider than
// the desired column width
if (dataString.Length >= columnWidths[i])
{
dataString = dataString.Substring(0, columnWidths[i] - 1);
}
// add the output to the stringbuilder and pad right to fill
// up to the column width.
tableRow.Append(dataString.PadRight(columnWidths[i]));
}
tableRow.Append("\r\n");
Console.Write(tableRow.ToString());
}
Console.Write("\r\n".PadLeft(tableWidth, '-'));
}
Console.ResetColor();
}
// Helper function for WriteTablesToConsole
private static int GetColumnWidth(DataColumn column)
{
// Note: may not handle byte[]data types well
const int MAX_COL_WIDTH = 40;
int dataWidth = 0;
//return 12 for numbers, 30 for dates, and string width for strings.
switch (column.DataType.UnderlyingSystemType.ToString())
{
case "System.Boolean":
case "System.Byte":
case "System.Byte[]":
case "System.Char":
case "System.Decimal":
case "System.Double":
case "System.Int16":
case "System.Int32":
case "System.Int64":
case "System.SByte":
case "System.Single":
case "System.UInt16":
case "System.UInt32":
case "System.UInt64":
dataWidth = 12;
break;
case "System.DateTime":
case "System.TimeSpan":
dataWidth = 30;
break;
case "System.Guid":
dataWidth = 37;
break;
case "System.String":
// If it has a maxlength, use it
if (column.MaxLength > 0)
{
dataWidth = column.MaxLength;
}
else
{
// Otherwise use the max col width
dataWidth = MAX_COL_WIDTH;
}
break;
default:
dataWidth = column.ColumnName.Length;
break;
}
// truncate if over the max length
if (dataWidth > MAX_COL_WIDTH)
{
dataWidth = MAX_COL_WIDTH;
}
// always be at least as wide as the colum name
return (column.ColumnName.Length > (dataWidth) ? column.ColumnName.Length + 1 : dataWidth);
}
}
}