记录开发出现的问题

Q1:SObject row was retrieved via SOQL without querying the requested field:

A1:报错是因为我在代码中用到的例如Account对象中的某个字段,我拿它做计算之前,应该用select语句先将它查询出来,然后再参与计算

Q2:List has no rows for assignment to SObject

A2:没有记录返回,所以要检查一下select语句,查询应该有误

Q3:返回记录more than one row

A3:说明一个非List类型的对象实例返回了多条语句,解决办法是:要么改一下查询语句,要么将该对象实例变成List

Q4:在把web2case代码从uat本地向诺赛特环境下部署时,出现一些错误:

     1、没有加metadata元文件

     2、对应label和field要自主创建

          ps1:带依赖关系的字段,特别是下拉框类型的,需要将依赖关系映射到下拉框中的每一个value!!!

          ps2:下拉框默认值为中文:无,通过设置label:lang="en-US",即可将其改为默认值为none

     3、诺赛特的CS_Case_Feedback里面的跳转url需要修改成--》https://hyteraus--hyteradev--c.cs65.visual.force.com/apex/Web2Case(cs65是指诺赛特环境)

Q5:Web2Case做好之后是在salesforce环境下,外部人员要访问必须要有salesforce账号

A5:需要在salesforce上面site里面进行设置,步骤如下: setup->Sites->click(你要设置的东西)->click"Publck Access Settings"->Scroll down to "Field-level Security"->click "view" next to(你想设置的对象)->edit 对象里面具体的字段,设置它们的权限:readonly or edit,图文应该更详细。

Q6:触发器入口的上下文变量要与触发器里面绑定的方法相对应,例如高亮的部分

trigger Trigger_ChannelSalesForecastDetails on Channel_Sales_Forecast_Details__c(before insert, before Update,after update) { 
    new Triggers()
    .bind(Triggers.Evt.beforeInsert,new ChangeCurrencyIsoCode())
    .bind(Triggers.Evt.beforeUpdate,new ChangeCurrencyIsoCode())
    .bind(Triggers.Evt.afterUpdate,new GetTotalAmount())
    .manage();
}
同一对象上的多个触发器可能会导致冲突和错误,因此开发过程中最好能够向上面代码一样,在一个触发器中通过不同的上下文变量来调用不同的方法完成不同的动作的触发
 
Q7:
List<Channel_Sales_Forecast_Details__c> csfDatailList = (List<Channel_Sales_Forecast_Details__c>)Trigger.new;
            //Channel_Sales_Forecast__c channelForecast = new Channel_Sales_Forecast__c();
            List<Channel_Sales_Forecast__c> channelForecast = [select Id, TotalAmount__c from channel_sales_forecast__C where id =: csfDatailList[0].Channel_Sales_Forecast__c];
            List<Channel_Sales_Forecast_Details__c > lcsfd = [select CommitTotal__c,id,channel_sales_forecast__C, channel_sales_forecast__r.TotalAmount__c,
                                                                isLatestVersion__c,isActive__c from Channel_Sales_Forecast_Details__c 
                                       where isLatestVersion__c = true and channel_sales_forecast__C=: channelForecast[0].Id];                          

针对每个销售预测首页都有对应的销售预测详情页,是一对多的关系,同时销售预测首页也有多条记录,因此在查询时,要针对具体某条销售预测订单记录,去查相应的详情页的产品记录,即:高亮处。要注意的是该触发器是在有记录被插入或更新时会被触发,因此此处的csfDatailList[0]取的便是修改的那条记录,salesforce默认批量操作,故而此处这样写

如果记录是从trigger.new里面拿到,则不需要update Channel_Sales_Forecast_Details__c对象,因为trigger.new里面拿到的就是最新更改的值!

Q8:自定义label在代码中的使用

 

    跳转到label的value对应的链接里,链接后加上/feedbackthankyou,组合成一个完整的url

Q9:dataloader的使用,批量导出或导入字段的值

ps:导入时应注意要将对应的字段进行映射,即将salesforce平台里的字段拖拽下来与你导入的字段一一映射

Q10:EXCEL小技巧及坑

根据条件求和时,使用sumif函数,在进行批量求和时,不能直接用填充柄对其它数据进行求和,要先双击它,再进行操作

出现下面这种不管点哪个单元格,都是从A:A整列算起才是正确的,不能出现sumif(A3:A(MAX),A3,B3:B(MAX))-->这样就是没有计算A3以上的行的记录!!!

Q11:在生产环境中部署字段时,需要在对象的页面布局里将新部署的字段拖拽到布局里,并且需要给该字段设置权限(例如只读权限)

Q12:关系查询

一、标准对象:

1、child-to-parent(从子查父亲的信息,直接使用父亲对象.字段名

SELECT Id, Name, Account.Name
FROM Contact 
WHERE Account.Industry = 'media'   //从联系人对象查询客户industry字段为‘media’的联系人id,name以及客户name

2、parent-to-child关系(一对多)

SELECT Name,
  (
    SELECT LastName
    FROM Contacts    //查询出来结果为:一个客户id对应一个list  'test0812'-->[{"lastname":"a"}]
  )
FROM Account    

二、自定义对象

1、child-to-parent(使用Mother_of_Child__r关系字段来关联,Mother_of_Child是在child中定义的具有主从关系的字段,主是mother)

SELECT Id, FirstName__c, Mother_of_Child__r.FirstName__c
FROM Daughter__c
WHERE Mother_of_Child__r.LastName__c LIKE 'C%'

2、parent-to-child关系(一对多)

SELECT LastName__c,
  (
    SELECT LastName__c
    FROM Daughters__r
  )
FROM Mother__c去

Q13:社区相关操作

社区-->ALL 社区-->构建器      update-- 主页-->所有站点

编辑时,将所需的组件从左边的搜索框里找到,并拖拽进来,搭建成想要实现的界面,要注意的是右图是Tabs下嵌套PC_CalendarMain组件和chatter下对应的组件,要先拉tab组件,再拉tab选项里相应的组件

 

再者就是要对新增的页面进行授权-->对社区可用,然后在对应的简档里面,将该页面加入该简档可用

给对应的简档分配受众

Q14:写测试类时出错,由于case对象里contactid字段与contact对象的id有主从关系,因此必须要有contact记录,case对象中的contactid字段才有意义,才不会报错,Account对象是一样道理,Contact中Accountid字段与Accound的id绑定,且在创建对应的对象新纪录,要对它进行插入操作!

 Q15:在我点击Preview之后,跳转到videoDetail页面对添加的组件进行删除时报错,出问题的原因是进入preview界面后,aura就已经开始渲染了,这时候进行相关操作时,controller类并不能获取到相应的修改的值,因此报错,正确操作应该是直接在体验生成器编辑页面的home搜索栏里进行页面切换

 

 Q16:部署对象时,要将对象和字段一起打包上载验证部署!!!

 

 Q17:10-13 16:33:52
部署关掉验证规则的步骤:1、重复-->重复规则-->STRONGAccountNamematching-->禁用   2、客户-->验证规则-->Cant_Edit_When_Account_Active-->deselect启用
验证完毕后再重新打开

 Q18:图中的Channel_Sales_Forecast__Share对象是销售用来记录和存储记录的    后台可以访问到  平台界面里找不到

 

 

 Q19:遇到错误多多debug!!!!

Q20:当要测试满是非静态方法的类(MassEditChannelForecastController)时,需要用到PageReference类

 通过PageReference类实现创建该类的实例,然后在测试类中调用被测试类的非静态方法进行测试!(原理还在摸索,后续会记录!)

 PageReference类:用来在apex代码中将页面跳转到指定的位置

 Q21:bug修复

 

问题:if语句里的判断条件不够,&&误写成了||,导致不该进入if里的赋值语句进入了。例如上面的列表sList虽然为空,但是size>0,会导致报错

如下图,userList为空但size不为0时,会进入if语句下的赋值语句,但赋值 赋的是空值,因此报错:List index out of bounds:0

 

 Q22 异步、批量处理、定时器相关知识 : https://www.cnblogs.com/zero-zyq/p/5287343.html

 Q23 bug记录:部署时,提醒‘Event Reminder before Start’进程失败,打开相关进程,会发现该进程的主要任务是给相关用户发邮件,错误的原因是:收件人不是活跃的用户,因此排查出下图中报错的类中有历史代码错误,漏掉筛选活跃用户逻辑,因此在此处做出修改即可。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Q24:在建立公式字段时,公式要通过语法检查,下图公式在加了TEXT()类型转换之后,没有再报错。

之后如果公式字段出问题,可以考虑该解决办法!

Q25:重复客户的合并

在classic界面的客户页面的bottom处有合并客户的选项卡,可以实现合并客户的功能

Q25:当代码逻辑和功能没有问题的时候,测试依然有问题,这时候就可以考虑是不是拿销售的账号进行测试,因为管理员的权限和销售的权限是不一样的

Q26:触发器的学习使用

isbefore && isupdate时,若trigger.new包括的值有所变化,不用手动添加update语句,去更新trigger.new的值,因为isbefore就是在向数据库里写值,但是其它值变化,要手动update,例如下图中cpmfList对象里的字段就不用手动update,而updateList对象里的记录则需要手动添加update语句进行更新。

isafter && isupdate时,是在修改数据库中的值,需要再次update

isbefore 和 isafter区别就是:需不需要用到已经存到数据库里的值,需要就是after,不需要就是before,例如:

 

 

 此处需要用到poBefore的id,但是它是已经更新到数据库里的数据,所以需要用到after

upsert 和 insert的区别: upsert会去数据里查找数据是否存在,存在则不插入,不存在插入,相较于insert,花费的时间较长

Q27:bug修复

salesforce Uncaught TypeError: Cannot read property 'getElementsByTagName' of null

原因是找不到Id,要满足下图rendered中条件,着重块的id才有效!

 Q28:对CRM/CPQ/BPM/ERP/PLM的理解,以及相关接口代码的理解(元旦!)

 CRM:Customer Relationship Management

 

 PLM:Product Lifecycle Management

Q29:ischanged函数不适用于任何新建记录,只适用于已有记录的更改

 Q30:trigger.new只能拿到对应对象里的字段新修改的值,拿不到关系查询的值,例如:opportunity__r.what就拿不到

Q31:beforeDelete  里只能用  trigger.old

Q32:自定义按钮放出来不显示,可能是没有给相应简档对应的删除权限

Q33:自定义页面上面加chatter,除了代码,还要有设置:

设置1:摘要跟踪要勾上

 设置2:

 

 3:代码加上

 

 

 

 

posted @ 2020-09-18 09:11  热爱前端的韩梅梅  阅读(327)  评论(0)    收藏  举报