Creating an application that supports sharing may look complicated at first glance, but please take a look at the following example. It is definitely worth to implement support for sharing, as the value of your application will increase a lot! It is really a powerful feature to be able to create content in one place and easily share it in many different courses.

 

"History, Industrial Revolution" is a test. It contains a lot of questions that are connected to LearningObjectId. Users with Participate permission should be allowed to submit answers. As you can see the title can be different in the various courses for the same content (LearningObjectId). Also the deadline, assessment scale, and when the test is active can vary from instance to instance, ModifyInstance or Modify Permission is required to change these properties.

Here is a very simplified diagram of what the database structure could be - just to give you some ideas:

When you create data model and business logic for an application that supports sharing, you should be careful when deleting and editing content connected to a LearningObjectId, because it can be shared between many instances. E.g. marking records as deleted instead of physically deleting them and think about sharing scenarios when designing user interface will help.

Important: When a user in it's learning adds an instance into a course which refers to a library instance, the view page for your application will be called - not the add page. This is because content should already be in place. However, if your application depends on some settings on instance level before view page can be shown, feel free to redirect user to an appropriate page. In the example above this may be setting assessment scale to use etc.

Even if you don’t plan code in c# it is a good idea to download the SDK and take a look at methods and comments in the classes (especially the ones in BasePage.cs)