public async Task <IEnumerable <TableauWorkbook> > GetAllWorkbooksAsync() { List <TableauWorkbook> tabWorkbooks; await GetAuthToken(); if (string.IsNullOrWhiteSpace(_authToken)) { var message = "Access is denied !"; Log.Debug(message); throw new UnauthorizedAccessException(message); } if (string.IsNullOrWhiteSpace(_siteId)) { var message = "Site Id required!"; Log.Debug(message); throw new ArgumentException(message); } try { //GET /api/api-version/sites/site-id/workbooks var response = await GetHttpClient(_authToken).GetAsync($"sites/{_siteId}/workbooks"); response.EnsureSuccessStatusCode(); string content = await response.Content.ReadAsStringAsync(); var workbooksResponse = JsonConvert.DeserializeObject <WorkbooksResponse>(content); tabWorkbooks = TableauWorkbook.Generate(workbooksResponse.GetWorkbooks()); foreach (var tabWorkbook in tabWorkbooks) { var tabViews = await GetAllViewsAsync(tabWorkbook.TableauId); if (null != tabViews) { tabWorkbook.AddTabViews(tabViews.ToList()); } } } catch (Exception e) { Log.Debug(e); throw; } return(tabWorkbooks); }
/// <summary> /// <see cref="ITableauWorkbookService.PublishWorkbookAsync"/> /// </summary> public async Task <TableauWorkbook> PublishWorkbookAsync( TableauWorkbook workbook, string path, bool overwrite = false ) { _logger?.Debug($"Publishing workbook {workbook.Name}"); if (String.IsNullOrWhiteSpace(workbook.Project?.Id)) { throw new InvalidDataException("Project ID must be specified"); } var url = _tableauApiService.SiteUrl.AppendUri($"workbooks?overwrite={overwrite.ToString().ToLower()}"); var workbookJson = new JObject(); workbookJson["workbook"] = workbook.ToRequestString(); // note: the content-disposition name header *must* be 'request_payload', the Tableau API // is hard-coded to look for the multipart segment with this name for the workbook meta info. // similarly, the content-disposition name header *must* be 'tableau_workbook' for the segment // that contains the workbook file data var responseString = await _tableauApiService.UploadFileAsync( url, path, "application/octet-stream", "tableau_workbook", workbookJson.ToString(), "application/json", "request_payload" ).ConfigureAwait(false); var responseJson = JToken.Parse(responseString); var responseWorkbook = JsonConvert.DeserializeObject <TableauWorkbook>( responseJson.Value <JObject>("workbook").ToString() ); _logger?.Debug($"Workbook {workbook.Name} published, id {responseWorkbook.Id}"); return(responseWorkbook); }