2017-05-22

AEM Stuff that I have experienced goes here


  • Granite UI
  • Setup and Config
  • Deployment
  • Jenkins related
  • Components
  • REST interfaces


Work in progress..



2014-06-12

Accessing a portal page metadata using Javascript.

The WebSphere Portal has got a client based interface towards many of it's functions, this interface is called the mashup client interface and comes from the mashup server product which has been incorporated into the WebSphere Portal product.

Here is a small example of how to read the pagemetaData parameters from a page using javascript:
        var nm = com.ibm.mashups.enabler.navigation.Factory.getNavigationModel();
        var selectedNode = nm.find(ibmCfg.portalConfig.currentPageOID).start();
        // fetch the currentpage metadata only
       selectedNode.getmetaData("metdataparametername");
       // fetch all aggregated metadata values
        metadatavalue = aggregatedPageMetadata["metadataparameter"];
Here is an example of how to store new metadata values:

    var nm = com.ibm.mashups.enabler.navigation.Factory.getNavigationModel();
    var selectedNode = nm.find(ibmCfg.portalConfig.currentPageOID).start();
    selectedNode.setMetaData("cds.css." + type ,url);    
    nm.commit().start(); // Sync save.
var asyncSave = nm.commit(); 
asyncSave.setFinishedCallback(commited);
asyncSave.setOperationCallback(commitoper);
asyncSave.start();

