Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Next »

Digizuite™ For Episerver has build in support for Episerver Commerce. It will work as Episerver default, support for the drag and drop and/or the Media picker.

Commerce Example Package

The Digizuite.Episerver.Commerce package is distibuted as is, and includes examples how to import assets.

Download example package here ← To be linked

Package including:

  • Base Framework for putting products into queue for processing

  • Full import job

  • Import job for products changed last 30 days

  • Syncronizing products that is in queue

Episerver Fields in Digizuite

In Digizuite UI, there is an Episerver Commerce panel with ProductIds field. Example bellow and Example package are using this field to connect DAM assets to products in commerce.

Example code

Querying DAM for assets by codes

This code is essential for querying the DAM. Example taken from Example package source file CommerceAssetConnector.cs

//Query to Digizuite
AssetQueryParameters aq = new Digizuite.Episerver.Models.AssetQueryParameters
{
    FoldersToSearch = null,
    AssetTypes = null,
    CropName = null,
    Sort = null,
    Limit = -1,
    Page = -1,
    OptionalFilters = new System.Collections.Generic.Dictionary<string, string>()
};
aq.OptionalFilters.Add("sProductIds_type_multistrings", "1");
aq.OptionalFilters.Add("sProductIds", code);
//possible to add products/skus
//aq.OptionalFilters.Add("sProductIds", nextcode);

IEnumerable<IContent> connectedMedia = IDigizuiteClient.Search(aq);

The IDigizuiteClient returns the IContent representation of the asset from DAM, that can be connected to Episerver Product/SKU CommerceMediaCollection where Media is connected.

How to connect assets to an Episerver product/SKU

This code sample attaches the IContent from DAM to product/SKUs

IEnumerable<IContent> assetlist = _client.Search(aq); //_client is DI of IDigizuiteClient

if (assetlist.Any()) //check if any result from DAM
{
    if (_contentLoader.TryGet<IContent>(item.ContentReference, out IContent content))
    {
        if (content is IAssetContainer assetContainer)//contains CommerceMediaCollection
        {
            IAssetContainer ac = (content as EntryContentBase).CreateWritableClone() as IAssetContainer;
            var updated = false;
            //Decomment to remove CommerceMediaCollection for deletion of image, but this is not recomended for performance to delete and add for efter run, to much overhead.
            //reset commerce collection
            //if (ac.CommerceMediaCollection.Any())
                  //ac.CommerceMediaCollection = new ItemCollection<CommerceMedia>();
                  
            foreach (var asset in assetlist)
            {
                try
                {                                    
                    //check if allready connected
                    if (!ac.CommerceMediaCollection.Any(x => x.AssetLink.ID == asset.ContentLink.ID))
                    {
                        ac.CommerceMediaCollection.Insert(0, new CommerceMedia() { AssetLink = asset.ContentLink, SortOrder = 0, AssetType = "episerver.core.icontentimage", GroupName = "Digizuite" });
                        updated = true;
                    }
                    else
                    {
                        var m1 = $"Digizuite id {asset.ContentLink.ID} allready connected to {code}<br/>";
                        _logger.Debug(m1);
                        returnmessage += m1;
                        Success = true;
                        continue;
                    }
                }
                catch (Exception e)//if allready connected error
                {
                    var m2 = $"Digizuite id {asset.ContentLink.ID} failed to connect to {code} {e.Message}<br/>";
                    _logger.Debug(m2);
                    returnmessage += m2;
                    Success = false;
                    continue;
                }

                var m3 = $"Digizuite id {asset.ContentLink.ID} has been connected to {code}<br/>"; ;
                _logger.Debug(m3);
                returnmessage += m3;
                Success = true;
            }

            if (updated)
            {
                try
                {
                    //saving your change
                    //use ForceCurrentVersion and SkipValidation for performance boost/less overhead database work <-- secret
                    _contentRepository.Save(ac as IContent, EPiServer.DataAccess.SaveAction.Publish | EPiServer.DataAccess.SaveAction.SkipValidation | EPiServer.DataAccess.SaveAction.ForceCurrentVersion, EPiServer.Security.AccessLevel.NoAccess);
                }
                catch (Exception e) {
                    var m4 = $"Saving Commerce Asset failed. contentReference: {(ac as IContent).ContentLink.ID} code: {code}";
                    returnmessage += m4;
                    _logger.Error(m4, e);
                    Success = false;
                }
            }
        }
    }
}

  • No labels