Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        /// <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);
        }