- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个搜索页面,该页面使用自定义 Controller 和 Visualforce 页面返回集合记录。用户可以更新个别记录的特定字段。
我希望能够一次保存所有更改的记录,但操作命令会更新整个返回集——而不仅仅是更改的记录。该应用程序要求仅更新修改的记录。
如果没有对记录中可能发生的每一个更改进行过滤或在每条记录上放置一个保存按钮,有没有人对如何识别被修改的特定记录有创意,以便应用程序可以只保存那些被修改的记录被编辑了?
最佳答案
非常有趣的问题:)
关于通过字段描述或 JSON 序列化跟踪“旧”和"new"之间的变化,SFSE 上有一个很酷的答案:Generically walk sObject fields .请注意,我已经链接到我认为最简洁的答案,请考虑阅读整页!
这个问题也很有趣,因为它会将您的逻辑放在更正确的位置 - 在触发器中。因为您应该问问自己,在您的搜索页面上进行不会真正改变任何内容的更新是否可行 - 是否也可以在其他页面上进行?
如果这对您不起作用,这是另一个有趣的技巧。
Sets 在内部使用对象的散列来确定唯一性(不仅仅是 Id,所有字段)。像这样设置是非常好的:
Set<User> users = new Set<User>();
User u1 = new User(Id = UserInfo.getUserId());
User u2 = new User(Id = UserInfo.getUserId(), LastName = 'Doe');
users.add(u1);
users.add(u2);
System.assert(users.contains(u2));
u2.FirstName = 'John';
System.assert(users.contains(u2), users); // boom, headshot. It was there a minute ago, I swear!
通常这是一个缺点,我们被告知使用 Map<Id, sObject>
相反,因此 key /哈希/任何内容都不会改变。但在您的情况下 - 您可以将其用作预期功能。
试试这个(未经测试):
Set<sObject>
(使用 addAll
方法)。mySet.removeAll(originals);
- 应该清除所有相同的项目。这有一些缺点,例如,如果有人在此期间修改了其中一条记录 - 来自 #4 的查询将产生不同的结果......您可以通过存储原始搜索结果的隐藏副本并比较这些结果来处理它(阅读 List.deepClone
) - 但这意味着你的 View 状态加倍!
(我们也可能会与正确的数据集发生哈希码冲突 - 也许只是放弃 removeAll
并在每个项目上使用 equals
。我希望我给了你一些思考)
关于ajax - 在 Visualforce 表中标记要更新的特定记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21836337/
我是一名优秀的程序员,十分优秀!