SharePoint Add-In Modell einrichten / App Store

Microsoft hat mit SharePoint 2013 das neue App Modell bzw., Add-In Modell eingeführt (Mit SharePoint 2013 heißt es App Modell, ab 2016 ist alles ein Add-In). Es ist ja kein Geheimnis, dass es in SharePoint immer Anpassungen gibt. Es gibt viele Anbieter auf dem Markt, die ihre Lösungen dafür anbieten. Das App Modell bietet eine neue API für Softwareentwickler. Aber was für eine API gab es davor?

  • Full Trust Solutions aka .wsp Dateien
  • Sandboxed Solution (abgekündigt)

Warum die neue API und was bietet Sie für Vorteile? Was ändert sich für Softwareentwickler, was für Administratoren und welche Schritte sind notwendig, um die Voraussetzungen zu erfüllen? Diese Fragen werde ich in diesem Artikel beantworten.

Architektur

Es gibt zwei unterschiedliche Add-In Modelle:

  • Provider Hosted App: Apps werden durch einen Provider zur Verfügung gestellt, z.B. ich füge eine App direkt aus dem SharePoint Store hinzu

clip_image001

  • SharePoint Hosted App: Die App wird selbst auf einem eigenen Server gehostet, z.B. im einfachsten Fall reicht es die App im Unternehmens App Store hinzuzufügen. Es kann auch nötig sein, weitere Komponenten wie IIS einzurichten – abhängig von der App.

clip_image002

Im Vergleich aus Entwickler-Sicht

Das folgende Bild App Patterns zeigt was ist wo unterstützt wird. Weitere Details gibt es auch auf MSDN https://msdn.microsoft.com/en-us/library/office/fp179930.aspx#sectionSection2 : clip_image003 Die größte Änderung der API ist, dass die Applikationen nicht mehr im Kontext von SharePoint laufen, das soll Stabilität und Migrationen erleichtern. Außerdem ist die API Cloud kompatibel.

Prozess im Hintergrund

clip_image004

  1. App mit Lizenzprüfung entwickeln
  2. App über Seller Dashboard in den Marketplace einstellen
  3. App zum Kauf im SharePoint Store verfügbar
  1. Benutzer / Manager kauft App im SharePoint Store
    Bei on-premises Umgebungen, wird die Lizenzinformation in die lokale App Dienstanwendung kopiert
  2. Apps können den SharePoint Store umgehen, z.B. für selbst gehostete Entwicklungen
  3. Benutzer / Manager weist Benutzer zu (wird für Benutzerabhängige Lizenzen benötigt) und verwendet die Apps die entweder Provider Hosted oder SharePoint hosted sind
  4. Benutzer startet App
    App prüft Lizenz unter Verwendung der App Dienstanwendung
    App wendet Lizenz an

clip_image005

  1. Benutzer fordert App an
  2. Anforderung wir an Dienstanwendung weitergeleitet
  3. Lizenz und Berechtigungen werden in aus der Datenbank geholt
  4. App Freigabe im Unternehmens-App-Store

Bei vielen Apps kann man das auch sehen. Beim Klick auf eine App wird man entsprechend weitergeleitet. Als Beispiel können wir uns hier die Cloud ansehen, achten Sie dabei genau auf die URL: image Damit wird deutlich, dass die App tatsächlich nicht im SharePoint läuft, sondern außerhalb und ich lediglich weitergeleitet werde. On-Premises ist die Funktionsweise die Gleiche, jedoch müssen wir die Infrastruktur erst noch vorbereiten, das zeige ich in den nächsten Schritten.

App Domain

Beim Klick auf eine App werden wir ja entsprechend weitergeleitet. Damit dies funktioniert, benötigen wir eine eigene Domain, in der die Apps laufen. Der Prefix wird dabei dynamisch generiert, d.h. wir werden hier auch mit einer Wildcard arbeiten. Microsoft empfiehlt dringend eine separate Domain zu verwenden, um das Risiko von Cross-Site-Scripting Angriffe zu minimieren. Beispiel:

  • Ihre interne Domain (typischerweise Active Directory) heißt contoso.com (Netbios Name spielt keine Rolle, es geht rein um den DNS Namen).
  • Der SharePoint on-premises ist unter dem DNS Namen SP-WFE01.contoso.com zu erreichen.
  • Erstellen Sie eine eigene Domain wie contosoApps.com (idealerweise offiziell registriert)
  • Eine App wird später dynamisch eine URL im Format generieren https://Apps-12345678ABCDEF.ContosoApps.com/

