Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

DAM for Sitecore is constructed using pipelines, and it is possible to hook into the pipelines.

Note: Be aware that if you do change the pipelines, you are changing how DAM for Sitecore is supposed to work out of the box, and this may result in undesirable side effects.

The pipelines are defined in the .config files found in this folder: \ App_Config \Include \damforsitecore→ damforsitecore → DFS.Pipelines.config

Below are descriptions of the most important pipelines used in the module.

App_Config/Include/damforsitecore/DFS.SettingsPipelines.config

Pipeline

Description

PipelineArgs

DFS.GetAssetFieldValue

This pipeline will return rendering html for an asset item. 

  1. First it will get the html template, determined by the media type and the fieldId (HtmlForAssetType). The html templates are located at:
    Sitecore → System → Modules → Digizuite → MedaDataRoot → AssetTypeOutputRoot.

  2. The different processors will replace the stampvalue in the html template.

  3. The property FieldValue of GetAssetFieldValueArgs will contain the rendering html.


List of processors

  • DFS.Client.

ContentSearch
  • Services.Pipelines.GetAssetFieldValue.GetAssetTypeOutput

  • DFS.Client.Services.Pipelines.GetAssetFieldValue.ReplaceTagsWithSelectedValues

  • DFS.Client.Services.Pipelines.GetAssetFieldValue.ReplaceTagsWithAccessValues

  • DFS.Client.Services.Pipelines.GetAssetFieldValue.ReplaceTagsWithConfigValues

  • DFS.Client.Services.Pipelines.GetAssetFieldValue.

ReplaceTagsWithAssetItemFieldValues
  • AppendTagsWithParameterValues

  • DFS.Client.

ContentSearch
  • Services.Pipelines.GetAssetFieldValue.ReplaceTagsWithAssetIndexValues

  • DFS.

Pipelines
  • Client.

GetAssetFieldValue
  • Services.

RemoveEmptyAttributesDFS.
  • Pipelines.GetAssetFieldValue.

AppendTagsWithParameterValues
  • RemoveEmptyAttributes

  • DFS.

ContentSearch
  • Client.

Pipelines.GetAssetFieldValue.AppendSeoDFS.
  • Services.Pipelines.GetAssetFieldValue.SplitFieldValueIntoResult


Code Block
languagec#
var renderArgs = new GetAssetFieldValueArgs
{
	AssetItemId = new ID(this.AssetItemId),
	ContextLanguage = Context.Language,
	FieldId = DFS.Fields.HtmlForAssetType.FieldAssetMedia,
	Quality = this.Quality
};

App_Config/Include/damforsitecore/DFS.Services.config


Pipeline

Description

PipelineArgs

DFS.Services.DFSMedia

This pipeline will return the media stream either from the cache or from Digizuite DAM. 

First we check security
  1. On ContentManagement server, we synchronize the asset if it does not exists in the asset silo.

  2. Fetch the asset from the asset silo.

  3. If the media is in the cache we return that.

  4. The media was not in the cache, fetch the media from Digizuite DAM.

  5. We resize the image, if resizing parameters was added.

  6. Store the media in the cache.

  7. Resolve download filename.


List of processors

  • DFS.Client.Services.Pipelines.DFSMedia.

CheckSecurity
  • SynchronizeAsset (Only In Role: ContentManagement)

  • DFS.Client.Services.Pipelines.DFSMedia.

GetMediaFromCache
  • LoadAssetEntity

  • DFS.Client.Services.Pipelines.DFSMedia.

GetMediaPrerequisites
  • GetMediaFromCache

  • DFS.Client.Services.Pipelines.DFSMedia.GetMediaFromDigizuite

  • DFS.Client.Services.Pipelines.DFSMedia.ResizeImage

  • DFS.Client.Services.Pipelines.DFSMedia.SaveToCache

  • DFS.Client.Services.Pipelines.DFSMedia.

ResolveDownloadFilename
  • ResolveFilename


Code Block
languagec#
var arguments = new DFSMediaPipelineArgs
{
	Request = mediaRequest,
    Result = new MediaResult()
};

App_Config/Include/damforsitecore/DFS.Connect.config


Pipeline

Description

PipelineArgs

DFS.

Connect.DetectDamChanges

DigizuiteUpdateNotification

This pipeline will

