Power Apps:如何查看基于提交工单的表单响应编辑历史
基于工单ID的表单响应编辑历史实现方案
一、Dataverse表结构调整
在现有响应表中新增3个字段,用于关联同一工单的所有版本记录:
- PrimaryTicketID:类型为「唯一标识符(GUID)」,作为工单的核心关联ID,同一工单的所有版本共用此ID
- VersionNumber:类型为「数字」,标记当前记录是该工单的第几个版本,首次提交设为1,每次编辑自动递增
- VersionNote:类型为「文本」(可选),让用户填写编辑原因,方便追溯变更背景
二、提交与编辑的Patch逻辑调整
1. 首次提交(新建工单)
用户第一次提交表单时,生成新的GUID作为主工单ID,同时创建版本号为1的初始记录:
Patch( 你的Dataverse表名, Defaults(你的Dataverse表名), { // 映射表单字段 Title: Form1.LastSubmit.Title, 联系人电话: Form1.LastSubmit.联系人电话, // 历史关联字段 PrimaryTicketID: GUID(), VersionNumber: 1, VersionNote: "首次提交" } )
2. 编辑现有工单(生成历史版本)
用户从Gallery选中记录进入编辑时,不修改原记录,而是基于原记录的PrimaryTicketID创建新版本:
Patch( 你的Dataverse表名, Defaults(你的Dataverse表名), { // 继承并替换为编辑后的字段值 Title: Form1.Updates.Title, 联系人电话: Form1.Updates.联系人电话, // 复用主工单ID,版本号递增 PrimaryTicketID: Gallery1.Selected.PrimaryTicketID, VersionNumber: Gallery1.Selected.VersionNumber + 1, VersionNote: TextInput_EditReason.Text // 绑定用户填写的编辑原因输入框 } )
可选优化:如果需要区分活跃/归档记录,可以新增「RecordStatus」选项字段(值为「活跃」/「归档」),首次提交设为「活跃」,创建新版本后将原记录标记为「归档」:
// 先创建新版本 Patch(...) // 再归档原记录 Patch( 你的Dataverse表名, Gallery1.Selected, {RecordStatus: 'Record Status'.归档} )
三、主Gallery展示逻辑(仅显示工单最新版本)
主Gallery只需展示每个工单的最新版本,避免出现重复Tile。将Gallery的Items属性设置为:
Sort( ForAll( GroupBy(你的Dataverse表名, "PrimaryTicketID", "AllVersions"), First(Sort(AllVersions, VersionNumber, Descending)) ), Created, Descending )
这段代码会按PrimaryTicketID分组,每组取版本号最高的记录,再按创建时间倒序排列。
四、查看编辑历史功能实现
在主Gallery的每个Tile中添加「查看历史」按钮,点击后打开模态弹窗,弹窗内放置子Gallery展示该工单的所有版本:
1. 子Gallery的Items属性
Sort( Filter(你的Dataverse表名, PrimaryTicketID = Gallery1.Selected.PrimaryTicketID), VersionNumber, Descending )
2. 子Gallery布局建议
- 显示版本号:
"版本 " & ThisItem.VersionNumber - 显示修改时间:
"修改于: " & Text(ThisItem.Modified, "yyyy-mm-dd hh:mm") - 显示编辑原因:
"备注: " & ThisItem.VersionNote - 可添加「查看详情」按钮,点击后跳转至表单展示该版本的完整字段内容
五、可选:版本差异对比
如果需要直观展示版本间的变更,可在弹窗中添加两个下拉框(分别选择旧版本和新版本),通过判断字段值差异高亮显示:
// 示例:对比联系人电话字段的变更 If( Dropdown_Old.Selected.联系人电话 <> Dropdown_New.Selected.联系人电话, "*" & Dropdown_Old.Selected.联系人电话 & " → " & Dropdown_New.Selected.联系人电话 & "*", Dropdown_Old.Selected.联系人电话 )
内容的提问来源于stack exchange,提问作者littleshareef
相关产品推荐
相关产品推荐

