* 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