根据记录字段撤消编辑访问权限

时间:2018-02-14 15:42:54

标签: salesforce

背景

我试图阻止根据其中一个具有非空值的字段来编辑记录。我希望通过权限和共享规则来实现,但我不确定设置它的最佳方式是什么。我试图避免触发器并尽可能添加额外的字段。

在我的工作中,我们使用一个对象来表示在该领域工作的Job。许多不同的用户需要访问权限来编辑正在进行的Job,因此它设置了公共读/写共享规则。完成作业后,它会通过结算处理并填写Invoice #字段。一旦设置完毕,只有结算用户应该能够编辑记录。

我尝试过什么

我首先尝试了一个验证规则,当Invoice #填写且用户的个人资料不是结算小组时会触发。这最初起作用,但导致触发器在计费用户之后尝试编辑时失败允许设置并保存Invoice #,但之后触发的触发器然后在验证规则上跳闸并失败

接下来,目前,我正在玩分享规则来实现这一目标,这似乎是正确的道路。但是,我还想阻止在Job下的相关列表中编辑子记录。我似乎不能在共享规则中使用跨对象字段或任何公式字段,因此我不确定在不使用触发器的情况下是否可行。

我能尝试什么

我知道我可以使用带触发器的共享规则在记录中设置EditableLocked复选框字段以及设置Invoice #字段时的子项,但我确实对于看似简单的事情,我不喜欢这么多开销的想法。

问题

什么是允许用户编辑记录的最简洁方法,直到某个字段为非空,之后只有一部分用户可以编辑?如果可能,如何将其扩展到相关列表中的子对象?

1 个答案:

答案 0 :(得分:1)

我会在更新触发器之前使用on来完成此操作。

这样的事情:

if (Trigger.isUpdate && trigger.isBefore && UserInfo.getUserRoleId() != billingRoleId) {
    for (Job__c theJobRecord : Trigger.new) {
        if (String.isNotBlank(theJobRecord.Invoice_Number__c)) {
            theJobRecord.Name.addError('You do not have permissions to modify this record!');
        }
    }
}

如果要在验证规则中执行此操作,请检查作业记录发票编号是否为空或使用全局合并字段$UserRole并检查角色名称,否则验证规则将失败。