* ab ABAP 7.54
DATA field TYPE p decimals 2.
field += 4.
field -= 2.
field *= 3.
field /= 2.
*obsolet: ADD, SUBSTRACT, MULTIPLY, DIVIDE
Month: March 2020
[ABAP] Display a database table
cl_salv_gui_table_ida=>create( iv_table_name = 'SFLIGHT' )->fullscreen( )->display( ).
Example report in your system: SALV_IDA_DISPLAY_DATA_SIMPLE
[ABAP] Alpha conversion
DATA(lv_matnr) = VALUE matnr( 0000000001 ).
DATA(character_string) = VALUE string( ).
character_string = |Your Material Number is { lv_matnr ALPHA = IN }|. "Adds leading zeros
character_string = |Your Material Number is { lv_matnr ALPHA = OUT }|. "Removes leading zeros
[ABAP Env] Create Data Model & OData Service
Recently I worked through the tutorial on creating a travel bookings app in the SAP Cloud Platform ABAP Environment.
Find a good introduction and overview on this topic here: Getting Started with ABAP in the Cloud – Part I
And the travel bookings app tutorial here: Getting Started with ABAP in the Cloud – Part II
These are my notes on the steps needed to create the data model and publish it as oData service.
| # | Layer | Nomenclature | Description |
|---|---|---|---|
| 1 | Database Table | ZTABLE | Place your raw data first |
| 2 | Data Definition (Interface View) | ZI_ | Relation between different tables (e.g. currency or text table) |
| 3 | Projection View (Consumption View) | ZC_ | Configure the UI depending on your scenario. Use different projection views for different usages of the same interface view and the same physical table. |
| 4 | Service Definition | ZSD_ | Expose the projection view (and underlying associations like currency, country…) as service |
| 5 | Service Binding | ZSB_ | How to we want to make the service available? Defines the binding type (OData V2 / OData V4) Activate it with the “Activate” Button within the editor window. Select the Entity and hit “Preview…” to see whtat we defined in our projection view. |
If you’ve done this, you are able to view the data in a generated Fiori Elements app. But if you also want to create, edit, delete data, you’ll have to add some behavior functionality.
| 6 | Behavior Definition on Data Definition | ZI_ | Created on top of the Data Definition. Will get the same name es the Data Definition. Implementation Type: Managed Defines the operations create, delete, edit. |
| 7 | Behavior Implementation on Definition View | ZBP_I_ | The code for the behavior… For the travel app tutorial, some logic for a generated unique key and field validation. The class inherits from cl_abap_behavior_handler. |
| 8 | Behavior Definition on Projection View | ZC_ | Created on top of the Projection View. Will get the same name es the Projection View. Defines the operations create, delete, edit. |
[Docker] Usefull commands
Image Handling
| docker image list | list downloaded images |
| docker rmi image_name | delete image |
Administration
| docker system df | show docker disk usage |
| docker system prune | free space – remove stopped containers, images, cache |
| systemctl restart docker.service | restarts the docker service (and all your container) |
| ss -tulpn | check if docker containers listen to any port |
| docker exec contaienr_id cat /etc/hosts or docker inspect -f ‘{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ contaienr_id | check container ip address |
Container Handling
| docker ps | list running containers |
| docker ps -a | list all the docker containers (running and stopped) |
| docker stop container_id | stop container |
| docker rm container_id | delete stopped container |
| docker update –restart=unless-stopped container_id | make sure container re-start, unless manually stopped |
| docker run -l debug container_id | run container with log |
| docker logs -f container_id | display log |
| docker exec -it container_id /bin/sh | open a shell in the running container |
| docker commit container_id user/test_image | this command saves modified container state into a new image user/test_image |
| docker run -ti –entrypoint=sh user/test_image | run with a different entrypoint |
| docker run –volume-driver=nfs container_id | mount NFS share |
Docker Compose
| docker-compose -f ~/docker/docker-compose.yml up -d | The -d option daemonizes it in the background |
| docker-compose -f ~/docker/docker-compose.yml down | completely stop and remove containers, images, volumes, and networks (go back to how it was before running docker compose file) |
| docker-compose -f ~/docker/docker-compose.yml pull | Pull latest images |
| docker-compose logs container_id | check real-time logs |
| docker-compose stop container_id | stops a running container |
| docker-compose config | test your.env file which is used for variable substitution in the docker-compose.yaml |
[Shell] User and Group management & File permissions
- User and Group management
- id
- useradd
- -c – Full name
- -e – Expiration date
- -s – Default shell
- -d – Home directory
- passwd
- usermod
- -l – rename
- -L – Lock
- -U – unlock
- userdel
- -r – remove user data
- groupadd
- groupmod
- gpasswd [-a -d -A] [user1, user2] [group]
- newgrp [group]
- su vs. su – vs. sudo
- visudo
- File permissions
- UGO – User, Group, Other
- RWX – Read, Write, Execute
- chmod -R g+x (grant recursive execute permission to group)
- r = 4
- w = 2
- x = 1
- – = 0
- rwxrwxrwx = 777
- rw-rw-rw- = 666
- rwxrwxr–- = 774
- rw-rw—- = 660
- rw-r—–- = 640
- chown
- chgrp
- umask
https://www.sluug.org/resources/presentations/2020/2020-02-12_permissions.pdf
