/**
Licensed Materials - Property of IBM
IBM Cognos Products: DOCS
(C) Copyright IBM Corp. 2005, 2008
US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with
IBM Corp.
*/
// *
// * Capabilities.sln
// *
// * Copyright (C) 2008 Cognos ULC, an IBM Company. All rights reserved.
// * Cognos (R) is a trademark of Cognos ULC, (formerly Cognos Incorporated).
// *
// * Description: This sample illustrates how to manipulate capabilities.
// *
// * Input: Search Path to a capabilities object. Possible values are:
// * Name Search Path
// * Administration /capability/securedFunction[@name='Administration']
// * Query Studio /capability/securedFunction[@name='Query Studio']
// * Report Studio /capability/securedFunction[@name='Report Studio']
// * SDK /capability/securedFunction[@name='SDK']
// *
// *
// * Outcome: Adds or removes the current user from the capabilities/Administration user list.
// *
// *
using System;
using System.Web.Services.Protocols;
using SamplesCommon;
using cognosdotnet_10_2;
namespace Capabilities
{
///
/// Summary description for Capabilities.
///
class Capabilities
{
///
/// The main entry point for the application.
///
///
public Capabilities(){}
static void Main(string[] args)
{
string cBIUrl = "";
contentManagerService1 cmService = null;
CapabilitiesDlg capabilitiesDlgObject = null;
SamplesConnect connectDlg = new SamplesConnect();
if (args.GetLength(0) == 0 )
{
// GUI mode
connectDlg.ShowDialog();
if (connectDlg.IsConnectedToCBI() == true)
{
cmService = connectDlg.CBICMS;
cBIUrl = connectDlg.CBIURL;
capabilitiesDlgObject = new CapabilitiesDlg();
capabilitiesDlgObject.setConnection(cmService, cBIUrl);
capabilitiesDlgObject.ShowDialog();
}
}
}
public bool setCapabilities(contentManagerService1 cBICMS, ref string resultMessage)
{
string secFuncPath = "/capability/securedFunction[@name='Administration']";
account myAccount = getLogonAccount(cBICMS);
baseClass[] results = new baseClass[0];
securedFunction securedFunction = null;
searchPathMultipleObject cmTargetPath = new searchPathMultipleObject();
cmTargetPath.Value = secFuncPath;
results =
cBICMS.query(
cmTargetPath,
new propEnum[] {
propEnum.searchPath,
propEnum.policies,
propEnum.defaultName },
new sort[] {},
new queryOptions());
securedFunction = (securedFunction)results[0];
policy pol;
int numPolicies = securedFunction.policies.value.GetLength(0);
policy[] tmpPolicies = new policy[numPolicies + 1];
policy[] newPolicies;
int j = 0;
for (int i = 0; i < numPolicies; i++)
{
pol = securedFunction.policies.value[i];
String polSecPath =
pol.securityObject.searchPath.value;
if (0 != polSecPath.CompareTo(myAccount.searchPath.value))
{
tmpPolicies[j++] = pol;
}
}
if (j < numPolicies)
{
newPolicies = new policy[j];
for (int i = 0; i < j; i++)
{
newPolicies[i] = tmpPolicies[i];
}
}
else
{
policy newPolicy = null;
for (int i = 0; i < myAccount.policies.value.GetLength(0); i++)
{
if (-1 != myAccount.policies.value[i].securityObject.ToString().IndexOf("account"))
{
newPolicy = myAccount.policies.value[i];
}
}
newPolicies = tmpPolicies;
newPolicies[j] = newPolicy;
}
policyArrayProp policyPropForUpdate = new policyArrayProp();
policyPropForUpdate.value = newPolicies;
securedFunction.policies = policyPropForUpdate;
cBICMS.update(new baseClass[] { securedFunction }, new updateOptions());
resultMessage = "The \"" + securedFunction.defaultName.value + "\" secured function " +
"has been successfully updated.";
return true;
}
public account getLogonAccount(contentManagerService1 cBICMS)
{
propEnum[] props =
new propEnum[] { propEnum.searchPath, propEnum.defaultName, propEnum.policies, propEnum.objectClass };
account myAccount = new account();
try
{
searchPathMultipleObject cmQueryPath = new searchPathMultipleObject();
cmQueryPath.Value = "~";
baseClass[] bc = cBICMS.query(cmQueryPath, props, new sort[] {}, new queryOptions());
if ((bc != null) && (bc.GetLength(0) > 0))
{
for (int i = 0; i < bc.GetLength(0); i++)
{
myAccount = (account)bc[i];
}
}
}
catch (System.Exception ex)
{
//An exception here likely indicates the client is not currently
//logged in, so the query fails.
return null;
}
return myAccount;
}
}
}