| IQMSGetUserDocumentNodes Method |
Namespace: PIX.Services.V12
| Exception | Condition |
|---|---|
| Exception | Thrown if the caller does not have access to the user document folder with the specified ID. |
This method is typically used to retrieve the user documents as a tree structure. Each returned DocumentNode contains a RelativePath property which describes where in the tree structure the node belongs. It also contains a IsSubFolder property that indicates whether the node represents a sub folder or a document.
To retrieve the first level of nodes under the user document folder specified by folderID, set the relativePath parameter to an empty string. For deeper levels of nodes, set the relativePath parameter to a path combined of the relative path and the name of the parent node at the previous level.
Requires membership of local group QlikView Management API and the role Document Folder Administrator. |
The service key injection is assumed to be handled behind the scenes.
using System; using System.Collections.Generic; using System.IO; using System.Linq; using QMSAPI; class Program { static void Main(string[] args) { try { // create a QMS API client IQMS apiClient = new QMSClient(); //retrieve a time limited service key ServiceKeyClientMessageInspector.ServiceKey = apiClient.GetTimeLimitedServiceKey(); // get a list of QVS services List<ServiceInfo> qvsServices = apiClient.GetServices(ServiceTypes.QlikViewServer); if (qvsServices.Count > 0) { // retrieve all user document folders for the first QVS in the list Console.WriteLine("The " + qvsServices[0].Name + " contains has following user document file structure:" + Environment.NewLine); List<DocumentFolder> userDocumentsFolders = apiClient.GetUserDocumentFolders(qvsServices[0].ID, DocumentFolderScope.General | DocumentFolderScope.Services); // loop through all user document folders foreach (DocumentFolder userDocumentFolder in userDocumentsFolders.OrderBy(x => x.General.Path)) { // print the names of all user document folders, // prefix with [R] for root folder and [M] for mounts string folderPrefix = (string.IsNullOrEmpty(userDocumentFolder.General.Path) ? "[R]" : "[M]"); string folderName = (string.IsNullOrEmpty(userDocumentFolder.General.Path) ? qvsServices[0].Name : userDocumentFolder.General.Path); Console.WriteLine(folderPrefix + " " + folderName); // print all sub nodes of the current user document folder PrintUserDocumentNodes(apiClient, userDocumentFolder, string.Empty, 1); } } } catch (Exception ex) { Console.WriteLine("An exception occurred: " + ex.Message); } // wait for user to press any key Console.ReadKey(); } static void PrintUserDocumentNodes(IQMS apiClient, DocumentFolder userDocumentFolder, string relativePath, int indentationDepth) { // retrieve all user document nodes of the given folder and under the specified relative path List<DocumentNode> userDocumentNodes = apiClient.GetUserDocumentNodes(userDocumentFolder.Services.QVSID, userDocumentFolder.ID, relativePath); // loop through all current user document nodes foreach (DocumentNode userDocumentNode in userDocumentNodes .OrderByDescending(x => x.IsSubFolder).ThenBy(x => x.Name)) { // print the names of all user document nodes, indent and // prefix with [F] for folders and [D] for documents string indentation = new string(' ', indentationDepth * 3); string nodePrefix = (userDocumentNode.IsSubFolder ? "[F]" : "[D]"); Console.WriteLine(indentation + nodePrefix + " " + userDocumentNode.Name); // print all sub nodes of the current user document node if it represents a folder if (userDocumentNode.IsSubFolder) { PrintUserDocumentNodes(apiClient, userDocumentFolder, Path.Combine(relativePath, userDocumentNode.Name), indentationDepth + 1); } } } }