Εκμάθηση υποοθονών ABAP: Καλέστε την υποοθόνη εισόδου SAP
⚡ Έξυπνη Σύνοψη
Οι δευτερεύουσες οθόνες ABAP ενσωματώνουν μια οθόνη μέσα σε μια περιοχή μιας άλλης οθόνης κατά τον χρόνο εκτέλεσης, μαζί με τη λογική ροής της. Αυτή η σελίδα εξηγεί τις περιοχές δευτερεύουσας οθόνης, την πρόταση CALL SUBSCREEN σε PBO και PAI, τη μεταφορά δεδομένων και τους περιορισμούς που προκαλούν σφάλματα χρόνου εκτέλεσης.

Τι είναι μια δευτερεύουσα οθόνη στο SAP ABAP;
Πριν διαβάσετε αυτό το σεμινάριο, βεβαιωθείτε ότι γνωρίζετε τι Πρόγραμμα διαλόγου είναι.
- Μια υποοθόνη είναι μια ανεξάρτητη οθόνη που εμφανίζεται σε μια περιοχή μιας άλλης ("κύριας") οθόνης.
- Οι δευτερεύουσες οθόνες σάς επιτρέπουν να ενσωματώνετε μια οθόνη σε μια άλλη κατά το χρόνο εκτέλεσης. Μπορείτε να συμπεριλάβετε πολλές υποοθόνες στην κύρια οθόνη.
- Ο όρος υποοθόνη ισχύει τόσο για την οθόνη που ενσωματώνετε όσο και για την περιοχή στην κύρια οθόνη στην οποία την τοποθετείτε. Αυτό το σεμινάριο αφορά τις περιοχές υποοθόνης. Οι πραγματικές οθόνες που δημιουργούνται μέσω της συναλλαγής SE51, ονομάζονται οθόνες υποοθόνης εάν ορίζονται στα χαρακτηριστικά οθόνης.
- Όταν χρησιμοποιείτε μια υποοθόνη, η λογική ροής της ενσωματωμένης οθόνης είναι επίσης ενσωματωμένη στη λογική ροής της κύριας οθόνης. Ως εκ τούτου, η χρήση υποοθονών σε οθόνες είναι σαν να χρησιμοποιείτε τα περιλαμβάνει σε Προγράμματα ABAP.
Για να χρησιμοποιήσετε μια υποοθόνη, πρέπει να ακολουθήσετε τρία απλά βήματα
- Καθορίστε τις περιοχές υποοθόνης σε μια οθόνη
- Ορίστε τις κατάλληλες οθόνες υποοθόνης
- Συμπεριλάβετε την οθόνη υποοθόνης στην περιοχή της υποοθόνης.
Επίσης, πρέπει να προσαρμόσετε το πλαίσιο της υποοθόνης και της κύριας οθόνης. Πρέπει να το ονομάσετε στο πεδίο όνομα πεδίου.
Επιπλέον, πρέπει επίσης να προσαρμόσετε τα πεδία στην υποοθόνη για να εμφανίζονται στην κύρια οθόνη. Σε περίπτωση που η υποοθόνη οριστεί ότι είναι μεγαλύτερη από τη διαθέσιμη περιοχή στην κύρια οθόνη, θα είναι ορατό μόνο το τμήμα της υποοθόνης που ταιριάζει στη διαθέσιμη περιοχή. Η περιοχή μετριέται πάντα από την επάνω αριστερή γωνία της οθόνης. Ως εκ τούτου, θα πρέπει να προσέχετε επαρκώς κατά τον καθορισμό περιοχών υποοθονών και τη δημιουργία υποοθονών.
ΚΛΗΣΗ ΥΠΟΟΘΟΝΗΣ
ΠΑΡΑΔΕΙΓΜΑ
Για παράδειγμα, εδώ έχουμε ορίσει δύο περιοχές υποοθόνης στην κύρια οθόνη και έχουμε συνδέσει δύο διαφορετικές υποοθόνες σε αντίστοιχες περιοχές. Κάθε φορά που καλείται η κύρια οθόνη, καλείται το PBO της κύριας οθόνης. Αλλά πριν από την εμφάνιση, καλούνται επίσης τα PBO κάθε οθόνης που συνδέονται με περιοχές υποοθόνης στην κύρια οθόνη.
Το στιγμιότυπο οθόνης δείχνει την κύρια οθόνη με τις δύο περιοχές δευτερεύουσας οθόνης να γεμίζουν με δύο ξεχωριστές οθόνες δευτερεύουσας οθόνης.
Μπορείτε να συμπεριλάβετε μια οθόνη υποοθόνης χρησιμοποιώντας τη δήλωση CALL SUBSCREEN στη λογική ροής της κύριας οθόνης.
Κλήση της δευτερεύουσας οθόνης στο PBO
Για να συμπεριλάβετε μια οθόνη υποοθόνης στην περιοχή υποοθόνης της κύριας οθόνης και να καλέσετε τη λογική ροής PBO, χρησιμοποιήστε την ακόλουθη δήλωση στο συμβάν PBO της κύριας οθόνης:
PROCESS BEFORE OUTPUT. CALL SUBSCREEN <area> INCLUDING [<prog>] <dynp>.
Αυτή η δήλωση εκχωρεί στην οθόνη υποοθόνης αριθμό στην περιοχή υποοθόνης που ονομάζεται . Μπορείτε επίσης να καθορίσετε το πρόγραμμα στο οποίο ορίζεται η οθόνη υποοθόνης (προαιρετικό). Εάν δεν προσδιορίσετε ρητά το πρόγραμμα, το σύστημα αναζητά την οθόνη υποοθόνης στο ίδιο πρόγραμμα ABAP με το κύριο πρόγραμμα. Εάν δεν βρει την αντίστοιχη οθόνη υποοθόνης, παρουσιάζεται σφάλμα χρόνου εκτέλεσης. Στο ίδιο σημείο περιλαμβάνεται και η λογική ροής PBO της οθόνης υποοθόνης. Αυτό μπορεί να καλέσει μονάδες PBO του προγράμματος ABAP στο οποίο ορίζεται η οθόνη υποοθόνης. Στο τέλος της υποοθόνης PBO, τα καθολικά πεδία από το πρόγραμμα μεταβιβάζονται σε οποιαδήποτε πεδία οθόνης με το ίδιο όνομα στην οθόνη υποοθόνης. Η λογική ροής PBO της οθόνης υποοθόνης μπορεί να περιλαμβάνει περαιτέρω υποοθόνες.
Το όνομα της περιοχής της υποοθόνης πρέπει να εισαχθεί απευθείας χωρίς ανεστραμμένα κόμματα. Μπορείτε να καθορίσετε τα ονόματα και είτε ως κυριολεκτικά είτε ως μεταβλητές. Εάν χρησιμοποιείτε μεταβλητές, πρέπει να δηλώσετε και να συμπληρώσετε μεταβλητές με το ίδιο όνομα στο πρόγραμμα ABAP. Ο αριθμός οθόνης πρέπει να είναι 4 χαρακτήρες. Εάν δεν αντιστοιχίσετε μια οθόνη υποοθόνης σε μια περιοχή, αυτή παραμένει κενή.
Κλήση της δευτερεύουσας οθόνης στο PAI
Για να καλέσετε τη λογική ροής PAI της υποοθόνης, χρησιμοποιήστε την ακόλουθη δήλωση στη λογική ροής PAI της κύριας οθόνης:
PROCESS AFTER INPUT. CALL SUBSCREEN <area>.
Αυτή η δήλωση περιλαμβάνει τη λογική ροής PAI της οθόνης υποοθόνης που περιλαμβάνεται στην περιοχή υποοθόνης στην εκδήλωση PBO. Αυτό μπορεί να καλέσει μονάδες PAI του προγράμματος ABAP στο οποίο ορίζεται η οθόνη υποοθόνης. Τα δεδομένα μεταφέρονται μεταξύ πεδίων με το ίδιο όνομα στην οθόνη υποοθόνης και στο πρόγραμμα ABAP είτε όταν ενεργοποιείται το συμβάν PAI είτε στις αντίστοιχες δηλώσεις FIELD στη λογική ροής PAI της οθόνης υποοθόνης.
Πώς να δημιουργήσετε και να ενσωματώσετε μια δευτερεύουσα οθόνη
Τα τρία βήματα που αναφέρθηκαν προηγουμένως εκτελούνται στην οθόνη Painter και στη λογική ροής της κύριας οθόνης. Η παρακάτω ακολουθία δημιουργεί μία κύρια οθόνη με μία μόνο περιοχή δευτερεύουσας οθόνης.
- Δημιουργήστε την περιοχή δευτερεύουσας οθόνης: Ανοίξτε την κύρια οθόνη, για παράδειγμα την οθόνη 100, στην οθόνη Painter (SE51). Επιλέξτε το Υποοθόνη από τη γραμμή στοιχείων, σχεδιάστε το στη διάταξη και εισαγάγετε ένα όνομα όπως SUB_AREA στο πεδίο Όνομα. Αυτό το όνομα χρησιμοποιείται αργότερα στην πρόταση CALL SUBSCREEN.
- Δημιουργήστε την οθόνη δευτερεύουσας οθόνης: Δημιουργήστε μια δεύτερη οθόνη, για παράδειγμα την οθόνη 110, και ορίστε τον τύπο οθόνης της σε Υποοθόνη στα χαρακτηριστικά. Μια οθόνη δευτερεύουσας οθόνης δεν έχει πεδίο κωδικού OK και δεν έχει δική της κατάσταση GUI.
- Τοποθετήστε τα πεδία: Σχεδιάστε τα πεδία εισαγωγής στην οθόνη 110. Διατηρήστε τη διάταξη εντός του μεγέθους της περιοχής της δευτερεύουσας οθόνης, επειδή εμφανίζεται μόνο το τμήμα που ταιριάζει, μετρημένο από την επάνω αριστερή γωνία.
- Δηλώστε τα παγκόσμια δεδομένα: Τοποθετήστε τα πεδία στο TOP include της ομάδας λειτουργικών μονάδων, έτσι ώστε τόσο η κύρια οθόνη όσο και η δευτερεύουσα οθόνη να διαβάζουν τις ίδιες καθολικές μεταβλητές.
- Καλέστε την δευτερεύουσα οθόνη: Προσθέστε την επιλογή CALL SUBSCREEN στο PBO και στο PAI της κύριας οθόνης, όπως φαίνεται παρακάτω.
- Ενεργοποίηση και δοκιμή: Ενεργοποιήστε τις οθόνες και το πρόγραμμα και, στη συνέχεια, ξεκινήστε τη συναλλαγή. Η περιοχή της υποοθόνης γεμίζει με την οθόνη 110 και οι ενότητες της εκτελούνται εντός της λογικής ροής της οθόνης 100.
* Flow logic of the main screen 100 PROCESS BEFORE OUTPUT. MODULE status_0100. CALL SUBSCREEN sub_area INCLUDING 'SAPMZDEMO' '0110'. PROCESS AFTER INPUT. CALL SUBSCREEN sub_area. MODULE user_command_0100.
💡 Συμβουλές: Αποθηκεύστε τον αριθμό οθόνης σε μια καθολική μεταβλητή αντί για μια κυριολεκτική εντολή όταν η περιοχή πρέπει να εμφανίζει διαφορετική δευτερεύουσα οθόνη ανάλογα με την είσοδο του χρήστη. Η μεταβλητή πρέπει να έχει το ίδιο όνομα στο πρόγραμμα και στην πρόταση CALL SUBSCREEN.
Σημεία για να θυμάστε
- Τα ονόματα των στοιχείων των υποοθονών σε μια οθόνη πρέπει να είναι μοναδικά
- Δεν πρέπει να έχετε OK_CODE ή FCODE συνδεδεμένο με υπο-οθόνη. Το OK_CODE της ίδιας της κύριας οθόνης είναι OK_CODE της δευτερεύουσας οθόνης
- Οι υποοθόνες δεν μπορούν να έχουν λειτουργικές μονάδες διαλόγου που να περιέχουν SET TITLEBAR, SET PF-STATUS, SET SCREEN, LEAVE SCREEN ή LEAVE TO SCREEN. Αυτό θα προκαλέσει σφάλμα χρόνου εκτέλεσης.
- Πρέπει να το καλέσετε στη λογική ροής (τόσο PBO όσο και PAI) της κύριας οθόνης.
- Το CALL SUBSCREEN δεν επιτρέπεται στις δηλώσεις CHAIN..ENDCHAIN και LOOP ENDLOOP
- Δεν είναι δυνατή η ύπαρξη μονάδας AT EXIT-COMMAND
- Τα πεδία που χρησιμοποιείτε είναι τα καθολικά πεδία. Πρέπει να δηλώνονται στο επάνω μέρος
- Εάν χρησιμοποιείτε υποοθόνες από άλλη πρόγραμμα διαλόγου η μεταφορά δεδομένων δεν θα πραγματοποιηθεί αν δεν προσθέσετε συγκεκριμένο κωδικό.
⚠️ Προειδοποίηση: Η τοποθέτηση της συνάρτησης CALL SUBSCREEN μέσα στο CHAIN … ENDCHAIN ή μέσα σε έναν βρόχο οθόνης παράγει ένα συντακτικό σφάλμα και η κλήση ενός αριθμού οθόνης που δεν υπάρχει παράγει ένα σφάλμα χρόνου εκτέλεσης στην πρώτη εμφάνιση.

