Tableau Migration SDK 5.1.1
  • Articles
  • Code Samples
  • Python API Reference
  • C# API Reference
Show / Hide Table of Contents
  • Filters
    • Filter projects by name
    • Filter users by SiteRole
    • Filter Custom Views by 'Shared' flag
  • Mappings
    • Username email
    • Rename projects
    • Change projects
  • Transformers
    • Add tags to content
    • Encrypt Extracts
    • Adjust 'Start At' to Scheduled Tasks
    • Change default users for Custom Views
    • Action URL XML Transformer
  • Post-Publish Hooks
    • Update permissions
  • Bulk Post-Publish Hooks
    • Bulk logging
  • Batch Migration Completed Hooks
    • Batch migration logging
  • Migration Action Completed Hooks
    • Migration action logging

Sample: Batch Migration Logging

This example demonstrates how to log migration batch item statuses using a batch migration completed hook.

  • Python
  • C#

Batch Migration Completed Hook Class

import logging
from typing import TypeVar
from tableau_migration import(
    ContentBatchMigrationCompletedHookBase,
    IContentBatchMigrationResult,
    IUser
    )

T = TypeVar("T")

class LogMigrationBatchesHook(ContentBatchMigrationCompletedHookBase[T]):
    def __init__(self) -> None:
        super().__init__()
        self._logger = logging.getLogger(__name__)
        
    def execute(self, ctx: IContentBatchMigrationResult[T]) -> IContentBatchMigrationResult[T]:
        
        item_status = ""
        for item in ctx.item_results:
            item_status += "%s: %s".format(item.manifest_entry.source.location, item.manifest_entry.status)
                
        self._logger.info("%s batch of %d item(s) completed:\n%s", ctx._content_type, ctx.item_results.count, item_status)
        
        pass
    
class LogMigrationBatchesHookForUsers(ContentBatchMigrationCompletedHookBase[IUser]):
    def __init__(self) -> None:
        super().__init__()
        self._content_type = "User";

class LogMigrationBatchesHookForGoups(ContentBatchMigrationCompletedHookBase[IUser]):
    def __init__(self) -> None:
        super().__init__()
        self._content_type = "Group";

Registration

Learn more.

plan_builder.hooks.add(LogMigrationBatchesHookForUsers)
plan_builder.hooks.add(LogMigrationBatchesHookForGroups)

Batch Migration Completed Hook Class

public class LogMigrationBatchesHook<T> : IContentBatchMigrationCompletedHook<T>
    where T : IContentReference
{
    private readonly ILogger<LogMigrationBatchesHook<T>> _logger;

    public LogMigrationBatchesHook(ILogger<LogMigrationBatchesHook<T>> logger)
    {
        _logger = logger;
    }

    public Task<IContentBatchMigrationResult<T>?> ExecuteAsync(IContentBatchMigrationResult<T> ctx, CancellationToken cancel)
    {
        _logger.LogInformation(
            "{ContentType} batch of {Count} item(s) completed:{NewLine}{Statuses}",
            typeof(T).Name,
            ctx.ItemResults.Count,
            Environment.NewLine,
            String.Join(Environment.NewLine, ctx.ItemResults.Select(r => $"{r.ManifestEntry.Source.Location}: {r.ManifestEntry.Status}")));

        return Task.FromResult<IContentBatchMigrationResult<T>?>(ctx);
    }
}

Registration

Learn more.

_planBuilder.Hooks.Add<LogMigrationBatchesHook<IUser>>();
_planBuilder.Hooks.Add<LogMigrationBatchesHook<IProject>>();
_planBuilder.Hooks.Add<LogMigrationBatchesHook<IDataSource>>();
_planBuilder.Hooks.Add<LogMigrationBatchesHook<IWorkbook>>();
_planBuilder.Hooks.Add<LogMigrationBatchesHook<ICloudExtractRefreshTask>>();

Dependency Injection

Learn more.

services.AddScoped(typeof(LogMigrationBatchesHook<>));
  • Edit this page
In this article