Let’s assume I want to store different documents in a document-library in SharePoint, based on different templates. The easiest way would be to create different content-types for each kind of document. Each content-type can have an individual template in turn.
But what if I have just one logical content-type, but I have different document templates? I could create master content-type, which holds all properties. Then I create sub content-types and assign the different templates to those. This way I can maintain the properties on the master content-type and don’t have to worry about the sub content-types.
Problem solved!
But what I actually wanted was to have dedicated links to add new documents based on a certain template to my document library. I achieved this, but I needed to created three content-types in order to do so.
A different approach.
Instead of creating different content-types with different templates, I just create two hyperlinks “create document a” and “create document b”. With a couple of lines of javascript I’m ready to go.
First of I need a document library to store my templates. In the next step I add a content editor webpart to my listview. Because I cannot add javascript code to the content editor webpart directly, I placed my code in a separate file, which I also placed in the template document library (to keep thinks simple for now). So I reference this file in the content editor webpart.
This file basically contains some javascript to add new documents based on a certain template to the library:
function NewWord() { var strTemplate = makeAbsUrl("/Template/WordTemplate.docx"); var strSaveLocation = makeAbsUrl("/Shared Documents"); var strProgId = "SharePoint.OpenDocuments"; createNewDocumentWithProgID(strTemplate, strSaveLocation, strProgId, false); return false; } function NewExcel() { var strTemplate = makeAbsUrl("/Template/ExcelTemplate.xlsx"); var strSaveLocation = makeAbsUrl("/Shared Documents"); var strProgId = "SharePoint.OpenDocuments"; createNewDocumentWithProgID(strTemplate, strSaveLocation, strProgId, false); return false; }
This with some little HTML …
<span style="width: 10px; height: 10px; overflow: hidden; display: inline-block; position: relative;"> <img style="left: 0px !important; top: -128px !important; position: absolute;" src="/_layouts/images/fgimg.png" alt=""/> </span> <a onclick="NewWord();" href="#">New Word-Document</a> |  <span style="width: 10px; height: 10px; overflow: hidden; display: inline-block; position: relative;"> <img style="left: 0px !important; top: -128px !important; position: absolute;" src="/_layouts/images/fgimg.png" alt=""/> </span> <a onclick="NewExcel();" href="#">New Excel-Document</a>
… could just do.