Chat now with support
Chat with Support

Archive Manager 5.9.1 - SDK Guide

SDK reference


The Archive Manager SDK allows 3rd party application developers to interface with the archive for creation and retrieval of content and information. The Archive Manager SDK provides a high-level .NET class library that communicates with the Archive Manager RESTful Web Service API. SDK code documentation can be found in the Quest.AM.Public.Documentation.chm file.


There are three general SDK namespaces: Interfaces, Models, and Objects. Models and Objects implement the interfaces within the Interfaces namespace. Each class in the Objects namespace derives from a class in the Models namespace. Models are the base data classes that contain the properties that define the data type you are accessing. Objects are active types that have navigation, collections, and special properties that further describe relationships of a given Object to other Objects. Think of this as a three layer system where Interfaces are the Model and Object definitions, Models are the data storage, and Objects are the Model access.

The types and interfaces included in Quest.AM.Public and Quest.AM.Public.Interfaces are shared between the internal system and the SDK. These types are used when creating new messages or accessing certain message properties.

SDK usage

The primary Object is a class implementation of the ISDKInstance interface called ArchiveManager. The ArchiveManager class describes the Archive Manager RESTful Web Service API endpoint to which you are talking. The constructor takes a base URL and application name.

ISDKInstance archiveManager = new ArchiveManager("http://archivemanager/",
ISDKLogin login = archiveManager.Login("Admin", "Password", "DEFAULT", false);
ISDKMailbox myMailbox = login.PrimaryMailbox;
ISDKMailboxCollection myMailboxes = login.Mailboxes;

Login must be called to authenticate to the endpoint. It will return the ISDKLogin Object for the authenticated user f successful. The ISDKLogin Object contains a property for the login’s primary mailbox and a collection of mailboxes the login has delegated to it. The last argument changes the authentication mode to either Basic or Windows authentication. If the API endpoint is configured for Anonymous authentication, this argument should be set to false. If the API endpoint is configured for Windows authentication, this argument should be set to true. Passing a null username causes the application to authenticate as the user executing the application.

There is a collection Object for each of the primary types. In this example, ISDKMailboxCollection myMailboxes contains an enumerable property called “Items” that can be used to access each of the individual ISDKMailbox Objects within the collection.

foreach (ISDKMailbox mailbox in myMailboxes.Items)
String mailboxName = mailbox.Name;

The SDK consists of many relationships branching from the ArchiveManager Object. All of the SDK Objects start with SDK followed by the Model for which they provide navigation. For example, SDKMailbox is the access Object for the Mailbox Model. The Mailbox Model contains the property data related to the mailbox, but cannot navigate to mailbox folders or mailbox messages. The SDKMailbox Object contains relationship access properties to allow navigation to an ISDKFoldersCollection Object or ISDKMessagesCollection Object.

Each ISDKCollection provides a GetCount() method that can be used to retrieve the count of the collection without a full enumeration. Using Linq extensions such as Count() or Where() on the Items enumerable can cause performance issues because they operate on the entire collection, causing the yielded self-filling enumerable to be fully retrieved and processed locally. Using the ISDKCollection.GetCount() method performs a SQL query to calculate the number of records, and is far less expensive than retrieving all records.

ISDKMailbox testMailbox =
ISDKFolderCollection folders = testMailbox.Folders;
foreach (ISDKFolder folder in folders.Items)
ISDKMessageCollection messages = folder.Messages;
foreach (ISDKMessageSummary messageSummary in messages.Items)
ISDKMessage fullMessage = messageSummary.Email;
String subject = fullMessage.Subject;
IList<IAttachment2> attachments = fullMessage.Attachments;
IList<IEmailAddress2> to = fullMessage.To;

Any time an Object property is used, the SDK reissues the request for the data. In most cases, you will want to store the data you wish to access in its own variable to reduce sub requests while using Linq. For example, the following code would cause a new lookup for MyLogin for each item in the Mailboxes collection and would cause extra bandwidth to be used.

ISDKMailbox testMailbox =

Each time archiveManager.MyLogin.Id is evaluated, a request for MyLogin will be executed first. The more efficient way to perform this Linq lookup is to store MyLogin in an ISDKLogin Object. This way the evaluation of the ISDKLogin Id property does not cause a new request to lookup MyLogin.

ISDKLogin myLogin = archiveManager.MyLogin;
ISDKMailbox testMailbox =

The SDK Objects contain methods to Refresh or Save. This allows you to make changes to an object and save or revert changes by calling Save or Refresh. Certain properties cannot be change and calling Save may throw an exception.

String displayName = myLogin.DisplayName;
myLogin.DisplayName = "New Display Name";
myLogin.DisplayName = "Another New Display Name";
Self Service Tools
Knowledge Base
Notifications & Alerts
Product Support
Software Downloads
Technical Documentation
User Forums
Video Tutorials
RSS Feed
Contact Us
Licensing Assistance
Technical Support
View All
Related Documents

The document was helpful.

Select Rating

I easily found the information I needed.

Select Rating