Konfiguration

Einrichtung DNS

Auf dem DNS Server muss die neue Domain als eigene Zone eingerichtet werden, z.B. Name der Zone = Name der Domain “contosoapps.com” In dieser Zone erstellen wir einen CNAME Record “*” mit dem Ziel des SharePoint Servers, hier SP-WFE01.contoso.com (Achtung in Verbindung mit Kerberos, der mag CNAME nicht).
clip_image007

Wildcard Zertifikat

Damit wir später auch eine verschlüsselte Verbindung zwischen der App und SharePoint aufbauen können, benötigen wir für die Apps ein Wildcard SSL-Zertifikat. Ein Wildcard SSL-Zertifikat kann man ausstellen, indem man als CN (Common Name) *.contosoapp.com angibt, der * wird als Wildcard verwendet. Idealerweise ist der Zugriff zu SharePoint auch per SSL gesichert, damit vermeidet man auch SSL Bridging Warnungen vom Browser.

Service Instanz starten

In SharePoint 2013 muss man das noch manuell starten, 2016 erledigt das automatisch. In der Central Admin – “Manage Services on Server” oder per PowerShell müssen die folgenden Instanzen gestartet werden:

  • App Management Service
  • SP Subscription Settings Service
001
Get-SPServiceInstance | where{$_.GetType().Name -eq “AppManagementServiceInstance” -or $_.GetType().Name -eq “SPSubscriptionSettingsServiceInstance”} | Start-SPServiceInstance

Anschließend sollte der Status auf “Started” stehen: clip_image008

Service Application erstellen

Als nächstes erstellen wir die Dienstanwendungen, damit diese in der Farm angeboten werden können, auch das geht per Central Admin – “Manage Service Applications” oder per Powershell:

App Management Service

001
002
003
004
$account = Get-SPManagedAccount FarmAccount 
$appPoolAppSvc = New-SPServiceApplicationPool -Name AppServiceAppPool -Account $account 
$appAppSvc = New-SPAppManagementServiceApplication -ApplicationPool $appPoolAppSvc -Name AppServiceApp -DatabaseName P_SP_AppMngmt 
$proxyAppSvc = New-SPAppManagementServiceApplicationProxy -ServiceApplication $appAppSvc

SP Subscription Settings Service

001
002
003
$AppPool = New-SPServiceApplicationPool -Name SettingsServiceAppPool -Account $account 
$App = New-SPSubscriptionSettingsServiceApplication -ApplicationPool $appPool -Name SettingsServiceApp -DatabaseName SettingsServiceDB 
$proxy = New-SPSubscriptionSettingsServiceApplicationProxy -ServiceApplication $App

clip_image009
Ein vorbereitetes PowerShell Skript finden Sie hier. Es startet die Service Instanzen, legt die Service Applications an und konfiguriert die App Domain. Einfach in Zeile #23 den Namen des Service Accounts anpassen (Den muss es bereits vorher geben). http://download.hobmaier.net/Downloads/Install-AppMngmt.ps1 Bzw. hier:

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
<#
=====================================
This PowerShell Script help you setting up App Management Service in SharePoint.
It will start the service instances and create Serivce Applications.

Version 1.1
25.01.2016
Dennis Hobmaier
——————–
History
1.1, 25.01.2016
More variables to change service accounts and database names
Comments added

1.0, 28.11.2015
Intial Version
=====================================
#>

# Please adjust the account which exist in your environment.
# If you prefer to run into a separate account use the next line New-SPManagedAccount
# New-SPManagedAccount -Credential (Get-Credential)
$SPServiceAccount= ‘CONTOSOsp_apps’  #INPUT required
$SPAppMngmtDBName = ‘T_SP_AppMngmt’
$SPSubscriptionDBName = ‘T_SP_SettingsService’
$SPAppDomain = ‘contosoapps.com’
$SPAppPrefix = ‘app’

#Needs to run on SharePoint Server
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

#Start the service instance on the current server (min 1 per farm)
Get-SPServiceInstance | where{$_.GetType().Name -eq “AppManagementServiceInstance” -or $_.GetType().Name -eq “SPSubscriptionSettingsServiceInstance”} | Start-SPServiceInstance

