C4C老司机写给新手的建议

创作不易,转载时请注明出处

By yi

 

从入行到现在已经好几年了,也经历过各种各样的项目.遇到过很坑的,同时也遇到过很优秀的项目,这里总结一下做项目时的一些经验供大家参考.本人在做项目的时候,有记笔记的习惯,这个笔记也是给自己开发的一个总结.

Solution方面的一些建议

一个项目只创建一个Solution,

  • 因为不同的solution之间数据是不通用的A solution同创建的字段,逻辑,对象等,在B Solution中没有办法直接访问.
  • A solution和B solution在系统中是并集的状态,所以两个solution的代码容易造成冲突.

如果一个项目有多个开发人员

  • 开发人员在完成代码和对象的创建后,一定要养成随时保存和Check in 的良好习惯.因为当系统检测到你的代码和系统服务器上的代码版本不一致的情况下,系统会要求你reload代码,很可能会对你当前现在编写的代码造成影响.

    https://s3.us-west-2.amazonaws.com/secure.notion-static.com/c68da0a2-7b27-48d3-b13e-ec562f19f3dc/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20210514%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210514T162607Z&X-Amz-Expires=86400&X-Amz-Signature=14106a931bb8bf8db79eef3a272c988568af2961c23a0dd65bb61f6e09126c63&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22

  • 不同的开发人员在项目开发的时候,一定要分清不同开发人员负责的对象,例如A负责主数据方面的BO,B负责销售方面的BO,这样可以尽可能的减少冲突.

项目创建后

  • 第一时间创建一个BAC文件并Assemble

  • 因为一个项目不能避免的要和第三方系统做数据交互,在数据交互的时候一定要用到接口,C4C系统开发的时候,接口是有命名空间的概念的,假设你一直在Source Solution上面做开发,第三方系统也已经做好了和你接口的对接,当你项目要上线的时候,一定会对Solution进行Assembled和Download的,这时候创建的Patch对应的命名空间会和你原先的Source不一样,这时候你需要把所有Webservice和OData接口都重新做一次配置,第三方系统同时也要变更他连接到你系统的连接.

    https://s3.us-west-2.amazonaws.com/secure.notion-static.com/2fae39e0-4dd5-421d-92df-6972cf84c068/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20210514%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210514T162645Z&X-Amz-Expires=86400&X-Amz-Signature=1504af6f1a9c83fcbc501da035bb002c29703223fd65160dac48aa93cfdcf922&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22

    所以为了预防发现上面的情况,我们最好在Solution创建的时候即进行Assemble

  • 或者我们可以使用CPI作为中间转换器,这样第三方系统对接C4C系统的地址不需要更改,我们只需要更改好C4C系统上面Webservice和OData服务后,更新CPI上面的地址即可.

当我们Solution创建完成后,我们就可以开始项目的开发了,这时候我们需要注意

  • 不同的对象一定要使用文件夹来分类,例如把所有的Code List DataType统一存放到CodeList文件夹下,所以Webservice的接口对象统一放到 CommunicationObject下.当然,名称叫什么是由你来决定的.

https://s3.us-west-2.amazonaws.com/secure.notion-static.com/1fed9c9f-0743-4124-984e-f17ac76fff78/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20210514%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210514T162742Z&X-Amz-Expires=86400&X-Amz-Signature=bf34c12f67750b527968d513e0572512134c4fe77444af6eb8afe3feb438d610&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22

  • 不同对象创建的XBO或相关的功能,一定要创建一个对象名称的文件,然后放到一起,这是为了后面运维的人员查找问题的时候可以快速定位到要查找的对象,本人就曾经运维过一个项目,里面一个文件夹都没有,刚运维的时候,每次找一个文件都像大海捞针一样.

https://s3.us-west-2.amazonaws.com/secure.notion-static.com/34e37554-074e-4652-bbff-f478aa6b3523/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20210514%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210514T162812Z&X-Amz-Expires=86400&X-Amz-Signature=3a0d99661979c59992bdd63594b91244c78e9ec566d378a18fad42982040f2f2&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22

  • 新建的BO,如果这个BO是有页面的,一定要创建文件夹来存放,因为系统在创建页面的时候,默认是会放到BO同一级别的文件夹里面的,想想如果一个文件夹下有2个BO,且2个BO都生成了页面文件,这时候存在这个文件夹下面就有多达10多个文件,这是多么灾难的画面.

https://s3.us-west-2.amazonaws.com/secure.notion-static.com/c23f88da-070b-454b-9a33-ce0a5c9490b1/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20210514%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210514T162848Z&X-Amz-Expires=86400&X-Amz-Signature=6fc710d6e3934c06364255febcdefc600b82c25b4a65209812884ef98ae26c67&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22

代码的建议

  • 所有的BO或Node节点,在获取该对象下的值的时候,一定要记住要先判空,toCustomer.IsSet()/toCustomer.Address.IsSet()
//get employee
if(!this.ToParent.PartialSystemAdministrativeData.CreationIdentityUUID.IsInitial()){
	var toIdentity = Identity.Retrieve(this.ToParent.PartialSystemAdministrativeData.CreationIdentityUUID);
	if(toIdentity.IsSet()){
		var toEmployee = Employee.Retrieve(toIdentity.BusinessPartnerUUID);
		if(toEmployee.IsSet()){
			this.ApplicantsWorkingNumber = toEmployee.IdentificationEmployeeID.EmployeeID.content.RemoveLeadingZeros();
		}
	}
}
  • 代码注释越清晰明了越好,多写点注释不影响代码的执行速度,但对后面运维的人员来说,他会感谢你的.
  • 同一个ABSL文件内的代码尽量不要太多,很多功能明确的代码,尝试创建一个Action,然后把代码放进去,然后ABSL代码里面使用this.ActionName()的方式简化代码量,说不定你这个Action还有可能在其它代码中使用到,而且维护代码的时候,当需要更改某个功能,刚好这个功能是用Action来实施的,那么你也可以快速的定位到问题点,进行代码修改.
  • BeforeSave事件中尽可能的避免修改其它BO的字段值,因为这样会再次触发BO的AfterModify.
  • 编写代码时一定要遵守代码规范,如果没有项目的代码规范,可以参考JAVA或其它语言的代码规范.

