Skip to Content
Author's profile photo Former Member

Browse Roles, Folders, Pages & iViews assigned to a user: EP6 SP9 and higher

Introduction

In this weblog i am going to present a Dynpage that display content assigned to a user in a nice htmlb tree display. This code is for portal version EP6 SP9 or higher.

image

Jar files required

com.sap.portal.usermanagementapi.jar,com.sap.portal.pcd.glserviceapi.jar

Step1

Create a Dynpage project using NWDS or Eclipse wizard. Add the following source code to your

dynpage

component.

package com.ust.browserole;

/* Built By: Prakash Singh

  • Universal System Technologies, Inc

  • M 407-474-2216

*/

import java.util.Hashtable;

import java.util.Iterator;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NameClassPair;

import javax.naming.NamingEnumeration;

import javax.naming.NamingException;

import com.sap.ip.portal.service.ume.IUserManagementEngine;

import com.sap.security.api.IRole;

import com.sap.security.api.IUser;

import com.sap.security.api.UMException;

import com.sap.security.api.UMFactory;

import com.sap.security.api.srvUser.IServiceUserFactory;

import com.sapportals.htmlb.Button;

import com.sapportals.htmlb.Form;

import com.sapportals.htmlb.GridLayout;

import com.sapportals.htmlb.Group;

import com.sapportals.htmlb.InputField;

import com.sapportals.htmlb.Label;

import com.sapportals.htmlb.Tree;

import com.sapportals.htmlb.TreeNode;

import com.sapportals.htmlb.enum.GroupDesign;

import com.sapportals.htmlb.event.Event;

import com.sapportals.htmlb.page.DynPage;

import com.sapportals.htmlb.page.PageException;

import com.sapportals.portal.htmlb.page.PageProcessorComponent;

import com.sapportals.portal.pcd.gl.IPcdAttribute;

import com.sapportals.portal.pcd.gl.IPcdContext;

import com.sapportals.portal.prt.component.IPortalComponentRequest;

import com.sapportals.portal.prt.component.IPortalComponentResponse;

import com.sapportals.portal.prt.runtime.PortalRuntime;

public class display extends PageProcessorComponent {

     public DynPage getPage() {

          return new displayDynPage();

     }

     public static class displayDynPage extends DynPage {

          /**

          

  • Initialization code executed once per user.

           */

          String userid;

          private final String PCDCONTEXT =

               “com.sapportals.portal.pcd.gl.IPcdContext”;

          private final String PCDIVIEW =

               “com.sapportals.portal.ivs.iviews.IPortalIview”;

          private final String PCDPAGE =

               “com.sapportals.portal.ivs.iviews.IPortalPage”;

          private final String PCDROLE =

               “com.sapportals.portal.pcd.pcm.roles.IRoleDescriptor”;

          private final String PCDWORKSET =

               “com.sapportals.portal.pcd.pcm.roles.IWorksetDescriptor”;

          private final String PCDSYSTEM =

               “com.sapportals.iviewserver.systemlandscape.service.ISystemObject”;

          private final String PCDLAYOUT =

               “com.sapportals.portal.ivs.iviews.ILayout”;

          private final String PCDFOLDER =

               “com.sapportals.portal.pcd.pcm.roles.IRoleFolderDescriptor”;

          public void doInitialization() {

               userid = “”;

          }

          /**

          

  • Input handling code. In general called the first time with the second page request from the user.

           */

          public void doProcessAfterInput() throws PageException {

          }

          /**

          

  • Create output. Called once per request.

           */