#You may check all available accounts running Get-SPManagedAccount
$account = Get-SPManagedAccount $SPServiceAccount -ErrorAction Stop

$appPoolAppSvc = New-SPServiceApplicationPool -Name AppServiceAppPool -Account $account
$appAppSvc = New-SPAppManagementServiceApplication -ApplicationPool $appPoolAppSvc -Name AppServiceApp -DatabaseName $SPAppMngmtDBName
$proxyAppSvc = New-SPAppManagementServiceApplicationProxy -ServiceApplication  $appAppSvc

$AppPool = New-SPServiceApplicationPool -Name SettingsServiceAppPool -Account $account
$App = New-SPSubscriptionSettingsServiceApplication -ApplicationPool $appPool -Name SettingsServiceApp -DatabaseName $SPSubscriptionDBName
$proxy = New-SPSubscriptionSettingsServiceApplicationProxy -ServiceApplication $App

# Configure App Settings
Set-SPAppDomain $SPAppDomain
Set-SPAppSiteSubscriptionName -Name $SPAppPrefix -Confirm:$false

App Settings

Anschließend öffnen wir die SharePoint Central Admin clip_image010

App Domain aus Schritt 1 konfigurieren

Falls nicht schon per Skript oben ausgeführt:

001
002
Set-SPAppDomain “contosoapp.com” 
Set-SPAppSiteSubscriptionName -Name “app” -Confirm:$false

App Catalog erstellen (pro Web Application)

  • Manage App Catalog
  • Webanwendung auswählen – OK

clip_image011

  • Es handelt sich um eine normale Websitesammlung, die eine bestimmte Vorlage verwendet. Achten Sie darauf, dass später nur App-Store Administratoren Zugriff darauf benötigen.

App hochladen (je nach App)

Grundsätzlich befolgen Sie der Anleitung des Herstellers. Wenn Sie dazu aufgefordert werden, deine .app Datei hochzuladen, öffnen Sie den zuvor erstellten App Store – “Apps for SharePoint” und laden dort diese Datei hoch.
clip_image012

App installieren (je nach App)

Anschließend steht Ihren Benutzern die App zur Verfügung. Als Administrator fügen Sie die App der Ziel Websitesammlung hinzu. Übrigens sollen Sie mindestens Service Pack 1 für SharePoint 2013 verwenden. In dem App Model hat sich zwischen RTM und SP1 einiges getan.

Referenz

Workflow Integration in Collaboration Manager

Der Collaboration Manager lässt sich mit Workflow Engines integrieren. Das macht Sinn, damit Sie Ihre Business Logik in der Provisionierung abbilden können. Genauer gesagt unterstützt ein Workflow in den Schritten Antrag, Genehmigung und Generierung. In der standardmäßigen Konfiguration, provisioniert der Collaboration Manager direkt nach dem Erstellen eines neuen Listeintrages in der Workspace Liste.
clip_image001

Collaboration Manager Provisionierung auf manuell stellen Site Collection Collaboration Manager aufrufen – Site Settings – Collaboration Manager – Workspace Creation auf manuell “Workspace creation by custom workflow or web service” stellen.

Welche Workflows werden unterstützt:

  • SharePoint 2010 Workflow Engine mit SharePoint Designer (und damit SP 2010 / 2013)
  • Nintex
  • K2

In diesem Artikel beschreibe ich die Einrichtung der Workflows. Nun können Sie z.B. ein Freigabeworkflow bauen, der entscheidende Schritt am Ende ist es, dem Collaboration Manager anzustoßen, damit der Workspace erstellt wird. Dies erfolgt durch den Aufruf eines Web Service. Damit in einem SharePoint 2010 Workflow ein Web Service aufgerufen werden kann, liefern wir eine extra Solution aus, die im SharePoint Designer eine weitere Aktion hinzufügt.

SharePoint Designer

Solution herunterladen: https://onedrive.live.com/?authkey=%21ACwmDW6i%5FjMjGH4&id=16C2CFEB0F28406C%21206&cid=16C2CFEB0F28406C Solution installieren: Solutions2Share.Solutions.WorkflowActivities2013.wsp

001

Add-SPSolution -LitheralPath C:installSolutions2Share.Solutions.WorkflowActivities2013.wsp | Install-SPSolution -GACDeployment -WebApplication ‘<url of CM Web Application>’

Site Collection Feature aktivieren:

  • Workflows
  • Solutions2Share – Workflow Designer Workflow Actions

