Skip navigation
All Places > Blackboard Developer Community > Blackboard Learn Developers > Blog > 2019 > April
2019

Here's how. Watch this video.

mkauffman

My LTI xxx Doesn't Work

Posted by mkauffman Apr 24, 2019


Solution -  Use our reference tool provider and compare what you are doing with what works. See: https://github.com/blackboard/BBDN-LTI-Tool-Provider-Node

 

Example:

I can't figure out why my JSON doesn't create deep links. Can you help?

 

Sure -watch this video.

The following works as shown in the video. Compare your JSON to the working code.

 

{"@context":"http://purl.imsglobal.org/ctx/lti/v1/ContentItem","@graph":[{"@type":"LtiLinkItem","mediaType":"application/vnd.ims.lti.v1.ltilink","icon":{"@id":"https://www.wpclipart.com/animals/F/ferret/.cache/Ferret_black-footed.jpg","width":50,"height":50},"title":"Week 1 reading LTI + Link<script>alert('help me');</script> <span style=\"font-family: Garamond; font-weight: bold; font-size: 24px\">Hello</span>","text":"Read this section prior to your tutorial. <script>alert('help me');</script> <span style=\"font-family: Garamond; font-weight: bold; font-size: 24px\">This should be large and bold</span>","custom":{"chapter":"12","section":"3","duedate":"2018-03-31T11:15:00+01:00"},"placementAdvice":{"displayHeight":100,"displayWidth":100,"windowTarget":"_blank"}},{"@type":"LtiLinkItem","mediaType":"application/vnd.ims.lti.v1.ltilink","icon":{"@id":"https://www.wpclipart.com/animals/F/frogs/.cache/Frog_eyeing_dinner.png","width":50,"height":50},"title":"Week 2 reading LTI","text":"Read this section prior to your tutorial.","custom":{"chapter":"12","section":"4","duedate":"2019-05-24T23:15:00+01:00"},"placementAdvice":{"displayHeight":100,"displayWidth":100,"presentationDocumentTarget":"iframe","windowTarget":"_blank"},"lineItem":{"@type":"LineItem","label":"Chapter 12 quiz","reportingMethod":"res:totalScore","assignedActivity":{"@id":"http://toolprovider.example.com/assessment/66400","activityId":"a-9334df-33"},"scoreConstraints":{"@type":"NumericLimits","normalMaximum":100,"extraCreditMaximum":10,"totalMaximum":110}}},{"@type":"ContentItem","@id":":item1","title":"Assignment: Assignment Specification","mediaType":"text/html","text":"Assignment: Assignment Specification","url":"https://www.py4e.com/install.php","placementAdvice":{"presentationDocumentTarget":"WINDOW","windowTarget":"_blank"},"icon":{"@id":"https://www.dr-chuck.net/tsugi-static/font-awesome-4.4.0/png/lock.png","width":64,"height":64}},{"@type":"ContentItem","url":"http://www.imageserver.com/path/image.jpg","mediaType":"image/jpg","title":"Title for my picture","placementAdvice":{"height":100,"width":100}}]}

 

Hope this helps. Cheers!

On April 10, 2019, Eric Preston, Blackboard's resident LTI expert, spoke with us in Technical Office Hours. He gave us an overview of LTI technology. Watch recording in Bb Collaborate.

 

On May 1, 2019, Eric followed up with another, deeper dive into coding an LTI integration. Watch the recording in Bb Collaborate and check out the slide deck attached.

 

Here is the sample code referenced in the presentations: https://github.com/blackboard/BBDN-LTI-Tool-Provider-Node


There are still questions floating around about Ultra and Building Blocks. As an example, one developer writes the following. I'm writing this to answer these questions, and any others you might have.

 

We are currently using a building block for one of the tools that we make available to customers using Blackboard. It is our understanding that any tools using building blocks will not be made available if a customer has switched to the Ultra experience. We have a couple of questions:

  1. If the admin has enabled Ultra but an instructor has not enabled it at the course level, can the instructor still access our tool if the tool using a building block has already been made available to them?
  2. Will you still make tools using building blocks available to customers using the original experience, or can they only access a tool using a building block if it was made available to them before Ultra was released?

 

