The post is about copying the product attributes from one product to another, you can use it to create new attributes as well.
/// <summary>
/// Copy the product categories
/// </summary>
/// <param name = "_origProduct">Origin product</param>
/// <param name = "_newProduct">New product</param>
public void updateProductCategories(EcoResProduct _origProduct, EcoResProduct _newProduct)
{
EcoResProductCategory ecoResProductCategory, ecoResProductCategoryOrig;
EcoResProductRecId newEcoResProductRecId = _newProduct.RecId;
delete_from ecoResProductCategory
where ecoResProductCategory.Product == newEcoResProductRecId;
RefRecId origProductRecId, newProductRecId, productInstanceRecIdNew, ecoResTextValueRecId_AfterInsert;
EcoResCategory ecoResCategory;
EcoResCategoryAttributeLookup ecoResCategoryAttributeLookup;
EcoResAttribute ecoResAttribute;
EcoResAttributeValue ecoResAttributeValue, ecoResAttributeValue_ForInsert;
EcoResProductInstanceValue ecoResProductInstanceValue, ecoResProductInstanceValueNew;
EcoResTextValue ecoResTextValue, ecoResTextValue_ForInsert;
if (_origProduct && _newProduct)
{
origProductRecId = _origProduct.RecId;
newProductRecId = _newProduct.RecId;
if (origProductRecId != newProductRecId)
{
ttsBegin;
ecoResProductInstanceValueNew.Product = newProductRecId;
new OverwriteSystemFieldsPermission().assert();
ecoResProductInstanceValueNew.overwriteSystemfields(true);
ecoResProductInstanceValueNew.(fieldNum(EcoResProductInstanceValue, InstanceRelationType)) = tableName2id(tableStr(EcoResProductInstanceValue));
ecoResProductInstanceValueNew.insert();
ecoResProductInstanceValueNew.overwriteSystemfields(false);
CodeAccessPermission::revertAssert();
ttsCommit;
if (ecoResProductInstanceValueNew)
{
productInstanceRecIdNew = ecoResProductInstanceValueNew.RecId;
while select ecoResProductCategoryOrig
where ecoResProductCategoryOrig.Product == origProductRecId
join ecoResCategory
where ecoResCategory.RecId == ecoResProductCategoryOrig.Category
{
ttsbegin;
ecoResProductCategory.Product = newProductRecId;
ecoResProductCategory.Category = ecoResProductCategoryOrig.Category;
ecoResProductCategory.CategoryHierarchy = ecoResProductCategoryOrig.CategoryHierarchy;
ecoResProductCategory.insert();
ttscommit;
if (ecoResProductCategory)
{
while select ecoResCategoryAttributeLookup where ecoResCategoryAttributeLookup.Category == ecoResCategory.RecId
join ecoResAttribute where ecoResAttribute.RecId == ecoResCategoryAttributeLookup.Attribute
{
select firstonly ecoResAttributeValue
where ecoResAttributeValue.Attribute == ecoResAttribute.RecId
join ecoResProductInstanceValue
where ecoResProductInstanceValue.RecId == ecoResAttributeValue.InstanceValue
&& ecoResProductInstanceValue.Product == origProductRecId
join ecoResTextValue
where ecoResTextValue.RecId == ecoResAttributeValue.Value;
if (ecoResAttributeValue.Attribute > 0)
{
ecoResTextValue_ForInsert.TextValue = ecoResTextValue.TextValue;
new OverwriteSystemFieldsPermission().assert();
ecoResTextValue_ForInsert.overwriteSystemfields(true);
ecoResTextValue_ForInsert.(fieldNum(EcoResTextValue, InstanceRelationType)) = tableName2id(tableStr(EcoResTextValue));
ecoResTextValue_ForInsert.insert();
ecoResTextValue_ForInsert.overwriteSystemfields(false);
CodeAccessPermission::revertAssert();
}
if (ecoResTextValue_ForInsert)
{
ecoResTextValueRecId_AfterInsert = ecoResTextValue_ForInsert.RecId;
ecoResAttributeValue_ForInsert.Attribute = ecoResAttributeValue.Attribute;
ecoResAttributeValue_ForInsert.InstanceValue = productInstanceRecIdNew;
ecoResAttributeValue_ForInsert.Value = ecoResTextValueRecId_AfterInsert;
ecoResAttributeValue_ForInsert.insert();
}
}
}
}
}
}
}
}
No comments:
Post a Comment