clip_image002
Anschließend können Sie den SharePoint Designer 2013 starten und sich mit der Site Collection, auf der der Collaboration Manager installiert ist, öffnen. Anschließend wählen Sie aus dem Ribbon ein neuen Workflow. Wählen Sie bei Plattform “SharePoint 2010” Workflow.
clip_image003
Sofern der SharePoint Designer Workflow Action Solution hinzugefügt und aktiviert wurde, steht als benutzerdefinierte Aktion “Call a Webservice” zur Verfügung.  Als Adresse für den Web Service Aufruf verwenden Sie bitte die URL zur Collaboratio Manager Site Collection im Format <URL Web Application>/<Managed Path>/<Site Collection>/_layouts/15/Solutions2Share/CM/CMService.asmx z.B.: http://portal.contoso.com/sites/selfservice/_layouts/15/Solutions2Share/CM/CMService.asmx Sie können die Seite direkt im Browser öffnen um korrekte URL zu testen.

  • SOAP 1.1
  • Action = Leer
  • Als Parameter bzw. SOAP Request geben Sie ein XML an, das wie folgt aussieht. Sie können einige Optionen per Variable ausfüllen lassen:
<?xml version=”1.0″ encoding=”utf-8″?>
<soap:Envelope xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope/”>
  <soap:Body>
    <CreateWorkspaceFromTemplate xmlns=”http://tempuri.org”>
      <siteurl xmlns=”http://tempuri.org”>{Common:WebUrl}</siteurl>
      <SiteTitle xmlns=”http://tempuri.org”>{ItemProperty:Title}</SiteTitle>
      <lcid xmlns=”http://tempuri.org”>0</lcid>
      <ownerid xmlns=”http://tempuri.org”>1</ownerid>
      <workspacelistitemid xmlns=”http://tempuri.org”>{WorkflowVariable:ItemID}</workspacelistitemid>

 

    </CreateWorkspaceFromTemplate>
  </soap:Body>
</soap:Envelope>

Eine genaue Beschreibung der Parameter ist hier im Installationsordner unter “DocumentationCollaboration_Manager_2013_WebService.pdf” – hier die wichtigsten Optionen:

  • Siteurl = URL zur Collaboration Manager Website
  • Site Title = Der Titel, der anzulegenden Website, hier macht es Sinn das per Variable auszulesen
  • Lcid = Sprache der Zielseite
  •     0 = Sprache der CM Site Collection,
  •     1033 = Englisch,
  •     1031 = Deutsch
  • Owner ID = Site Collection Administrator, dies muss in Form einer ID des Benutzer aus der Collaboration Manager Site Collection abgerufen werden, z.B. indem ich einen Benutzer in die CM Site Collection hinzufüge, die ID aus der URL auslese und hier dann statisch hinterlege.
  • Workspacelistitemid = ID des Listeintrages in der Workspace Liste, das angelegt werden soll.
  • User ID und Kennwort, hier muss der SharePoint Farm Account angegeben werden.

clip_image004

Nintex

Stellen Sie sicher, dass auf der Collaboration Manager Site Collection Nintex Workflows aktiviert sind. Anschließend erstellen Sie einen neuen Nintex Workflow. Fügen Sie eine weitere Action “Call a web service” hinzu.  Als Adresse für den Web Service Aufruf verwenden Sie bitte die URL zur Collaboratio Manager Site Collection im Format <URL Web Application>/<Managed Path>/<Site Collection>/_layouts/15/Solutions2Share/CM/CMService.asmx z.B.: http://portal.contoso.com/sites/selfservice/_layouts/15/Solutions2Share/CM/CMService.asmx Sie können die Seite direkt im Browser öffnen um korrekte URL zu testen.  Melden Sie sich mit dem SharePoint Farm Account an und klicken auf “Refresh”. Anschließen wählen Sie als Funktion CreateWorkspacefromTemplate aus. Editor mode: SOAP builder clip_image005

Die Variablen können Sie analog zum Abschnitt SharePoint Designer ausfüllen. Da das Erstellen einer Site Collection meist länger als eine Minute dauert, kann es passiert es oft, dass SharePoint den Workflow mit einem “Timeout” abbricht – dadurch wird ein Fehler erzeugt der unnötig ist. Im Nintex Workflow muss man dazu in der Fehlerbehandlung einfach einstellen, Fehler abfangen / weiter behandeln (wie im vorherigen Screenshot, etwas weiter unten).

