Triggers 在自定义对象上写入触发器

Triggers 在自定义对象上写入触发器,triggers,insert,salesforce,Triggers,Insert,Salesforce,我在联系人上有一个名为One\u Prop\u Owned\u c的字段,用户正在视图列表中更新该字段。更新并保存后,我需要一个触发器来创建一个名为Ownership的新对象,即McLabs2\uuuuu Ownership\uu c。只有两个字段需要填充 是创建此所有权的联系人。所有权表单上的字段是McLabs2\uuuuuu Contact\uuuu c,是在One\u Prop\u Owned\u c字段中输入的属性字段 正如你所看到的,我在编写触发器方面相当生疏。这下面是不工作,我不知道

我在联系人上有一个名为
One\u Prop\u Owned\u c
的字段,用户正在视图列表中更新该字段。更新并保存后,我需要一个触发器来创建一个名为
Ownership
的新对象,即
McLabs2\uuuuu Ownership\uu c
。只有两个字段需要填充

是创建此所有权的联系人。所有权表单上的字段是
McLabs2\uuuuuu Contact\uuuu c
,是在
One\u Prop\u Owned\u c
字段中输入的属性字段

正如你所看到的,我在编写触发器方面相当生疏。这下面是不工作,我不知道从这里去哪里。非常感谢您的帮助

trigger PropOwned on Contact(更新后){
用于(联系人c:Trigger.new){
McLabs2__所有权__cownnew=新的McLabs2__所有权__c();
Contact oldContact=Trigger.oldMap.get(c.id);
如果(c.One_Prop_own_c!=旧联系人。One_Prop_own_c)
if(c.One_Prop_Owned_c==null|c.One_Prop_Owned_c==c.One_Prop_Owned_c){
ownNew.McLabs2__联系人__c=c.id;
ownNew.McLabs2\uuuuu属性\uuuu c=c.One\u Prop\u Owned\uuuu c;
插入新的;
}
}
}
嗯,我能够解决触发问题,这是一种工作流程,我可以想出一些办法。然而,我现在在编写测试类时遇到了问题。这就是我所说的,触发器的覆盖率为0%

@isTest
public class TestOwnership {
    static testMethod void ownershipCreator() {
     McLabs2__Ownership__c ownNew= new McLabs2__Ownership__c();
     ownNew.McLabs2__Contact__c = 'Michael Webb';
     ownNew.McLabs2__Property__c = '131 West 33rd Street';
     insert ownNew;
     }
    }
请尝试以下代码

trigger PropOwned on Contact(更新后){
//创建应插入数据库的新记录列表
列表所有权=新列表();
用于(联系人c:Trigger.new){
Contact old=Trigger.oldMap.get(c.id);
如果(c.One_Prop_own_c!=旧的。One_Prop_own_c){
McLabs2__所有权__c所有权=新的McLabs2__所有权__c();
//此条件绝对无效,因为语句“c.One_Prop_Owned_c==c.One_Prop_Owned_c”将始终返回true
//if(c.One_Prop_Owned_c==null|c.One_Prop_Owned_c==c.One_Prop_Owned_c){
ownership.McLabs2__联系人__c=c.id;
ownership.McLabs2\uuuuu Property\uuuuu c=c.One\u Prop\u Owned\uuuu c;
所有权。添加(所有权);
// }
}
}
如果(!ownerships.isEmpty()){//请检查是否有要插入的记录
插入所有权;
}
}

如果您对此代码有任何错误,请将其作为注释发布到我的答案中。

您可以编辑您的问题,请不要在注释中添加带有代码的更新,因为它绝对不可编辑。您只需插入联系人(触发器运行的对象)之后,您必须更新此记录上的
一个\u Prop\u Owned\u c
字段并执行更新操作。我没有收到任何错误,它的工作原理与我的相同,它添加了两条记录。我试图查看是否有工作流或某些东西使其运行了两次,但是,联系人上没有工作流,只有一个触发器。@MichaelWebb尝试使用调试日志查找原因,在开发人员控制台中打开执行树,并查看触发器调用两次的原因。我将尝试,我没有使用开发人员控制台,我将在调试时阅读我找到的dreamforce视频。谢谢这是一个工作流程,但我能处理吗?我还需要运行工作流吗?谢谢我停用了其中的3个,它工作正常。我找到了具体的工作流程,我想我会尝试重新编写它。。这是一次非常好的学习经历:-)谢谢你的帮助。如果有其他方法可以绕过重新编写工作流,那就太好了!