【问题标题】:Creating new smartform data using Ektron ContentTypes使用 Ektron ContentTypes 创建新的 smartform 数据
【发布时间】:2013-01-29 21:28:11
【问题描述】:

Ektron 8.0.1 SP1

我正在使用 SmartForms 和内容类型来读取(并希望写入)数据。我可以读取数据,但现在我正在尝试写入类似于以下内容的新记录。

ContentTypeManager<member> contentTypeManager = new ContentTypeManager<member>();
ContentType<member> newmem = new ContentType<member>();

newmem.SmartForm.details.field1 = "Chuck"; // This line throws 'Object reference not set to an instance of an object.' error
newmem.SmartForm.details.field2 = "Norris";
contentTypeManager.Update(newmem);

我收到错误“对象引用未设置为对象的实例”。对于第一个分配行。我错过了什么?

由于 Ektron 网站已经重新设计,我很难找到关于 8.0.1 的 ContentTypes 的良好文档。

谢谢。

【问题讨论】:

  • Zach 寻求澄清:您是否尝试修改 smartform 架构本身?或者您是否尝试基于 smartform/xml 架构创建内容?
  • 我要添加新内容
  • 这些“添加”方法都不错,但我不能创建新对象并设置值吗?当我尝试设置 newmem.SmartForm.details.field1 = "Chuck"; 时出现错误

标签: ektron


【解决方案1】:

感谢您的澄清,要将内容添加到分配有 smartform 的文件夹,基本代码块应该让您开始:(注意:内容的 Html 属性只是与您创建的架构匹配的 xml)

Ektron.Cms.Framework.Content.ContentManager cmanager = new Cms.Framework.Content.ContentManager();
Ektron.Cms.ContentData cdata = new ContentData();
cdata.FolderId = 0;
cdata.XmlConfiguration.Id = 0; //SMARTFORM ID HERE
cdata.Html = "<root><field1>field1 value</field1><field2>field2 value</field2></root>";
cmanager.Add(cdata);

【讨论】:

  • 我想我记得有一种方法可以使用内容类型添加新数据。如果我加载对象然后进行更改,contentManager.Update() 会更新现有内容,对吗?
  • 如果我有一个包含智能表单的文件夹,我可以使用上面的代码添加新表单或更新现有表单?
【解决方案2】:

您可以更新 ContentTypes.cs 以包含 Add 方法。只需复制 Update 方法并将contentManager.Update 更改为contentManager.Add

    public void Add(ContentType<T> contentType)
    {
        Initialize();
        contentType.Content.Html = Ektron.Cms.EkXml.Serialize(typeof(T), contentType.SmartForm);
        contentManager.Add(contentType.Content);
    }

不幸的是,contentManager.Add 返回void。理想情况下,它应该返回新的内容 ID。

【讨论】:

  • 我喜欢这样。就我而言,内容 ID 并不那么重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-01
  • 2011-01-19
  • 2018-12-08
  • 1970-01-01
相关资源
最近更新 更多