] charan marwah [ asug installation member member since: 2003 raechal martin [ asug installation...

24
] CHARAN MARWAH [ ASUG INSTALLATION MEMBER MEMBER SINCE: 2003 RAECHAL MARTIN [ ASUG INSTALLATION MEMBER MEMBER SINCE: 2004 SYLVIE GAUTHIER [ ASUG INSTALLATION MEMBER MEMBER SINCE: 1999 User License Auditing Using the .NET SDK Dell Stinnett, BOCP-BOE XIr2 Reporting Manager Ryla, Inc.

Upload: cory-shepherd

Post on 17-Dec-2015

225 views

Category:

Documents


1 download

TRANSCRIPT

]

CHARAN MARWAH[ASUG INSTALLATION MEMBER MEMBER SINCE: 2003

RAECHAL MARTIN[ASUG INSTALLATION MEMBER MEMBER SINCE: 2004

SYLVIE GAUTHIER[ASUG INSTALLATION MEMBER MEMBER SINCE: 1999

User License Auditing Using the .NET SDK

Dell Stinnett, BOCP-BOE XIr2

Reporting ManagerRyla, Inc.

Real Experience. Real Advantage.

[

2

Learning Points

It is fairly simple to access user license and security information through the SAP BusinessObjects SDK query language.

Data from multiple CMS queries can be combined to provide meaningful insight into user and security setup in SAP BusinessObjects.

There are easy ways to use in-memory data sets as a data source for Crystal Reports

Real Experience. Real Advantage.

[

3

Agenda

1. Introduction2. User Auditing Requirements3. In Memory Dataset4. Load Data5. View Data in Crystal6. Conclusion7. Q&A

Real Experience. Real Advantage.

[

4

Introduction

Ryla, Inc is a leading domestic provider of Customer Contact Solutions to Fortune 500 companies, government agencies and nonprofit organizations Atlanta Business Chronicle's #1 Fastest Growing Firm in

2009 On Inc. 5000’s Fastest Growing Private Companies list

for four consecutive years, with a 2010 rank of 520. SAP BusinessObjects Edge 3.1

@240 total users 20 Named User licenses 20 Concurrent User Licenses

@700 active reports Most reports delivered by e-mail InfoView login required for on-demand reports and

some on-demand drill-down reports.

Real Experience. Real Advantage.

[

5

Auditing Requirements Quarterly Audits User Audit

Identify license type – Named or Concurrent Get the timestamp of most recent activity in

InfoView Validate that all users are current Ryla Employees

Group Audit Validate user groups against current project

assignment Validate the reports to which each group has access

Real Experience. Real Advantage.

[

6

Why Not Use the CMC or Query Builder?

No hard-copy or historical views. No ability to see the “big picture”

Can see all users assigned to a single group Can see all groups assigned to a single user Can see last logon for a single user Can’t combine it all into a single view of the data

Real Experience. Real Advantage.

[

7

BOECommon Class

Common functions for interacting with BusinessObjects CMS Login Translate Name to SI ID and vice versa Build InfoView path to a report Get all reports in a folder And much more!

Reusable so that the same code doesn’t exist in multiple places It made the upgrade from XI r2 to XI 3.1 much less

complicated.

Real Experience. Real Advantage.

[

8

In Memory DataSet

Four tables in an ADO.NET DataSet

Real Experience. Real Advantage.

[

9

Load Data

Data comes from two places CMS Audit Database

Three types of reports By User By Group By Report

User and Group data is always loaded Report data is only loaded if required

Real Experience. Real Advantage.

[

10

Load Data Logic

Real Experience. Real Advantage.

[

11

Get User Data from CMSstring query = "Select SI_NAME, SI_USERFULLNAME, SI_ID, SI_NAMEDUSER, " + "SI_LASTLOGONTIME, SI_DESCRIPTION " + "From CI_SYSTEMOBJECTS " + "Where SI_KIND='User' and SI_NAME!='Administrator' " + "and SI_NAME!='Guest' " + "and SI_NAME!='PMUser' and SI_NAME!='QaaWSServletPrincipal' " + "Order by SI_NAME";

using (InfoObjects users = _common.BOEInfoStore.Query(query)){ for (int i = 1; i <= users.Count; i++) { using (User userData = (User)users[i]) { loadUserInfo(userData); } }}

Real Experience. Real Advantage.

[

12

Get User Data from CMS (continued)private void loadUserInfo(User userData)

{

bool namedUser = (userData.Connection == CeConnectionType.ceConnectionNamed);

AddUserRow(userData.Title, userData.FullName, namedUser, userData.Description);

//get groups user is assigned to

string query = "Select SI_ID, SI_USERGROUPS " +

"from CI_SYSTEMOBJECTS where SI_ID=" + userData.ID.ToString();

using (InfoObjects userInfo = _common.BOEInfoStore.Query(query))

{

if (userInfo.Count > 0)

AddGroupRow(userInfo[1]);

}

}

Real Experience. Real Advantage.

[

13

Get Last Activty Date From Audit Database

Query based on “Last Login for All Users” report that comes with the Auditing package.

string query =

"SELECT DISTINCT AUDIT_EVENT.User_Name, " +

"max(AUDIT_EVENT.Start_Timestamp) " +

"FROM AUDIT_EVENT " +

"WHERE AUDIT_EVENT.User_Name Is Not Null " +

" AND AUDIT_EVENT.User_Name != 'Administrator' " +

" AND ltrim(rtrim(AUDIT_EVENT.User_Name)) != '' " +

"GROUP BY AUDIT_EVENT.User_Name ORDER BY AUDIT_EVENT.User_Name";

Real Experience. Real Advantage.

[

14

Get Report Info From CMS

string query =

"Select SI_ID, SI_NAME, SI_PARENTID, SI_KIND " +

"From CI_INFOOBJECTS " +

"Where SI_KIND in ('CrystalReport','Webi','Excel'," +

"'PDF','Rtf','Txt','Universe','Word') " +

" and SI_INSTANCE_OBJECT<1 " +

"order by SI_NAME, SI_ID";

Real Experience. Real Advantage.

[

15

Get Report Info From CMS (continued) using (InfoObject rpt = rpts[i])

{

dsAuditInfo.reportTable.AddreportTableRow(rpt.ID,

rpt.Title, rpt.Kind,

_common.GetPathFromFolderID(rpt.ParentID));

string role;

using (SecurityInfo si = rpt.SecurityInfo)

{

for (int j = 1; j <= si.ObjectPrincipals.Count; j++)

{

if (si.ObjectPrincipals[j].Role !=

CeRole.ceRoleNoAccess)

{

switch (si.ObjectPrincipals[j].Role)

{

case CeRole.ceRoleAdvanced:

role = "Advanced";

break; …

Real Experience. Real Advantage.

[

16

Report Creation

Select tables from Project Data\ADO.NET DataSets Seven reports

User List Users with Groups Users with Reports Users by Group Reports by Group Groups by Report Users by Report

Real Experience. Real Advantage.

[

17

Report Creation

Real Experience. Real Advantage.

[

18

Report Viewer

Single form with overloaded constructor Pass ADO.NET DataSet as a parameter to

constructor Load report based on selections in GUI.

Real Experience. Real Advantage.

[

19

Report Viewer – Overridden Constructor public BOEAuditRptViewer(DataSet dsAuditInfo, AuditRptType

rptType)

{

InitializeComponent();

switch (rptType)

{

case AuditRptType.UserList:

ConfigureUserListReport(dsAuditInfo);

break;

case AuditRptType.UserGroups:

ConfigureUserGroupsRpt(dsAuditInfo);

break;

case AuditRptType.UserReports:

ConfigureUserRptsRpt(dsAuditInfo);

break;

case …

}

}

Real Experience. Real Advantage.

[

20

BOEUserAudit Application - Demo

Real Experience. Real Advantage.

[

21

Best Practices

If you’re going to be writing more than one utility, separate out “common” functions into their own assembly.

Use a single report viewer form to display different reports by overriding the constructor.

Real Experience. Real Advantage.

[

22

Key Learnings

It is fairly simple to access user license and security information through the SAP BusinessObjects SDK query language.

Data from multiple CMS queries can be combined to provide meaningful insight into user and security setup in SAP BusinessObjects.

There are easy ways to use in-memory data sets as a data source for Crystal Reports

Real Experience. Real Advantage.

[

23

Q&A

Contact information:Dell StinnettEmail: [email protected]: www.dellstinnett.com

Real Experience. Real Advantage.

[

24

[

] Thank you for participating.

SESSION CODE: 411

Please remember to complete and return your evaluation form following this session.

For ongoing education on this area of focus, visit the Year-Round Community page at www.asug.com/yrc