// finished callback function
function commited(result, status) {
    // handle overall status
    if (status == 200  status == 201) {
        alert("Successfully committed navigation model.");
    } else {
        alert("Failed to commit navigation model;
HTTP status code '" + status + "'.");
    }
}
// operation callback function
function commitoper(result, operation, status) {
 if (operation == asyncSave.OPERATION_SAVE){
}else if (operation == asyncSave.OPERATION_MODIFY){
}else if (operation == asyncSave.OPERATION_DELETE){
}

}

2014-01-07

Simple adding of Google analytics code on a portal dynamic spot item:

<%-- Google Analytics include file for the page --%>
<portal-logic:pageMetaData varname="pageMetaData">
    <c:set var="gacode" value="${pageMetaData['ga.code']}" />

<c:if test="${not empty gacode}">
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

ga('create', '${apsgacode}', '<company>.com');
ga('require', 'linkid', 'linkid.js');// page tracking enable
gaFriendly = document.location.indexOf("/!ut");
gaLoc = document.location.href;
if (gaFriendly != -1){
gaLoc = document.location.href.substring(0,gaLoc);
}
ga('set', 'location', gaLoc);
${pageMetaData['ga.option1']}
${pageMetaData['ga.option2']}
${pageMetaData['ga.option3']}
ga('send', 'pageview');
</script>
</c:if>
</portal-logic:pageMetaData>

This code will add a simple support for google analytics on a portal theme page, I added this to the head.jsp file for now but can be included anywhere.
Since we use the page meta data i.e parameters we will be able to use the same theme on many virtual portals.

2013-08-16

Force a virtual portal to a specific language

How do I force a specific virtual portal based on hostname to a specific language?

In order to force the WebSphere Portal to display a certain langugage the easiest way is to replace the "Accept-Language" header to whatever locale you want but if you have muliple virtual hosts you also have to check for the hostname in the request.

The below lines can be placed in the Apache httpd.conf file in order to add headers based on the conditional rule of the hostname.


SetEnvIf Host \.<server host> force-en
#Header echo Accept-Language <- will return the language.
RequestHeader unset Accept-Language env=force-en
RequestHeader append Accept-Language "en-us" env=force-en



2013-06-10

How to read the WebSphere Portal page mode.

In order to find out the view or edit mode of a portal page in WebSphere Portal 8 the portlet can read the public rendering parameter of the toolbar state:

Just add this to the portlet.xml file

<public-render-parameter>                                              
  <description>Shared render parameter that holds the toolbar state.</description>                                                      
  <identifier>toolbarstate</identifier>                                
  <qname xmlns:utb='http://www.ibm.com/xmlns/prod/websphere/portal/publicparams/utb'>utb:state</qname>                                                  
</public-render-parameter>                                              
                                                                       
Inside the <portlet> tag you need to add:                                                                                                    
<supported-public-render-parameter>toolbarstate</supported-public-render-parameter>

The value is then red using a normal:
 String statevalue = renderRequest.getparameter("toolbarstate");


2013-03-13

Delegate,Delegate,Delegate

Note to self, always add the group you want to assign rights to to the user group you want to assign rights from in the Portal config.

<?xml version="1.0" encoding="UTF-8"?>
<request type="update" version="8.0.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PortalConfig_8.0.0.xsd" create-oids="true">
    <portal action="locate">
        <group action="update" domain="rel" name="baseline_group">
            <access-control externalized="false" owner="undefined" private="false">
                <role actionset="Delegator" update="set">
                    <mapping subjectid="portal_editors" subjecttype="user_group" update="set" />
                    <mapping subjectid="librarians" subjecttype="user_group" update="set" />
/>
                </role>
                <role actionset="Can Run As User" update="set">
                    <mapping subjectid="librarians" subjecttype="user_group" update="set" />
/>
                </role>
            </access-control>
        </group>
    </portal>
</request>

2012-11-16

New version of deployment of all JAR files to a artifact repository

rem *********************************************************************
rem * Peter Grape,Mogul AB                                              *
rem * Run this script in the <RAD homedir>/runtimes/portal_v70_stub and *
rem * <RAD homedir>/runtimes/base_v7_stub                               *
rem * execute with "<thisfile>.vbs > mavenwps.bat" and "<thisfile>.vbs > mavenwas.bat"*

rem *********************************************************************

    REM Change these to you liking
  
    urlPath = "http://host/artifactory/libs-ibm-local"
    repoPath = "libs-ibm-local"

    grpId = "unknown"
    version = "unknown"
    artId = "unknown"

    companygrpId = "com.company.portal"

Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "."

Set objFolder = objFSO.GetFolder(objStartFolder)
    objRootFolder = objFolder.Path

set wshell = createobject("wscript.shell")

outFile=".\upload.bat"
Set uploadFile = objFSO.CreateTextFile(outFile,True)

outFile=".\deps.pom"
Set depsFile = objFSO.CreateTextFile(outFile,True)

depsrunFilename=".\uploaddeps.bat"
Set depsrunFile = objFSO.CreateTextFile(depsrunFilename,True)

    SetversionAndType objFolder

    uploadFile.Write "@echo off"& vbCrLf
    uploadFile.Write "REM File created by Peter Grape"& vbCrLf
    uploadFile.Write "set mvn_options=deploy:deploy-file -Dversion=" + versionID + " -Dpackaging=jar -DrepositoryId=" + repoPath + " -Durl=" + urlPath & vbCrLf
    uploadFile.Write "set runtime_root=" + objRootFolder & vbCrLf

    RunUploadSubfolders objFolder
    uploadFile.Close

rem currentDir = wshell.currentdirectory
depsrunFile.write "set mvn_options=deploy:deploy-file -DartifactId=" + artId + " -DgroupId=" + companygrpid + " -Dversion=" + VERSION + " -Dpackaging=pom -DrepositoryId=" + repoPath + " -Durl=" + urlPath + vbCrLf
depsrunFile.write "set runtime_root=" + wshell.currentdirectory + vbCrLf
depsrunFile.write "call mvn %mvn_options%  -Dfile=""%runtime_root%\deps.pom""" & vbCrLf
depsrunFile.close

Set objFolder = objFSO.GetFolder(objStartFolder)
    objRootFolder = objFolder.Path


depsFile.Write "<project xmlns=""http://maven.apache.org/POM/4.0.0"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""" & vbCrLf
depsFile.Write "    xsi:schemaLocation=""http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"">" & vbCrLf
depsFile.Write "    <modelVersion>4.0.0</modelVersion>"& vbCrLf
depsFile.Write "    <groupId>com.company.portal</groupId>"& vbCrLf
depsFile.Write "    <artifactId>" + artId + "</artifactId>"& vbCrLf
depsFile.Write "    <version>" + version + "</version>"& vbCrLf
depsFile.Write "    <packaging>pom</packaging>"& vbCrLf
depsFile.Write "    <name>IBM WebSphere Server " + version + "</name>"& vbCrLf
depsFile.Write "    <description>All the JAR files in the IBM WebSphere server " + version + "</description>"& vbCrLf
depsFile.Write "    <organization>"& vbCrLf
depsFile.Write "        <name>company IT AB</name>"& vbCrLf
depsFile.Write "        <url>http://www.company.com/</url>"& vbCrLf
depsFile.Write "    </organization>"& vbCrLf
depsFile.Write "    <developers>"& vbCrLf
depsFile.Write "        <developer>"& vbCrLf
depsFile.Write "            <email>peter.grape@company.com</email>"& vbCrLf
depsFile.Write "            <url>http://www.company.com</url>"& vbCrLf
depsFile.Write "            <organization>company IT AB</organization>"& vbCrLf
depsFile.Write "            <organizationUrl>http://www.company.com</organizationUrl>"& vbCrLf
depsFile.Write "        </developer>"& vbCrLf
depsFile.Write "    </developers>"& vbCrLf
depsFile.Write "    <dependencies>"& vbCrLf

RunDepsSubfolders objFolder

depsFile.Write "    </dependencies>"& vbCrLf
depsFile.Write "    <issueManagement>"& vbCrLf
depsFile.Write "            <system>Jira</system>"& vbCrLf
depsFile.Write "            <url>http://jira.company.com</url>"& vbCrLf
depsFile.Write "        </issueManagement>"& vbCrLf
depsFile.Write "    </project>"& vbCrLf

depsFile.Close

Sub RunUploadSubfolders(Folder)
    For Each Subfolder in Folder.SubFolders
        Set objFolder = objFSO.GetFolder(Subfolder.Path)
        relPath = Replace(Subfolder.Path,objRootFolder,"")
        relID = Replace(relPath,"\",".")
        Set colFiles = objFolder.Files
        For Each objFile in colFiles
            sExtension = objFSO.GetExtensionName(objFile.Name)
            if (sExtension = "jar") Then
                sBasename =  objFSO.GetBaseName(objFile.Name)
                uploadFile.Write "call mvn %mvn_options% -DgroupId=" + grpID + relID + " -DartifactId=" + sBasename + " -Dfile=""%runtime_root%" + relPath + "\" + objFile.Name + """" & vbCrLf
            end if
        Next
        RunUploadSubfolders Subfolder
    Next
End Sub
  
Sub RunDepsSubfolders(Folder)
    For Each Subfolder in Folder.SubFolders
rem         depsFile.Write Subfolder.Path
        Set objFolder = objFSO.GetFolder(Subfolder.Path)
        relPath =  Replace(Subfolder.Path,objRootFolder,"")
        relID = Replace(relPath,"\",".")
        Set colFiles = objFolder.Files
        For Each objFile in colFiles
            sExtension = objFSO.GetExtensionName(objFile.Name)
            if (sExtension = "jar") Then
                sBasename =  objFSO.GetBaseName(objFile.Name)
                depsFile.Write "<dependency>"& vbCrLf
                depsFile.Write "<groupId>" + grpId + relID + "</groupId>"& vbCrLf
                depsFile.Write "<artifactId>" + sBasename + "</artifactId>"& vbCrLf
                depsFile.Write "<version>" +  version + "</version>"& vbCrLf
                depsFile.Write "</dependency>"& vbCrLf
            end if
        Next
        RunDepsSubfolders Subfolder
    Next
End Sub

Sub SetversionAndType(Folder)
    isBase = InStr(Folder.name,"base")
    isPortal = InStr(Folder.name,"portal")
    wscript.echo "isBase:" & isBase
    wscript.echo "isPortal:" & isPortal
    if (isBase = 1) then
        grpID = "com.ibm.was"
        artId = "ibm-was"
    end if
    if (isPortal = 1) then
        grpID = "com.ibm.wps"
        artId = "ibm-wps"
    end if
    versionStart = InStr(Folder.name,"_v")
    versionEnd = InStr(versionStart + 2,Folder.name,"_")
    if (versionStart <> 0) and (versionEnd <> 0) then
        versionStr = Mid(Folder.name,versionStart + 2,versionEnd - (versionStart + 2))
        wscript.echo "version:" + versionStr
        if (Len(versionStr) = 1) then
            versionStr = versionStr + "0"
        end if
        versionID = Left(versionStr,1) & "." & Right(versionStr,1)
        wscript.echo "Version:" + versionStr & "," & versionID
    else
        wscript.echo "version not found in folder name"
        wscript.quit
    end if
end sub