LookupMask class
Represents a mask definition for the levels of a hierarchical lookup table.
Inheritance hierarchy
System.Object
Microsoft.SharePoint.Client.ClientValueObject
Microsoft.ProjectServer.Client.LookupMask
Namespace: Microsoft.ProjectServer.Client
Assembly: Microsoft.ProjectServer.Client (in Microsoft.ProjectServer.Client.dll)
Syntax
'Declaration
<ScriptTypeAttribute("PS.LookupMask", ValueObject := True, ServerTypeId := "{2aeb3d46-6e78-4035-b908-9e0a55f5c56d}")> _
Public Class LookupMask _
Inherits ClientValueObject
'Usage
Dim instance As LookupMask
[ScriptTypeAttribute("PS.LookupMask", ValueObject = true, ServerTypeId = "{2aeb3d46-6e78-4035-b908-9e0a55f5c56d}")]
public class LookupMask : ClientValueObject
Remarks
All lookup tables must have at least one mask, and only text tables may have more than one mask.
Examples
The following code example is a console application that queries the collection of lookup tables in a Project Web App instance and displays information about the code masks and entries for a specified lookup table. The projLutCollection variable is a LookupTableCollection object.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.ProjectServer.Client;
namespace ReadLookupTable
{
class Program
{
// Change the path for your Project Web App instance.
private const string PWA_PATH = "https://ServerName/pwa/";
private static string lutName = "Department"; // Default lookup table to read.
// Set the Project Server client context.
private static ProjectContext projContext;
static void Main(string[] args)
{
if (!ParseCommandLine(args))
{
Usage();
ExitApp();
}
projContext = new ProjectContext(PWA_PATH);
var projLutCollection = projContext.LoadQuery(
projContext.LookupTables
.Where(lut => lut.Name == lutName));
projContext.ExecuteQuery();
if (projLutCollection.Count() > 0)
{
foreach (LookupTable lut in projLutCollection)
{
Console.WriteLine("'{0}' lookup table Id: {1}", lut.Name, lut.Id);
Console.WriteLine("\tField type: {0}", lut.FieldType);
// Get the lookup table mask data:
Console.WriteLine("\nNumber of '{0}' lookup table masks: {1}\n", lut.Name, lut.Masks.Count());
foreach (LookupMask lutMask in lut.Masks)
{
Console.WriteLine("\tMaskType: {0}\tLength: {1}\tSeparator: {2}",
lutMask.MaskType, lutMask.Length, lutMask.Separator);
}
// Get the collection of lookup table entries.
projContext.Load(lut.Entries);
projContext.ExecuteQuery();
Console.WriteLine("\nNumber of '{0}' lookup table entries: {1}", lut.Name, lut.Entries.Count());
foreach (LookupEntry lutEntry in lut.Entries)
{
Console.WriteLine("\n\t{0}, SortIndex: {1}\n\tFullValue: {2}",
lutEntry.Id, lutEntry.SortIndex.ToString("F0"), lutEntry.FullValue);
}
}
}
else
{
Console.WriteLine("No lookup table named '{0}'", lutName);
}
ExitApp();
}
private static void ExitApp()
{
Console.Write("\nPress any key to exit... ");
Console.ReadKey(true);
Environment.Exit(0);
}
// Parse the command line. Return true if there are no errors.
private static bool ParseCommandLine(string[] args)
{
bool error = false;
int argsLen = args.Length;
try
{
for (int i = 0; i < argsLen; i++)
{
if (error) break;
if (args[i].StartsWith("-") || args[i].StartsWith("/"))
args[i] = "*" + args[i].Substring(1).ToLower();
switch (args[i])
{
case "*lookuptable":
case "*lut":
if (++i >= argsLen) return false;
lutName = args[i];
break;
case "*?":
default:
error = true;
break;
}
}
}
catch (FormatException)
{
error = true;
}
return !error;
}
private static void Usage()
{
string example = "Usage: ReadLookupTable [/lookuptable | /lut \"LookupTable Name\"";
example += "\n\nExample: ReadLookupTable /lut \"Department\"";
Console.WriteLine(example);
}
}
}
For example, suppose the Department lookup table contains the following code masks and lookup table values:
Sequence Length Separator
_______________________________________________
Characters Any .
Uppercase Letters 2 .
Level Value
______________________________
1 Test Dept 1
1 Test Dept 2
1 Test Dept C
2 CA
2 CB
Following is the output of the ReadLookupTable application (the GUIDs for your entries would be different).
Note
Because the Department lookup table is built-in, the GUID of the Department lookup table is the same in all Project Web App instances. The GUID is the value of the Microsoft.Office.Project.Server.Library.LookupTables.DEPARTMENTS_LT_UID field.
'Department' lookup table Id: e7397277-1ab0-4096-b2dd-57029a055ba4
Field type: TEXT
Number of 'Department' lookup table masks: 2
MaskType: CHARACTERS Length: 0 Separator: .
MaskType: UPPERCASE Length: 2 Separator: .
Number of 'Department' lookup table entries: 5
bbc07ff5-b06d-e211-93f4-0021704e28a0, SortIndex: 1
FullValue: Test Dept 1
bcc07ff5-b06d-e211-93f4-0021704e28a0, SortIndex: 2
FullValue: Test Dept 2
bdc07ff5-b06d-e211-93f4-0021704e28a0, SortIndex: 3
FullValue: Test Dept C
0a6ef8d8-6871-e211-93f4-0021704e28a0, SortIndex: 4
FullValue: Test Dept C.CA
0b6ef8d8-6871-e211-93f4-0021704e28a0, SortIndex: 5
FullValue: Test Dept C.CB
Press any key to exit...
Thread safety
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.