public static ApplyTemplateResponse Unmarshall(UnmarshallerContext context) { ApplyTemplateResponse applyTemplateResponse = new ApplyTemplateResponse(); applyTemplateResponse.HttpResponse = context.HttpResponse; applyTemplateResponse.RequestId = context.StringValue("ApplyTemplate.RequestId"); applyTemplateResponse.Success = context.BooleanValue("ApplyTemplate.Success"); applyTemplateResponse.ErrorCode = context.IntegerValue("ApplyTemplate.ErrorCode"); applyTemplateResponse.ErrorMessage = context.StringValue("ApplyTemplate.ErrorMessage"); ApplyTemplateResponse.ApplyTemplate_Resource resource = new ApplyTemplateResponse.ApplyTemplate_Resource(); List <ApplyTemplateResponse.ApplyTemplate_Resource.ApplyTemplate_AlertResult> resource_createAlertResults = new List <ApplyTemplateResponse.ApplyTemplate_Resource.ApplyTemplate_AlertResult>(); for (int i = 0; i < context.Length("ApplyTemplate.Resource.CreateAlertResults.Length"); i++) { ApplyTemplateResponse.ApplyTemplate_Resource.ApplyTemplate_AlertResult alertResult = new ApplyTemplateResponse.ApplyTemplate_Resource.ApplyTemplate_AlertResult(); alertResult.Name = context.StringValue("ApplyTemplate.Resource.CreateAlertResults[" + i + "].Name"); alertResult.DisplayName = context.StringValue("ApplyTemplate.Resource.CreateAlertResults[" + i + "].DisplayName"); alertResult.MetricNamespace = context.StringValue("ApplyTemplate.Resource.CreateAlertResults[" + i + "].MetricNamespace"); alertResult.MetricName = context.StringValue("ApplyTemplate.Resource.CreateAlertResults[" + i + "].MetricName"); alertResult.Message = context.StringValue("ApplyTemplate.Resource.CreateAlertResults[" + i + "].Message"); alertResult.Success = context.StringValue("ApplyTemplate.Resource.CreateAlertResults[" + i + "].Success"); resource_createAlertResults.Add(alertResult); } resource.CreateAlertResults = resource_createAlertResults; applyTemplateResponse.Resource = resource; return(applyTemplateResponse); }
public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "post")] ApplyTemplateRequest request, TraceWriter log) { Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); string siteUrl = request.SiteURL; RedirectAssembly(); try { if (string.IsNullOrWhiteSpace(request.SiteURL)) { throw new ArgumentException("Parameter cannot be null", "SiteURL"); } if (string.IsNullOrWhiteSpace(request.TemplateURL)) { throw new ArgumentException("Parameter cannot be null", "TemplateURL"); } string templateUrl = request.TemplateURL.Trim(); // remove potential spaces/line breaks var clientContext = await ConnectADAL.GetClientContext(siteUrl, log); var web = clientContext.Web; web.Lists.EnsureSiteAssetsLibrary(); clientContext.ExecuteQueryRetry(); Uri templateFileUri = new Uri(templateUrl); var webUrl = Web.WebUrlFromFolderUrlDirect(clientContext, templateFileUri); var templateContext = clientContext.Clone(webUrl.ToString()); var library = templateUrl.ToLower().Replace(templateContext.Url.ToLower(), "").TrimStart('/'); var idx = library.IndexOf("/", StringComparison.Ordinal); library = library.Substring(0, idx); // This syntax creates a SharePoint connector regardless we have the -InputInstance argument or not var fileConnector = new SharePointConnector(templateContext, templateContext.Url, library); string templateFileName = Path.GetFileName(templateUrl); XMLTemplateProvider provider = new XMLOpenXMLTemplateProvider(new OpenXMLConnector(templateFileName, fileConnector)); templateFileName = templateFileName.Substring(0, templateFileName.LastIndexOf(".", StringComparison.Ordinal)) + ".xml"; var provisioningTemplate = provider.GetTemplate(templateFileName, new ITemplateProviderExtension[0]); if (request.Parameters != null) { foreach (var parameter in request.Parameters) { provisioningTemplate.Parameters[parameter.Key] = parameter.Value; } } provisioningTemplate.Connector = provider.Connector; TokenReplaceCustomAction(provisioningTemplate, clientContext.Web); ProvisioningTemplateApplyingInformation applyingInformation = new ProvisioningTemplateApplyingInformation() { ProgressDelegate = (message, progress, total) => { log.Info(String.Format("{0:00}/{1:00} - {2}", progress, total, message)); }, MessagesDelegate = (message, messageType) => { log.Info(String.Format("{0} - {1}", messageType, message)); } }; clientContext.Web.ApplyProvisioningTemplate(provisioningTemplate, applyingInformation); stopWatch.Stop(); var applyTemplateResponse = new ApplyTemplateResponse { TemplateApplied = true, ElapsedMilliseconds = stopWatch.ElapsedMilliseconds }; return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new ObjectContent <ApplyTemplateResponse>(applyTemplateResponse, new JsonMediaTypeFormatter()) })); } catch (Exception e) { stopWatch.Stop(); log.Error($"Error: {e.Message}\n\n{e.StackTrace}"); return(await Task.FromResult(new HttpResponseMessage(HttpStatusCode.ServiceUnavailable) { Content = new ObjectContent <string>(e.Message, new JsonMediaTypeFormatter()) })); } }