How to Use Reposcan to Repair CMS and FRS

This post describes the steps to repair CMS database and Filestore using SAP BusinessObjects reposcan.exe.

Note that this may delete some items from CMS or Filestore if the dependencies are not found. Make sure that you have made necessary backups before applying reposcan.

You can run the tool without repairing option (or with -repair off). This will scan the environment and make the report of inconsistencies which will be saved to the output folder.

1. Create folder C:\Reposcan
2. Create file reposcan.ini in the folder

-dbdriver sqlanywheredatabasesubsystem 
-connect "UID=dba;PWD=1-Password;DSN=BI4_CMS_DSN"
-dbkey "[[qoNXDD3yCYuHLyTpqyj9Cw]]"
-inputfrsdir "C:\Program Files (x86)\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\FileStore\Input"
-outputfrsdir "C:\Program Files (x86)\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\FileStore\Output"
-outputdir "C:\Reposcan"
-repair on

For Oracle, the first two line should be:

-dbdriver oracledatabasesubsystem 
-connect "UID=<user>;PWD=<password>;DSN=<dsn>"

For SQL Server:

-dbdriver sqlserverdatabasesubsystem 
-connect "UID=<user>;PWD=<password>;DSN=<dsn>"

The value for dbkey can be found in Central Configuration Manager under CMS Cluster Key Configuration:
sia
Here you can also see DNS under CMS System Database Configuration.

3. Create file reposcan.bat

"C:\Program Files (x86)\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win64_x64\reposcan.exe" -optionsfile "C:\Reposcan\reposcan.ini"
pause

4. Run the file reposcan.bat
reposcan

Disable automatic start of Server Manager

Server Manager > Manage > Server Manager Properties > Do not start Server Manager automatically at logon

server_manager_disable

Disable Password Complexity for Local Accounts

Local Security Policy > Account Policies > Password Policy > Password must meet complexity requirements -> Disabled

passwordcomplexity

How to Allow Remote TCP/IP Connections for SQL Server

  1. SQL Server Configuration Manager > SQL Server Network Configuration > Protocols for SQLEXPRESS > TCP/IP > IPAll
    TCP Dynamic Ports is blank
    TCP Port = 1433
  2. SQL Server Management Studio > Server Properties > Security
    Server authentication = SQL Server and Windows Authentication mode
  3. Services > SQL Server Browser
    Enable and start
  4. Windows Firewall with Advanced Security > Inbound Rules > New Rule… > Port
    Allow the connection for the port 1433

How to Delete Files Older Than 30 Days from Windows Command Line

forfiles -p F:\Logs -s -m *.log /D -30 /C "cmd /c del @path"

Tool for updating non-Administrator group

BO 4.x has a possibility to customize the user interface of Web Intelligence for specific groups of users. For instance, you may want to hide "Design Mode" interface elements for report viewers who are not supposed to edit reports.

others-group-03

This can be done in Central Configuration Management in Groups:

others-group-01

others-group

The problem is that the change will be applied for all users who belong to the group. If a report designer belongs to the group, it will not be able to see the disabled interface elements even if the user belongs Administrators group.

A solution is to create a group of non administrators group (say Others) and apply user interface customization for this group.

However it is a tedious work to maintain two groups Administrators and Others. I have created a tool which allows to maintain the Others group. If a user is not Administrators group (e.g. new user) or if it is removed from Administrators group, the tool will add the user to Others group. If a user is added to Administrators group, it will be deleted from Others groups.

Here is the link to archive: othersgroup-1.0.zip

The archive includes executable and source code:
others-group-02

The batch file has the following parameters you may need to change.

The location of BusienssObjects:

set BO=C:\Program Files (x86)\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0

BO Administrator credentials:

set BOADMIN=Administrator
set BOPASS=
set BOSERV=localhost
set BOAUTH=secEnterprise

The groups names:

set EVERYONE=Everyone
set ADMIN=Administrators
set OTHERS=Others

The connection driver "xxx" is unknown. (SLS 16000)

com.sap.sl.sdk.authoring.internal.AuthoringException: The connection driver "SAP NetWeaver BW 7.x/SAP BICS Client" is unknown. (SLS 16000)

