CHUVASH.eu

CHunky Universe of Vigourous Astonishing SHarepoint :)

Tag Archives: sharepoint2013

My first Office Add-In

Yesterday I participated in the Hackathon at European SharePoin Conference in Stockholm. The main goal was to learn more about Office Add-Ins. I wanted to create a very very simple app to learn the basics. Here in this post I’ll provide some links and describe the steps needed to start developing your Office Add-Ins.

The Add-in I created is an Outlook Add-In, it is called “Joke Inserter” and with it you can insert a random Chuck Norris joke. It is just for fun, but it demonstrated how an add-in can be installed, made available in “New E-mail” and interact with the e-mail you are writing.

All the code is on github. The random jokes come from The Internet Chuck Norris Database. As I said, the jokes were just for fun, this add-in is of course, not a business app. During the hackathon I got help from Pretish Abraham, Jeremy Thake and …

This is the result:

joke-inserter-video

Prerequisites

  • Any OS, I happened to have Windows 🙂
  • git, nodejs, npm (they should be in the $env:PATH)

Install following npm packages globally:

npm install -g tsd yeoman generator-office gulp

Creating the Add-In

Now with the yeoman support it is very easy:

Create a folder and scaffold an app:

mkdir joke-inserter
cd-joke-inserter
yo office

After that update the manifest file: Icon Url, and Support Url

Start the application on localhost:

gulp serve-static

Go to your Outook.office365.com. Click on Manage Apps and add the manifest file from your solution. I uploaded this app on azure: https://kultar.azurewebsites.net/appcompose/home/home.html. You can try this app by installing the manifest file in you Outlook client.

Now when one is done with that simple fun add-in, it is very easy to go ahead and create real add-ins that provide value to you and your colleages.

joke-inserter-video

 

Resources:

 

Export Any Web Part using a Bookmarklet

My blog post about exporting any webpart from a SharePoint Page is one of the most read articles on my blog. I use this method a lot. Now what I want to do is to simplify the process. Inspired by my colleague Dan SaedĂ©n’s awesome bookmarklet for reading and updating web properties, I decided to make my own bookmarklet. That was easy. Now we can export any web part from any SharePoint page without even looking at any ids in the html markup and assembling the export url manually. Just add the bookmarklet or run  the javascript code in the browser console. The code (js and bookmarklet) is on Github.

Here is an animated gif that explains how to use it:

export-webpart-002

Add Search Verticals by code

search-verticals-001

Adding own search verticals is a common task in the Search Configuration in SharePoint. Here I want to share a code sample for achieving this programmatically. I hope, this model can be added to SPMeta2.

First of all, Search Verticals are dedicated Search Results Pages and links to them. How to add them manually is described on technet:

There is no API in CSOM for that. Luckily, Mikael Svenson found how to get the Search Navigation and contributed to PnP by writing an Extension: web.LoadSearchNavigation.

Here is my sample code for adding new Search Verticals programmatically:

NavigationNode searchNav = context.Web.Navigation.GetNodeById(1040);
NavigationNodeCollection nodeCollection = searchNav.Children;
NavigationNodeCreationInformation everything = new NavigationNodeCreationInformation
{
    Title = "Everyting",
    Url = "/search/Pages/results.aspx",
};
NavigationNodeCreationInformation myresults = new NavigationNodeCreationInformation
{
    Title = "My Results",
    Url = "/search/Pages/myresults.aspx",
};
nodeCollection.Add(everything);
nodeCollection.Add(myresults);
context.ExecuteQuery();

What is a SharePoint application

SharePoint Artefacts in a meaningful assembly like a lego toy

A meaningful collection of Lego bricks is a toy. A meaningful collection of Lists, Fields, Files and other SharePoint artefacts becomes a SharePoint Application. Private picture.

App, Add-In, List, Web, Site, Sandbox solution, Workflow. There are too many words flying around in SharePoint that confuse users and Non-SharePoint-Developers. I want to introduce a “new” concept that is so simple and that a company can understand and govern: a SharePoint Application.

That is so simple. It can be called a tool, a functionality. That can be a SharePoint list, a document library with a workflow, or a document library with custom jslink. All they can be SharePoint Applications. Let’s use lego as a metaphor. Have you seen this?

