更新Kentico文档字段,而不考虑版本控制

更新Kentico文档字段,而不考虑版本控制,kentico,Kentico,我的一个基本页面类型上有一个字段,我需要从外部数据源以编程方式更新该字段,以便它可以包含在我的智能搜索索引中 文档是版本化的,但我想更新此字段的已发布值,而不管签出状态如何,并且在签入文档时明显避免任何类型的覆盖 该字段不会出现在编辑器窗体上,或者理想情况下,会有条件地显示给全局管理员 似乎使用API更新文档而不执行签出操作会以静默方式失败。但是,如果我在签出页面上执行签出/更新/签入,我想作者会丢失他们的作品吗 有没有办法通过Kentico数据模型和API来处理这个“无版本”字段?不幸的是,您

我的一个基本页面类型上有一个字段,我需要从外部数据源以编程方式更新该字段,以便它可以包含在我的智能搜索索引中

文档是版本化的,但我想更新此字段的已发布值,而不管签出状态如何,并且在签入文档时明显避免任何类型的覆盖

该字段不会出现在编辑器窗体上,或者理想情况下,会有条件地显示给全局管理员

似乎使用API更新文档而不执行
签出操作
会以静默方式失败。但是,如果我在签出页面上执行
签出
/
更新
/
签入
,我想作者会丢失他们的作品吗


有没有办法通过Kentico数据模型和API来处理这个“无版本”字段?

不幸的是,您必须使用API将其签入和签出。参见示例


此外,您可能需要发布它,以反映实时站点上的更改。

不幸的是,您必须使用API将其签入和签出。参见示例


另外,您可能需要发布它,以便反映实时站点上的更改。

我认为没有办法更新签出的页面。您可以直接更新页面类型表,但正如您所提到的,当他们签入时,它将被覆盖。您可以更新版本历史记录,我认为可以对签出的当前数据进行更改,但我认为,如果用户取消,则该历史记录将丢失


我能想到的解决问题的唯一方法是创建另一个表,将您想要的值映射到页面。然后你就不必担心页面被签出了,你只需要抓取documentID之类的东西。由于该值不会显示给编辑器,因此您只有一个字段可以在此表上进行查找。

我认为没有办法更新签出页面。您可以直接更新页面类型表,但正如您所提到的,当他们签入时,它将被覆盖。您可以更新版本历史记录,我认为可以对签出的当前数据进行更改,但我认为,如果用户取消,则该历史记录将丢失


我能想到的解决问题的唯一方法是创建另一个表,将您想要的值映射到页面。然后你就不必担心页面被签出了,你只需要抓取documentID之类的东西。由于该值未显示给编辑器,因此您只有一个字段可在此表上进行查找。

首选的正确方法是使用API,但如您所述,如果用户已签出某个内容并正在处理该内容,或者该内容处于工作流中但尚未发布,则会导致问题

如果您要更新的字段是特定于页面类型的,那么有一件事我可以特别想到,那就是直接到数据库到页面类型的数据库字段,并对该字段执行更新

注意:除非您明确知道自己在做什么,并且已经对其进行了全面测试,否则不建议这样做

直接访问数据库的缺点是,这不会更新当前版本,因为您正在使用签入/签出和工作流。您还需要更新签出和当前版本,这意味着您需要:

  • 转到
    cms\u documents
    表中的文档本身,获取您正在使用的文档
  • 然后使用字段
    DocumentCheckedOutVersionHistoryID
    DocumentPublishedVersionHistoryID'可以从
    CMS_VersionHistory`表中获取文档的版本历史ID
  • 然后,您可以更新
    CMS\u VersionHistory
    和自定义页面类型字段
  • 然后,您需要查看
    CMS\u WorkflowHistory
    表,找出该文档是否在工作流中以及在哪个步骤中
  • 完成工作流历史记录步骤后,使用
    VersionHistoryID
    字段返回到
    CMS\u VersionHistory
    表,并用数据更新该记录
  • 同样,这不是一个优雅的解决方案,因为您正在使用签入/签出和工作流,但经过一些尝试和错误测试后,您应该能够找到它

    更新

    您还可以添加一个自定义表或一些其他链接的数据库表,这些表将允许您创建一个全局处理程序。在链接表中,您可以通过API和其他调用执行更新,而无需版本控制或工作流。然后,当用户更新特定的页面类型时,您可以进行检查,查看上次更新链接表的时间,并在更新该特定页面时更新所需的字段(当然是按节点和文档ID)。

    首选和正确的方法是使用API,但正如您所述,如果用户已签出某个内容并正在处理该内容,或者该内容处于工作流中但尚未发布,则会导致问题

    如果您要更新的字段是特定于页面类型的,那么有一件事我可以特别想到,那就是直接到数据库到页面类型的数据库字段,并对该字段执行更新

    注意:除非您明确知道自己在做什么,并且已经对其进行了全面测试,否则不建议这样做

    直接访问数据库的缺点是,这不会更新当前版本,因为您正在使用签入/签出和工作流。您还需要更新签出和当前版本,这意味着您需要:

  • 转到
    cms\u documents
    表中的文档本身,获取您正在使用的文档
  • 然后使用字段
    DocumentCheckedOutVersionHistoryID
    DocumentPublishedVersionHistoryID'可以从
    CMS_VersionHistory`表中获取文档的版本历史ID
  • 然后可以对
    C执行更新