我有一个问题,我希望我能清楚地告诉你我的问题。
关于帐户的父功能,我将两个字段添加到帐户 ParentID(15)和 ParentIDLong(18)。 ParentID字段是一个公式字段,代码如下。
IF(LEN(Parent.Id) < 1, Id,
IF(LEN(Parent.Parent.Id) < 1, (Parent.Id),
IF(LEN(Parent.Parent.Parent.Id) < 1, (Parent.Parent.Id),
IF(LEN(Parent.Parent.Parent.Parent.Id) < 1, (Parent.Parent.Parent.Id),
IF(LEN(Parent.Parent.Parent.Parent.Parent.Id) < 1, (Parent.Parent.Parent.Parent.Id),
IF(LEN(Parent.Parent.Parent.Parent.Parent.Parent.Id) < 1, (Parent.Parent.Parent.Parent.Parent.Id),
IF(LEN(Parent.Parent.Parent.Parent.Parent.Parent.Parent.Id) < 1, (Parent.Parent.Parent.Parent.Parent.Parent.Id),
IF(LEN(Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Id) < 1,(Parent.Parent.Parent.Parent.Parent.Parent.Parent.Id),">7"))))))))
现在我需要ParentLongID,遗憾的是它不可能改变公式,因为我会得到一个错误,即&#34;公式太大&#34;。
我写了一个触发器,它将长ID发布到字段ParentLongID(下面的代码)。
Trigger SetParentIDLong on Account (before update) {
FOR (Account Acc : Trigger.new) {
Account oldAcc = Trigger.oldMap.get(Acc.Id);
String idStr = Acc.ParentID__c;
Id idVal = idStr;
idStr = idVal;
If (oldAcc.ParentId__c != Acc.ParentID__c) {
Acc.ParentIdLong__c = idStr;
}
到目前为止,如果我从上到下创建层次结构,它就有用。
实施例
MotherCompany ParentIDLong:空白
Daughter1 ParentIDLong:001b000000XUTQAAA5
Daughter2 ParnetIDLong:001b000000XUTQAAA5
但如果我添加MotherMotherCompany
实施例
MotherMotherCompany ParentIDLong:空白
MotherCompany ParentIDLong:001m000000Ft35yAAB
Daughter1 ParentIDLong:001b000000XUTQAAA5
Daughter2 ParnetIDLong:001b000000XUTQAAA5
触发器不起作用,因为触发器仅更改了Mothercompany的ParentIDLong。
它可能会随着触发所有其他公司而改变吗?
谢谢, 的Sascha
答案 0 :(得分:0)
为了创建所有其他帐户的关系,您需要在此触发器上拥有更新帐户,以便递归调用您的触发器。
像这样:Trigger SetParentIDLong on Account (before update) {
FOR (Account Acc : Trigger.new) {
Account oldAcc = Trigger.oldMap.get(Acc.Id);
String idStr = Acc.ParentID__c;
Id idVal = idStr;
idStr = idVal;
If (oldAcc.ParentId__c != Acc.ParentID__c) {
Acc.ParentIdLong__c = idStr;
update Acc; //this line would call again your trigger
//recursively until the last Account
}
试着让我们知道它是怎么回事
答案 1 :(得分:0)
行 我们试试这个:
Trigger SetParentIDLong on Account (before update) {
List<Id> accids = new List<Id>();
for(Account a : Trigger.New){
accids.add(a.Id);
}
List<Account> accounts = [SELECT Id,ParentId__c FROM Account WHERE Id IN :accids];
for(Account child : accounts){
Account oldAcc = Trigger.oldMap.get(child.Id);
String idStr = child.ParentID__c;
Id idVal = idStr;
idStr = idVal;
if(oldAcc.ParentId__c != child.ParentID__c) {
child.ParentIdLong__c = idStr;
update child; //this line would call again your trigger
//recursively until the last Account
}
}
}
我刚刚更改了一些名称,并根据trigger.new创建了一个新的帐户列表,因为我们无法更新trigger.new,
让我们看看这是否有效。
让我发布