Introduction
In this weblog i am going to present a Dynpage that display content assigned to a user in a nice htmlb tree display.
Jar files required
com.sap.portal.usermanagementapi.jar,com.sap.portal.pcd.glserviceapi.jar,com.sap.portal.pcmbuilderserviceapi.jar
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.NameClassPair;
import javax.naming.NamingEnumeration;
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.IPcdContext;
import com.sapportals.portal.pcd.pcm.builder.IPcmEditObject;
import com.sapportals.portal.pcd.pcm.builder.IPcmObjectBuilder;
import com.sapportals.portal.pcd.pcm.builder.IPcmObjectService;
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;
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();
IPcmObjectService pcdFactory =
(IPcmObjectService) PortalRuntime
.getRuntimeResources()
.getService(
IPcmObjectService.KEY);
Hashtable env = new Hashtable();
env.put(
Context.INITIAL_CONTEXT_FACTORY,
IPcdContext.PCD_INITIAL_CONTEXT_FACTORY);
env.put(
Context.SECURITY_PRINCIPAL,
this.getServiceUser("pcd_service"));
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();
String text =
"!!"
+ r.getDescription();
TreeNode name =
new TreeNode(r.getDisplayName(), text, root);
name.setEncode(false);
recursive_role_content(
roleroot,
pcdFactory,
env,
name,
request);
}
} catch (Exception e) {
response.write(e.getMessage());
}
gl.addComponent(2, 1, tree);
}
}
public void onDisplay(Event event) throws PageException {
InputField useridfld = (InputField) getComponentByName("userid");
userid = useridfld.getValueAsDataType().toString().toUpperCase();
}
public void recursive_role_content(
String root,
IPcmObjectService pcdFactory,
Hashtable env,
TreeNode name,
IPortalComponentRequest request)
throws Exception {
IPcmObjectBuilder pcmSrv = pcdFactory.getInitialContext(env);
NamingEnumeration names = pcmSrv.list(root);
while (names.hasMore()) {
NameClassPair nameclass = (NameClassPair) names.next();
String pcdurl = root + "/" + nameclass.getName();
IPcmEditObject pcmObj = (IPcmEditObject) pcmSrv.lookup(pcdurl);
String img = "";
if (pcmObj
.getObjectClassName()
.equals("com.sapportals.portal.workset"))
img = request.getWebResourcePath() + "/images/workset.gif";
else if (
pcmObj.getObjectClassName().equals(
"com.sapportals.portal.rolefolder"))
img = request.getWebResourcePath() + "/images/folder.gif";
else if (
pcmObj.getObjectClassName().equals(
"com.sapportals.portal.page"))
img = request.getWebResourcePath() + "/images/page.gif";
else if (
pcmObj.getObjectClassName().equals(
"com.sapportals.portal.iview"))
img = request.getWebResourcePath() + "/images/iView.gif";
else if (
pcmObj.getObjectClassName().equals(
"com.sapportals.portal.layout"))
img =
request.getWebResourcePath()
+ "/images/page_layout.gif";
String text = "!!" + pcmObj.getTitle();
TreeNode name1 = new TreeNode(pcmObj.getTitle(), text, name);
name1.setEncode(false);
NamingEnumeration newnames = pcmSrv.list(pcdurl);
if (newnames.hasMore()) {
recursive_role_content(
pcdurl,
pcdFactory,
env,
name1,
request);
}
}
}
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;
}
}
}
Save the following images and add it to your
dist->images
folder.Deploy your application in your portal. h5. BAM! you got yourself a nice utility iView that display all the content assigned to a user.