First, to help clarify around the first question, switching to the Ultra experience (navigation) does not remove the Original courses that exist in the system. Building Blocks that work in a SaaS environment will continue to work in these Original experience courses when the system is switched to the Ultra experience. If a new Original experience course is created, the Building Block functionality will be available in this new course.  However, the Building Block integrations will not be available for use in any Ultra Experience courses that are created. As we've discussed previously in this blog, only LTI & REST API integrations are are available in Ultra courses. Building Blocks can not surface content in an Ultra course.

 

Regarding the second question, yes clients can request that their support team install any building block they would like in their SaaS system, both Ultra navigation and Original experience, before or after the switch from Original Experience to Ultra.

Given that I've seen multiple questions about the IMS spec and Deep Linking 1.0, I'm writing this post.  Below, for reference from our test implementation of a Tool Provider GitHub - blackboard/BBDN-LTI-Tool-Provider-Node: A node.js LTI Tool Provider for testing LTI launches, Caliper, and Outc… is sample JSON that can serve as guide for what works. It places multiple links to the provider, the highlighted LineItem is the gradable item. Hope this helps!

 

{"@context":"http://purl.imsglobal.org/ctx/lti/v1/ContentItem","@graph":[{"@type":"LtiLinkItem","mediaType":"application/vnd.ims.lti.v1.ltilink","icon":{"@id":"https://www.wpclipart.com/animals/F/ferret/.cache/Ferret_black-footed.jpg","width":50,"height":50},"title":"Week 1 reading LTI + Link<script>alert('help me');</script> <span style=\"font-family: Garamond; font-weight: bold; font-size: 24px\">Hello</span>","text":"Read this section prior to your tutorial. <script>alert('help me');</script> <span style=\"font-family: Garamond; font-weight: bold; font-size: 24px\">This should be large and bold</span>","custom":{"chapter":"12","section":"3","duedate":"2018-03-31T11:15:00+01:00"},"placementAdvice":{"displayHeight":100,"displayWidth":100,"windowTarget":"_blank"}},{"@type":"LtiLinkItem","mediaType":"application/vnd.ims.lti.v1.ltilink","icon":{"@id":"https://www.wpclipart.com/animals/F/frogs/.cache/Frog_eyeing_dinner.png","width":50,"height":50},"title":"Week 2 reading LTI","text":"Read this section prior to your tutorial.","custom":{"chapter":"12","section":"4","duedate":"2019-05-24T23:15:00+01:00"},"placementAdvice":{"displayHeight":100,"displayWidth":100,"presentationDocumentTarget":"iframe","windowTarget":"_blank"},"lineItem":{"@type":"LineItem","label":"Chapter 12 quiz","reportingMethod":"res:totalScore","assignedActivity":{"@id":"http://toolprovider.example.com/assessment/66400","activityId":"a-9334df-33"},"scoreConstraints":{"@type":"NumericLimits","normalMaximum":100,"extraCreditMaximum":10,"totalMaximum":110}}},{"@type":"ContentItem","@id":":item1","title":"Assignment: Assignment Specification","mediaType":"text/html","text":"Assignment: Assignment Specification","url":"https://www.py4e.com/install.php","placementAdvice":{"presentationDocumentTarget":"WINDOW","windowTarget":"_blank"},"icon":{"@id":"https://www.dr-chuck.net/tsugi-static/font-awesome-4.4.0/png/lock.png","width":64,"height":64}},{"@type":"ContentItem","url":"http://www.imageserver.com/path/image.jpg","mediaType":"image/jpg","title":"Title for my picture","placementAdvice":{"height":100,"width":100}}]}

 

Next week, Wednesday April 24, at 1100 EDT you can ask our lead LTI Developer any questions you have about Deep Linking 1.0 and LTI 1.3/Advantage with Deep Linking 2.0 during our Technical Office Hours!