          public void doProcessBeforeOutput() throws PageException {

               Form myForm = this.getForm(); // get the form from DynPage

               // create your GUI here….     

               Group myGroup = new Group();

               myForm.addComponent(myGroup);

               myGroup.setWidth(“350”);

               myGroup.setDesign(GroupDesign.SAPCOLOR);

               myGroup.setTitle(“Browse assigned content for a user”);

               GridLayout gl = new GridLayout();

               myGroup.addComponent(gl);

               gl.setCellSpacing(5);

               GridLayout gl1 = new GridLayout();

               gl.addComponent(1, 1, gl1);

               Label lbluserid = new Label(“Userid”);

               gl1.addComponent(1, 1, lbluserid);

               InputField inpuserid = new InputField(“userid”);

               inpuserid.setValue(userid);

               gl1.addComponent(1, 2, inpuserid);

               Button buttondisplay = new Button(“Display”);

               buttondisplay.setText(“Display”);

               buttondisplay.setOnClick(“Display”);

               gl1.addComponent(2, 1, buttondisplay);

               if (!userid.equals(“”)) {

                    Tree tree = new Tree(“S_Tree”, “”);

                    tree.setRootNodeIsVisible(false);

                    TreeNode root = new TreeNode(“e_root”, “Role Content”);

                    root.setOpen(true);

                    tree.setRootNode(root);

                    IPortalComponentResponse response =

                         (IPortalComponentResponse) this.getResponse();

                    IPortalComponentRequest request =

                         (IPortalComponentRequest) this.getRequest();

                    try {

                         IUser user =

                              UMFactory.getUserFactory().getUserByLogonID(userid);

                         Iterator role = user.getRoles(true);

                         String roleroot;

                         String imgrolepath =

                              request.getWebResourcePath() + “/images/role.gif”;

                         while (role.hasNext()) {

                              String rolestr = (String) role.next();

                              IRole r = UMFactory.getRoleFactory().getRole(rolestr);

                              roleroot = r.getUniqueName();

                              //roleroot = “portal_content/administrator/super_admin/super_admin_role/com.sap.portal.system_administration”;

                              String text =

                                   “!!”

                                        + r.getDescription();

                              TreeNode name =

                                   new TreeNode(r.getDisplayName(), text, root);

                              //response.write(“

” + r.getDisplayName() + “


“);
name.setEncode(false);
list_context(
request,
response,
getEnvironment(request),
roleroot,
name);
}
} catch (Exception e) {
try {
e.printStackTrace(
request.getServletResponse(true).getWriter());
} catch (Exception e1) {
}
}
gl.addComponent(2, 1, tree);
}

}

public void onDisplay(Event event) throws PageException {
InputField useridfld = (InputField) getComponentByName(“userid”);
userid = useridfld.getValueAsDataType().toString().toUpperCase();

}

private void list_context(
IPortalComponentRequest request,
IPortalComponentResponse response,
Context initialContext,
String browsing_root,
TreeNode name) {

try {
NamingEnumeration names = initialContext.list(browsing_root);

if (names.hasMoreElements()) {
NameClassPair nameClass;
while (names.hasMore()) {
nameClass = (NameClassPair) names.next();
String img = “”;
String new_root =
browsing_root + “/” + nameClass.getName();
//new_root = new_root.trim();
if (nameClass.getClassName().equals(PCDWORKSET))
img =
request.getWebResourcePath()
+ “/images/workset.gif”;
else if (nameClass.getClassName().equals(PCDFOLDER))
img =
request.getWebResourcePath()
+ “/images/folder.gif”;
else if (nameClass.getClassName().equals(PCDPAGE))
img =
request.getWebResourcePath()
+ “/images/page.gif”;
else if (nameClass.getClassName().equals(PCDIVIEW))
img =
request.getWebResourcePath()
+ “/images/iView.gif”;
else if (nameClass.getClassName().equals(PCDLAYOUT))
img =
request.getWebResourcePath()
+ “/images/page_layout.gif”;

String objtitle = “”;
try {

IPcdContext targetobject =
(IPcdContext) initialContext.lookup(new_root);
Object object =
targetobject.getAttributes(“”).get(
“com.sap.portal.pcm.Title”);
if (object instanceof IPcdAttribute) {
IPcdAttribute att = (IPcdAttribute) object;
objtitle = att.get(request.getLocale());
}

} catch (Exception e) {
response.write(e.getMessage() + “
“);
}

String text = “!!” + objtitle;
TreeNode name1 =
new TreeNode(nameClass.getName(), text, name);

if (nameClass.getClassName().equals(PCDWORKSET)
|| nameClass.getClassName().equals(PCDFOLDER)
|| nameClass.getClassName().equals(PCDPAGE)) {
list_context(
request,
response,
initialContext,
new_root,
name1);
}
}
}
} catch (Exception e) {
response.write(e.getMessage());
}
}

public InitialContext getEnvironment(IPortalComponentRequest request) {
String methodName = “getEnvironment”;
InitialContext initialContext = null;
try {
IUser principalObj = null;

// set the security principal
principalObj = this.getServiceUser(“pcd_service”);

Hashtable env = new Hashtable();

env.put(
Context.INITIAL_CONTEXT_FACTORY,
“com.sapportals.portal.pcd.gl.PcdInitialContextFactory”);

if (principalObj != null) {
env.put(Context.SECURITY_PRINCIPAL, principalObj);
}

env.put(
“com.sap.portal.jndi.requested_aspect”,
“com.sap.portal.pcd.gl.PersistencyAspect”);
env.put(“java.naming.factory.object”, “__IPcdContext__”);

initialContext = new InitialContext(env);

} catch (NamingException e) {
}
return initialContext;
}

public IUser getServiceUser(String username) {
IPortalComponentResponse response =
(IPortalComponentResponse) this.getResponse();

IUser serviceUser = null;

IUserManagementEngine ume =
(IUserManagementEngine) PortalRuntime
.getRuntimeResources()
.getService(
IUserManagementEngine.KEY);

IServiceUserFactory sufactory = ume.getServiceUserFactory();
try {
serviceUser = sufactory.getServiceUser(username);
} catch (UMException e) {
response.write(e.getMessage());
}

return serviceUser;

}

}
}