pick up any changes made to assets or metafield in Digizuite DAM.
  • First we fetch assets that has been changed in a given date range. A list of assets are store on the detectDamChangesArgs.modifiedAssets.
  • Then we fetch metafields that has been changed in a given date range. A list of metafield are store on the detectDamChangesArgs.modifiedMetafields.
  • The RunSyncDeletedAssets processor will delete sitecore items from the silo bucket, that no longer exists in the DAM for Sitecore channel in Digizuite DAM, the same goes for the RunSyncDeletedMetafields processor

    run every time Digizuite sends asset updates. 

    1. Fetch the asset(s) from Digizuite.

    2. Save the assets as items in Sitecore.

    3. If the requested assets are not found in Digizuite and they exists as items in Sitecore, then we delete the items, because they nolonger are available to the Sitecore channel.

    4. Clear local cache, both data cache and cached images.

    5. Send a clear cache to all CD servers.

    List of processors

    • DFS.Connect.Pipelines.

    DetectDamChanges
    • SyncAssets.

    RunGetModifiedAssets
    • FetchAssets

    • DFS.Connect.Pipelines.

    DetectDamChanges
    • SyncAssets.

    RunGetModifiedMetafields
    • SaveItems

    • DFS.Connect.Pipelines.

    DetectDamChanges
    • SyncAssets.

    RunSyncDeletedAssets
    • DeleteItems

    • DFS.Client.

    Connect
    • Services.Pipelines.

    DetectDamChanges
    • Cache.

    RunSyncMetagroups
    • ClearLocalCache

    • DFS.Client.

    Connect
    • Services.Pipelines.

    DetectDamChanges
    • Cache.

    RunSyncDeletedMetafields
    • ClearRemoteCache

    Code Block
    languagec#
    var 

    detectDamChangesArgs

    syncAssetsArgs = new SyncAssetsArgs
    {
        FacetList = new 

    DetectDamChangesArgs(assetSilo, LanguageManager.DefaultLanguage.Name, DateTime.Now);DFS.Connect.SynchronizeSilo

    This is the full synchronization, is fetches both configurations and assets from Digizuite DAM. The assets are stored in the silo which is a item bucket.

  • Check if the silo is locked, we can only run one full synchronization at a time. If the silo is not locked, we lock it.
  • Then pauses out custom index: dfs_assets_master_index
  • Fetch all configuration.
  • Fetch all assets that are avaible in Digizuite DAM channel.
  • Create/update all (new) Sitecore items from what you have fetched.
  • Rebuild the index: dfs_assets_master_index
  • Unlock the silo again. 

    List<FacetField>
        {
            new FacetField()
            {
                facetMode = "QueryOnly",
                recursive = true,
                searchKey = "assetId",
                values = assetIds
            },
            new FacetField()
            {
                recursive = false,
                searchKey = "derivedFrom",
                operation = "Or",
                facetMode = "QueryOnly"
            }
        },
        Count = assetIds.Count,
        Language = DfsLanguage.GetLanguage(language),
        AssetIds = BaseIds
    };


    Synchronization

    Pipeline

    Description

    PipelineArgs

    DFS.SyncAsset

    This pipeline is triggered when you insert Digizuite assets into on of the DAM for Sitecore custom fields. 

    1. First it tests if the requested asset is allready synchronized and exists in the asset silo. If the forceUpdate is true, then we skip this check.

    2. Fetch the asset from Digizuite.

    3. Save the asset in /sitecore/media library/Digizuite/Assets.

    List of processors

    • DFS.Connect.Pipelines.

    SynchronizeAssetsSilo
    • SyncAsset.

    CheckSiloLock
    • ItemExists

    • DFS.Connect.Pipelines.

    SynchronizeAssetsSilo
    • SyncAsset.

    LockSilo
    • FetchAsset

    • DFS.Connect.Pipelines.

    SynchronizeAssetsSilo.PauseSearchIndexing
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RunEnsureMetaDataFolders
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RunSynchronizeMetaDataLanguages
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RunSynchronizeAssetTypes
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RunSynchronizeMetaGroupRoots
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RunSynchronizeAssetTypes
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RunSynchronizeMediaFormatTypes
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RunSynchronizeConfig
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RunSynchronizeFormats
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.ResumeSearchIndexing
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RebuildSearchIndexes
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.PauseSearchIndexing
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RunSynchronizeAssets
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.ResumeSearchIndexing
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RebuildSearchIndexes
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.UnLockSilo
    • SyncAsset.SaveItem

    Code Block
    languagec#
    var 

    synchronizeAssetsSiloRequest

    arguments = new 

    SynchronizationRequest(0,SiloId)

    SyncAssetArgs
    {
      

    {

      

    Language

    AssetId = 

    "en"

    aid,
     

    Direction

       Language = 

    Direction.Inbound, PipelineName = "DFS.Connect.SynchronizeSilo" };DFS.Connect.SynchronizeSiloConfiguration

    This will only synchronize the configuration.

  • Check if the silo is locked, we can only run one full synchronization at a time. If the silo is not locked, we lock it.
  • Pause the custom index: dfs_assets_master_index
  • Fetch all configuration.
  • Create/update all (new) Sitecore items
  • Rebuild the index: dfs_assets_master_index
  • Unlock the silo again. 

    DfsLanguage.GetLanguage(language),
        ForceUpdate = true
    };

    Pipeline

    Description

    PipelineArgs

    DFS.SyncAssets

    This pipeline is used in Administration DAM for Sitecore. Under the menu Broken links and Synchronization.

    1. Fetch a list of assets from Digizuite.

    2. Save the assets in /sitecore/media library/Digizuite/Assets.

    List of processors

    • DFS.Connect.Pipelines.

    SynchronizeAssetsSilo
    • SyncAssets.

    CheckSiloLock
    • FetchAssets

    • DFS.Connect.Pipelines.

    SynchronizeAssetsSilo.LockSilo
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.PauseSearchIndexing
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RunEnsureMetaDataFolders
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RunSynchronizeMetaDataLanguages
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RunSynchronizeAssetTypes
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RunSynchronizeMetaGroupRoots
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RunSynchronizeAssetTypes
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RunSynchronizeMediaFormatTypes
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RunSynchronizeConfig
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RunSynchronizeFormats
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.ResumeSearchIndexing
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RebuildSearchIndexes
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.UnLockSilo
    • SyncAssets.SaveItems

    Code Block
    languagec#
    var

    synchronizeAssetsSiloRequest

     arguments = new SyncAssetsArgs
    {
        FacetList = new

    SynchronizationRequest(0,SiloId) { Language

     List<FacetField>
        {
            new FacetField()
            {
                facetMode = "

    en

    QueryOnly",
                

    Direction

    recursive = 

    Direction.Inbound

    true,
     

    PipelineName

               searchKey = "

    DFS.Connect.SynchronizeSiloConfiguration" };DFS.Connect.SynchronizeSiloAssets

    This will only synchronize the assets.

  • Check if the silo is locked, we can only run one full synchronization at a time. If the silo is not locked, we lock it.
  • Then pauses out custom index: dfs_assets_master_index
  • Fetch all assets.
  • Create/build all (new) Sitecore items
  • Rebuild the index: dfs_assets_master_index
  • Unlock the silo again. 

    assetId",
                values = assetIds
            }
        },
        Count = assetIds.Count,
        Language = DfsLanguage.GetLanguage(language)
    }

    Pipeline

    Description

    PipelineArgs

    DFS.BatchSync

    This pipeline is used in Administration DAM for Sitecore. Under the menu Synchronization. This pipeline is used to synchronize a large number of assets. It will run in a Sitecore job.

    1. This will call the pipeline DFS.BatchSyncAssets with a batch of 50 assets ( the batch number is configuable).

    2. Once all assets are done synchronizing we will rebuild the Sitecore index sitecore_master_index.

    List of processors

    • DFS.Connect.Pipelines.

    SynchronizeAssetsSilo
    • BatchSyncAssets.

    CheckSiloLock
    • BatchSyncAssets

    • DFS.Connect.Pipelines.

    SynchronizeAssetsSilo.LockSilo
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.PauseSearchIndexing
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RunSynchronizeAssets
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.ResumeSearchIndexing
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.RebuildSearchIndexes
  • DFS.Connect.Pipelines.SynchronizeAssetsSilo.UnLockSilo
    • BatchSyncAssets.RebuildIndex (<IndexName>sitecore_master_index</IndexName>)

    Code Block
    languagec#
    var 

    synchronizeAssetsSiloRequest

    arguments = new

    SynchronizationRequest(0,SiloId) {

     SyncAssetsArgs
    {
        FacetList = facetList,
        Language = 

    "en",

    language,
        

    Direction

    Count = 

    Direction.Inbound,

    1,
        

    PipelineName

    Job = 

    "DFS.Connect.SynchronizeSiloAssets" };

    Job
    }

    Pipeline

    Description

    PipelineArgs

    DFS.

    Connect.SynchronizeAsset

    This will re-synchronize one single asset item and update the data from Digizuite DAM.

  • Find the bucket item in Sitecore.
  • Fetch data from Digizuite DAM, for the specific assetId.
  • We only update the sitecore item, if there are any changes

    BatchSyncAssets

    This pipeline is triggered by the pipeline DFS.BatchSync.

    1. Fetch a list of assets from Digizuite.

    2. Save the assets in /sitecore/media library/Digizuite/Assets, with the following disables around: SecurityDisabler, DatabaseCacheDisabler, EventDisabler and BulkUpdateContext to optimize the creation of alot of items in Sitecore.

    List of processors

    • DFS.Connect.Pipelines.

    SynchronizeAsset
    • SyncAssets.

    GetSitecoreAsset
    • FetchAssets

    • DFS.Connect.

    Digizuite.
    • Pipelines.

    SynchronizeAsset.GetAsset
  • DFS.Connect.Pipelines.SynchronizeAsset.ResolveAssetChanges
  • DFS.Connect.Pipelines.SynchronizeAsset.SaveAssetToSitecore
  • DFS.Connect.Digizuite.Pipelines.SynchronizeAsset.SaveAsset
    • SyncAssets.SaveItemsWithDisablers

    Code Block
    languagec#
    var 

    synchronizeAssetRequest

    arguments = new

    SynchronizationRequest(AssetId, ID.Parse(assetSiloRootId).ToString()) { Language = language.Name, Direction = Direction.Inbound, Path = ID.Parse(assetSiloRootId).ToString() };

     SyncAssetsArgs
    {
        Count = batchLSize,
        Skip = x * batchLSize,
        FacetList = args.FacetList,
        Language = DfsLanguage.GetLanguage(args.Language)
    }