The documentation says to use "SAP NetWeaver BW 7.x", but you have to use "SAP BW 7.x" instead. I.e.

OlapConnection connection = connectionFactory.createOlapConnection(
  connectionName, "SAP BW 7.x", "SAP BICS Client");

Other OLAP drivers just in case:

Microsoft Analysis Services 2005 ODBO
Microsoft Analysis Services 2008 ODBO
Microsoft Analysis Services 2012 ODBO
Microsoft Analysis Services 2005 XMLA
Microsoft Analysis Services 2008 XMLA
Microsoft Analysis Services 2012 XMLA
Financial Consolidation 10 for Microsoft Platform XMLA
Planning and Consolidation 7.5 for Microsoft Platform XMLA
Planning and Consolidation 10 for Microsoft Platform XMLA
Profitability and Cost Management 10 XMLA
Strategy Management 10 XMLA
Oracle OLAP XMLA
Hyperion Essbase 11.x XMLA
Hyperion Essbase 11.x Essbase API for Analysis
Teradata XMLA
SAP BW 7.x SAP BICS Client
SAP HANA SAP Hana Client

Semantic Layer SDK – check java bitness, path variable and connectivity property

There are three things that are important when you build a program that uses Semantic Layer SDK.

  • You need to include sl_sdk.jar to the class path.
  • You need to use 32 bit java
  • The system property businessobjects.connectivity.directory should be set to the connection server folder
    -Dbusinessobjects.connectivity.directory="C:\Program Files (x86)\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\dataAccess\connectionServer"
  • The system variable PATH should be set to win32_x86
    C:\Program Files (x86)\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86

It is quite easy to see if sl_sdk.jar is included, your program will fail quickly with NoClassDefFoundError. It might be not so obvious with the other three. The following code may help you to check them:

System.out.println("java = " + System.getProperty("java.version") + ", " 
  + System.getProperty("sun.arch.data.model") + " bit");
System.out.println("path = " + System.getenv("PATH"));
System.out.println("businessobjects.connectivity.directory = "
  + System.getProperty("businessobjects.connectivity.directory"));

List of all relations in BusinessObjects

Below is the list of all relations in BusinessObjects 4.1 SP7. The relations are useful if you need to find dependent objects in Query Builder. A relations have a type and a name. Here is how to use it.

The relation Webi-Universe is Parent-Child, so Webi is Parent and Universe is Child. If you want to find all Webi documents (parents) that use a specific universe (child), you need to use query:

SELECT SI_NAME
FROM CI_INFOOBJECTS, CI_APPOBJECTS, CI_SYSTEMOBJECTS
WHERE PARENTS("SI_NAME='Webi-Universe'","SI_NAME='{the name of the universe}'")

If you want to find all universes (children) that are used by a specific Webi document (parent), you need to use the query:

SELECT SI_NAME
FROM CI_INFOOBJECTS, CI_APPOBJECTS, CI_SYSTEMOBJECTS
WHERE CHILDREN("SI_NAME='Webi-Universe'","SI_NAME='{the name of the webi document}'")

 

