订单中Territory的确定

之前一直以为单据中Territory的确定只能通过录入Employee Responsible来实现,这样的话操作流程就变成了:确定Territory后检查录入的Sold-to是否合规。难道系统标准就不支持先录入Sold-to自动带出Territory吗?

其实是可以的,通过对Employee Responsible分配Access Sequence: 0030可实现这个需求。不过整个过程有点绕:

  1. 在合作伙伴确定阶段,通过FM: CRM_TERRMAN_GET_TERR_BY_OBJ找到负责的Employee;
  2. 在UI展示的时候,通过FM: CRM_TERRMAN_GET_TERR_BY_SCOPE找到Territory;

综上Territory还真只能通过Employee Responsible得到,但是我们可以借助Territory从Sold-to得到Employee Responsible再得到Territory。。。

Determination Path

就Partner Determination,一直有个疑问:多个Partner Functions的determine次序是怎样的呢?我们知道Access Sequence有10,20,30的先后次序,但是在Partner determination procedure中我们没法指定Sold-to,Ship-to,Contact Person的次序。之所以有这样的疑问,是因为Partner function之间往往是有关联性的,比方说我们通过Sold-to决定Org,再通过Org Structure决定Responsible Employee。

就此深入研究,发现Partner Function的determine确实是有次序的,但是这个次序不是简单的从上到下,或者按字母、数字排序,而是根据Access Sequence的内容计算得来的。因为Access Sequence中的Details on the Source,Mapping/Restrictions等字段反映了Partner Function的相关性。

相应代码为Function Module: COM_PARTNER_DEADLOCK_CHECK_CB中的Form: DEADLOCK_CHECK_ON_FUNCTION。计算的结果就是Determination Path,当中的DETERM_LEVEL决定了determine的先后次序。

认识到这个机制的存在,我们可以放心的定义Partner Function和Access Sequence,先后次序的问题则交给系统考虑。同时也解释了为什么我们无法人为指定Partner Function的determine的次序。

题外话,Partner Determination是通过Event Handler触发的,Callback Function为:CRM_PARTNER_DETERM_INITIAL_EC。