SharePoint Artefacts as lego bricks

The same toy car in just brics. SharePoint Artefacts like Webs, Lists, Fields, Content Types, JSLink etc are just lego bricks. Private picture.

These lego bricks together become a cool toy that you can play with (as you can see in the picture above). So it is with SharePoint Applications, too. SharePoint Applications solve actual business needs. A List, or a JSLink by themselves do not solve a business need. It must be a meaningful collection of SharePoint Artefacts that becomes a SharePoint Application.

Example

Does the lego metaphor make sense to you? To go back to SharePoint, I’ll give you an example of a SharePoint Application. I would say everybody has done such Applications. In a project we created a document library for product icons that were used for all products in a company. Easy? Yes. But the icons had several states (active, inactive…). Versioning and Approval was required. A workflow for new requests and submits was implemented, too, permissions for different roles, metadata navigation in the document library and so on. Sure, SharePoint provided us with great “lego bricks”. But we created a tool, a functionality – a SharePoint Application, that makes sense to our business.

What’s new then? Well, we all have done such applications. The new is to understand SharePoint Applications as an own alternative and quality assurance. See more below.

Another example is an “App” for SharePoint Online that I converted into a SharePoint Application by adjusting it for SPO and OnPrem. That’s when I came up with the idea of the SharePoint Application.

Definition

A SharePoint Application is a meaningful collection of SharePoint Artefacts, like Webs, Lists, Fields, Views etc that becomes an entity and solves a business need. SharePoint Applications follow best practices and quality policies as all other applications.

To understand more, let’s compare with the related concepts:

SharePoint Application vs SPList

An SPList (an “app”) is often only a part of an entity. Users often create two or more lists, update views and so on. A SharePoint Application contains a list and everything else ready for satisfying business needs.

SharePoint Application vs. SharePoint Hosted App (Add-In)

An SP Hosted App resides in a different domain, it is a subsite that is only trusted to do some predefined actions. An SP Hosted App allows separation of trust, it can be uninstalled easily and it is always a separate site (Web). A SharePoint Application is more flexible (it might be a list in the same site). It is closer to the actual site where users need this functionality. A SharePoint Application is in the same domain name and has the full user trust. A SharePoint Application does not require App Infrastructure and separate domains. It is searchable and can benefit from BlobCache (Style Library) to ensure good web performance.

SharePoint Application vs. Provider Hosted App (Add-In)

SharePoint Application uses SharePoint Templates, Information Architecture, Search, Identity Management etc. A Provider Hosted App is a dedicated web application outside SharePoint. A Provider Hosted Application is powerful because it is not bound to SharePoint. All advantages and disadvantages are the same as the ones for a custom ASP.NET application. A Provider Hosted App has a connection to SharePoint, it requires a Trust and App Infrastructure in your environment. A SharePoint Application is not that powerful, but as long your business need can be solved by SharePoint lists, Page Layouts, Workflows, then a SharePoint Application is the right choice for you.

Quality and Governance

To ensure quality, every SharePoint application should comply with policies and fit into the overall Govenance model. Treat them as they were other Applications. They must have system documentation, application lifecycle management including versions, upgrades and rollbacks. They must be staged and tested before going to production. Another example of a quality policy is that a SharePoint Application is provisioned, maintained and operated using only Client Side Object Model – no farm solutions. All SharePoint Applications are tracked in a system for a better supportability.

Provisioning Framework for SharePoint Applications

I would strongly recommend using a framework for provisioning your SharePoint applications. My favourite is SPMeta2. There is also PnP which is a strong community. It might be okay with manual setups (click-click in SP) for smaller applications. My advice, though: Require code based, repeatable, code-documented and tested provisioning of SharePoint Applications even for smaller ones.

Summary

SharePoint Applications have been around for a long time. My goal is to give them a name so we don’t need to be confused by apps, add-ins, lists. A SharePoint Application is not a technical term, it is just a meaningful solution for a business need, done in SharePoint that leverages high quality by following policies and standards within a company.

Http to Https Redirect in Provider Hosted Apps

It is strongly recommended to use https in SharePoint Provider Hosted Apps. In many provider hosted apps I have seen, only https works. I would recommend to configure a simple http to https redirect in IIS and make solutions better. Many Provider Hosted Apps can be done in that way that they are available without SharePoint Context, e.g. for browsing information. In that case that is important to have an easy url and an automatic http -> https redirect.

