...
Code Block |
---|
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; //todoDecomment add Configto 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; } } } } } |
Programmatically update the DAM with ProductIds
This code is an example how you may update a DAM Asset with ProductIds (SKU Code) from Episerver.
Code Block |
---|
using Digizuite.Api.Core.Shared.Model; //from Digizuite.Api.Core.AspNet
private readonly IDigizuiteClient _client; //from Digizuite.Episerver
private void AddSkuToDamAsset(ContentReference assetLink, string skuCode)
{
var content = _contentLoader.Get<IDigizuiteContent>(assetLink);
if (!String.IsNullOrEmpty(skuCode) && content != null) {
List<MetadataValue> lst = new List<MetadataValue>();
//use metafieldLabelid from Digizuite center
lst.Add(new MetadataValue("51992", MetadataFieldType.EditMultiComboValue.ToString(),
new string[] { skuCode }, BatchUpdateType.Asset));
var res = _client.Configuration.MetaDataService.UpdateMetadata(content.ItemId, lst).Result;
if (!res.Success)
{
resultMessage += res.Error + "<br/>";
}
}
} |
Result in DAM:
...