Step2

Step 3

Save the following images and add it to your

dist->images

folder.

image

image

image

image

image

image

Step 4

Deploy your application in your portal. h5. BAM! you got yourself a nice utility iView that display all the content assigned to a user.

image

Assigned tags

      29 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Former Member
      Former Member
      Hi Prakash,

      this is a nice tool for sure. Just implemented it and it works fine.

      Regards, Karsten

      Author's profile photo Former Member
      Former Member
      Blog Post Author
      Thank you Karsten. I am glad you liked it.

      regards,
      Prakash Singh

      Author's profile photo Former Member
      Former Member
      Could you plz send me the com.sap.portal.pcd.glserviceapi.jar
      to id: sapmails@gmail.com

      Thanx prakash!

      Author's profile photo Former Member
      Former Member
      Hello Prakash,

      Very nice weblog! I am wondering if this can be used as a kind of "inteligent site map", where for each single user, it will always display the Roles, Worksets and Pages available...

      Congrats!

      Author's profile photo Former Member
      Former Member
      Blog Post Author
      You have given me a nice challenge. Let me work on that and see if i can produce something.
      Author's profile photo Former Member
      Former Member
      You know that would probably be one of the most useful tools for the SAP Portal.  I recall back in my days at TransAlta, that we did not have that ability in Ep5, so TransAlta chose to combine both SAP Portal and IBM WebSphere, with IBM WebSphere as the front end (I know, I know - what were they thinking).  This way, they could leverage functionality such as IBM WebSphere's built-in SiteMap generation capabilities.  I love the idea, and this would be so useful for users that often complain about 'getting lost in the Portal'.  Prakash, I know you can do your magic, as you always do, so I'd love to see this - 'cause I can definitely see value in having it in our Portal at Suncor.  Good luck to you, and I guess I can expecte a sweet weblog by you with the code in the near future (nudge, nudge, wink, wink, hint, hint).  Thanks, again - keep up the great work, Prakash!

      -Vis-

      Author's profile photo Former Member
      Former Member
      Blog Post Author
      Hi Vis,
         Thanks for the great feedback. Hopefully i get some time to work on the sitemap.
      Prakash
      Author's profile photo Frank Neumann
      Frank Neumann
      Hi,
      I modified your code slightly to use it in a Portal Service. Everythings works great except that I'm getting always null when I execute

      objtitle = att.get(request.getLocale())

      I exchanged request.getLocale() with the locale of the current portal user (IUser.getLocale()).

      Any idea?

      Thanks,
      Frank

      Author's profile photo Narayanaswamy Balasubramaniam
      Narayanaswamy Balasubramaniam
      prakash can i get the jar files

      com.sap.portal.usermanagementapi.jar
      com.sap.portal.pcd.glserviceapi.jar

      it will be really useful

      Best Regards
      Swamy.B

      Author's profile photo Narayanaswamy Balasubramaniam
      Narayanaswamy Balasubramaniam
      hi prakash

      i got the jars .......but not the latest one 

      this jar does not has the (com.sap.portal.pcd.glserviceapi.jar) following class files

      IPcdContext
      IPcdAttribute

      so please send the latest jar files

      com.sap.portal.pcd.glserviceapi.jar

      Thanks in Advance
      Swamy.B

      Author's profile photo Former Member
      Former Member
      Blog Post Author
      can you send me an email at psingh(at)ust.net.
      Author's profile photo Former Member
      Former Member
      Hi Prakash,
      Could you please explain me the use of following tag:

      If the same code is run with some "Standard User", then it is throwing me an exception for the above line.

      Also, What all are the privileges required for the Standard User for do the PCD look up.

      Regards,
      Neeraj

      Author's profile photo Former Member
      Former Member
      Prakash,

      How do you check to see if a user has write permission to a folder when you build a pcd browser as you did?

      Thanks

      Author's profile photo Former Member
      Former Member
      HI It was working on this EP version

      #Fri May 21 21:00:24 CEST 2004
      Creation-Date=20040521
      Creation-Time=1912
      Manifest-Version=1.0
      Implementation-Title=Portal version.info
      JDK-Version=1.3.1
      Creation-User=makefact
      Implementation-Vendor=SAP AG
      Sync-Changelist=204112
      Implementation-Vendor-Id=com.sap
      version=6.0.2.4.1
      Specification-Vendor=SAP AG
      Implementation-Version=6.2.0.4.200405212100
      Make-Release=60_SP2_REL
      Sync-Timestamp=200405211839

      Version History
      6.0.2.4.8_ContentManagement_Collaboration
      6.0.2.4.1.Enterprise_Portal_Service_Pack_2

      BUT NOT WORKING ON THIS VERSION
      #Wed Oct 20 02:55:46 CEST 2004
      Creation-Date=20041020
      Creation-Time=0255
      Manifest-Version=1.0
      Implementation-Title=@package-description@
      JDK-Version=${jdk.version}
      Creation-User=jointadm
      Implementation-Vendor=SAP AG
      Sync-Changelist=19348
      Implementation-Vendor-Id=com.sap
      version=6.0.9.0.0
      Specification-Vendor=SAP AG
      Implementation-Version=@package-version@
      Make-Release=60NW_VAL_REL
      Sync-Timestamp=${sync.time}

      Version History
      6.0.9.0.0.Enterprise_Portal_Support_Release

      What would be the reason.. It displays only the first role . then it throws the null exception on the dynpage.

      IS it possible to make it work even on this .

      thanks

      PK

      Author's profile photo Former Member
      Former Member
      Sorry it is working working on this .. some code is missing.

      Is it possible to make the iviews as live links I mean after clicking this iview I should be able to get the actual iview should open in a new window.

      pk

      Author's profile photo Santhosh Manchala
      Santhosh Manchala
      Hi Prakash,

      I dont have to say anything abt your great work.

      I have one requirement where I think I can use this code.
        I need to have a program which runs everyday to see what a user roles are in backend and checks to see if it has corresponding roles in Portal. If not it changes the roles of the user to match that of backend roles. If user doesnt exist in portal then it should create the user and then assign the roles.

      Can you please suggest me a solution in this case?

      Thanks in advance
      Santhosh

      Author's profile photo Former Member
      Former Member
      com.sap.ip.portal.service.ume.IUserManagementEngine;
      com.sapportals.portal.pcd.gl.IPcdAttribute;
      com.sapportals.portal.pcd.gl.IPcdContext;

      could you please send them to me to (lcalderonz@gmail.com)or maybe you know about a site where I can download directly.

      Thanks!
      Very Good Weblog, it will be very useful to me 🙂

      Leslie

      Author's profile photo Former Member
      Former Member
      I can't find the file needed for some of the imports... Can you please tell me where to find it or send it to me on this mail address: michael.gthomsen@gmail.com

      Regards
      Michael

      Author's profile photo Former Member
      Former Member
      Hi Prakash,
      I have one application with the same requrement. I was able to meet the requirements.
      Now I have one problem in displaying the title of a selected role. In your code you have used role.getDescription() and role.getDisplayName() which nowhere realted with title of the role.
      Coudl you please suggest me how can we get the title of a role?
      Thank you,
      Sandeep Kumar B
      Author's profile photo Former Member
      Former Member
      Hi Prakash,

      It is really nice tool. We can get evrything using your code. We have the same requirement, but we need to seperate those and display. My question is I want to diplay iViews in one dropdownlist, pages in one list and so on. Can please guide me how can I seperate those.

      Regards
      Suresh

      Author's profile photo Former Member
      Former Member
      Hi

      can you forward me all the jars file required for running the webblog

      Browse Roles, Folders, Pages & iViews assigned to a user: EP6 SP9 and higher

      you can send me to hijohnmattew@yahoo.co.in

      Regards
      JM

      Author's profile photo Former Member
      Former Member
      Hi,

      Request you to kindly provide all required jars @
      kapilmsharma@gmail.com

      Thanks and Regards

      Author's profile photo Former Member
      Former Member
      Hi,

      Request you to kindly provide all required jars @
      kapilmsharma@gmail.com

      Thanks and Regards
      Kapil Sharma

      Author's profile photo Former Member
      Former Member
      Hi Prakash,

      I need to use your application on a Web Dynpro Application... I saw that use IPortalComponentRequest. I didn´t get to use IPortalComponentRequest on Web Dynpro.

      Can u help me?

      Thanks,
      Bruno

      Author's profile photo Former Member
      Former Member
      Hi Bruno,

      Did you find the method to implement the displaying of roles, worksets, iviews, etc as per the portal user using webdynpro ?

      I have an urgent requirement on that. Please let me know if you have found the solution.

      Thanks in advance.
      Regards,
      Sayan Ghosh

      Author's profile photo Former Member
      Former Member
      Hi Bruno,
      Have you implemneted the application in webdynpro. I have an immediate requirement for this application in webdynpro. Can u please email me in brief how you approached to this on aparna.rachuri@gmail.com

      would look forward for your help.

      Thanks,
      Aparna

      Author's profile photo Former Member
      Former Member
      Hi Aparna

      Hope you are doing good
      I have the same requirement ie I have to do the same thing in Web DynPro.

      Can you please let me know that how you did that and if possible can you send me the code to my ID ie vivek571@gmail.com

      Thanks & regards
      Vivek Kumar Mishar

      Author's profile photo Narasimha Murthy Balla
      Narasimha Murthy Balla
      Hi Aparna,

      Did you find the solution in Web Dynpro. I do have the save requirement, if you have implmented can you please guide me.

      Please mail me the approach/code/any documentation at ballanarasimhamurthy@gmail.com

      Thanks,
      Chinna.

      Author's profile photo Former Member
      Former Member
      I know, I know, this blog entry is 5 years old.

      But for everyone, who perhaps needs it: the jar files are the c:\usr\sap\J2E\JC00\j2ee\cluster\server0\apps\sap.com\irj\servlet_jsp\irj\root\WEB-INF\portal\portalapps\com.sap.portal.pcd.glservice\lib\gl_api.jar and c:\usr\sap\J2E\JC00\j2ee\cluster\server0\apps\sap.com\irj\servlet_jsp\irj\root\WEB-INF\portal\portalapps\com.sap.portal.usermanagement\lib\com.sap.portal.usermanagementapi.jar

      Best regards,
      Miklos