万事开头难

公司决定用Salesforce做项目,只好学一点这门技术。

我还是用老办法,先找几本书,看了一天,然后看代码,却发现书太老,主要是Visualforce Page,而代码则是用Lightning component和Lightning Web Component。而且,书里说的MVC,但是看实际代码(严格地说代码要加个引号,后面解释)却感觉是另外一回事。最大的问题是不知道从哪里找代码。

查了半天,用Visual Studio Code连上沙盒,下载了所有Lightning component和Lightning Web Component以及后台的Apex代码。但却发现还远远不够,似乎还缺少很多东西。看见一个页面,找不到它的代码。还是觉得云里雾里,心中无底。

花了两三个小时,这才茅塞顿开。原来我没有理解Salesforce独特的所谓基于元数据的“编程”方式。这和我以前学过的技术完全不同。以前学过的,不管是asp.net, Silverlight,还是angular,代码都一目了然。只要看懂了代码,就理解了整个项目。而Salesforce是“无代码”的“编程”方式,主要工作都是用鼠标点点来完成——只是你要知道如何点。很多东西都是不需要看到背后的代码的,只需要知道它是个什么东西。比如页面(Page)里的那些标准元素,根本不需要知道背后的代码。Process ,Flow这些东西,同样大部分只是鼠标点点,最多输入几个变量名什么的,和传统的编程方式完全不同。虽然理论上也可以自己定制页面,但大多数情况下很少这样做。系统提供的几个标准对象如Account,Task,Case,Opportunity等,也是Salesforce很独特的地方。理解了这些,整个框架大致就清楚了,心里有了底。

当然,细节是魔鬼。为了实现不使用Deployment,在Actions and Recommendations元素里加入Flow,查了半天资料,这才搞清楚原来是用Process Builder做个Process,关键是加入Action时,类型必须为Create a Record(而不是Flow!),而Action Type则设成RecordAction,在RecordAction的属性设置里再设置Flow,这样就可以了。另外还有一点,也是查了很多资料才知道,要把输入参数传给Flow,原来是需要在Flow中定义一个recordId的变量,这样就能把ParentRecordId传给它了。造成这些问题的原因,关键是Salesforce的资料太少,比如中文书似乎一本都找不到,英文书也很少,而且很多都过时了,比如最新的Lightning Web Component一本书都找不到。主要只能依赖Salesforce公司的培训资料和一些论坛。而不少资料又不够好,甚至有错误。比如Salesforce公司自己的网站上的教学帖子,关于Actions and Recommendations里加Flow的两种方式即通过Deployment和Process Builder的比较,有一栏显然是次序放错了,再如另一个帖子,给出了用Process Builder在Actions and Recommendations元素里加入Flow的例子,屏幕截图里显示的是Id,但我依样画葫芦,却报错,再一看,帖子里的文字说明倒是对的,应该用FieldReference。资料的缺乏,造成学习上不必要的困难。不过,理解了大致框架,细节慢慢抠,还是不难的。

再次体会到,万事开头难。难就难在和过去的经验不一样,老革命碰到新问题,不理解新的框架。只要突破了这层不算厚的屏障,理解了和以往所学技术的不同之处,过去的经验就可以发挥作用了,就心中有底,不再感到茫然,学习难度也大大降低。以前学的angular(结合asp.net mvc core),开始也是因为它的debug和release模式和以往的老经验不同,所以碰到一些障碍,好在最后用console.log得到了出错信息后,以往关于mvc的经验马上发挥了作用,理解了问题所在,很快解决了问题,接下来就一马平川了。万事开头难,但只要克服了一开始的困难,后面就容易许多。所以学一个新东西,关键是要硬着头皮熬过最初的痛苦。

posted @ 2020-07-22 11:26  平静寄居者  阅读(206)  评论(0编辑  收藏  举报