In this post I’ll give a short manual for doing that. I would recommend this step for all provider hosted apps.

1. In the Provider Hosted Apps Server install the URL Rewrite IIS Module using Web Platform Installer:

http-https-001

2. Next step is to add the http binding to your solution (this is needed for the future redirect):

http-https-004

Then you can configure the automatic http to https redirect using the GUI or the web.config update. My instructions originally come from JPPInto.com blog.

I suggest updating the web.config file directly in the Provider Hosted App:

http-https-002

3. Add this section to the web.config file:

http-https-003

<system.webServer>
  <rewrite>
   <rules>
    <rule name="Redirect to HTTPS" stopProcessing="true">
     <match url="(.*)" />
      <conditions>
       <add input="{HTTPS}" pattern="^OFF$" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther" />
    </rule>
   </rules>
 </rewrite>
</system.webServer>

It is important to know that his web.config section will cause failure on the server if URL Rewrite module is not installed.

Summary

These steps are very easy to accomplish and I recommend it for every Provider Hosted App, especially those ones that are accessible without going through SharePoint (Web Content -> Apps). This also reflects the configurations in Azure Apps (WebSites).

Kom igĂ„ng med SPMeta2

SPMeta2 (eller bara M2) Àr ett relativt nytt ramverk för provisionering av SharePoint-artefakter. Bakom ramverket ligger ett gediget arbete. I den hÀr posten vill jag skriva upp mina steg för att sÀtta upp ett litet projekt. För mig Àr SPMeta2 nytt och huvudprincipen i den hÀr bloggposten att fÄ en fungerande lösning sÄ snabbt som möjligt. Informationen hÀr kan snabbt bli inaktuell, eftersom SPMeta2 förÀndras och förbÀttras vÀldigt snabbt.

Vad Àr SPMeta2
SPMeta Àr ett ramverk för att provisionera SharePoint-artefakter, allt frÄn fÀlt, innehÄllstyper, listor, dokumentbibliotek, user custom actions, ladda upp filer med mera. Klassiskt har vi gjort provisionering med hjÀlp av XML-baserade moduler och features. SPMeta2 erbjuder ett Fluent API som Àr kodbaserat. Med hjÀlp av SPMeta2 definierar man en modell (enkla objekt POCOs) som inte har beroendet till SharePoint. Modellen anvÀnds sedan av Provision-delen som anropar modellen för specifika versioner: SharePoint 2013, SharePoint 2010, Office 365 med mera. Man kan vÀlja CSOM och SSOM. Provision Àr ocksÄ flexibel vad som gÀller paketering: det kan vara en konsolapplikation, en SharePoint-app, ett wsp-paket, en PowerShell-modul. Se följande lÀnkar:

Testmiljö

För att testa behöver vi en site. Jag anvÀnder min http://dev/sites/004 som jag skapat just för det hÀr. Av nÄgon anledning gick det inte att anvÀnda Visual Studio 2015. SÄ jag har min Visual Studio 2013 pÄ en virtuell maskin med SharePoint.

MĂ„let

Provisionera jQuery och ett enkelt skript till min site collection.

Process

Installera Visual Studio Template

m2-001

Det hÀr kommer leda till github. Ladda ner den dÀrifrÄn:

m2-002

GodkÀnn och Installera

m2-003

Skapa ett nytt projekt. Solution ska vara Takana. Projektet ska vara Takana.Model

m2-004

VĂ€lj “Pocos only” och Takana som prefix och gruppnamn (i mitt litet labb kommer de hĂ€r inte anvĂ€ndas, men det gĂ„r sĂ„ snabbt att stĂ€lla in dem hĂ€r):

m2-005

Man fÄr en bra struktur över modellen, allt prefixat och enligt best practices.

m2-006

Jag kommer att anvÀnda de hÀr modellerna sedan:

m2-007

NÀsta steg Àr att skapa Provision-delen. Skapa ett nytt projekt i samma VS Solution. Kalla det Takana.Provision:

m2-008

VĂ€lj SharePoint Standard och SP2013 CSOM

m2-009