Debuging

  • 如果觉得代码执行慢,可以使用Trace或者Debuging后打开Trace来查看

https://s3.us-west-2.amazonaws.com/secure.notion-static.com/76929226-5945-4487-bb48-6f7b679929b7/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20210514%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210514T162912Z&X-Amz-Expires=86400&X-Amz-Signature=051ac148417db225414cd76aa08985c0fe861d393ac8beb1679c401f1a8d5e2c&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22

  • Trace工具还可以快速的定位到代码发生故障的地方

https://s3.us-west-2.amazonaws.com/secure.notion-static.com/712adc48-b02a-4e95-8f6d-6ec5d5c74a96/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20210514%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210514T162935Z&X-Amz-Expires=86400&X-Amz-Signature=8708f1a17678184457c501263bb7f0e40be026ad41fa665c0f75146bd1c6a202&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22

  • 页面也有Performance工具,用来跟踪页面的创建速度

https://s3.us-west-2.amazonaws.com/secure.notion-static.com/a9d8f2b0-355b-4523-8e12-9e1bb1d8b898/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20210514%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210514T162954Z&X-Amz-Expires=86400&X-Amz-Signature=9b61c25fbc27b9d29c2301f89f2df39aea1e940bff4be2c99658f2fab8ab85da&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22

  • 快速获取字段的KUT更改,可以通过打开debugMode,然后点击字段在第一个Tab页上面的获取CT,来获取字段的KUT变更

https://s3.us-west-2.amazonaws.com/secure.notion-static.com/77305dc3-1c11-43fb-adba-641d180c3473/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20210514%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210514T163021Z&X-Amz-Expires=86400&X-Amz-Signature=414677e3e7a67b77323058c215ef15940d28dd4e62e4185af707b8d669cc5e16&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22

https://s3.us-west-2.amazonaws.com/secure.notion-static.com/d8e1bef1-2657-43a2-ba9a-632b02077490/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20210514%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210514T163042Z&X-Amz-Expires=86400&X-Amz-Signature=929e1343f20aab947acbdc0b6a3bce181d8b8ac785328fd18e7acba6ffe4313b&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22

  • 数据模型可以用来快速获取字段在BO中的真实位置

https://s3.us-west-2.amazonaws.com/secure.notion-static.com/d6e5718c-7894-446a-8541-b64a10699a01/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20210514%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210514T163205Z&X-Amz-Expires=86400&X-Amz-Signature=0eb0b1056193c0bfed8e19039d80780a36c33aed0a7845cc355c6110d8a06d8a&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22

  • UI更改可以快速的获取UI的名称,以及UI的所有变更

https://s3.us-west-2.amazonaws.com/secure.notion-static.com/e250dd11-6c2c-4aa4-89a6-8d601bfe48ae/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20210514%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210514T163145Z&X-Amz-Expires=86400&X-Amz-Signature=1207df29e2326fc07404535cfa1c8b26df0c95f64295f23cc629ade2716666aa&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22

  • 打断点的时候,如果系统警告,断点变成感叹号,十有八九是因为你的对象变更过了,重建ABSL文件就行.

接口

  • WebService或者OData接口都可以创建接口账号,而不占用系统账号的
  • 通信场景现在已经不是无限的了,不过对于OutBound的接口,现在可以在"管理员"的页签下面创建场景了,在管理员创建的通信场景不占用下图的通信场景

https://s3.us-west-2.amazonaws.com/secure.notion-static.com/bcdbb4c2-429c-465d-bf04-3f609e1107ad/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20210514%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210514T163119Z&X-Amz-Expires=86400&X-Amz-Signature=378c9b54527153d0345da4b03dde37a668db46565b1c24873700f184e5d4612c&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22

  • 与第三方接口对接的话推荐OData,因为OData可以通过过滤,减少传输的数据包大小,而且Web应用开发人员会处理Json的人员比会处理WebService的要多.

UI Design

  • 在C4C开发中UI Design开发是很重要的,可以说大部份项目UI Design所点开发时间都在50%以上,所以一定要熟练掌握UI Design.
  • 有空的时候,多点打开系统标准的UI文件,看看SAP内部人员是怎么开发的,我也是看系统标准的UI学会了很多技巧.
  • 新手不熟练UI开发的情况很容易会出现500 error这种报错,这种错误绝大部份错误原因都是因为UI在引用一个对象的时候,这个对象为NULL.至于为什么为NULL,就需要你去检查了.下面我列举一些常见的,
    1. 打开UI就500错误,检查UI加载时的第一个Event,看看BO read的时候是否配置有问题,导致系统没有把BO对象读取出来.
    2. 修改值的时候500错误,这个和上面的情况差不多,BO对象没有加载,或者字段对象没有加载.
    3. 其它在页面加截后,点某些功能时才弹出500错误,这种比较好排查,找到自己当时操作可能触发的事件,排查一下就行了.
    4. 其它问题可以尝试找一个相同对象类型的UI文件,参考一下.
  • 激活WCView文件可以强行触发WCF文件重新加载

暂时能想到的就这么多了,等什么时候再总结出比较多的建议时,可能会再开一个第二章.感谢大家的观看

posted on 2021-05-15 00:47  艺高人胆大  阅读(448)  评论(0)    收藏  举报