我正在尝试编写我的第一个Apex更新触发器,并且在我尝试设置自定义查找字段的值时稍微挣扎。
我有一个名为Deployment__c
的对象,它是一个主 - 细节关系中的主对象,它与一个名为Service__c
的对象(名称简化!)
Salesforce中的Service__c
字段没有Owner
,因为它是主 - 详细信息关系中的子/详细信息。因此,我们在此对象上创建了一个名为Owner__c
的伪所有者字段,该字段是查找Salesforce中User
对象的查找字段。
触发器的目的是将Service__c.Owner__c
的值设置为Deployment__c
所有者用户的值,如果{{1}上尚未设置Owner__c
}}
我的代码如下:
Service__c
但是,当我尝试保存此触发器时出现错误:
错误:编译错误:第5行第13列SObject ASE_Deployment__c的字段Owner__c无效
我已经确认我的字段名称正确,但无法使其正常工作。欢迎任何指示!
答案 0 :(得分:3)
我刚刚重新创建了您在测试组织中描述的对象结构,但无法重现您所获得的错误。另一方面,我能够获得您描述的触发器以使用以下代码,该代码已经为您批量化了:
trigger AfterServiceUpdate on Service__c (before update)
{
//instantiate set to hold unique deployment record ids
Set<Id> deplomentIds = new Set<Id>();
for(Service__c s : Trigger.new)
{
deplomentIds.add(s.Deployment__c);
}
//instantiate map to hold deployment record ids to their corresponding ownerids
Map<Id, Deployment__c> deploymentOwnerMap = new Map<Id, Deployment__c>([SELECT Id, OwnerId FROM Deployment__c WHERE Id IN: deplomentIds]);
for (Service__c s : Trigger.new)
{
if (s.Owner__c == null && deploymentOwnerMap.containsKey(s.Deployment__c))
{
s.Owner__c = deploymentOwnerMap.get(s.Deployment__c).OwnerId;
}
}
}
我还为您创建了一个测试类来测试结果:
@isTest
private class AfterServiceUpdateTest {
@isTest static void test_method_one() {
Deployment__c d = new Deployment__c();
insert d;
Service__c s = new Service__c();
s.Deployment__c = d.Id;
insert s;
Id deploymentOwnerId = [SELECT Id, OwnerId FROM Deployment__c WHERE Id=:d.Id].OwnerId;
test.startTest();
update s;
Service__c updatedService = [SELECT Id, Owner__c FROM Service__c WHERE Id=:s.Id];
system.assertEquals(deploymentOwnerId, updatedService.Owner__c);
test.stopTest();
}
}
希望这有帮助!
答案 1 :(得分:0)
尝试将owner__c
更改为Ownerld