日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ABAP中的subroutine和function module

發(fā)布時(shí)間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ABAP中的subroutine和function module 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 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í)參,子程序的變量就是形參。

DATA: A type ...,B type ...,C type .... Perform xyz using A B C.Form xyz Using P1 type ...P2 type...P3 type... Endform.

2020.03.29再來(lái)補(bǔ)充:
對(duì)于從caller傳遞實(shí)參給子例程形參的方式三種:

  • by value : 參數(shù)值是復(fù)制給子例程的。復(fù)制完了就跟實(shí)參沒(méi)關(guān)系了。我倆是獨(dú)立自主的了,互不干擾,我改了也不會(huì)改你外面的參數(shù)。
  • PERFORM mysub USING myvar1.FORM mysub USING VALUE(subvar1) TYPE i. .. ENDFORM.
  • by reference:這個(gè)意思是只把我caller的參數(shù)內(nèi)存地址(parameter memory location)給子例程,那么子例程里做了任何能更改我caller的參數(shù)的,都會(huì)直接把我改掉。
  • PERFORM mysub USING [or CHANGING] myvar1.FORM mysub USING [or CHANGING] subvar1 TYPE i. .. ENDFORM.
  • by value&result: 把這個(gè)放最下面,其實(shí)這個(gè)是前兩者的混合體可以說(shuō)。caller會(huì)把參數(shù)copy給子例程,也就是還是用value(),但是子例程來(lái)跑,如果沒(méi)有錯(cuò),那么子例程把結(jié)果返回給caller并且改掉它的參數(shù)。如果有錯(cuò),那就不改它的參數(shù)。所以這里用的是CHANGING。
  • PERFORM mysub CHANGING myvar1.FORM mysub CHANGING value(subvar1) TYPE ANY. .. ENDFORM.

    當(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ù),我需要用它的變量值。

    Perform xyz using A B C. Form xyz Using VALUE(P1) type ...VALUE(P2) type...VALUE(P3) type... Endform.

    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)也不吃虧。

    INCLUDE ZFBI_TESTTOP . " Global Data* INCLUDE ZFBI_TESTO01 . " PBO-Modules * INCLUDE ZFBI_TESTI01 . " PAI-Modules INCLUDE ZFBI_TESTF01 . " FORM-Routines *PARAMETERS:pa_01 type int4, * pa_02 type int4. PARAMETERS: o_carrid TYPE S_CARR_ID. DATA: o_cityfr type S_FROM_CIT.START-OF-SELECTION.Perform get_airline_detailUSING o_carrid /*就是程序運(yùn)行正確就改掉*/CHANGING o_cityfr. /*這個(gè)是地址傳遞,直接改*/write: / o_cityfr. *&---------------------------------------------------------------------* *& Include ZFBI_TESTF01 *&---------------------------------------------------------------------* FORM get_airline_detailUsing VALUE(v_carrid) type S_CARR_IDCHANGING v_cityfr type S_FROM_CIT.types: begin of ty_cust.INCLUDE STRUCTURE spfli.types: CARRNAME type S_CARRNAME,end of ty_cust.DATA: wa_scarr TYPE SCARR,it_scarr type table of SCARR,it_cust type table of ty_cust,wa_cust type ty_cust.select * into CORRESPONDING FIELDS OF table it_scarr from SCARR.select * from spfli into CORRESPONDING FIELDS OF table it_cust where carrid = v_carrid.LOOP at it_cust into wa_cust.read table it_scarr into wa_scarr WITH KEY carrid = wa_cust-carrid.if sy-subrc = 0.wa_cust-carrname = wa_scarr-carrname.endif.write: / wa_cust-CITYFROM .ENDLOOP. ENDFORM.

    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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 欧美激情黄色 | 97人人在线 | 肉大捧一进一出免费视频 | 亚洲免费av片 | 在线观看av一区二区 | 日韩经典av | 日本夜夜操 | 免费看黄视频的网站 | 亚洲av成人无码一二三在线观看 | 国产sm主人调教女m视频 | 操你啦免费视频 | 欧美精品一级二级三级 | 91精品啪在线观看国产 | 日韩福利一区二区 | 免费黄色的网站 | 美女隐私直播 | 麻豆成人网 | 就去吻综合 | 日本 片 成人 在线 九色麻豆 | 伊人春色av | 久久无码视频一区 | 综合亚洲色图 | 97精品在线| 大地资源在线观看免费高清版粤语 | 国产色一区二区 | 日本狠狠爱| www.自拍偷拍 | 蜜臀久久精品久久久久久酒店 | 天堂网站 | 男女男精品网站 | 欧美日韩不卡 | 99精品一区二区三区无码吞精 | 波多野结衣av片 | 亚州色图欧美色图| 成年人网站在线观看视频 | 高h全肉污文play带道具 | 天堂精品一区二区三区 | 18+视频在线观看 | 日韩高清在线观看 | 亚洲免费观看高清在线观看 | 视频国产一区 | www.69av.com | 黄色伊人 | 男女作爱网站 | 天天干天天色天天射 | 欧美日韩国产亚洲沙发 | 欧美壮男野外gaytube | 正在播放经典国语对白 | 黑人巨大精品人妻一区二区 | 放荡的少妇2欧美版 | 亚洲少妇中文字幕 | 哪个网站可以看毛片 | 日韩高清影视在线观看 | 欧美性生交xxxxx久久久缅北 | 国产高清精品一区二区三区 | 欧美日韩乱 | 欧洲丰满少妇做爰 | 91成人在线观看高潮 | 免费网站观看www在线观看 | 欧美激情久久久 | 国产成人+综合亚洲+天堂 | a免费观看| 天天综合色 | 韩日一区二区 | 色视频线观看在线播放 | 久久网站av | 亚洲综合图片区 | 亚洲制服一区 | 国产区在线观看视频 | 国产香蕉视频 | 亚洲精品小说 | 国产日产亚洲精品 | 强乱中文字幕 | 欧美性猛交 xxxx | 亚洲免费激情视频 | 日韩脚交footjobhd| 熟妇毛片 | 亚洲精品一区二区三区区别 | 欧美美女性生活 | 啪啪网站视频 | 森泽佳奈在线播放 | 欧美成人r级一区二区三区 中文无码一区二区三区在线观看 | 欧美性爱精品一区 | 青青草福利视频 | 黄色av网站免费在线观看 | 精品人妻无码专区在线 | 亚洲人人插| 欧美性受xxx黑人xyx性爽 | 少女与动物高清版在线观看 | 在线观看免费高清 | 久久久一级片 | 全程偷拍露脸中年夫妇 | 色呦呦免费观看 | 久久精品视频1 | 色妇av| 天天躁日日躁狠狠躁免费麻豆 | 欧美手机在线视频 | 欲乱美女| 极品探花在线观看 |