无论版本控制

时间:2017-01-05 15:25:54

标签: kentico

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

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

该字段不会出现在编辑表单上 - 或理想情况下,会有条件地显示给全局管理员。

似乎使用API​​更新文档而不执行CheckOut会无声地失败。但是,如果我在结帐页面上执行Checkout / Update / CheckIn,作者将会失去我的假设?

通过Kentico数据模型和API处理这个“无版本”字段的方法吗?

3 个答案:

答案 0 :(得分:2)

我不认为有更新已检出页面的方法。您可以直接更新页面类型表,但正如您所提到的,它会在签入时被覆盖。您可以更新我认为可以更改当前检出的数据的版本历史记录,但我认为这样做如果用户取消,则会丢失。

我能想到解决问题的唯一方法是创建另一个表格,将您想要的值映射到页面。然后,您不必担心要检出的页面,您只需要抓取documentID或其他内容。由于该值未显示给编辑器,因此您只需要一个字段对该表进行查找。

答案 1 :(得分:1)

首选和正确的方法是使用API​​,但正如您所说,如果用户已经检出并处理了某些内容或者它已在工作流程中尚未发布,则会导致问题。

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

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

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

  1. 转到cms_documents表格中的文档本身,获取您正在使用的文档。
  2. 然后使用字段DocumentCheckedOutVersionHistoryIDDocumentPublishedVersionHistoryID' you can get the version history IDs of the document from the CMS_VersionHistory`表。
  3. 然后,您可以对CMS_VersionHistory和自定义页面类型字段执行更新。
  4. 然后,您需要查看CMS_WorkflowHistory表,查看该文档是否在工作流程中以及在哪个步骤中。
  5. 完成工作流程历史记录步骤后,使用VersionHistoryID字段返回CMS_VersionHistory表并使用您的数据更新该记录。
  6. 同样,不是一个优雅的解决方案,因为您使用签入/签出和工作流程,但经过一些试验和错误测试后,您应该能够弄明白。

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

答案 2 :(得分:-1)

不幸的是,您必须使用API​​检查进出。请参阅示例here

此外,您可能需要发布它才能反映实际网站上的更改。