Additional Blogs by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member
0 Kudos

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.



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.


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.

29 Comments