Efter det har vi en VS Solution med tvÄ projekt: Takana.Model och Takana.Provision. I Takana.Provision finns CSOMProgram.cs som startar provisioneringen:

m2-010

För att börja med, behöver man sÀtta Takana.Provision som Startup Project (blir fetstilt)

m2-011

Efter det mĂ„ste ett tillfĂ€lligt problem lösas – referensen 16-foldern. Det hĂ€r ett kĂ€nt problem och kommer förmodligen lösas inom kort.

m2-012

Den snabbaste vĂ€gen till att ersĂ€tta referensen Ă€r att installera ett nuget-paket som heter SharePoint Online Client Side Object Model. Även om det Ă€r för SharePoint Online, funkar det alldeles utmĂ€rkt för OnPrem ocksĂ„.

m2-013

Efter det lÀgg till Takana.Model som referens

m2-014

Byt ut siteUrl, siteModel och rotWebModel:

m2-015

Det gÄr fort att köra den hÀr konsolapplikationen. Nu nÀr jag gÄr in pÄ min site, ser jag att jQuery har provisionerats och ett litet skript ocksÄ som skriver till konsolen.

m2-016

Sammanfattning

Det hÀr en liten manual för hur man lÀtt kan komma igÄng och prova SPMeta2. SPMeta2 Àr ett kraftfullt ramverk som kan anvÀndas för provisionering och uppdatering av SharePoint-applikationer. Det kan finnas en tröskel i att börja anvÀnda det. Jag hoppas att med den hÀr bloggposten jag kan göra fler nyfikna pÄ att prova SPMeta2 och kodbaserad provisionering för att det Àr ett framtidssÀkert sÀtt att arbeta med SharePoint.

Method “GetList” does not exist

I troubleshooted a piece of CSOM code in SharePoint 2013. I got the following error:

Method “GetList” does not exist

The reason was that the method GetList was not imlemented until March 2015 CU (15.0.4701.1001), and the SharePoint farm I had was SharePoint 2013 SP1 (15.0.4569.1000). So the solution is to install the Cumulative Update or use web.Lists.GetByTitle. GetByTitle has one aweful shortcoming: it doesn’t work in multilingual environments. So I have recommended to install the March 2015 CU.

Onpremifying SharePoint apps

onpremify-001

We want to make an app available in SharePoint OnPrem, we want to onpremify it. Rethink SharePoint apps and provisioning SharePoint artifacts.

It has been a while since I updated my blog – Chuvash.eu. I had my vacation, I visited the sunny and green Chuvashia. Now I am back and I am looking forward to an awesome SharePoint Autumn. One of the first things I had to deal with in this SharePoint Autumn was Onpremifying of a SharePoint Online App. We have an app that has gained popularity and we want to make it available for SharePoint OnPrem. There is no such word Onpremify (yet?), I know, it is a Swenglish happy word making (onpremifiera), but I like the word “onpremify” a lot.

There is still uncertainty around the purpose of SharePoint apps. One app type, though, has been used a lot in our company: an app that provisions SharePoint Artifacts – that creates SharePoint Applications. What I mean by SharePoint Applications can be read in my blog post:

The successful app type creates SharePoint Applications – by provisioning needed SharePoint artifacts (Fields, Content Types, Lists, Page Layouts, Styles, Scripts, Web Parts, Pages
). Often it is a one time job: When the SharePoint application is provisioined, it is finished.

onpremify-002

When you’re about to onpremify such an app, you have three main choices:

  1. Install app in OnPrem. Requires the App Infrastructure in place and a separate build of the app (15.0.0.0 version)
  2. Make a parallel version of the app using a farm solution (not good at all)
  3. Invoke the provisioning code from a console app (I recommend this one)

The choice 1 might seem obvious, but not all companies have a functioning app infrastructure (a dedicated server for Provider Hosted apps, S2S Trust and Governance around it). The choice 2 splits your app into two variants and makes it hard to maintain.

On the other hand, the choice 3 might seem crazy, when you hear it for the first time. A Console App? But give it time, think about it. The idea comes from the awesome SharePoint Provisioning Library SPMeta2, where the Model (SharePoint Artifacts) and Executing are separated. Your model for Fields, Content Types, and Lists and so on, is an agnostic code based definition that can be used for SSOM and CSOM, for SharePoint 2013, SharePoint Online, SharePoint 2016 and SharePoint 2010. SPMeta2 eliminates the need for XML and wsp packages.