TYPE SI_NAME
Child-Parent ActionSet-Action
Child-Parent ActionUsage-Action
Parent-Child AlertNotification-User
Child-Parent Application-Action
Parent-Child Application-DependencyRule
Parent-Child Application-Relationship
Child-Parent Category-Document
Parent-Child CommonConnection-AOPresentation
Parent-Child CommonConnection-AOWorkbook
Parent-Child CommonConnection-Document
Parent-Child CommonConnection-MDAnalysis
Parent-Child CommonConnection-pQuery
Child-Parent Container-ActionUsage
Parent-Child CrystalReport-BusinessView
Child-Parent CustomRole-Object
Parent-Child DataConnection-Universe
Child-Parent DefaultObject-Application
Child-Parent Document.discussion
Parent-Child Document-BIVariant
Parent-Child Document-DSL.Universe
Parent-Child Document-Excel
Parent-Child Document-Follower
Parent-Child Document-PersistenceQuery
Parent-Child Document-UnFollower
Child-Parent DSL.DataSecurityProfile-SecuredConnections
Child-Parent DSL.SecurityProfile-Principal
Child-Parent DSL.Universe-BusinessSecurityOptions
Child-Parent DSL.Universe-BusinessSecurityProfile
Child-Parent DSL.Universe-DataSecurityOptions
Child-Parent DSL.Universe-DataSecurityProfile
Child-Parent DSL.Universe-SecuredConnections
Parent-Child EnterpriseData-Flash
Parent-Child EnterpriseNode-MON.ManagedEntityStatus
Parent-Child EnterpriseNode-Server
Parent-Child Event-AlertNotification
Parent-Child Event-Principal
Parent-Child Event-Principal-Exclusion
Parent-Child EventSource-AlertNotification
Parent-Child EventSource-Event
Parent-Child Folder-MON.ManagedEntityStatus
Child-Parent InfoObject-Shortcuts
Child-Parent Install-EnterpriseNode
Parent-Child Install-Service
Parent-Child Install-ServiceContainer
Parent-Child Manifest-ReplicableObject
Parent-Child MON.ManagedEntityStatus-MON.MonitoringEvent
Parent-Child MON.ManagedEntityStatus-MON.Subscription
Parent-Child PlatformSearchContainer-PlatformSearchObject
Child-Parent Plugin-Action
Parent-Child Profile-Principal
Parent-Child PublicationArtifacts-SourceDoc
Parent-Child Publication-ExcludedPrincipal
Parent-Child Publication-FC
Parent-Child Publication-Principal
Parent-Child Publication-PrincipalReRun
Parent-Child Publication-Profile
Parent-Child PublicationScopeBatch-Artifact
Parent-Child PublicationScopeBatchDoc-Artifact
Parent-Child QAAWS-WEBI
Child-Parent ReferringDoc-SharedDoc
Parent-Child RelationalConnection-CrystalReport
Parent-Child Relationship-Application
Child-Parent RemoteCluster-ConflictingObjects
Parent-Child ServerGroup-MON.ManagedEntityStatus
Child-Parent ServerGroup-Server
Parent-Child Server-MON.ManagedEntityStatus
Parent-Child ServiceCategory-MON.ManagedEntityStatus
Parent-Child ServiceCategory-Service
Parent-Child ServiceContainer-Server
Parent-Child Service-Server
Parent-Child Service-ServiceContainer
Parent-Child Service-ServiceDep
Parent-Child ServiceUsedBy-Service
Child-Parent Tenant-ServerGroup
Child-Parent Universe(Core)-Universe
Child-Parent Universe-UserGroup
Parent-Child UpgradeManagementTool-LogicalGroup
Parent-Child UpgradeManagementTool-Plugin
Parent-Child User-BIVariant
Parent-Child User-CommonConnection
Child-Parent User-Favorites
Parent-Child User-FavouriteMEStatus
Parent-Child UserGroup-Folder
Child-Parent UserGroup-User
Child-Parent User-Inbox
Parent-Child User-MON.ManagedEntityStatus
Parent-Child User-MON.Subscription
Child-Parent User-PersonalCategory
Parent-Child User-VisualDiffComparator
Parent-Child VISI.Lums-ManagedConnectionRel
Parent-Child VISI.Lums-UniverseRel
Parent-Child WebiFHSQL-DataConnection
Parent-Child Webi-Universe
Parent-Child XL.XcelsiusEnterprise-DataSource
Parent-Child XL.XcelsiusEnterprise-XL.Query

HTTP Status 500 Bad tag encountered: 78

HTTP Status 500 – com.wedgetail.idm.sso.ProtocolException: com.wedgetail.idm.spnego.server.SpnegoException: com.dstc.security.util.asn1.Asn1Exception: Bad tag encountered: 78

Bad-tag-encountered-78

See SAP Note 1799488.

Single sign on does not work by default for LaunchPad on the server machine. This behavior is by design as the servers are unable to pass Vintela filter.

Use the following URL to access LaunchPad on the server: http://localhost:8080/BOE/BI/logonNoSso.jsp

You may want to modify the LaunchPad link properties in Start Menu to use logonNoSso.jsp.