Brian Ferris's blog

It's the End of Luminis As We Know It (And I Feel Fine)

Prior to Summit, on the eve of the release of Luminis IV, there were rumors spreading that Luminis' future as a portal built on a uPortal architecture was seriously in doubt. The rumors indicated that Luminis was going to undergo a radical transformation and be rebuilt on Oracle portal.

At the UDC kickoff session at Summit, this seemed to be confirmed; Brian Maddox, Sungard CEO, announced that Sungard had come to a wide ranging agreement with Oracle to standardize on Oracle middleware. Although this includes a number of components, the one that caught my eye was (naturally) the inclusion of Oracle portal.

AD&D 2nd Edition

This post is my third, and probably last(at least for a while) on drag and drop channels in Luminis. If you haven't read the first two, "D&D Channels" and "AD&D Channels", make sure you read them first, as this post builds off of them.

Making the AJAX Connection

We're going to replace the location.href line at the bottom of the DragChannel.js file with some AJAX code to make the call back to Luminis with the URL we've constructed. Replace that line with the following:

AD&D Channels

Advanced Drag and Drop Channels

Last time we saw the basics of drag and drop channels. But it wasn't something I would recommend going into production with. Yes, you could drag. You could drop. You could even integrate the drag and drop into Luminis's layout architecture-but there were several deficiencies that were noteworthy. Its these deficiencies we'll address now to make this a more robust channel dragging system. (This article really builds mostly on the last one-so if you haven't read D&D channels, do that first).

D&D Channels

A little earlier this year, a group of people here at Hofstra sat down and made a wish list of all the things we wished our portal could do but didn't. This wish list was based to some extent on our own experiences with Luminis, but also based on focus groups that had been run with faculty and students. I'll get back to the wish list in a future post-but one of the items that we listed was drag-and-drop channels.

Luminis' current channel layout system seemed to be too onerous for many users, and although we did allow users to customize one of their tabs-it seemed to be the rare user who bothered to do so. Wouldn't it be great if you could just drag your channels into place where you wanted them?

XML Transformers: More Than Meets the Eye

Luminis uses nested-tables.xsl to style XML that its spits out. Although you can get into nested-tables and make all kinds of alterations, I've seen a couple of people ask what the original XML file that nested-tables is transforming looks like(its not readily available, being generated by code somewhere). I was kind of curious myself due to a project I was working on. Here's how you can get it.

Blackboard Jungle

It used to be the case that as a new major version of Blackboard came out, your CPIP connectors would break. So when Blackboard 6 came out, Blackboard 5 connectors no longer worked. This was annoying; yet hardly surprising.

Then Blackboard started making changes on point versions; so if you try to migrate to 6.3, your connectors that worked fine in 6.2 no longer work.

Now, things have gotten so ridiculous over at Blackboard that even the most minor point upgrades require alterations to the connector-for example, connectors that worked fine with 6.3.1.505 no longer work with 6.3.1.593.

(For those of you on WebCT-stop laughing; now that Blackboard owns you you're probably next)

Building SSO to Groupwise With Luminis CPIP GCF

One of the more challenging CPIP connectors to build for Luminis Portal using the Generic Connector Framework was the connector to Groupwise Web Access. This is basically how we did it.

We found that Groupwise web access was setting two cookies JSESSIONID and NJSCN - one of these cookies had the user's IP address encoded in it. These were set at the Groupwise login page(before the user logs in).

Also if you look at the login page there was a field called User.context which had a session ID. This session ID ties into the cookies in some fashion inside web access.

Valkyrie's Password is About to Die (Tying Luminis into Novell Password Expirations)

Someone had asked me about this at Summit so I figured I would finally get around to putting it up. We're using EAS to Novell LDAP for our Luminis logins and last year we were asked to find a way to notify users if their password was about to expire.

Novell eDirectory is nice enough to store some of their password related fields in LDAP (the ones you'll need are passwordExpirationTime and loginGraceRemaining). We placed a hidden iframe on the primary tab. This iframe called a program that did a check to see if their password was expiring and gave them a JavaScript alert messgae if that was the case (and redirected them to Novell's password management system via CPIP to reset their password).

Bypassing the External Systems Error Screen in Luminis

If you have EAS (External Authentication Service) configured in Luminis, and you change your password in the external system, Luminis will give you an error screen telling you it doesn't match the password that it has on record.

Jon Wheat pointed out recently that since Luminis performs the password comparison in a case sensitive matter, it will give you this screen if the password doesn't match casewise (even if your external system is case insensitive).

Making the Generic Connector Framework Even More Generic

I did a presentation on this for the developer's lounge at Summit-and promised I would have it up by today. Hopefully someone will find it useful.


Sungard HE's Luminis way of connecting to other external services is called CPIP (Campus Pipeline Integration Protocol). For each external service you want to connect to you develop a CPIP connector. To make the task of developing CPIP connector's easy on their client, Sungard has created something called the Generic Connector Framework. The GCF is a CPIP connector that connects to a service based on two configuration files.

As an overview, to create a CPIP adapter for a system, you would:

Syndicate content