摘要:當(dāng)然,不同的產(chǎn)品,對(duì)訂單增強(qiáng)的實(shí)現(xiàn)方式也各不相同。在世界里,想對(duì)訂單處理流程做增強(qiáng),同之前介紹的相比,相對(duì)來(lái)說(shuō)受的限制要多一些。首單檢查返回的分?jǐn)?shù)是,根據(jù)當(dāng)前配置文件這個(gè)結(jié)果被認(rèn)定為首單。
盡管有一萬(wàn)個(gè)舍不得,2018年還是無(wú)可挽回地離我們遠(yuǎn)去了。
唯有SAP成都研究院的同事和我去年在網(wǎng)絡(luò)上留下的這些痕跡,能證明2018年我們?cè)?jīng)很認(rèn)真地去度過(guò)每一天:
SAP成都研究院2018年總共87篇技術(shù)文章合集
一個(gè)SAP開(kāi)發(fā)人員的2018年終總結(jié)
今天寫(xiě)的這篇文章也是因?yàn)楣ぷ餍枰1疚臅?huì)首先介紹SAP傳統(tǒng)產(chǎn)品里的訂單編排增強(qiáng)技術(shù),再來(lái)了解一下同樣的增強(qiáng)需求,SAP Kyma是如何完成的。
目錄
基于SAP傳統(tǒng)ABAP技術(shù)的訂單編排增強(qiáng)技術(shù)
基于SAP Kyma的訂單編排增強(qiáng)技術(shù)
SAP產(chǎn)品里的訂單處理流程,無(wú)論是On-Premises解決方案還是云產(chǎn)品,我認(rèn)為歸根到底可以概括成四個(gè)字:訂單編排,包含兩個(gè)層次的內(nèi)容:
1. 單個(gè)訂單通過(guò)業(yè)務(wù)流程或者工作流驅(qū)動(dòng)的狀態(tài)遷移,比如從初始的Created狀態(tài),經(jīng)過(guò)一系列操作,最后進(jìn)入Closed狀態(tài);
2. 多種類(lèi)型的訂單協(xié)同工作,完成一個(gè)完整的端到端業(yè)務(wù)流程。典型的例子有銷(xiāo)售自動(dòng)化(Sales Force Automation)里的從Lead, Opportunity, Quotation到Contract,Order這些不同類(lèi)型的訂單協(xié)同。
SAP系統(tǒng)里訂單狀態(tài)的遷移到底有多復(fù)雜?復(fù)雜度絕對(duì)遠(yuǎn)超初學(xué)者的想象。
以SAP CRM為例,在我使用的SAP CRM 714系統(tǒng)里,訂單狀態(tài)總共有906種,這不得不讓人佩服SAP CRM當(dāng)初的設(shè)計(jì)者考慮問(wèn)題的周全。
即便已經(jīng)設(shè)計(jì)了這九百零幾種狀態(tài),SAP仍然考慮到了客戶可能的狀態(tài)擴(kuò)展需求,因此采用了一種經(jīng)典的User Status(用戶自定義狀態(tài))和System Status(SAP標(biāo)準(zhǔn)狀態(tài))的兩層狀態(tài)設(shè)計(jì),讓用戶能夠隨便定義的User Status通過(guò)扮演中間層角色的Business Transaction,映射到能夠被SAP標(biāo)準(zhǔn)程序所感知的System Status。
上圖左邊的Open, In process, Released和Completed就是用戶自定義訂單狀態(tài),SAP允許客戶給每個(gè)狀態(tài)分配一個(gè)Low和High的值,通過(guò)這兩個(gè)值巧妙地提供了一種用非圖形化方式進(jìn)行狀態(tài)跳轉(zhuǎn)的功能。
比如In process狀態(tài)的Low為20,意味著In process狀態(tài)不可能重新回到Open狀態(tài),因?yàn)镺pen狀態(tài)的ID 10小于In process狀態(tài)的Low字段定義的20——一個(gè)狀態(tài)能跳轉(zhuǎn)到的目標(biāo)狀態(tài)的ID,必須位于由該字段的Low和High定義的區(qū)間內(nèi)。
除了復(fù)雜的狀態(tài)處理和跳轉(zhuǎn)外,SAP訂單編排的復(fù)雜度主要體現(xiàn)在以下方面:
1. 很多SAP的客戶,除了購(gòu)買(mǎi)SAP的On-Premises產(chǎn)品或者訂閱云服務(wù)外,還擁有其他業(yè)務(wù)系統(tǒng)。這類(lèi)客戶的訂單編排,在SAP標(biāo)準(zhǔn)業(yè)務(wù)流程基礎(chǔ)上往往還存在和這些第三方業(yè)務(wù)系統(tǒng)的交互。
2. 即使是同一行業(yè)的客戶群,因?yàn)榈赜蚝蛧?guó)家,語(yǔ)言的差異,可能業(yè)務(wù)流程也存在一定的區(qū)別。SAP發(fā)布的標(biāo)準(zhǔn)功能有時(shí)無(wú)法100%支持這些在細(xì)節(jié)上存在千差萬(wàn)別的業(yè)務(wù)流程。
因此SAP系統(tǒng)對(duì)訂單編排增強(qiáng)的支持就非常必要。
當(dāng)然,不同的SAP產(chǎn)品,對(duì)訂單增強(qiáng)的實(shí)現(xiàn)方式也各不相同。
在SAP CRM里,雖然SAP沒(méi)有明確提出Business Object這個(gè)概念,但訂單應(yīng)用基于的模型實(shí)際上仍然是由不同的節(jié)點(diǎn)組成:
每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一些更底層的模型節(jié)點(diǎn),其上可以注冊(cè)各種事件處理函數(shù)。下圖是Service Request這個(gè)BO的抬頭節(jié)點(diǎn)的事件處理函數(shù):
每種事件觸發(fā)時(shí),注冊(cè)的函數(shù)會(huì)自動(dòng)執(zhí)行。
每個(gè)節(jié)點(diǎn)可以分配一個(gè)或多個(gè)執(zhí)行函數(shù)。當(dāng)然,嚴(yán)謹(jǐn)?shù)牡聡?guó)人在最簡(jiǎn)單的觀察-發(fā)布者模式上又添加了幾個(gè)維度的設(shè)置。
下圖第一列紅色的Execution Time,表示這些分配的函數(shù)到底是事件觸發(fā)后立即執(zhí)行,還是延遲到訂單抬頭或者行項(xiàng)目的通用例程執(zhí)行完后再執(zhí)行(往往用于實(shí)現(xiàn)批量操作,或者待執(zhí)行函數(shù)同通用例程存在依賴關(guān)系,或者出于性能考慮)。
第二列的Priority,即函數(shù)執(zhí)行優(yōu)先級(jí),如果若干函數(shù)除了優(yōu)先級(jí)外其他維度維護(hù)的屬性完全一致,則按優(yōu)先級(jí)從高到低依次執(zhí)行。
第三列Event,就是觀察者-發(fā)布者模式里的事件了,下面是SAP CRM訂單框架一些標(biāo)準(zhǔn)的事件:
最后一列就是事件監(jiān)聽(tīng)函數(shù)。
Jerry傾向于把CRM訂單處理系統(tǒng)的運(yùn)作方式理解成類(lèi)似下圖這種復(fù)雜的水管傳輸系統(tǒng),訂單業(yè)務(wù)流程依次通過(guò)注冊(cè)在不同事件上的監(jiān)聽(tīng)函數(shù)去執(zhí)行,就像水從這一根根大小粗細(xì)長(zhǎng)短各異的水管流過(guò)一樣。
如果客戶對(duì)其中某個(gè)業(yè)務(wù)步驟需要做增強(qiáng)(需要替換某根水管), 只需要用一個(gè)自己實(shí)現(xiàn)的函數(shù)去替換SAP標(biāo)準(zhǔn)函數(shù)(自己另外找一根水管替換掉現(xiàn)在正在工作的水管),能替換的前提是自己實(shí)現(xiàn)的函數(shù)的接口同被替換函數(shù)完全一致(自己另外找的水管和以前的水管兩端接口的規(guī)格完全一致)。
而SAP Cloud for Customer里的訂單模型,其Business Object在目前最新的1811版本里仍然是由ESF2框架實(shí)現(xiàn),只是后臺(tái)對(duì)Partners不可見(jiàn),但大家可以類(lèi)比SAP On-Premises世界里的BOPF框架,兩個(gè)框架的實(shí)現(xiàn)原理類(lèi)似。
在Cloud世界里,想對(duì)訂單處理流程做增強(qiáng),同之前介紹的SAP CRM相比,相對(duì)來(lái)說(shuō)受的限制要多一些。
在Partner做增強(qiáng)開(kāi)發(fā)的Cloud Application Studio里,所有能做增強(qiáng)的點(diǎn)以Hook的方式顯示如下:
Partners可以在這些Hook里進(jìn)行業(yè)務(wù)功能增強(qiáng)開(kāi)發(fā)。有些Hook可能存在某些讀寫(xiě)限制,比如AfterLoading這個(gè)Hook,會(huì)在SAP BO的標(biāo)準(zhǔn)加載邏輯執(zhí)行完畢后被調(diào)用,在這個(gè)Hook的實(shí)現(xiàn)里,SAP不允許任何對(duì)BO節(jié)點(diǎn)標(biāo)準(zhǔn)字段的寫(xiě)操作,以避免Partners的增強(qiáng)對(duì)SAP標(biāo)準(zhǔn)流程可能帶來(lái)的影響。有的顧問(wèn)朋友可能會(huì)說(shuō),這些Hook不就是SAP Netweaver里傳統(tǒng)的Business AddIn(BAdI)么?沒(méi)錯(cuò),概念上可以這么理解,需要提醒的就是,這些Hook創(chuàng)建之后,在ABAP后臺(tái)并不是以BAdI Implementation的方式存儲(chǔ),而是以ESF2 Determination的方式存儲(chǔ),類(lèi)似下圖這種BOPF里的Determination:
我們?cè)賮?lái)了解一下用SAP Kyma如何完成類(lèi)似的需求。在使用Kyma之前,大家得對(duì)Kyma是什么,SAP為什么要開(kāi)發(fā)出Kyma這兩個(gè)問(wèn)題比較清楚才行。我之前的文章?站在巨人肩膀上的牛頓:Kubernetes和SAP Kyma?已經(jīng)介紹了這兩個(gè)問(wèn)題的答案,所以本文不再重復(fù),直接上實(shí)例了。
我們假設(shè)需要對(duì)SAP Hybris Commerce的下單流程做增強(qiáng),在標(biāo)準(zhǔn)的Fraud(欺詐)檢查里加入我們?cè)贙yma里實(shí)現(xiàn)的自定義檢查流程。
如下圖所示,其中淺藍(lán)色的矩形框代表我們用Kyma實(shí)現(xiàn)的自定義Fraud檢查邏輯。
具體增強(qiáng)了哪些檢查邏輯呢?從下的訂單里拿到下訂單的客戶ID,然后在Kyma里調(diào)用SAP Marketing Cloud和SAP云平臺(tái)上提供的服務(wù)對(duì)這個(gè)客戶做校驗(yàn),Kyma拿到校驗(yàn)結(jié)果后,再傳回Commerce。
下面是具體步驟。
1. 首先登錄Commerce的back office頁(yè)面,定義一個(gè)新的action,ID為EXTERNAL_KYMA_FRAUD_CHECK。做過(guò)ABAP開(kāi)發(fā)的朋友們不難理解這個(gè)action,可以類(lèi)比成ABAP里的action profile,用于存儲(chǔ)和維護(hù)Partner的增強(qiáng)。
2. 進(jìn)到Kyma的console頁(yè)面:
選擇一個(gè)stage進(jìn)去,點(diǎn)擊Lambdas進(jìn)入編輯頁(yè)面:
新建一個(gè)Lambda function,取名fraudcheck2。我們所有的增強(qiáng)邏輯就寫(xiě)在這個(gè)函數(shù)里。
這個(gè)函數(shù)自動(dòng)創(chuàng)建的標(biāo)簽(Labels),Kubernetes老司機(jī)們一定覺(jué)得很親切。這些標(biāo)簽其實(shí)和大家現(xiàn)實(shí)工作中使用云筆記里的標(biāo)簽,以及圖片管理軟件里的標(biāo)簽作用相同,就是一種鍵值對(duì)(Key Value Pair), 可以允許用戶將Kubernetes對(duì)象進(jìn)行靈活分組,并提供高效的檢索。
這個(gè)標(biāo)簽的概念不是Kyma發(fā)明的,而是Kubernetes的標(biāo)準(zhǔn)功能。
Function Trigger里可以指定這些Lambda函數(shù)在哪些事件觸發(fā)后執(zhí)行,思路和前文介紹的SAP CRM函數(shù)注冊(cè)一致。選擇第一步定義了新的action后對(duì)應(yīng)的event:
關(guān)于Lambda函數(shù)具體的實(shí)現(xiàn),做過(guò)nodejs開(kāi)發(fā)的朋友們一定不會(huì)覺(jué)得陌生。
首先第18行,19行從event這個(gè)輸入?yún)?shù)對(duì)象里取得發(fā)生事件的訂單Code,然后第26行消費(fèi)OCC(Omni Commerce Channel)Restul API獲得訂單明細(xì),從明細(xì)里獲得訂單的客戶ID,再調(diào)用第30行的代碼根據(jù)客戶ID拿到客戶明細(xì),然后使用第37行和第40行的代碼分別檢查該客戶的郵箱地址是否有效,以及該客戶是否第一次下單。
注意第43行和46行的代碼我暫時(shí)注釋掉,稍后才會(huì)啟用。
現(xiàn)在我們來(lái)測(cè)試一下。在Commerce里下一個(gè)單,記下訂單ID 2139。
回到Commerce back office頁(yè)面,查看剛才下的訂單的Business Process,輸入2139進(jìn)行查詢:
這里根據(jù)ID EXTERNAL_KYMA_FRAUD_CHECK進(jìn)行搜索,找到了剛才第一步新建的基于Kyma action對(duì)應(yīng)的流程日志記錄:
我們?cè)偃ゲ榭催@個(gè)訂單的Fraud檢查記錄:
點(diǎn)這個(gè)Fraud Reports查看檢查結(jié)果。這個(gè)標(biāo)簽從左到右依次排開(kāi)的風(fēng)格很像Fiori和ABAP Webdynpro。
可以看見(jiàn)前文介紹的Email有效性檢查和是否是首單的檢查結(jié)果。
Email檢查結(jié)果:客戶的郵箱地址有效。
首單檢查返回的分?jǐn)?shù)是100,根據(jù)當(dāng)前Commerce配置文件這個(gè)結(jié)果被認(rèn)定為首單。具體配置文件的位置和本文主題無(wú)關(guān),這里不詳述。
現(xiàn)在再回到Kyma的Lambda函數(shù)編輯器里,將之前注釋掉的從Marketing Cloud獲取聯(lián)系人地址的函數(shù)以及調(diào)用SAP云平臺(tái)的Business Partner服務(wù)的函數(shù)重新啟用:
啟用之后,保存,然后進(jìn)入Service Catalog。這個(gè)組件也是Kubernetes提供的標(biāo)準(zhǔn)組件,Kyma基于它做了增強(qiáng),能夠?qū)⒌谌降姆?wù)導(dǎo)入進(jìn)來(lái)給Kyma的Lambda函數(shù)消費(fèi)。
這里能看到已經(jīng)導(dǎo)入了很多第三方服務(wù)。我們其實(shí)可以把這個(gè)界面類(lèi)比成SAP云平臺(tái)的Service Market Place。
選擇SAP云平臺(tái)的Business Partner Service:
接下來(lái)的步驟和我們?cè)赟AP云平臺(tái)上消費(fèi)一個(gè)服務(wù)類(lèi)似,首先創(chuàng)建一個(gè)服務(wù)實(shí)例:
然后再基于這個(gè)服務(wù)實(shí)例創(chuàng)建一個(gè)綁定,
綁定類(lèi)型設(shè)置成Function Binding,綁定的目標(biāo)設(shè)置成之前編輯好的Lambda函數(shù)。
現(xiàn)在再下一個(gè)單試試,下單客戶選擇同第一個(gè)訂單相同的客戶:
這一次,這個(gè)第二次下的訂單的Fraud檢查報(bào)告,同第一個(gè)訂單相比就多了兩條記錄:
首先看第二條首單檢查的記錄,得分為0,和我們期望的結(jié)果一致,因?yàn)檫@已經(jīng)不是該客戶第一次下單了:
從Marketing Cloud的服務(wù)返回的檢查結(jié)果:
從SAP云平臺(tái)的Business Partner服務(wù)返回的結(jié)果可以看出,下單的這個(gè)客戶不存在一個(gè)對(duì)應(yīng)的Business Partner。
本文這個(gè)例子,在Commerce下單流程中通過(guò)Kyma去訪問(wèn)Marketing Cloud和SAP云平臺(tái)上的服務(wù)進(jìn)行額外的Fraud檢查,業(yè)務(wù)上來(lái)說(shuō)可能意義不大,更多的是從技術(shù)的角度出發(fā),介紹了這種基于微服務(wù)架構(gòu)的訂單編排增強(qiáng)方式。
祝大家新年快樂(lè)!?
相關(guān)閱讀
站在巨人肩膀上的牛頓:Kubernetes和SAP Kyma
在Kubernetes上運(yùn)行SAP UI5應(yīng)用(上)
在Kubernetes上運(yùn)行SAP UI5應(yīng)用(下)
要獲取更多Jerry的原創(chuàng)文章,請(qǐng)關(guān)注公眾號(hào)"汪子熙":
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/33125.html
摘要:當(dāng)然,不同的產(chǎn)品,對(duì)訂單增強(qiáng)的實(shí)現(xiàn)方式也各不相同。在世界里,想對(duì)訂單處理流程做增強(qiáng),同之前介紹的相比,相對(duì)來(lái)說(shuō)受的限制要多一些。首單檢查返回的分?jǐn)?shù)是,根據(jù)當(dāng)前配置文件這個(gè)結(jié)果被認(rèn)定為首單。 盡管有一萬(wàn)個(gè)舍不得,2018年還是無(wú)可挽回地離我們遠(yuǎn)去了。 唯有SAP成都研究院的同事和我去年在網(wǎng)絡(luò)上留下的這些痕跡,能證明2018年我們?cè)?jīng)很認(rèn)真地去度過(guò)每一天: SAP成都研究院2018年總共...
摘要:當(dāng)然,不同的產(chǎn)品,對(duì)訂單增強(qiáng)的實(shí)現(xiàn)方式也各不相同。在世界里,想對(duì)訂單處理流程做增強(qiáng),同之前介紹的相比,相對(duì)來(lái)說(shuō)受的限制要多一些。首單檢查返回的分?jǐn)?shù)是,根據(jù)當(dāng)前配置文件這個(gè)結(jié)果被認(rèn)定為首單。 盡管有一萬(wàn)個(gè)舍不得,2018年還是無(wú)可挽回地離我們遠(yuǎn)去了。 唯有SAP成都研究院的同事和我去年在網(wǎng)絡(luò)上留下的這些痕跡,能證明2018年我們?cè)?jīng)很認(rèn)真地去度過(guò)每一天: SAP成都研究院2018年總共...
摘要:該標(biāo)準(zhǔn)主要分為運(yùn)行時(shí)標(biāo)準(zhǔn)和容器鏡像標(biāo)準(zhǔn)。事件注冊(cè)好之后,使用微服務(wù)架構(gòu)實(shí)現(xiàn)事件的監(jiān)聽(tīng)者消費(fèi)者。 大家好,今天非常高興能給大家做一個(gè)關(guān)于Kyma的技術(shù)分享。這個(gè)session的audience主要是針對(duì)使用咱們成都研究院使用Java和nodejs等技術(shù)棧做微服務(wù)開(kāi)發(fā)的同事們。對(duì)于在ABAP netweaver上做SAP傳統(tǒng)開(kāi)發(fā)的同事們來(lái)說(shuō),這個(gè)session可以讓大家開(kāi)闊一下眼界。 這是...
摘要:該標(biāo)準(zhǔn)主要分為運(yùn)行時(shí)標(biāo)準(zhǔn)和容器鏡像標(biāo)準(zhǔn)。事件注冊(cè)好之后,使用微服務(wù)架構(gòu)實(shí)現(xiàn)事件的監(jiān)聽(tīng)者消費(fèi)者。 大家好,今天非常高興能給大家做一個(gè)關(guān)于Kyma的技術(shù)分享。這個(gè)session的audience主要是針對(duì)使用咱們成都研究院使用Java和nodejs等技術(shù)棧做微服務(wù)開(kāi)發(fā)的同事們。對(duì)于在ABAP netweaver上做SAP傳統(tǒng)開(kāi)發(fā)的同事們來(lái)說(shuō),這個(gè)session可以讓大家開(kāi)闊一下眼界。 這是...
摘要:該標(biāo)準(zhǔn)主要分為運(yùn)行時(shí)標(biāo)準(zhǔn)和容器鏡像標(biāo)準(zhǔn)。事件注冊(cè)好之后,使用微服務(wù)架構(gòu)實(shí)現(xiàn)事件的監(jiān)聽(tīng)者消費(fèi)者。 大家好,今天非常高興能給大家做一個(gè)關(guān)于Kyma的技術(shù)分享。這個(gè)session的audience主要是針對(duì)使用咱們成都研究院使用Java和nodejs等技術(shù)棧做微服務(wù)開(kāi)發(fā)的同事們。對(duì)于在ABAP netweaver上做SAP傳統(tǒng)開(kāi)發(fā)的同事們來(lái)說(shuō),這個(gè)session可以讓大家開(kāi)闊一下眼界。 這是...
閱讀 3223·2021-11-23 10:09
閱讀 2063·2021-10-26 09:51
閱讀 978·2021-10-09 09:44
閱讀 3903·2021-10-08 10:04
閱讀 2744·2021-09-22 15:14
閱讀 3624·2021-09-22 15:02
閱讀 1055·2021-08-24 10:03
閱讀 1726·2019-12-27 12:14