Reputation: 1652
Does anyone know if it is possible to automatically install particular App on sharepoint site using CSOM? We have mechanism that creates new site on sharepoint, and what we need is to automate process of installing particular Sharepoint App on each newly created site with CSOM.
Could anyone provide sample of the code or some useful links?
Upvotes: 4
Views: 5445
Reputation: 59358
SharePoint CSOM API Web class exposes the following methods:
/// <summary>
/// Deploy SP App
/// </summary>
/// <param name="context">Client context</param>
/// <param name="appFullPath">Full path to app file (.app)</param>
/// <returns></returns>
private static AppInstance DeployApp(ClientContext context, string appFullPath)
{
using (var packageStream = System.IO.File.OpenRead(appFullPath))
{
var appInstance = context.Web.LoadAndInstallApp(packageStream);
context.Load(appInstance);
context.ExecuteQuery();
return appInstance;
}
}
Usage
The following example demonstrates how to deploy SP App into SharePoint Online
using (var ctx = new ClientContext(url))
{
ctx.Credentials = new SharePointOnlineCredentials(userName, securePassword);
var appInstance = DeployApp(ctx, @"C:\Packages\SPApp.app");
if (appInstance != null && appInstance.Status == AppInstanceStatus.Initialized)
{
Console.WriteLine("App was installed.");
}
}
Update
the above solution is intended for installing apps into developer site
.
The following solution demonstrates how to install app to non developer site
public class SPAppManager
{
/// <summary>
/// Deploy SP App
/// </summary>
/// <param name="context">Client context</param>
/// <param name="appFullPath">Full path to app file (.app)</param>
/// <returns></returns>
public static AppInstance Deploy(ClientContext context, string appFullPath)
{
EnsureDeveloperFeature(context);
using (var packageStream = System.IO.File.OpenRead(appFullPath))
{
var appInstance = context.Web.LoadAndInstallApp(packageStream);
context.Load(appInstance);
context.ExecuteQuery();
return appInstance;
}
}
/// <summary>
/// Ensure Developer Feature
/// </summary>
/// <param name="ctx"></param>
private static void EnsureDeveloperFeature(ClientContext ctx)
{
var result = ctx.LoadQuery(ctx.Site.Features.Where(f => f.DefinitionId == DeveloperFeatureId));
ctx.ExecuteQuery();
if (result.Any()) return;
var feature = ctx.Site.Features.Add(DeveloperFeatureId,true, FeatureDefinitionScope.None);
ctx.ExecuteQuery();
}
private static readonly Guid DeveloperFeatureId = new Guid("e374875e-06b6-11e0-b0fa-57f5dfd72085");
}
Usage
using (var ctx = GetContext(webUri,userName,password))
{
var appInstance = SPAppManager.Deploy(ctx, @"C:\Packages\SPApp.app");
if (appInstance != null && appInstance.Status == AppInstanceStatus.Initialized)
{
Console.WriteLine("App was installed.");
}
}
Upvotes: 3