/// <summary> /// Download the workbooks /// </summary> /// <param name="onlineLogin">logged in session</param> /// <param name="exportToPath">local path to export to</param> /// <param name="projectsList">project id/name mapping</param> /// <param name="singleProjectIdFilter">if specified, export only from a single project</param> /// <param name="exportOnlyWithThisTag">if specified, export only content with this tag</param> /// <param name="deleteTagAfterExport">TRUE: Remove the server-side tag from exported content (only valid if we have an export tag)</param> private void Execute_DownloadWorkbooks( TableauServerSignIn onlineLogin, string exportToPath, IProjectsList projectsList, SiteProject singleProjectIdFilter = null, string exportOnlyWithThisTag = null, bool deleteTagAfterExport = false) { var onlineUrls = _onlineUrls; _statusLog.AddStatusHeader("Download workbooks"); //Get the UserID we need to use for the workbooks query. var explicitUserId = onlineLogin.UserId; //See if we have a default user id //=================================================================================== //Workbooks... //=================================================================================== ICollection <SiteWorkbook> workbooksList = null; try { var workbooks = new DownloadWorkbooksList(onlineUrls, onlineLogin, explicitUserId); //Query for the list of workbook workbooks.ExecuteRequest(); workbooksList = workbooks.Workbooks; } catch (Exception exWorkbooksList) { _statusLog.AddError("Error querying for list of workbooks, " + exWorkbooksList.Message.ToString()); return; } //No list of workbooks? Exit. if (workbooksList == null) { _statusLog.AddStatus("Aborting workbooks download"); return; } //==================================================================================================== //Apply filters to the list of content to see if we need to reduce the set of content to be downloaded //==================================================================================================== var filteredList = workbooksList; _statusLog.AddStatus("Download workbooks count before filters: " + filteredList.Count.ToString()); //See if we have a PROJECTS filter to apply to the set of content to be downloaded filteredList = FilterProjectMembership <SiteWorkbook> .KeepOnlyProjectMembers( filteredList, singleProjectIdFilter, true); _statusLog.AddStatus("Download workbooks count after projects filter: " + filteredList.Count.ToString()); //See if we have a TAGS filter to apply to the set of content to be downloaded filteredList = FilterTagSet <SiteWorkbook> .KeepOnlyTagged( filteredList, exportOnlyWithThisTag, true); _statusLog.AddStatus("Download workbooks count after tags filter: " + filteredList.Count.ToString()); //----------------------------------------------------------- //Download the workbooks //----------------------------------------------------------- var workbookPath = Path.Combine(exportToPath, "workbooks"); ICollection <SiteWorkbook> successfullExportSet = null; FileIOHelper.CreatePathIfNeeded(workbookPath); try { var workbookDownloads = new DownloadWorkbooks(onlineUrls, onlineLogin, filteredList, workbookPath, projectsList); successfullExportSet = workbookDownloads.ExecuteRequest(); } catch (Exception exWorkbooksDownload) { _statusLog.AddError("Error during workbooks download, " + exWorkbooksDownload.ToString()); } //-------------------------------------------------------------------------------- //Do we want to remove tags from successfully downloaded content? //-------------------------------------------------------------------------------- if ((successfullExportSet != null) && (deleteTagAfterExport) && (!string.IsNullOrWhiteSpace(exportOnlyWithThisTag))) { Execute_DeleteTagFromWorkbooks(onlineLogin, successfullExportSet, exportOnlyWithThisTag); } }
/// <summary> /// Download the data sources /// </summary> /// <param name="onlineLogin"></param> private void Execute_DownloadDatasources( TableauServerSignIn onlineLogin, string exportToPath, IProjectsList projectsList, SiteProject singleProjectIdFilter = null, string exportOnlyWithThisTag = null, bool deleteTagAfterExport = false) { _statusLog.AddStatusHeader("Download datasources"); ICollection <SiteDatasource> datasourcesList = null; try { //Get the list of datasources var datasourcesManager = new DownloadDatasourcesList(_onlineUrls, onlineLogin); datasourcesManager.ExecuteRequest(); datasourcesList = datasourcesManager.Datasources; } catch (Exception exGetContentList) { _statusLog.AddError("Error querying for list of datasources, " + exGetContentList.Message.ToString()); } if (datasourcesList == null) { _statusLog.AddError("Aborting datasources download"); return; } //==================================================================================================== //Apply filters to the list of content to see if we need to reduce the set of content to be downloaded //==================================================================================================== var filteredList = datasourcesList; _statusLog.AddStatus("Download datasources count before filters: " + filteredList.Count.ToString()); //See if we have a PROJECTS filter to apply to the set of content to download filteredList = FilterProjectMembership <SiteDatasource> .KeepOnlyProjectMembers( filteredList, singleProjectIdFilter, true); _statusLog.AddStatus("Download datasources count after projects filter: " + filteredList.Count.ToString()); //See if we have a TAGS filter to apply to the set of content to be downloaded filteredList = FilterTagSet <SiteDatasource> .KeepOnlyTagged( filteredList, exportOnlyWithThisTag, true); _statusLog.AddStatus("Download datasources count after tags filter: " + filteredList.Count.ToString()); ICollection <SiteDatasource> successfullExportSet = null; var datasourcePath = Path.Combine(exportToPath, "datasources"); FileIOHelper.CreatePathIfNeeded(datasourcePath); //----------------------------------------------------------- //Download the data sources //----------------------------------------------------------- try { var datasourceDownloads = new DownloadDatasources( _onlineUrls, onlineLogin, filteredList, datasourcePath, projectsList); successfullExportSet = datasourceDownloads.ExecuteRequest(); } catch (Exception exDatasourceDownload) { _statusLog.AddError("Error during datasource download, " + exDatasourceDownload.ToString()); } //-------------------------------------------------------------------------------- //Do we want to remove tags from successfully downloaded content? //-------------------------------------------------------------------------------- if ((successfullExportSet != null) && (deleteTagAfterExport) && (!string.IsNullOrWhiteSpace(exportOnlyWithThisTag))) { Execute_DeleteTagFromDatasources(onlineLogin, successfullExportSet, exportOnlyWithThisTag); } }