You need to sign in to do that
Don't have an account?
Nuno.Carvalho
Appex trigger
Hello guys,
Im trying to auto-fill a field called clube, i think i´ve done the right thing , because this method worked for similar updates, i just changed the fields a wanted to compare.
The erros that gives me in debug logs is "System.QueryException: List has no rows for assignment to SObject", i know what this means i just dont know how to make this right.
Translations:
-clube (soccer club)
-jogador_representado ( represented player)
-jogadores (players)
trigger clube on Jogadores__c (before update) {
string ids;
list <Contract> c = [Select id,Jogador_Representado__c,Clube__c from Contract];
for(Jogadores__c i : trigger.new) {
ids = i.id;
}
jogadores__c j = [Select id,name ,Clube__c From jogadores__c Where id = : ids];
if(j.name !=null) {
Contract con = [Select Jogador_Representado__c From Contract where id =: j.name limit 1];
for (Contract ctt : c){
if(ctt.Jogador_Representado__c == con.Jogador_Representado__c ){
ctt.Clube__c = j.Clube__c;
update ctt;
}
}
}
}
Would aprecciate some help, thank you.
Im trying to auto-fill a field called clube, i think i´ve done the right thing , because this method worked for similar updates, i just changed the fields a wanted to compare.
The erros that gives me in debug logs is "System.QueryException: List has no rows for assignment to SObject", i know what this means i just dont know how to make this right.
Translations:
-clube (soccer club)
-jogador_representado ( represented player)
-jogadores (players)
trigger clube on Jogadores__c (before update) {
string ids;
list <Contract> c = [Select id,Jogador_Representado__c,Clube__c from Contract];
for(Jogadores__c i : trigger.new) {
ids = i.id;
}
jogadores__c j = [Select id,name ,Clube__c From jogadores__c Where id = : ids];
if(j.name !=null) {
Contract con = [Select Jogador_Representado__c From Contract where id =: j.name limit 1];
for (Contract ctt : c){
if(ctt.Jogador_Representado__c == con.Jogador_Representado__c ){
ctt.Clube__c = j.Clube__c;
update ctt;
}
}
}
}
Would aprecciate some help, thank you.
Qual é a relação entre Contract e Jogadores__c? No contrato você possui um campo lookup ou mestre detalhe para o objeto Jogadores__c?
Which is the relationship between Contract and Jogadores__c? Contract has a lookup/master/detail relationship with Jogadores__c?
Your intention is to update the field Clube__c in every Contract that matches the players being updated ?
Você quer atualizar o campo Clube__c em todos os contratos que tem os jogadores sendo atualizado?
Hope to have helped!
Regards.
Don't forget to mark your thread as 'SOLVED' with the answer that best helps you.
Sim tenho 2 lookups, o nome do jogador e o clube mas o clube eu queria que fosse automaticamente populado,
Eu usei o nome/id dos jogadores para comparar os objetos e inserir o clube correto.
Se quiser saber mais alguma coisa é só perguntar,
Obrigado.
Qual é o nome do lookup do objeto Jogadores__c no objeto Contrato__c? Nesse momento do update em Jogadores__c o lookup do jogador já está preenchido no contrato certo?
hello
Is it contract or contact?
It´s contract.
Clube__c, Jogador_Representado__c.
Eu quero que ao criar um contrato para o jogador , o field lookup Clube__C seja automaticamente preenchido.
Mas então nesse caso sua trigger deveria ser no contrato, não? Se toda vez que criar um registro no objeto Contrato que tiver o campo Jogador Representado preenchido ou quando atualizar o Contrato com esse campo, você quer que o Clube__c no Contrato seja preenchido com o valor do Clube__c do jogador, correto?
Ou o que quer é que quando atualizar o Clube__c no jogador atualize também o Clube__c em todos os contratos relacionados a este jogador?
Acho que no caso, necessita dos dois, certo?
I think where clause in Contract con = [Select Jogador_Representado__c From Contract where id =: j.name limit 1]; is not correct.
i can give u the right solution. if u tell me the relationship b/w objects
Na trigger clube no objeto Jogadores__c toda vez que o campo Clube__c for modificado todos os contratos desse jogador também serão atualizados com o clube atual.
Já nessa nova trigger que precisa criar, chamada Contrato, no objeto Contract toda vez que um contrato for criado ou o campo jogador for atualizado nesse contrato, o campo Clube__c também será atualizado.
Talvez tenha algum erro de sintaxe já que não tenho o objeto Jogadores__c não pude testar. Mas se tiver algum problema é só avisar!
Além disso tenha em mente o conceito de Bulkify que a Salesforce recomenda como uma boa prática para Triggers
https://trailhead.salesforce.com/en/modules/apex_triggers/units/apex_triggers_bulk
E também quando tiver um tempo dá uma olhada no conceito de Framework para trabalhar com Triggers no Salesforce. Isso te ajudará a ter mais controle.
https://developer.salesforce.com/page/Trigger_Frameworks_and_Apex_Trigger_Best_Practices
Hope to have helped!
Regards.
Don't forget to mark your thread as 'SOLVED' with the answer that best helps you.
List<Contract> contratosParaAtualizar = new List<Contract>();
Isto não funciona mas eu penso que sei o poquê, o lookup field Clube__c no Object Jogadores__c é os nomes das Accounts ou seja isto não está a ler o id das accounts e assim não vai buscar o nome do clube.
Eu expliquei me mal ao ínicio , peço desculpa, mas penso que este seja o problema.
Object Contract has 2 lookup fields between the object Jogadores__c ,
The 2 lookup fields are Clube__c and Jogadores_representados__c,
But i think i need to get the Account id because in the object jogadores__c the Clube__c field is lookup for the accounts name.
Regards,
Nuno.
Então o Clube__c em Jogadores é um campo Texto com o nome da Conta e no Contrato é um Lookup para Conta? Há meios de fazer funcionar, mas primeiro vamos analisar o cenário.
O objeto Jogadores possui alguma ligação lookup/master/detail com a Conta? Em caso negativo, teremos que buscar pelo nome da Conta o Id da mesma para passar para o Contrato. Além disso, se esse for o caso, você precisará garantir que as contas nunca repitam o nome, uma regra de validação resolve isso.
E caso Jogadores não tenha uma ligação direta com a Conta, se permite, posso perguntar o porque?
Att.
Sim o object Jogadores tem ligação com o object Conta através de outra lookup com os nomes dos clubes , o clube neste caso faz parte das minhas contas.
A minha principal dúvida é como ir buscar o id da conta, pois eu quero comparar valores entre o object Jogadores e Contract mas no entanto o valor que preciso de passar está no object Contas.
Disse algo que não tenha entendido?
Se o fiz peço desculpa e que me faça as questões necessárias pois precisava mesmo disto.
Hello, Nuno
You have clube__c field on both objects and want same value on both fields, then use process builder field on Jogadores__c .
not get till that Jogadores_representados__c lookup for which object?