Date post: | 18-Jan-2016 |
Category: |
Documents |
Upload: | gillian-stevens |
View: | 246 times |
Download: | 0 times |
Using Template Variables and Creating Your Own Custom Template Variables
Brett StephensSystems AnalystLearning Platforms TeamUniversity of Miami
Definitions
• Template Variable–@[email protected]@X@–Used in content items or portal modules
• Institutional Role–Community Engagement license–Student, Faculty, etc–Used for branding and availability of tabs & modules
The Challenge
• UM participating in NSSE
• Administered by Indiana University
• 5,342 students (freshmen and seniors) at UM selected to participate
• 15,000 users on UM’s Blackboard every week
What We Did
How?
Why a Custom Template Variable?
• Survey links specific to user
• No Authentication
•@[email protected]@X@ used where URL would be–@X@...@X@ replaced by output of java method
Institutional Role Usage
• The NSSE module was only displayed to survey participants (NSSE role)
• NSSE role assigned to users via SIS Flatfile upload
Module Availability based on Institutional Role(s)
Standard Template Variables
Standard Template Variables
• @[email protected]@X@
• Objects with template variables–User–Course–Content–Request–System
Standard Template Variables
–Locale (en_US)
–Role (system)
– Institution_role
–Secondary_institution_role
• @[email protected]@X@– @[email protected]_uid@X@
• User–batch_uid
– id
–full_name
–pk_string (_751_1)
Standard Template Variables
• Course–batch_uid
– id
–course_name
–pk_string (_2702_1)
–url (/courses/1/BIL206/)
–Role (of user in course)
–Locale (en_US)
Standard Template Variables
• Content– id or pk_string (_37_1)–url
• Request– id– locale–Return (return url)
• System–site_id
Example Uses of Template Variables
Link to content item within description (banner image)
/webapps/blackboard/content/launchLink.jsp?course_id=
@[email protected]_string@X@&
content_id=@[email protected]_string@X@
Instead of
/webapps/blackboard/content/launchLink.jsp?
course_id=_355958_1&content_id=_6028740_1
Example Uses of Template Variables
Custom Course GreetingHello @[email protected]@X@, welcome to @[email protected]_name@X@
User_list_context_menu & course_list_context_menu links in B2s (in bb-manifest.xml)
<url value="userinfo.jsp?user_id=@X@target_user.username@X@"/><url value="courseinfo.jsp?course_id=@[email protected]@X@"/>
Defining Custom Template Variables in a Building Block
Resolution of a Template Variable
@X@umia_user.nsse_link@X@
CustomResolverGet user_id from context
Query umia_surveylinks table with user_id
return surveylink
Replace @X@umia_user.nsse_link@X@ with surveylink
Important Files in the B2
• Bb-manifest.xml
• Schema.xml
• Config.jsp
• CustomContextHandler.java
• CustomResolver.java
Bb-manifest.xml
<extension-defs>
<definition namespace="blackboard.platform">
<extension id="customContextHandler“
point="blackboard.platform.contextHandler"
class="edu.miami.nsse.CustomContextHandler"
singleton="false" />
</definition>
</extension-defs>
Bb-manifest.xml
<http-actions>
<config value="admin/config.jsp" />
</http-actions>
<schema-dirs>
<schema-dir dir-name="main" />
</schema-dirs>
Bb-manifest.xml
<permissions> <permission type="attribute"
name="user.authinfo" actions="get" />
<permission type="runtime"
name="db.connection.*" />
</permissions>
Schema.xml<table name="umia_surveylinks">
<column name="user_id" data-type="nvarchar(20)" nullable="false"/>
<column name="link" data-type="nvarchar(300)" nullable="false"/>
<primary-key name="umia_surveylinks_pk1" unique="true" comment="Unique primary key">
<columnref name="user_id" />
</primary-key>
</table>
Db Table Sample Data
USER_ID SURVEY_LINKusername1 http://fakesurveylink.com/3E01512username2 http://fakesurveylink.com/1E6867Fusername3 http://fakesurveylink.com/1F5B55D
Config.jsp
Config.jsp
• Get db connection from BbDatabase conn manager
• Tokenize and iterate through csv file– INSERT INTO umia_surveylinks (user_id, link) VALUES
(?, ?)–setString(1, user_id)–setString(2, surveylink)
• Catch SQLException– release connection
CustomContextHandler.java
public List<ContextEntry> resolveKeys(HttpServletRequest request, BbPersistenceManager unused) {
CustomResolver resolver = new CustomResolver(request);
Resolver.attachResolverToContext(resolver);
return new LinkedList<ContextEntry>();}
CustomResolver.java
public String[] getKeys() {
return (new String[] {"umia_user"});
}
CustomResolver.java
public String resolve(String method, String attributes[]) {
String varout = "";
ContextManagerFactory.getInstance()
.setContext(_request);
Context ctx = ContextManagerFactory.getInstance().getContext();
CustomResolver.java
String userid = ctx.getUser().getUserName();
Connection conn = null;
StringBuilder queryString = new StringBuilder("");
ConnectionManager cManager = null;
PreparedStatement selectQuery = null;
CustomResolver.java
if ("NSSE_link".equalsIgnoreCase(method)) {
try {
cManager = BbDatabase.getDefaultInstance()
.getConnectionManager();
conn = cManager.getConnection();
queryString.append("SELECT link
FROM umia_surveylinks ");
CustomResolver.java
queryString.append("WHERE user_id = ?");
selectQuery =
conn.prepareStatement(queryString.toString());
selectQuery.setString(1, userid);
ResultSet rSet = selectQuery.executeQuery();
while(rSet.next()){
varout = rSet.getString("link");
}
CustomResolver.java
selectQuery.close();
cManager.releaseConnection(conn);
} catch (java.sql.SQLException sE){
LogServiceFactory.getInstance().logError("NSSE SQL Exception:", sE);
} catch (ConnectionNotAvailableException cE) {
LogServiceFactory.getInstance().logError("NSSE Connection Exception:", cE); }
CustomResolver.java
finally {
if (conn != null) cManager.releaseConnection(conn);
}
return varout;
Outcome of Our Efforts
•Overall Participation: 27%
• 34% Completed Survey Through Blackboard Learn Link
Conclusion
• Why This Worked (as well as it did)–Simplicity–Logic detached from presentation
• What I Learned–Reuse database connections when possible–Close database connections!