6 things why your NewsTicker does not work with a custom list

  1. Expired date is out of date
  2. Link column is not added
  3. Link column is created with a small “L”
  4. Name in the webpart properties is not set
  5. Name in the webpart properties is wrong (use the display name of the list)
  6. NewsTicker is used in a public facing website

You don’t know our NewsTicker App?

News Ticker
http://office.microsoft.com/en-us/store/news-ticker-WA104098986.aspx?queryid=c4a2822d-8cc8-41c0-b23e-242fd230df8f&css=news&CTT=1

Here are some reviews:

  • Simple, Easy and it is an excellent space saver on a page
  • Nice little app that does exactly what was promised
  • Simple, Easy, Effective

ShareConf Düsseldorf 2014

WP_20140701_005

Last week there was the ShareConf, the bigget SharePoint Conference in Germany, in Düsseldorf. On Thusday, the start was with three full-day workshops, Wednesdays and Thursday were days if the conference with five tracks. There ware again many well-known speakers from the SharePoint community there.

WP_20140701_007WP_20140701_006WP_20140701_009

The conference starts for the exibitors with the SharePoint UserGroup Rhein-Ruhr and a “Alt”, a special beer from Düsseldorf. Thanks to Andrej Dorms!

Christian Groß, CEO of Solutions2Share, presented the Collaboration Manager at the Admin/IT-Pro Track at Thursday. The session was with 40 people well visited.
You can download the PowerPoint presentation at SlideShare.

In the end some impressions from the ShareConf:

WP_20140701_012WP_20140701_015WP_20140701_016WP_20140701_019WP_20140703_001WP_20140703_005

See you at the next ShareConf!

SharePoint Konferenz Wien

DSCF4372

This week there was the SharePoint Conference in Wien, Austria. On Monday, the start was with three full-day workshops, Tuesday and Wednesday were days of the conference with six tracks. There were again many well-known speakers from the SharePoint community there.

DSCF4401  DSCF4394

Of course we were again as sponsor with it and have presented our new product “Collaboration Manager” for Office 365. Many people and consulting company was impressed with the progress of the migration to the cloud and have expressed interest.

Here are some pictures from the conference:

DSCF4373  DSCF4404

DSCF4400  DSCF4399

ShareCamp 2014 – A short review

WP_20140524_001

The ShareCamp this year was great. It was our first time as sponser with a own booth in the exibitor hall. Over 200 people with more the 50 session about SharePoint and Office 365.

Christian Groß, CEO of Solutions2Share, present the new Collaboration Manager for Office 365 and discussed about SharePoint app development with SharePoint Online.

Here are a few impressions from the Sharecamp:

WP_20140524_002WP_20140524_006WP_20140524_007WP_20140524_009WP_20140524_011WP_20140524_013
WP_20140525_001WP_20140525_002

The evenings before and at the ShareCamp are of course always characterized with extensive SharePoint discussions. 🙂

WP_20140524_016WP_20140524_017

Failed to enable remote debugging Exception from HRESULT: 0x89710023

While trying to debug Auzre Websites remotely i got the Error “’Failed to enable remote debugging Exception from HRESULT: 0x89710023‘“.

Solution –> Just open the ports 4016 and 4018.

The remote event receiver callout failed.

At the app installation process i got the error “The remote event receiver callout failed.”
After retracting, cleaning and reinstalling i got the same error.

image

Solution –> Restart Visual Studio

Day 4 – SharePoint Conference 2014

WP_20140304_004

Today is the last day of the SharePoint Conferencein Las Vegas. So if you were not at our booth, come and visit us now on #1335.

WP_20140306_011WP_20140306_006WP_20140302_006WP_20140304_002

SharePoint and Third Party Tools in the SharePoint Podcast 288

Speak German? In the actual SharePoint Podcast from Michael Greth Christian Groß talks with Dennis Hobmeier from AvePoint and Patrick Hosch from Nintex about using Third Party Tools in SharePoint.

Topics:

  • Self-Service site provisiong with approval and archiving
  • Collaboration between manufacturer
  • Cloud and the new app model
  • Interfaces and compatibility

SPPD288-512

Christian Groß, Patrick Hosch, Dennis Hobmeier

Link to podcast:
http://sharepointpodcast.de/2014/01/27/sppd288-talk-third-party-tools-fuer-sharepoint/