C#操作Kentico cms 中的 content(winform环境)
Posted on 2013-08-08 10:49 Bowen Huang 阅读(3146) 评论(4) 编辑 收藏 举报前段时间做了个winform程序,去管理kentico网站的content,包括content节点的增删改查,以及相应节点内容的修改。现在将对content的操作方法简单的介绍一下。
我们想要操作kentico网站的content(如下图),操作步骤如下。
一、引入kentico相关的dll文件,配置数据库链接环境
不直接使用sql查询语句去操作,而是使用kentico cms的方法去直接操作,我们需要引入kentico cms系统中的dll文件,这些文件在kentico cms网站的/bin目录下面可以找到,就是一些前缀是CMS.的文件,如下图,下图只是一部分:
接下来就是需要在配置数据库连接,在app.config中添加配置代码如下:
1 <connectionStrings> 2 <add name="CMSConnectionString" connectionString="Persist Security Info=False;database=expert_fi_7;server=.\SQLEXPRESS;user id=sa;password=******;Current Language=English;Connection Timeout=240;" /> 3 </connectionStrings>
该配置连接的name必须为CMSConnectionString,这样才能有cms类库自动的识别。
二、初始化kentico CMS环境
引入命名空间:using CMS.CMSHelper
在需要使用content操作的代码前加上
1 CMSContext.Init();
三、操作content节点
对节点的操作无非就是增、删、改、查这几种操作,下面一一介绍
- 查询操作
1 TreeProvider tree = new TreeProvider(CMSContext.CurrentUser);//获取当前content树对象 2 3 var node = tree.SelectSingleNode(CMSContext.CurrentSiteName 4 , "/Tuotteet" //该处为Alias path,见下图 5 , "en-us",true); //获取节点Tuotteet 6 7 value = node.GetValue(columnNames["propertyName"]).ToString(); //获取某一属性值 8 //【注】该node不能直接用node.Children去获取,node.Children获取的只是最基本的信息 9 10 //获取指定节点所有属性名 11 DataClassInfo dci = DataClassInfoProvider.GetDataClass(node.NodeClassName); 12 var columnNames=new List<string>(); //创建属性名对象 13 if (dci != null) 14 { 15 CMS.FormEngine.FormInfo fi = new CMS.FormEngine.FormInfo(dci.ClassFormDefinition); 16 columnNames = fi.GetColumnNames(); 17 } 18 19 //获取所有子节点 20 var childrenNodes=node.Children
如果你想获取所有子节点的属性,你可以遍历childrenNodes,然后使用SelectSingleNode(……)的方法去获取指定子节点的对象,然后去获取它的属性。
对于上面提到的Alias path,见下图示例: - 添加节点
1 public void AddNode(string nodeAliasPath,List<string[]> categorys ) 2 { 3 var parentNodeAliasPath = nodeAliasPath.Substring(0, nodeAliasPath.LastIndexOf('/')); 4 var tree = new TreeProvider(CMSContext.CurrentUser); 5 var parentNode = tree.SelectSingleNode(CMSContext.CurrentSiteName, parentNodeAliasPath, "fi-FI", true); 6 var className = categorys[1][1]; 7 TreeNode newNode = TreeNode.New(className, tree); 8 newNode.DocumentName = categorys[1][0];//设置节点名 9 newNode.DocumentCulture = "fi-FI";//设置节点的document环境 10 for (int i = 2; i < categorys[0].Length - 2; i++) 11 { 12 newNode.SetValue(categorys[0][i], categorys[1][i]);//为节点添加新的属性,SetValue(属性名,值) 13 } 14 DocumentHelper.InsertDocument(newNode, parentNode, tree); 15 }
这里要注意的是必须给节点新节点添加属性,不然该节点在添加后不会显示出来
- 删除节点
1 public void DeleteNode(string nodeAliasPath) 2 { 3 var tree = new TreeProvider(CMSContext.CurrentUser); 4 var deleteNode = tree.SelectSingleNode(CMSContext.CurrentSiteName, nodeAliasPath, "fi-FI", true); 5 if (deleteNode != null) 6 { 7 DocumentHelper.DeleteDocument(deleteNode, tree, true, true, true); 8 } 9 }
关于DeleteDocument的说明,如下图
- 修改节点内容
1 public void UpdateNode(string nodeAliasPath,List<string[]> categorys ) 2 { 3 var tree = new TreeProvider(CMSContext.CurrentUser); 4 var updateNode = tree.SelectSingleNode(CMSContext.CurrentSiteName, nodeAliasPath, "fi-FI", true); 5 updateNode.DocumentName = categorys[1][0]; 6 for (int i = 1; i < categorys[0].Length-1;i++ ) 7 { 8 updateNode.SetValue(categorys[0][i], categorys[1][i]); 9 } 10 DocumentHelper.UpdateDocument(updateNode, tree); 11 }
当然,还有很多节点的属性你可以修改,例子代码没有列出来。
就以上的这些内容,基本可以去简单操作kentico cms中的content内容了,欢迎大家讨论。
参考:http://devnet.kentico.com/Documentation.aspx
珍惜作者劳动成果,如须转载,请说明出处。