Install Sharepoint Application Using CSOM

Does anyone know if it is possible to automatically install a specific application on a sharepoint site using CSOM? We have a mechanism that creates a new site on sharepoint, and we need to automate the process of installing a specific Sharepoint application on each newly created site using CSOM.

Can someone provide some sample code or some useful links?

+4
source share
1 answer

The SharePoint CSOM Web Class API provides the following methods:

( ) SharePoint CSOM

/// <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;
    }
 }

, SP 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.");
      }
 }

developer site.

, 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");
} 

Gist: SPAppManager.cs

 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.");
     }
 }
+2

All Articles