日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 香蕉视频在线看 | 欧美69精品久久久久久不卡 | 欧美精品一区二区免费看 | 成人国产精品久久 | 国产18p | 8x8ⅹ成人永久免费视频 | 日本色视| 一本色道久久加勒比精品 | 国产成人在线观看免费网站 | 寡妇激情做爰呻吟 | www,超碰 | 美女主播在线观看 | 在线播放成人 | 欧美狠狠| 日韩久久久久久 | 午夜免费剧场 | 欧美日韩乱 | 国产日本欧美在线观看 | 久啪视频 | 色先锋av资源 | 黑人和白人做爰 | 天堂在线视频观看 | 可以免费看污视频的网站 | 欧美亚洲国产日韩 | 热播之家 | av中文资源| 日韩日b视频 | 欧美性教育视频 | 国产精品自拍网 | 国产精品免费一区二区区 | 999av| 成人午夜视频一区二区播放 | 麻豆视 | 夜夜春av| 男人的天堂成人 | 一区二区三区日韩视频 | 国产污视频在线 | 黑帮大佬和我的365日第二部 | 黄wwwww| 中文字幕一区二区三区电影 | 欧美不卡三区 | 国产一区二区三区视频免费在线观看 | 亚洲社区一区二区 | 免费无码毛片一区二区app | 日本一区二区三区视频免费看 | 日本呦呦| 免费网站在线观看视频 | 这里只有精品在线观看 | 欧美伦理片网站 | 日韩欧美性视频 | 国产精品国产 | 中文字幕在线观看精品 | 风间由美一区二区 | 麻豆免费在线播放 | 东北少妇不带套对白 | 五月天婷婷丁香 | 日本a√在线观看 | 黄色成人av在线 | 成人在线精品 | 男女视频免费看 | 日韩毛片在线播放 | 激情综合久久 | 国产精品视频一二三区 | 久久99精品国产麻豆婷婷洗澡 | 久久久久人 | 欧美色视频一区二区三区 | 波多野结衣中文字幕在线播放 | 欧美日韩久久 | 欧美成人aaa片一区国产精品 | 中文字幕天堂在线 | 久久午夜电影网 | 日日摸日日添日日碰9学生露脸 | 护士人妻hd中文字幕 | 精品国产1区2区 | 麻豆出品| 男欢女爱久石 | 波多野结衣av无码 | 日韩久久久久久 | ass极品国模人体欣赏 | 97国产一区 | 色屁屁影院www国产高清麻豆 | 无码精品国产一区二区三区免费 | 国产乱来| 日韩黄片一区二区三区 | 久久精品色妇熟妇丰满人妻 | 国产一极毛片 | 青青草原成人 | 91国产视频在线播放 | 天天舔天天干天天操 | 国产欧美日韩成人 | 三级在线免费 | 先锋av资源 | 五月婷婷av | 深夜av在线| 久久久99精品国产一区二区三区 | 欧美日韩成人精品 | 亚洲一区,二区 | 操极品女神| 欧美做爰猛烈床戏大尺度 |