This document explains the way to setup a portlet.
Entities Involved
- PortletCategory – Used to define category for portlets.
- PortalPortlet – All the information about a portlet is stored here.
- PortletPortletCategory – This associates the portlets with the logical categories.
- PortalPage – A portal page. Every Portal Page has a owner associated to it (userLoginId). To move a portlet from one Portal Page to another can be done
- If the logged in user is the owner of the portal page or
- If the portal page is a system page. (userLoginId="NA")
- PortalPageColumn – The number of the columns can be defined for a portal page.
- PortalPagePortlet – The portlets that belong to a portal page.
- PortalPageAndUserLogin – (View entity PortalPage + UserLoginSecurityGroup) - The portal pages that are accessible to a user if he belongs to certain security group.
- PortletAttribute – This defines all the attributes of a portlet. For example, to display a portlet, it needs a roleTypeId (attrName) = PLACING_CUSTOMER (attrName).
How To Setup
Here I am taking an example from OOTB implementation to show how do we setup a portlet.
The reference file here is PartyPortletData.xml Data preparation needs
to be done as shown bellow this is all done for viewprofile page in
partymgr:
Following is the first portlet with its all the associations and details:
<PortletCategory portletCategoryId="PROFILE" description="Profiles"/> <PortalPortlet portalPortletId="party" portletName="Party Info" screenName="Party" screenLocation="component://party/widget/partymgr/ProfileScreens.xml" description="General information about a person or party group" screenshot="/images/portlets/party.png"/> <PortletPortletCategory portalPortletId="party" portletCategoryId="PROFILE"/> <PortalPage portalPageId="PartyProfile" sequenceNum="0" portalPageName="Party Profile Portal Page" description="Party profile page using flexible Portal technology" ownerUserLoginId="_NA_"/> <PortalPageColumn portalPageId="PartyProfile" columnSeqId="00001" columnWidthPercentage="50"/> <PortalPageColumn portalPageId="PartyProfile" columnSeqId="00002"/><!-- no width in pixels or percent, use the rest of the space available --> <PortalPagePortlet portalPageId="PartyProfile" portalPortletId="party" portletSeqId="00001" columnSeqId="00001" sequenceNum="0"/>
Screen Setup
(OFBiz Trunk)
Now following code works in the screen to have portlets in action:
Trace the screen "viewprofile" from
/party/widget/partymgr/PartyScreens.xml. We need to set portalPageId in
parameters and include generic screen PortalPageScreen from
component://common/widget/CommonScreens.xml
Which is as follows(Reference commit in OFBiz trunk rev. 900156):
<screen name="PortalPageScreen"> <section> <actions> <entity-one entity-name="PortalPage" value-field="portalPage"/> <get-related value-field="portalPage" relation-name="PortalPageColumn" list="portalPageColumns"/> <entity-and entity-name="PortalPagePortletView" list="portalPagePortlets"> <field-map field-name="portalPageId" from-field="portalPage.portalPageId"/> </entity-and> </actions> <widgets> <platform-specific> <html><html-template location="component://common/webcommon/portal/showPortalPage.ftl"/></html> </platform-specific> </widgets> </section> </screen>