我应该如何使用Kentico TreeNode.Update方法?

时间:2014-09-17 19:15:11

标签: methods treenode kentico

我正在尝试运行附加的代码来更新特定文档类型的某些数据,但它实际上并没有更新任何内容。

我的currentDocumentNodeId()方法基于一些其他标准撤回NodeId,然后它获得的每个节点都是HG.DocumentLibraryItem类型,其中包含列IsPublic,IsRepMining,IsRepPower,IsRepProcess和IsRepFlexStream。但是当我调用update方法然后在SQL表中为这个自定义文档类型拉回那些列时,值都是Null。 HG.DocumentLibraryItem文档类型中的每个列都设置为boolean我尝试使用Node.SetValue()方法并将其设置为true和1;这两种方法都无法更新。

任何想法我做错了什么?我正确地打电话了吗?

请参阅下面的代码:

public static void GetDocumentAreaAssignments()
{
    var cmd = new SqlCommand
    {
        CommandText ="This is pulling back 2 rows, one with Id and one with Text",
        CommandType = CommandType.Text,
        Connection = OldDbConnection
    };
    OldDbConnection.Open();

    try
    {
        using (SqlDataReader rdr = cmd.ExecuteReader())
        {
            var count = 0;
            while (rdr.Read())
            {

                try
                {
                    var documentId = TryGetValue(rdr, 0, 0);
                    var areaAssignment = TryGetValue(rdr, 1, "");

                    var currentDocumentNodeId = GetNodeIdForOldDocumentId(documentId);
                    var node = currentDocumentNodeId == 0
                        ? null
                        : Provider.SelectSingleNode(currentDocumentNodeId);

                    if (node != null)
                    {
                        switch (areaAssignment.ToLower())
                        {
                            case "rep mining":
                                node.SetValue("IsRepMining", 1);
                                break;
                            case "rep power":
                                node.SetValue("IsRepPower", 1);
                                break;
                            case "rep process":
                                node.SetValue("IsRepProcess", 1);
                                break;
                            case "rep flexStream":
                                node.SetValue("IsFlexStream", 1);
                                break;
                            case "public":
                                node.SetValue("IsPublic", 1);
                                break;
                        }
                        node.Update();
                        Console.WriteLine("Changed Areas for Node {0}; item {1} complete", node.NodeID,
                            count + 1);
                    }

                }
                catch (Exception ex)
                {

                }
                count++;
            }
        }
    }
    catch (Exception)
    {
    }
    OldDbConnection.Close();
}

1 个答案:

答案 0 :(得分:0)

coupled data(作为IsRepMining字段)仅在检索包含它们的节点时更新。为此,您必须使用带有className参数的SelectSingleNode()方法的重载。但是,我建议您始终使用DocumentHelper来检索文档。 (它将确保您使用最新版本的文档......如果是工作流程等。)

TreeProviderInstance.SelectSingleNode(1, "en-US", "HG.DocumentLibraryItem")
DocumentHelper.GetDocument(...)
DocumentHelper.GetDocuments(...)