Triggers 如何通过Salesforce触发器设置查找字段
我想使用salesforce apex触发器设置一个查找字段,但我一直收到一个错误:Triggers 如何通过Salesforce触发器设置查找字段,triggers,salesforce,visualforce,Triggers,Salesforce,Visualforce,我想使用salesforce apex触发器设置一个查找字段,但我一直收到一个错误: System.StringException: Invalid id: List <Job__c> opListInsert = new List<Job__c>(); List <Job__c> opListUpdate = new List<Job__c>(); if(trigger.isInsert){ for(Job__c op:trigger.
System.StringException: Invalid id:
List <Job__c> opListInsert = new List<Job__c>();
List <Job__c> opListUpdate = new List<Job__c>();
if(trigger.isInsert){
for(Job__c op:trigger.New){
if(op.Acct__c != Null){
op.Account__c = op.Acct__c;
opListInsert.add(op);
}
}
}
else if(trigger.isUpdate){
for(Job__c op:trigger.New){
if(op.Acct__c != Null && op.Acct__c !=trigger.oldMap.get(op.id).Acct__c){
op.Account__c = op.Acct__c;
opListUpdate.add(op);
}
}
}
我有一个名为Job\uu c
的自定义对象。它有一个帐户的自定义选择列表:Acct\uu\c
用户将Acct\uu c
填充为John Deer
,触发器应将John Deer
添加到Account\uu c
查找字段
触发因素如下:
trigger UpdateAccounts on Job__c (before insert) {
for (Job__c obj: trigger.new){
obj.Account__c = obj.Acct__c; //Exception is thrown here
}
引发异常:
System.StringException: Invalid id:
我尝试了不同的方法:
System.StringException: Invalid id:
List <Job__c> opListInsert = new List<Job__c>();
List <Job__c> opListUpdate = new List<Job__c>();
if(trigger.isInsert){
for(Job__c op:trigger.New){
if(op.Acct__c != Null){
op.Account__c = op.Acct__c;
opListInsert.add(op);
}
}
}
else if(trigger.isUpdate){
for(Job__c op:trigger.New){
if(op.Acct__c != Null && op.Acct__c !=trigger.oldMap.get(op.id).Acct__c){
op.Account__c = op.Acct__c;
opListUpdate.add(op);
}
}
}
我做错了什么,它告诉我它是一个无效的ID?
Account\uuu c
是一个查找字段,您不能为它分配字符串(picklist字段)。相反,您必须为其分配一个帐户id
我不知道为什么要在picklist字段中使用帐户名,但是如果您想继续这样做,那么有一个简单的解决方案,即帐户名是唯一的
获取id查询中所选帐户的id,如下所示:
list<account> acclist = [select id from account where name In yourNameList];
使用映射,不要添加soql的内部for循环
Account\uu c
是一个查找字段,不能为其分配字符串(picklist字段)。相反,您必须为其分配一个帐户id
我不知道为什么要在picklist字段中使用帐户名,但是如果您想继续这样做,那么有一个简单的解决方案,即帐户名是唯一的
获取id查询中所选帐户的id,如下所示:
list<account> acclist = [select id from account where name In yourNameList];
使用映射,不要添加soql的内部for循环您必须使用要链接的对象的ID设置字段。 salesforce浏览器页面有一个方便的工具,可以让您在查找字段中输入不完整的信息,并自动填充。如果使用apex语句手动指定值,则不会发生这种情况。只能将该值设置为查找设置为链接到的对象的有效现有ID 此代码将获取给定的
名称ID
,并执行您想要的操作:
trigger UpdateAcct on Job__c (before insert, before update) {
List<String> Accounts = new List<String>();
for (Job__c obj: trigger.new){
Accounts.add(obj.Acct__c);
}
list<Account> acctlist = [select Name from account where Name in :Accounts];
if (acctlist.size() > 0 ){
for (Integer i = 0; i < Trigger.new.size(); i++)
{
if (Trigger.new[i].Acct__c != null)
{
Trigger.new[i].Account__c = acctlist[i].ID;
}
else
{
Trigger.new[i].Account__c = null;
}
}
}
}
trigger UpdateAct on Job_u_u_uC(插入前,更新前){
列表帐户=新列表();
对于(作业对象:触发器。新建){
账户。添加(对象账户);
}
list acctlist=[从帐户中选择名称,其中名称位于:帐户];
如果(acctlist.size()>0){
for(整数i=0;i
您必须使用要链接的对象的ID设置字段。
salesforce浏览器页面有一个方便的工具,可以让您在查找字段中输入不完整的信息,并自动填充。如果使用apex语句手动指定值,则不会发生这种情况。只能将该值设置为查找设置为链接到的对象的有效现有ID
此代码将获取给定的名称ID
,并执行您想要的操作:
trigger UpdateAcct on Job__c (before insert, before update) {
List<String> Accounts = new List<String>();
for (Job__c obj: trigger.new){
Accounts.add(obj.Acct__c);
}
list<Account> acctlist = [select Name from account where Name in :Accounts];
if (acctlist.size() > 0 ){
for (Integer i = 0; i < Trigger.new.size(); i++)
{
if (Trigger.new[i].Acct__c != null)
{
Trigger.new[i].Account__c = acctlist[i].ID;
}
else
{
Trigger.new[i].Account__c = null;
}
}
}
}
trigger UpdateAct on Job_u_u_uC(插入前,更新前){
列表帐户=新列表();
对于(作业对象:触发器。新建){
账户。添加(对象账户);
}
list acctlist=[从帐户中选择名称,其中名称位于:帐户];
如果(acctlist.size()>0){
for(整数i=0;i
谢谢。它用于外部VF页面,用户可以在其中选择帐户。否则,用户需要直接向account字段输入数据,但我们不希望他们查看所有帐户(因为不希望将帐户查找直接放在VF页面上)。不干净,我知道。有什么建议吗?谢谢。它用于外部VF页面,用户可以在其中选择帐户。否则,用户需要直接向account字段输入数据,但我们不希望他们查看所有帐户(因为不希望将帐户查找直接放在VF页面上)。不干净,我知道。有什么建议吗?