So my recommended approach for onpremifying SharePoint apps where the main goal is to provision SharePoint Applications is to move the provisioning code into a separate VS Project. The SharePoint App Project (mainly AppManifest.xml) remains the same, The App Web Project is made to a “stupid” interface that invokes the Provisioning Library. We also create a new interface – a Console App. You can replace the console app with a Windows Application, a Web Application, PowerShell Script, An admin page in Central Admin – whatever suits you. The Console app can be used not only in OnPrem, but also in SharePoint Online.

SPMeta2 vs. PnP vs. Own Framework

Every developer with Self-Respect uses a framework for provisioning SharePoint artifacts. It might be some own utilities or preferably public framework, because you don’t want to repeat yourself, especially in SharePoint. When SPMeta2 and PnP are available it is not smart to reinvent the wheel. I usually recommend to use one of them. I personally prefer SPMeta2 because… mainly because it is more complete and consistent. Read more about SPMeta2 vs. PnP comparison.

Why Swedish matters

I Sverige Àr engelskan Àr vÀldigt stark. Speciellt i IT-branschen Àr vi vana att ha i princip allt pÄ engelska, frÄn kommentarer i koden till stora upphandlingar, rapporter och dokumentation. Trots det ser jag ett stort behov av att kunna prata om IT pÄ svenska. Det gÀller bÄde lokala företag och globala företag. Det finns flera anledningar:

  • Företag i Sverige följer svenska lagar som Ă€r skrivna pĂ„ svenska, för att leva upp till kraven ska man kunna formulera sig pĂ„ svenska.
  • ModersmĂ„l eller det sprĂ„k som man anvĂ€nder mest i vardagen (gĂ€ller mig bland annat) Ă€r den snabbaste vĂ€gen för kommunikation som ger en högre grad av nyansering. Att kunna nyansera krav och önskemĂ„l tidigt i projekt Ă€r guld vĂ€rt (enligt mĂ„nga av mina korrespondenter). Man behöver spendera mindre tid pĂ„ att formulera och tolka krav.
  • En mer ideologisk anledning (men en viktig sĂ„dan) Ă€r att vi som bor i Sverige har skyldighet att utveckla och hĂ„lla svenskan levande, inte minst inom IT-sektorn.

Svenska Àr en stor möjlighet för att verkligen ge mervÀrde till vÄra kunder, möta dem pÄ hemmaplan, prata ett gemensamt sprÄk.

Startpunkten till den hÀr diskussionen har varit en ny webinar som jag planerar hÄlla den 14 april kl 10. Webinarens titel Àr SharePoint i molnet.Det finns ganska mycket information om SharePoint Online och Office 365 pÄ engelska. Det Àr dock ganska sparsamt med information pÄ svenska.

https://www.eventbrite.com/e/sharepoint-i-molnet-tickets-15976529229

Det hÀr Àr det som vÀntar dig som vill delta i webinaren:

Intresset för SharePoint Online och Office 365 vÀxer allt mer. Vad behöver man tÀnka pÄ nÀr man ska anvÀnda SharePoint i molnet, vilka Àr fördelarna och vilka Àr nackdelarna.

I den hÀr webinaren pratar vi Àven om skillnaderna mellan SharePoint Online och SharePoint 2013. Vi bjuder in till en webinar med öppen diskussion för era frÄgor.

Den hÀr webinaren Àr för er som:

– Vill veta mer om SharePoint Online.

– Vill lyssna och diskutera det pĂ„ svenska.

– Vill höra om andras erfarenheter och tankar kring det.

Detaljer om hur man deltar i webinaren kommer lite senare.

Publishing Visio diagrams as html image maps

imagemap-014

I got a question from a customer: We have our processes defined in Visio, we don’t have SharePoint Enterprise CALs to use the Visio webpart. We have links in process maps. What can we do?

Well there are three five ways to solve this business need:

  1. Find money for SharePoint Enterprise – Very expensive
  2. Show Visio diagrams as pdf files on SharePoint Pages – Expensive.
  3. Embed Visio diagrams as html image maps – Least expensive
  4. Embed Visio diagrams as svg pictures – Separate blog post.
  5. Link to Visio files that are opened using Visio Web Viewer in a new browser tab.

