Kentico 7如何使用API​​访问新的产品类型字段

时间:2014-01-21 19:19:39

标签: api kentico

我在站点管理器/文档类型中在Kentico中创建了一个新的产品文档类型。我添加了大小和颜色等新字段。在电子商务标签中,我选择了“文档类型代表产品类型”。这为我的新文档类型创建了一个新表,其中包含自定义字段。

我可以在cms桌面/内容的产品部分添加此类型的新内容项。但在我的代码中,我不确定如何最好地使用API​​来访问我为此文档类型创建的自定义字段。当它只是一个产品时,我会使用以下内容:

CMS.Ecommerce.SKUInfoProvider.GetInfoById(PredefinedObjectType.SKU,id)

我仍然可以使用此方法获取我的新产品类型的sku信息,但我看不到如何访问我为新产品类型创建的自定义字段。

此外,我不确定Kentico如何将此产品类型的自定义字段与新表关联到COM_SKU表

2 个答案:

答案 0 :(得分:4)

我建议您查看API示例,您可以在站点管理器 - 支持 - Api示例 - 电子商务中找到它们。我相信你的情况你必须使用文档API。自定义字段可通过GetValueSetValue方法访问。

对于你的情况,你应该使用类似这样的例子:

private bool GetAndUpdateProductDocument()
{
    TreeProvider tree = new TreeProvider(CMSContext.CurrentUser);

    // Get the product document
    TreeNode node = tree.SelectSingleNode(CMSContext.CurrentSiteName, "/MyNewProduct", null, true);

    if (node != null)
    {
        // Set the properties
        node.SetValue("ProductDescription", "Product was updated.");
        node.DocumentName = node.DocumentName.ToLowerCSafe();

        // Update the product document
        DocumentHelper.UpdateDocument(node, tree);

        return true;
    }

    return false;
}

答案 1 :(得分:4)

Kentico将CMS与EMS(电子商务管理系统)联系起来的方式并不是很明显。

它试图让它们保持相对分离。在树中创建产品实例时,Kentico会做两件事:

  • 将其与电子商务相关的数据存储在新行COM_SKU表中(可在代码中作为SKUInfo对象访问)

  • 创建文档类型Product(或从产品继承的文档类型)的新CMS_Tree行(以及匹配的CMS_Document行)

数据库只保存一条信息来链接两个表 - CMS_Tree.SKUNodeID ,对于不是SKU产品的文档,null

这些表中的任何一个都允许您通过Kentico Site Manager CMS添加自定义字段。您可以在产品的文档类型中创建自定义字段,也可以在SKU的自定义字段中创建(在SiteManager-> Development-> System Tables-> COM_SKU中)。

根据您的信息是否与EMS相关,应根据您的信息确定存储位置。

查看您的问题,您已经在对象的Document部分中定义了自定义字段,因此可以使用以下方式访问它们:

TreeNode productTreeNode = TreeHelper.SelectSingleNode("/Home/TreeNode/Path/To/Product");
object customValue = productTreeNode.GetValue("[your_custom_field_name]");

但是,如果您需要访问在电子商务部分(SKUInfo对象)中定义的自定义字段,则稍微困难一些。如果您有权访问skuID:

SKUInfo skuObject = SKUInfoProvider.getSKUInfo(skuID);
skuObject.GetValue("[your_custom_field_name]");

如果您有权访问产品的TreeNode,那么它应该可以转发为SKUTreeNode,并且从那里访问SKUInfo对象(以及它的skuID): / p>

SKUTreeNode skuNode = CurrentDocument as SKUTreeNode;
if( skuNode != null ) {
    skuNode.SKU.SKUID; 
}

另请注意:

可以为多个树节点分配单个SKU产品。您还可以在树中创建产品,而无需创建匹配的SKU对象。 (在CMS中创建实例时应该有一个复选框)