ABAP中的subroutine和function module
文章目錄
- 1. 子程序變量(參數(shù))類(lèi)型
- 1.1 by value
- 1.2 by value & result
- 1.3 by reference
- 2. function module
如果我不是一步走到頭。那我加個(gè)模塊化的子程序。
這個(gè)模塊化的子程序,是個(gè)獨(dú)立的小個(gè)體,可以被重復(fù)使用。
也就是給它的參數(shù)和它給出的參數(shù)不一樣。
1. 子程序變量(參數(shù))類(lèi)型
在整個(gè)程序里,定義參數(shù)變量可以在主程序,也可以在子程序。主程序就是大家都能用,子程序就是只有我自己個(gè)能用。
當(dāng)我在主程序中定義了變量,而我要把主程序的變量傳遞給子程序啊,我的主程序變量就是實(shí)參,子程序的變量就是形參。
2020.03.29再來(lái)補(bǔ)充:
對(duì)于從caller傳遞實(shí)參給子例程形參的方式三種:
當(dāng)然傳遞給子例程的參數(shù)的數(shù)據(jù)類(lèi)型,是由caller決定的咯。
所以你子例程里面,參數(shù)類(lèi)型要么沒(méi)有,要么TYPE ANY。要么就是為了看起來(lái)方便,給一個(gè)TYPE的。
1.1 by value
這種變量的定義語(yǔ)法就是Using VALUE(P1) 變量在VALUE后面的括號(hào)里。
就是說(shuō)只把主程序?qū)崊⒌闹的眠^(guò)來(lái)到子程序里用。但是我這里使用的只是實(shí)參的值,不會(huì)再改回實(shí)參里去的。
主程序讓我執(zhí)行一些任務(wù),我需要用它的變量值。
1.2 by value & result
主程序讓我來(lái)基于一些操作,條件來(lái)更改一些值。我需要把更改后的值再傳回主程序去。
Perform xyz Using/changing A B C. Form xyz Changing VALUE(P1) type ...VALUE(P2) type...VALUE(P3) type... Endform.或者是這樣:用Using,但是沒(méi)有VALUE和括號(hào)
Form xyz Using P1 type ...P2 type...P3 type... Endform.1.3 by reference
這種呢,就是形參直接指向?qū)崊?#xff0c;你在子程序里用的形參,實(shí)際上會(huì)直接分配到實(shí)參。
Perform xyz changing A B C. Form xyz Changing P1 type ...P2 type...P3 type... Endform.SAP給的解釋是subroutine已經(jīng)過(guò)時(shí)了。。。我覺(jué)得能看懂還是很必要的。不過(guò)也不難。主要就是三種調(diào)用方法。
多學(xué)點(diǎn)也不吃虧。
2. function module
也許form過(guò)時(shí)了,但是function module還沒(méi)有過(guò)時(shí)吧。
subroutine一般就是在一個(gè)程序內(nèi)部進(jìn)行調(diào)用,你看到的form一般就放在在這個(gè)程序的F的include里面。那么對(duì)于一個(gè)很大的程序,這么調(diào)用是可以的,因?yàn)槟憧赡艹绦蛑行枰{(diào)用好幾次。或者為了看起來(lái)方便,給放到一個(gè)include里面去。
但是function module是可以在不同的程序間調(diào)用的,哪里你都可以調(diào)用啊。
function module是附在一個(gè)function group里的。只要是這個(gè)SAP 系統(tǒng)里的程序,都可以調(diào)用function module。
SAP也提供了大量的function module。
誰(shuí)call這個(gè)function module呢,誰(shuí)可以提供import進(jìn)這個(gè)function module的數(shù)據(jù)。export呢就是把結(jié)果從function module給export出去。
changing 就是一邊導(dǎo)入,一邊導(dǎo)出。
table呢和changing是一樣的,就是它里面只能是內(nèi)表。
exceptions就是來(lái)rasing error的。
function module可以在SAP系統(tǒng)內(nèi)部任何程序被調(diào)用,同時(shí)如果是個(gè)可以在程序外調(diào)用的function module,那它就是一個(gè)remote function call,RFC。
填完了import和export,在source code里面你就能看到了:
在exceptions里面也填上:
好了,來(lái)這里激活,死活激活不了了:doesn’t begin with function pool
這鬼玩意還給我報(bào)了個(gè)ABAP的runtime error,光看這個(gè)error message,實(shí)在看不懂講的什么鬼東西。
哎,快下班了,心情急躁的很。
錯(cuò)誤里頭還是個(gè)德文的:指令缺失,或者是程序類(lèi)型為include。
反正是不知所云。
最后才發(fā)現(xiàn)了根本原因,因?yàn)槲沂沁B帶功能組一起建的,沒(méi)激活那個(gè),就來(lái)直接激活function module。就激活不起來(lái)。
鬼玩意干啥啥都要激活。
激活還讓我找了半天。
激活后,這個(gè)function module就可以被其他的program調(diào)用了。
那么怎么調(diào)用呢?
調(diào)用的話好歹得告訴人家你用什么參數(shù)跑吧。
就是這么個(gè)調(diào)法。寫(xiě)寫(xiě)玩還是很有意思的。代碼這玩意,教是教不會(huì)的,只能自己去寫(xiě),去用。
總結(jié)
以上是生活随笔為你收集整理的ABAP中的subroutine和function module的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python视频分段_Python玩转视
- 下一篇: 蒲公英4G路由配置