If the business needs other features available only in Enterprise, just use the solution 1. Stop reading.

If you are looking for alternatives, then consider pdf and image maps. I have seen projects where pdf files were embedded in the SharePoint Pages. It required a pdf plugin in IE, a lot of time to make it look the same in different browsers and the scroll and fixed size was still there. It was expensive because of the development and configuration time.

In this blog post, I want to show the alternative number 3: embedding Visio diagrams as html image maps. This is only a Proof-of-concept so far.

Image Maps

Image maps are an old html fellow that can contain links on an image. Links can be connected to areas using coordinates. During a brainstorming session, we thought: what if we define image maps using Gimp or some other graphic tool. This manual procedure is not good when it is time to update the diagrams: it will require a lot of manual work to keep it up to date. So we need to be able to export a Visio diagram to an image map.

Visio

Actually Visio lets you export a diagram as an image map. All you need is to save it as as web page. Just to demonstrate I created a simple drawing:

imagemap-001

Then I added a hyperlink to a shape:

imagemap-002

Then I saved it as a web page:

imagemap-003

Getting the actual image map

The web page that Visio creates, is a frameset:

imagemap-004

So the actual content (the image map) is inside the _files folder:

imagemap-005

You can find the filename of the image map html by reading the main page (Process-Main.html in my case). Usually it is png_1.html (for the first Visio page):

imagemap-006

In the page where you want publish the process diagram, add a script editor webpart (or a content editor webpart):

imagemap-007

Edit snippet, as usual:

imagemap-008

Now you have to copy image tag and the map tag from the html:

imagemap-009

Paste it into the Script Editor:

imagemap-010

The image tag points to an image that is present in the same folder: png_1.png. We can upload it to a library and update the src attribute. In my case, to test it quickly, and because my image is not big, I’ll create a base64 string of that image using an online tool – dataurlmaker:

imagemap-011

Update the src attribute in the Script editor webpart:

imagemap-012

That’s it, now we have an image map, a drawing that has clickable elements with links to subprocesses:

imagemap-013

Summary

This is a proof-of-concept that I will share for publishing Visio drawings as html image maps. It works even in SharePoint Foundation (!). The publishing and republishing involves these three steps:

  1. Save a Visio file as a webpage (for new and updated files)
  2. Copy html parts to a SharePoint page
  3. Update the image reference

The steps are not aimed for end users. But given that you have clear instructions and guidelines how to publish drawings in SharePoint, even editors with basic knowledge about html can do it. This approach lets you keep Visio files as the source and update the process pages in SharePoint quite easy.

Next step

If this method works in a real environment, next step would be to create a tool for automatic conversion of Visio files to image maps.

Discovering SharePoint

And having fun doing it

Bram de Jager talking Office 365, SharePoint and Azure

My view and thoughts on Productivity and more.

My programming life

and everything in between

SharePoint Development Lab by @avishnyakov

It is a good place to share some SharePoint stories and development practices.

SharePoint Dragons

Nikander & Margriet on SharePoint

RealActivity - Real-time and trustworthy

Blog site of founder, RealActivty - Paul J. Swider

Mai Omar Desouki - Avid SharePointer

Egyptian & Vodafoner - Senior SharePoint Consultant

Cameron Dwyer | Office 365, SharePoint, Outlook, OnePlace Solutions

Office 365, SharePoint, OnePlace Solutions & Life's Other Little Wonders

.:paul.tavares:.

Me and My doings!

Share SharePoint Points!!

By Mohit Vashishtha

Jimmy Janlén "Den Scrummande Konsulten"

Erfarenheter, synpunkter och raljerande om Scrum frÄn Jimmy Janlén

SPJoel

SharePoint for everyone

SharePointRyan

Ryan Dennis is a SharePoint Solution Architect with a passion for SharePoint and PowerShell

SharePoint 2020

The Vision for a Future of Clarity

Aharoni in Unicode, ya mama

Treacle tarts for great justice

... And All That JS

JavaScript, Web Apps and SharePoint

blksthl

Mostly what I know about SharePoint - CommunicoCuspis