Finding Enqueue/Dequeue functions

Hi,
Is there an easy way to find the enqueue/dequeue lock functions for a specific table?
I tried to find the enqueue/dequeue functions for table LIKP. It took me a while to find it, but it turns out the name is ENQUEUE_EVVBLKE.
You'd think that the table name would be incorporated into the function name to make it easy to find?!
Does anyone have a suggestion?
Thx.
Andy

Yes bro most of the times the table or field names would be in the Function module name.
Raghav

Similar Messages

  • Finding enqueue dequeue rate

    Hi,
    How to find enqueue and dequeue rate in Oracle Advanced Queue?
    Please post if there is any SQL query to find enqueue per second, dequeue per second.
    Regards,
    Guru

    Hello,
    Can you please show me how to run AWR report so that it generates AQ stats you talked about ?The AWR report will be started using the sql script "awrrpt.sql" ($ORACLE_HOME/rdbms/admin/awrrpt.sql).
    You will find all details in the original Oracle documentation, keyword AWR.
    In the generated report you will find two sections concerning AQ (including a list of all your defined AQs):
    ==> Persistent Queues
    Ordered by Queue Name
    indicates queue (re)started between Begin/End snaps
    %Exp Msgs - % of msgs enqueued with expiry
    %Delay Msgs - % of msgs enqueued with delay
    %Trasf Time - % of Enqueue time spent in transformation
    %Eval Time - % of Enqueue time spent in rule evaluation
    ==> Persistent Queues Rate
    Ordered by Queue Name
    indicates queue (re)started between Begin/End snaps
    Greetings
    WoG

  • Issue with Enqueue / Dequeue

    We are working on a scenario where data is got into SAP through Web methods to create Sales orders.
    If we were to use Enqueue / Dequeue function while doing this would the web methods connection hold till the process is complete or would this time out in the middle?
    Is there any time out period for the connection with web methods, and if so how can it can be reset to an alternate value

    Hi,
    in ITS if you click on object, you can see the parmaters like
    ~TRANSACTION
    <b>~TIMEOUT</b>
    give more time for Time out parameter, that should solve the problem.
    Regards
    Vijay D T T.

  • 2515 Locking FMs to Enqueue/Dequeue/ Which one to use?

    I know this question is redundant, and has been responded to a million times....all differently. However, being their are 2,515 function modules to choose from, what are the best choices for locking and unlocking a custom database table?
    And, why are their 2,515 of them?
    I take that back....many many more!
        Thank-You
    Edited by: Tom Matys on Sep 23, 2011 12:15 PM

    Hi
    I think the best way is to create a new lock object for every custom tables.
    Every table should have an own lock object (so own fms to Enqueue/Dequeue) because it makes sure the same lock object is not used for another table at the same time.
    If the same lock object is used for many tables it can risk to find a certain record locked although nobody locks it really.
    Max

  • Oracle dequeue function is not working through different user.

    I created an Oracle queue, an anonymous block to enqueue messages in it and a dequeue function. when i use the dequeue function with the same user i've created queue its working fine, but when i am executing same function with different user it is returning null.
    Please see the code i've used ----
    -- Create q_table
    begin
    DBMS_AQADM.create_queue_table (
    queue_table => 'QUEUE_QTAB' , queue_payload_type => 'SYS.XMLTYPE'
    ,multiple_consumers => TRUE, message_grouping => DBMS_AQADM.none);
    end;
    --Create queue:-
    begin
    DBMS_AQADM.create_queue (
    queue_name => 'QUEUE_Q', queue_table => 'QUEUE_QTAB');
    end;
    -- Start queue:-
    begin
    dbms_aqadm.start_queue (
    queue_name => 'QUEUE_Q');
    end;
    --Add subscriber:-
    begin
    DBMS_AQADM.add_subscriber (
    queue_name  => 'QUEUE_Q',
    subscriber  => sys.aq$_agent ('B_USER', NULL, NULL));
    end;
    GRANT SELECT ON A_USER.QUEUE_QTAB  TO DBMONITOR;
    GRANT SELECT ON A_USER.QUEUE_QTAB TO IDSCORE;
    GRANT SELECT ON A_USER.QUEUE_QTAB TO IDSREAD;
    GRANT SELECT ON A_USER.QUEUE_QTAB TO IDS_READ;
    -- View Creation:-
    CREATE VIEW QUEUE_QTAB _VW
    AS
      SELECT * FROM QUEUE_QTAB
      WHERE Q_NAME = QUEUE_Q';
    Grants:-
    GRANT SELECT ON A_USER.QUEUE_QTAB _VW TO B_USER;
        --Enqueue
        DECLARE
       enqueue_options     dbms_aq.enqueue_options_t;
       message_properties  dbms_aq.message_properties_t;
       message_handle      RAW(16);
       message           XMLTYPE;
    BEGIN
       message := XMLType('<?xml version="1.0"?><tns:ISO8583-87 xmlns:tns="http://www.tsys.com/prime/online/iso8583"><I000>0120</I000><I002>491693******9989</I002><I003>280000</I003><I004>000000003000</I004><I006>0000091050.23</I006><I007>0406131721</I007><I011>039622</I011><I012>094121</I012><I013>0224</I013><I018>5999</I018><I022>0000</I022><I032>06123496</I032><I033>06198745</I033><I037>123456787012</I037><I038>026446</I038><I039>00</I039><I041>A1234567</I041><I042>CARD ACCEPTER  </I042><I043>ACQUIRER NAME            CITY NAME    UK</I043><I048>1001O</I048><I049>978</I049><I051>826</I051><I056>37120300692340000012300004800456005600</I056><I102>0890220150</I102></tns:ISO8583-87>');
       dbms_aq.enqueue(queue_name => 'QUEUE_Q',          
             enqueue_options      => enqueue_options,      
             message_properties   => message_properties,    
             payload              => message,              
             msgid                => message_handle);
       COMMIT;
    end;
    Dequeuing is actually done through two function   fn_dequeue function calls fn_dequeue_payment_msg, both are under different packages
    fn_dequeue---
    FUNCTION fn_dequeue (p_consumer_i IN VARCHAR2 DEFAULT USER)
          RETURN CLOB
       AS
          v_msg          xmltype;
          v_msg_found    BOOLEAN := FALSE;
          v_return       clob;
          c_procedure_name constant varchar2 (100) := 'FN_DEQUEUE';
          v_locn         idsc_globals_pck.styp_locn;
          v_q_name_i varchar2(35) := 'QUEUE_Q';
       begin
            v_locn := '80';
          idsc_lib_pck.pr_debug (
                                 p_program_name => c_procedure_name, p_ids_req_id => NULL
                                ,p_locn => v_locn, p_debug_message => 'Function called by ' || USER
           v_msg_found :=
             idsph_queues_pck.fn_dequeue_payment_msg (
                                                      p_q_name_i => v_q_name_i , p_message_o => v_msg, p_consumer_i => p_consumer_i
             v_locn := '90';
          if v_msg_found then
             v_locn := '100';
             idsc_lib_pck.pr_debug (
                                    p_program_name => c_procedure_name, p_ids_req_id => NULL
                                   ,p_locn => v_locn, p_debug_message => 'Message found'
             v_return := v_msg.getstringval ();
          end if;
             v_locn := '110';
          idsc_lib_pck.pr_debug (
                                 p_program_name => c_procedure_name, p_ids_req_id => NULL
                                ,p_locn => v_locn, p_debug_message => 'Returning'
          RETURN v_return;
       EXCEPTION
          WHEN OTHERS THEN
             idsc_errors_pck.pr_raise_app_error (
                                                 p_proc_name_i => c_procedure_name, p_locn_i => v_locn, p_err_msg_i => SQLERRM
       END fn_dequeue_iso8583;
    fn_dequeue_payment_msg-----
    FUNCTION fn_dequeue_payment_msg (
                                        p_q_name_i IN VARCHAR2
                                       ,p_consumer_i IN VARCHAR2 DEFAULT USER
                                       ,p_message_o   OUT XMLTYPE
          RETURN BOOLEAN
       IS
          v_dequeue_options DBMS_AQ.dequeue_options_t;
          v_message_properties DBMS_AQ.message_properties_t;
          v_message_handle RAW (16);
          v_message      XMLTYPE;
          e_no_messages exception;
          PRAGMA EXCEPTION_INIT (e_no_messages, -25228);
          c_procedure_name CONSTANT VARCHAR2 (100) := 'IDSPH_QUEUES_PCK.FN_DEQUEUE_PAYMENT_MESSAGE';
          v_locn         idsc_globals_pck.styp_locn;
       BEGIN
          v_locn := '10';
          idsc_lib_pck.pr_debug (
                                 p_program_name => c_procedure_name, p_ids_req_id => NULL
                                ,p_locn => v_locn, p_debug_message => 'Setting dequeue options'
          v_dequeue_options.wait := dbms_aq.no_wait;      
          v_locn := '20';
          v_dequeue_options.navigation := DBMS_AQ.first_message;
          v_locn := '30';
          v_dequeue_options.consumer_name := p_consumer_i;
          v_locn := '40';
          idsc_lib_pck.pr_debug (
                                 p_program_name => c_procedure_name, p_ids_req_id => NULL
                                ,p_locn => v_locn, p_debug_message => 'Dequeuing next message'
                                idsc_lib_pck.pr_debug (
                                 p_program_name => c_procedure_name, p_ids_req_id => NULL
                                ,p_locn => v_locn, p_debug_message => 'p_consumer_i' || p_consumer_i                         
          DBMS_AQ.dequeue (
                           queue_name => p_q_name_i, dequeue_options => v_dequeue_options, message_properties => v_message_properties
                          ,payload => v_message, msgid => v_message_handle
          v_locn := '50';
          idsc_lib_pck.pr_debug (
                                 p_program_name => c_procedure_name, p_ids_req_id => NULL
                                ,p_locn => v_locn, p_debug_message => 'Dequeue successful'
          p_message_o := v_message;
          RETURN TRUE;
       EXCEPTION
          WHEN e_no_messages THEN
             -- Not an error just no messages currently in queue so return success
             v_locn := '160';
             idsc_lib_pck.pr_debug (
                                 p_program_name => c_procedure_name, p_ids_req_id => NULL
                                ,p_locn => v_locn, p_debug_message => SQLERRM
             RETURN FALSE;
          WHEN OTHERS THEN
             idsc_errors_pck.pr_raise_app_error (
                                                 p_proc_name_i => c_procedure_name, p_locn_i => v_locn, p_err_msg_i => SQLERRM
       END fn_dequeue_payment_msg;
    fn_dequeue function returns null while executing from B_USER , while same functions works fine for A_USER, please suggest

    I got the error , we need append schema name where queue is created before assigning it to a variable, this problem is now resolved.
    fn_dequeue---
    FUNCTION fn_dequeue (p_consumer_i IN VARCHAR2 DEFAULT USER)
          RETURN CLOB
       AS
          v_msg          xmltype;
          v_msg_found    BOOLEAN := FALSE;
          v_return       clob;
          c_procedure_name constant varchar2 (100) := 'FN_DEQUEUE';
          v_locn         idsc_globals_pck.styp_locn;
          v_q_name_i varchar2(35) := 'A_USER.QUEUE_Q';
       begin
            v_locn := '80';
          idsc_lib_pck.pr_debug (
                                 p_program_name => c_procedure_name, p_ids_req_id => NULL
                                ,p_locn => v_locn, p_debug_message => 'Function called by ' || USER

  • Query on sap locks(ENQUEUE/DEQUEUE)

    Hi All,
    should the sap locks ENQUEUE/DEQUEUE need to be used  for all the updation/insertion  of records ino the table?
    Please confirm.Should this locking technique be used even for insertion of records into the table?
    Regards,
    Pra.

    Hi,
    Lock objects are use in SAP to avoid the inconsistancy at the time of data is being insert/change into database.
    SAP Provide three type of Lock objects. 
    - Read Lock(Shared Locked)
       protects read access to an object. The read lock allows other  transactions read access but not write access to 
       the locked area of  the table
    - Write Lock(exclusive lock)
       protects write access to an object. The write lock allows other  transactions neither read nor write access to 
        the locked area of the  table.
    - Enhanced write lock (exclusive lock without cumulating)
      works like a write lock except that the enhanced write lock also  protects from further accesses from the 
      same transaction.
    You can create a lock on a object of SAP thorugh transaction SE11 and enter any meaningful name start with EZ Example EZTEST_LOCK.
    Use: you can see in almost all transaction when you are open an object in Change mode SAP could not allow to any other user to open the same object in change mode.
    Example: in HR when we are enter a personal number in master data maintainance screen SAP can't allow to any other user to use same personal number for changes.
    Technicaly:
    When you create a lock object System automatically creat two function module.
    1. ENQUEUE_<Lockobject name>. to insert the object in a queue.
    2. DEQUEUE_<Lockobject name>. To remove the object is being queued through above FM.
    You have to use these function module in your program.
    Hope this will give a basic idea.

  • How to find Enqueu/Dequue rate in a QUEUE?

    How to find Enqueu/Dequue rate in a QUEUE?

    Hi,
    You can find some useful statistic information about the number of messages in different states you van query v$aq view. I don't what specifically you mean with "Enqueue/Dequeue rate"
    SELECT  A.OWNER,
            A.NAME,
            A.QUEUE_TYPE,
            A.QUEUE_TABLE,
            A.RETENTION,
            A.ENQUEUE_ENABLED,
            A.DEQUEUE_ENABLED,
            B.WAITING,
            B.READY,
            B.EXPIRED,
            B.TOTAL_WAIT,
            B.AVERAGE_WAIT
    FROM  DBA_QUEUES A,
          V$AQ B
    WHERE A.QID = B.QID
    AND   A.OWNER = 'USER'Regards,

  • Material Enqueue & Dequeue

    I hav designed a new application for store i wish to enqueue & dequeue  materials which store persons are using.
    So how can this be done.Please guide once i open any material in my applcation its locked untill i come out my application.I wishto unclock as my processing is over.
    Pls guide whch FM to use.

    hi,
    Create a lock object from SE11 by giving the name
    lock object : ezlock_material.
    call the function module enqueu_ezlock  in  th loop to which to all the materials to lock.
    to lock the material
    call the function module dequeu_ezlock  in  th unloop to which to all the materials to unlock.
    to unlock the material.
    Regards,
    Madhavi

  • Enqueue/Dequeue - Locking/Unlocking object

    Hi all,
    Please help me working with this enqueue/dequeue command. What I'm trying to do is to lock a Service Order. My requirement is to do a BDC for the Service Order Settlement Rule. So after hitting SAVE, a secondary process will be kicked off to perform my BDC for the same order. Now what Im doubting is that what if user re-enter the same Service Order again so quick. So my BDC program will not be performed immediately since it will be locked by the usser.
    So my idea is to lock it first while my BDC program is still running. Any help please? Thanks.

    Nope. Just 1 BDC -on my 2nd program only. Or to make it simple, I have modified ZXWOCU07 (IWO10009) to perform/kick off a call function( this is being triggered after hitting on SAVE). And this FM contains my checking if SO is now open for change then do the do the BDC.
    What I'm thinking is to lock first the SO  to block any user from accessing that SO, so it will do the BDC first. But I'm not yet familiar with the locking/unlocking of objects. Please help me on how to use enqueue or locking object.

  • ENQUEUE, DEQUEUE of objects

    Hi all,
    i want to lock sales orders with fm ENQUEUE_EVVBAKE and
    DEQUEUE_EVVBAKE.
    This two fms work fine if i am in the same mode.
    I start the fm ENQUEUE_EVVBAKE from one mode and want to unlock the entries from another mode.
    The fm DEQUEUE_EVVBAKE runs with no errors. But the lock entry in the SM12 still exists.
    Any ideas?
    regards

    Hi
    See this and do accordingly
    Lock objects are use in SAP to avoid the inconsistancy at the time of data is being insert/change into database.
    SAP Provide three type of Lock objects.
    - Read Lock(Shared Locked)
    protects read access to an object. The read lock allows other transactions read access but not write access to
    the locked area of the table
    - Write Lock(exclusive lock)
    protects write access to an object. The write lock allows other transactions neither read nor write access to
    the locked area of the table.
    - Enhanced write lock (exclusive lock without cumulating)
    works like a write lock except that the enhanced write lock also protects from further accesses from the
    same transaction.
    You can create a lock on a object of SAP thorugh transaction SE11 and enter any meaningful name start with EZ Example EZTEST_LOCK.
    Use: you can see in almost all transaction when you are open an object in Change mode SAP could not allow to any other user to open the same object in change mode.
    Example: in HR when we are enter a personal number in master data maintainance screen SAP can't allow to any other user to use same personal number for changes.
    Technicaly:
    When you create a lock object System automatically creat two function module.
    1. ENQUEUE_<Lockobject name>. to insert the object in a queue.
    2. DEQUEUE_<Lockobject name>. To remove the object is being queued through above FM.
    You have to use these function module in your program.
    check this link for example.
    http://help.sap.com/saphelp_nw04s/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
    tables:vbak.
    call function 'ENQUEUE_EZLOCK3'
    exporting
    mode_vbak = 'E'
    mandt = sy-mandt
    vbeln = vbak-vbeln
    X_VBELN = ' '
    _SCOPE = '2'
    _WAIT = ' '
    _COLLECT = ' '
    EXCEPTIONS
    FOREIGN_LOCK = 1
    SYSTEM_FAILURE = 2
    OTHERS = 3
    if sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    endif.
    Normally ABAPers will create the Lock objects, because we know when to lock and how to lock and where to lock the Object then after completing our updations we unlock the Objects in the Tables
    http://help.sap.com/saphelp_nw04s/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
    purpose: If multiple user try to access a database object, inconsistency may occer. To avoid that inconsistency and to let multiple user give the accessibility of the database objects the locking mechanism is used.
    Steps: first we create a loc object in se11 . Suppose for a table mara. It will create two functional module.:
    1. enque_lockobject
    1. deque_lockobject
    before updating any table first we lock the table by calling enque_lockobject fm and then after updating we release the lock by deque_lockobject.
    http://help.sap.com/saphelp_nw04/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
    GO TO SE11
    Select the radio button "Lock object"..
    Give the name starts with EZ or EY..
    Example: EYTEST
    Press Create button..
    Give the short description..
    Example: Lock object for table ZTABLE..
    In the tables tab..Give the table name..
    Example: ZTABLE
    Save and generate..
    Your lock object is now created..You can see the LOCK MODULES..
    In the menu ..GOTO -> LOCK MODULES..There you can see the ENQUEUE and DEQUEUE function
    Lock objects:
    http://www.sap-img.com/abap/type-and-uses-of-lock-objects-in-sap.htm
    http://help.sap.com/saphelp_nw04s/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
    Match Code Objects:
    http://help.sap.com/saphelp_nw2004s/helpdata/en/41/f6b237fec48c67e10000009b38f8cf/content.htm
    http://searchsap.techtarget.com/tip/0,289483,sid21_gci553386,00.html
    See this link:
    http://www.sap-img.com/abap/type-and-uses-of-lock-objects-in-sap.htm
    Check these links -
    lock objects
    Lock Objects
    Lock Objects
    Regards
    Anji

  • How to find the existing function module is used in another function module

    Hi all,
    I created a function module and the same one is called from another function module.
    When I tried to find where the  first function module is used  using  Where-used List , I am getting the message "function module not found in selected areas" .
    Please  guide me what is other method to find whether the function module is used in another one.
    Thanks,
    Vengal Rao.

    hi,
    Go to UTILITIES-> Update Navigation index.
    or go to fucntion group and Generate the Funtion group once.
    it will detect all fucntion modules under that function group.
    regards,
    Rama

  • How to find the Obsolete function module in ECC 6.0

    Hi Guys,
    How we can find the all obsolete function in ECC 6.0, is any T-code to finding the obsolete function modules, or any other way to find.
    Could you please help me.
    Thanks,
    Gourisankar.

    Hi Gouri,
    If you are looking at determining whether a single FM is obsolete or not is by this method:
    Go to FM in SE37 -> Goto Attributes Tab -> General Data section -> look above the Edit Lock field ... where SAP places the release status and date of the FM, if the FM is obsolete, the text Function Obsolete appears
    This is one way of finding out one FM @ a time
    However if you want to check on a mass scale, I dont have a SAP system here hence cant confirm, however, all FMs are stored in TFDIR database table. Please scroll through the fields of the DB table to check whether any field relates to release status or the like. If it does, then from SE16, you can put the value corresponding to "Obsolete" in the field and run to check all FMs.
    Cheers,
    Aditya

  • HT201365 Find My iPhone no longer works for me to know where my wife and children's phones are. In earlier IOS versions, I added my iCloud account to their devices and only had Find My iPhone function active.  Can't do that now; what do I do?

    Before IOS 7, I created an account on my wife and childrens iPhones, iPads and iPod devices with my iCloud account, only having the Find My iPhone function turned on.  It worked great.  Now, with IOS 7, it is not working and I don't have the option to have the Find My iPhone function on my iCloud account on their devices.  Does anyone know how to make this work?  My family loses their devices frequently and I am concerned I won'e be able to help them find them.  Thanks!!

    They only need their main iCloud account to have Find My iPhone on. If your account is not their main account it won't work. Only one account can enable that function on a device. They don't need to have the app on their devices unless you want them to find you.
    If you can see the devices when you log into their accounts on your Find My iPhone app they are being recognized by the app. But as Winston said if they're not turned on, if they are not on a network, cell or wifi, then they will read as offline. This often happens when I look for my wife's phone when she is at work, her wifi system there does not keep the connection active when the device goes to sleep and in some areas of the building there is poor to no cell connection. And sometimes the service just doesn't pick them up for no obvious reason.
    iOS 7 has several annoying glitches right now that hopefully will be resolved soon and this could be one for you. I would try this again by having all the devices in one location , restart all of them, make certain the function is enabled on all of them and that wifi is connected ( if you have a wifi network available ) or that they are connected to a cell network with a strong signal. Then launch the app on your phone and log in with their accounts, their locations should show up.

  • I am trying to synch my ipad to my computer and i have turn off my Find my iPad function.  I have put in my Apple password to do that.  i know my password is correct but it says it is not correct.  How do I fix that?

    i am trying to synch my ipad to my computer and i have turn off my Find my iPad function.  I have put in my Apple password to do that.  i know my password is correct but it says it is not correct.  How do I fix that?

    And I am incorrect...
    Have you ever changed your passcode?
    Try again.   Maybe a typo?

  • Table to find out the function modules used in a particular program

    Hi,
    Is there any standard table to find out the function modules used in a particular program?
    Such as there is a table D010TAB to find out the tables used in a program .

    Hello
    There is no exist such table.
    But try this snippet:
    REPORT ZSEARCH.
    PARAMETERS: P_NAME LIKE D010SINF-PROG.
    DATA: PROGTXT(72) TYPE C OCCURS 0 WITH HEADER LINE.
    DATA: TMP(72) TYPE C OCCURS 0 WITH HEADER LINE.
    DATA: FUNCT TYPE RS38L_FNAM OCCURS 0 WITH HEADER LINE.
    DATA: INCL TYPE RSEUINC OCCURS 0 WITH HEADER LINE.
    CALL FUNCTION 'RS_GET_ALL_INCLUDES'
         EXPORTING PROGRAM    = P_NAME
         TABLES    INCLUDETAB = INCL.
    LOOP AT INCL.
      READ REPORT INCL-MASTER INTO TMP.
      APPEND LINES OF TMP TO PROGTXT.
      REFRESH TMP.
    ENDLOOP.
    READ REPORT P_NAME INTO TMP.
    APPEND LINES OF TMP TO PROGTXT.
    LOOP AT PROGTXT.
      IF PROGTXT CS 'CALL FUNCTION'.
        SEARCH PROGTXT FOR ''''.
        IF SY-SUBRC = 0.
          DO.
            SHIFT PROGTXT LEFT BY 1 PLACES.
            IF PROGTXT(1) = ''''.
              SHIFT PROGTXT LEFT BY 1 PLACES.
              DO.
                SHIFT PROGTXT RIGHT BY 1 PLACES.
                IF PROGTXT+71(1) = ''''.
                  SHIFT PROGTXT RIGHT BY 1 PLACES.
                  CONDENSE PROGTXT.
                  FUNCT = PROGTXT. COLLECT FUNCT. EXIT.
                ENDIF.
              ENDDO.
              EXIT.
            ENDIF.
          ENDDO.
        ENDIF.
      ENDIF.
    ENDLOOP.
    SORT FUNCT.
    LOOP AT FUNCT.
      WRITE: FUNCT. NEW-LINE.
    ENDLOOP.

Maybe you are looking for