我正在与这种情况作斗争...我在SFDC(机会)中有一个标准对象,它有一个指向用户对象的自定义查找字段,我试图用创建自定义对象的用户名称填充该字段在机会布局中可用...
i、 e.新建GOP检查表---然后选择检查表的类型---然后填写所有必填字段并单击保存,这将指向Opportunity视图。首先,这是可行的吗?我知道查找字段可能很棘手。我的第二个问题是,通过编程(触发器)或使用工作流和字段更新功能来实现这一点的最佳方式是什么?
谢谢
trigger TR_OrderChecklist on Order_Checklist__c (before insert) {
//----------------------------------------------------------------------------------
// Function 1: Update COS Operations Attribute in Opportunity
//----------------------------------------------------------------------------------
for(Order_Checklist__c o : trigger.new){
if(o.Opportunity__r.CARE_Operations__c == null) {
o.Opportunity__r.CARE_Operations__c = UserInfo.getUserId();
}
}
}
这就是他们想到的。在标准Opportunity对象中,我们有一个与用户关联的查找字段。。CARE\u Operations\uu c。。现在触发器应该做的是。。
1.-创建新的GOP清单时,如果用户在名为COSCOoperations\u c的GOP对象中填充新的自定义查找字段,则保留该名称,2.-如果用户未填充COSMoperations\u c字段,但已填充Opp级别CARE\u Operations\u c中的字段,请使用该名称。3.-如果CARE\u Operations\u c或COSCOoperations\u c都没有填充(用户输入),那么COSCOoperations\u c将是刚刚创建GOP对象的人。
这就是我到目前为止所拥有的。。
trigger TR_OrderChecklist on Order_Checklist__c (before insert) {
List<Opportunity> COS_Op = new List<Opportunity>();
COS_Op = [select CARE_Operations__c from Opportunity where id in (select Opportunity__c from Order_Checklist__c where COSOperations__c != null)];
for(Order_Checklist__c OC : trigger.new) {
if(OC.COSOperations__c != null) {
break;}
if(COS_Op != null){
OC.COSOperations__c = OC.Opportunity__r.CARE_Operations__c;}
if(OC.COSOperations__c == null){
OC.COSOperations__c = UserInfo.getUserId();}
}
}
我的问题是在第二个if语句...其他两个条件正常工作...!有什么想法吗?谢谢!!!
我对这些要求有点困惑。我们是说在创建自定义对象的记录时需要创建新的Opportunity记录吗?
如果是,是可能的。您可以在“插入后”类型的客户对象上编写APEX触发器,并创建一个新的机会记录并根据需要填充其字段。
我的第二个想法是修复你发布的触发代码:
trigger TR_OrderChecklist on Order_Checklist__c (after update) {
List<Opportunity> opptsToUpdate = new List<Opportunity>();
for(Order_Checklist__c o : trigger.new) {
if(o.Opportunity__r.CARE_Operations__c == null) {
o.Opportunity__r.CARE_Operations__c = UserInfo.getUserId();
// Queue it up for one update statement later
opptsToUpdate.add(o.Opportunity__r);
}
}
// Commit any changes we've accumulated for the opportunity records
if (opptsToUpdate.size() > 0)
update opptsToUpdate;
}
假设你有机会。My_User__c查找(用户)和My_Object__c。Opportunity__c查找(机会)这个触发器是一个好的开始:
trigger HandleMyObjectInsert on My_Object__c (before insert) {
User actingUser = [SELECT id FROM User WHERE Id = :UserInfo.getUserId()];
List<Opportunity> oppts = new List<Opportunity>();
for (My_Object__c myobj : trigger.new) {
Opportunity o = new Opportunity();
o.Id = myobj.Opportunity__c;
o.My_User__c = actingUser.Id;
oppts.add(o);
}
update oppts;
}
为了证明查找(用户)实际上只是一个Id字段,请尝试以下练习。在名为“我的用户”的Opportunity对象上创建新的Lookup(User)字段
从Salesforce网页中,选择现有的opportunity记录,并将My User字段设置为某个随机用户,然后保存该记录。现在,从开发人员控制台执行以下匿名APEX:
Opportunity[] oppts = [
SELECT id, My_User__c, My_User__r.Name
FROM Opportunity
WHERE My_User__c != null
];
for (Opportunity o : oppts) {
system.debug('##### Opportunity.My_User__c = '
+ o.My_User__c
+ ', o.My_User__r.Name = '
+ o.My_User__r.Name);
}
关闭fancy log视图并单击“打开原始日志”,您将看到如下一行:
16:42:37.077 (77645000)|USER_DEBUG|[7]|DEBUG|##### Opportunity.My_User__c = 00530000000grcbAAA, o.My_User__r.Name = John Doe
请参见,Salesforce将\uu c查找字段视为Id字段。在本例中,它是与用户对象Id的外键关系。Salesforce让您认为Name字段是主键,但实际上它是Id字段(好吧,我还没有看到Salesforce的ERD,但我很确定这是正确的)。请注意,您可以通过构造\uu r访问查找对象的字段。
更新字段只是更改My_User__cid的问题:
Opportunity[] oppts = [
SELECT id, My_User__c
FROM Opportunity
WHERE My_User__c != null
LIMIT 1
];
for (Opportunity o : oppts) {
o.My_User__c = :UserInfo.getUserId();
}
update oppts;
或者,您可以从soql查询中获取用户Id,如下所示:
// Let's query all users and use the 3rd one in the list (zero-index 2)
User[] users = [select id from user];
Opportunity o = new Opportunity(My_User__c = users[2].id, Name='Testing', StageName = 'Prospecting', CloseDate = System.today());
insert o;
或者,通过用户的电子邮件地址查找用户:
User[] users = [select id from user where email = 'first.last@company.com' and IsActive = true];
if (users.size() > 0) {
Opportunity o = new Opportunity(My_User__c = users[0].id, Name='Testing', StageName = 'Prospecting', CloseDate = System.today());
insert o;
}
这是获取当前用户Id的一种非常好的方法:
UserInfo.getUserId()
问题内容: 我对Java,JavaFX和编程一般还是有点陌生,但是我遇到的问题困扰着我。 在大多数教程中,我查找了有关填充ListView(更具体地说,使用ObservableArrayList)的方法,最简单的方法是从String的ObservableList中创建它,如下所示: 但是我不想使用字符串。我想使用我制作的名为Words的自定义对象: 每个Word对象只有两个属性:wordStr
我对Java、JavaFX和一般编程都有点陌生,我有一个问题让我大吃一惊。 在我查阅的大多数关于填充ListView(更具体地说,使用ObservableArrayList)的教程中,最简单的方法是从字符串的ObservableList创建它,如下所示: 但我不想用字符串。我想使用我制作的一个名为Words的自定义对象: 要明确的是,这不是android的,单词列表最终会被更改、保存和加载,所以我
在之前的一家公司作为终端用户使用了几年后,我对Jira admin这方面的工作还不熟悉。我们使用的是标准的Jira工作流程。我正在努力解决的情况如下。我正在尝试匹配我们旧的专有问题数据库的一些功能。现在我使用了许多标准的Jira字段,只有两个新的自定义字段(两个单选列表都是我手动填充的): 1) Customer=向我们的支持团队发送新问题电子邮件的客户姓名2)Customer Contact=当
问题内容: 我不知道最好的方法是创建具有属性和方法的JavaScript对象。 我看过一些示例,该示例中的人员使用然后在所有功能中使用以确保范围始终正确。 然后,我看到了用于添加属性的示例,而其他示例则是内联的。 有人可以给我一个带有某些属性和方法的JavaScript对象的正确示例吗? 问题答案: 有两种用于在JavaScript中实现类和实例的模型:原型方式和闭包方式。两者都有优点和缺点,并且
问题内容: 我有两个表:tbl_listings,其列为:prop_id; 另一个表:tbl_bookings,其列为:prop_id,booking_date。 我想编写一个查询,计算prop_id在tbl_bookings中出现的所有时间,然后用该查询的结果填充tbl_listings中的新列。 我的查询看起来像: 但由于某种原因,我收到一条错误消息:子查询返回多于1行。我该如何解决? 问题答
我有一个要填充信息的对象。我从许多不同的服务中检索信息。我做了一个助手类,它有一个公共方法,然后有许多私有方法来调用服务。我写的东西很好,但我不确定这是否是正确的方法。 您可能想知道为什么我需要一个包含所有这些信息的对象。我需要它全部在一个对象中,因为我从这个java对象创建了一个json对象并将其传递给javascript层。 我的方法有什么问题?我是否应该遵循一种编程范式来做这样的事情? 例子