Recent Posts

And the APEX Coin goes to...

Von Tobias Arnhold → 3.05.2019
And the APEX Coin goes to...



Before I tell you.. Here is the story behind it!

Adrian Png is a Senior APEX developer and he is doing a lot of things for the APEX Community. For that reason he earned the APEX.WORLD Member of the year award.

His last outstanding idea was the APEX Challenge Coin!
In short: You can announce one or more great APEX developers who you think earn an APEX Coin.
But please read the full story here: Announcing the APEX Challenge Coin 


Of course I had to ask Adrian to send me 2 coins.


Unfortunately I know to many great APEX developers only in Germany. How in hell will I ever be able to choose one???

So my choice fell on 2 passionate people doing not only APEX. They lead and support our German APEX Community since years. Here are some examples:
 - APEX Meetup organizers
 - Member of the DOAG development community
 - Supporting the APEX Connect conference

But this is not the main reason!

The main reason is the passionate work in supporting and helping "Woman in Tech" (WIT) to become part of our wonderful APEX community.


And the APEX Coin goes to... Carolin Hagemann and Sabine Heimsath !






P.S.: As you can see on the picture I got 3 coins. So thanks Adrian for giving me one as well. :)

Der Fahrplan bis zur APEX Connect 2019

Von Tobias Arnhold → 2.22.2019
Im Mai 2017 hatte ich euch gefragt worauf ihr euch am meisten freut was die damals anstehende APEX Connect betraf.
Nun schreiben wir das Jahr 2019 und bis zur Connect stehen noch einige Events vor der Tür, bei denen es neben dem technischen Wissensaustausch vor allem auch um die Vernetzung und das teilen des gemeinsamen Spirits geht.

Und falls Ihr euch fragt weshalb ich immer und immer wieder von "Spirit" rede, dann schaut euch mal den Artikel "#NextGenTrip18 — Community at Its Best" im ORAWORLD Magazin auf Seite 39 an. Dieser repräsentiert das Wort "Spirit" ganz gut. :)



Hier nun der Fahrplan bis zur APEX Connect 2019

Meetups
Das nächste Meetup findet am 11.03. in München zum Thema "APEX 19.1 New Features" statt.
Die anderen Meetupgruppen befinden sich noch im Winterschlaf. News gibt es aus Dresden, dort wurde eine neue Meetup Gruppe gegründet. Das erste Treffen ist bereits in Planung.
Eine Übersicht aller Meetups findet ihr auf apex.world.
Eure Stadt fehlt? Ihr wollt aber trotzdem eine Gruppe gründen und wisst nicht wie? Schreibt mich einfach an (Twitter, Mail) und ich versuche euch dabei zu unterstützen.


Workshops
Am 18.03. findet ein kostenloser APEX Workshop in Trier statt inklusive Hands On. Beeilt euch die Plätze sind begrenzt.

In Frankfurt gibt es am 13.03 einen kostenlosen Oracle Datenbank-Technologie Tag.

Zwischen dem 09.-10.04 bietet die MT AG einen APEX Migrations-Workshop an. Geeignet für alle die endlich auf APEX 18.2 migrieren möchten.


APEX Competition
Bis zur Connect läuft parallel auch die APEX Competition 2019 bei der es darum geht ein APEX Plugin zu entwickeln. Der Gewinner erhält 850 €.
Die Competition läuft noch bis zum 07. April. Genug Zeit für eurer erstes Plugin, den passenden Einstieg findet ihr übrigens in diesem aufgezeichneten Webinar:
Entwicklung von Plug-ins für Oracle Apex – Kurzer Einstieg


Im Mai findet dann die heiligste aller APEX Veranstaltungen im deutschsprachigen Raum statt:

Die APEX Connect

Am Vortag der Connect dem 06.05. (Montag) wird es ein kostenloses Meetup geben, bei dem bekannte Oracle Core Entwickler die letzten News rund um APEX, PL/SQL und Javascript teilen werden.
Zwischen dem 07.05. und dem 09.05. dreht sich dann alles nur noch um die bekannten 4 Buchstaben 

A..P..E..X..

Neben APEX steht natürlich auch wieder SQL, PL/SQL, Datenmodellierung und Javascript im Fokus der Besucher. Highlights rund um das Event werden in den kommenden Wochen über unterschiedliche Blogposts detaillierter kommuniziert, bis dahin schaut euch doch mal die Vortragshighlights und den Bewertungsprozess näher an. Das komplette Programm findet ihr hier:

Mein Highlight dieses Jahr sind definitiv die Beginner Sessions.
Geeignet für Newcomer, Studenten, ehemalige Forms-Entwickler, DBA's und alle die APEX näher kennenlernen möchten.

Modal Dialogs Part 1 - Intro

Von Tobias Arnhold → 1.30.2019
In this 5 part series of blog posts I will share my understanding of how you can open modal dialogs with dynamic values.

First of all: Why would you need that?
There are particular business cases where your modal dialog (page 2) uses data from the parent page (page 1) which was created during runtime.
For example: Map Selector
I want to select a certain position from a map. The map is called by a button and displayed via a modal dialog. The parameter for the default position are defined on the parent page. After I have chosen a particular position on the map the Latitude and Longitude parameter should be transmitted back towards the parent page.


In this introduction I will explain how you can do it with "Standard APEX" functionality.
On my main page 10 I have several search items (like City, Street...) , two return items (Lat, Lon) and a button called SEARCH. The button executes a standard "Submit Page".
In the processing area I add a branch "After Submit" which gets executed by the SEARCH button. The branch process will open page 11 and will transmit all search parameters.
Info: This way opening a modal dialog may not work below APEX 18.1


Now the modal dialog will open. On page load a dynamic action gets executed to create the map:

vAddress =
  apex.item('P11_CITY').getValue() + ' ' +
  apex.item('P11_POSTAL_CODE').getValue() + ' ' +
  apex.item('P11_STREET').getValue() + ' ' +
  apex.item('P11_HOUSE_NUMBER').getValue()

vDiameter = apex.item("P11_DIAMETER" ).getValue();

apex.event.trigger(document, 'showOpenLayersMap', [{address: vAddress, diameter:vDiameter}]);void(0);


In that little code snippet above I create a single string "address" and a diameter parameter to pass into the map function. Which is by the way created on page 0 as a custom dynamic action named "showOpenLayersMap".

My showOpenLayersMap function is doing all the magic. In the moment the end user is doing a double click on a certain position inside the map a trigger executes a custom dynamic action on page 11 named "setLatLon".

...
apex.event.trigger(
  document, 
  'setLatLon', 
  [{latitude:coordinatesItems[1], longitude:coordinatesItems[0]}]
);
...



This one fires 3 TRUE actions to return the Latitude and Longitude parameter to page 10:
1. Execute JavaScript Code
apex.item("P11_LON" ).setValue(this.data.longitude);
apex.item("P11_LAT" ).setValue(this.data.latitude);

2. Execute PL/SQL Code
:P10_LON := :P11_LON;
:P10_LAT := :P11_LAT;

3. Execute JavaScript Code
parent.location.reload();

Unfortunately I couldn't find a way to send the items back to the parent page dynamically. I just couldn't react on the "Dialog Closed" event. I think it has to do with the explicit submit. The dynamic action handler has no idea about the modal dialog.



Ps.: A separate blog post about open layers and open street map will come later...

Result

Interactive Grid - Column stretching

Von Tobias Arnhold → 12.19.2018
Since APEX 18.1 you can define the stretch behavior per column.

You can choose between 3 different options:

Use Report Setting
The column will use the Stretch Report Setting set by the End User to define if the column should stretch or not.
In APEX 18.1 you have a new option to let the end user decide if the columns should be stretched or not.
This option effects all columns by default.

Never
The column will not stretch and always just use the width specified. This is useful for columns with short content like Yes/No or Numbers.
This option will over rule "Use Report Setting" and is really good for link columns or as the documentation says: short content columns.

Always
The column will always stretch, irrespective of the Stretch Report Setting set by the End User.


Results can look slightly different:


Imho: Small enhancement with huge impact.

Eine verrückte Zeit endet...

Von Tobias Arnhold → 10.26.2018
Hallo zusammen,

ich habe leider eine schlechte Nachricht zu verkünden. Ich trete als Leitungskraft innerhalb der DOAG NextGen-Community zurück. Das kommt leider nicht nur für euch überraschend, und glaubt mir, dieser Schritt ist mir nicht leichtgefallen, weil ich weiß, dass ihr da draußen auf das, was die NextGen geleistet hat, vertraut und mit Freude die Entwicklung und den Spirit mitverfolgt habt.

Leider gab es vor kurzem mehrere Vorstandsbeschlüsse, die ein weiteres Engagement für mich praktisch unmöglich machen. Diese Beschlüsse betreffen die grundsätzliche Ausrichtung der NextGen-Community innerhalb der DOAG.

Beschluss 1:
„Die #NextGen-Community soll nur Themen behandeln, die NICHT bereits durch Themenverantwortliche in anderen Communitys abgedeckt werden.“

Heißt, die Technologie APEX darf nicht mehr mit der NextGen in Verbindung gebracht werden.

Beschluss 2:
„Für die Nachwuchsförderung bei bestehenden Themen sollen die jeweiligen Themenverantwortlichen der jeweiligen Communitys verantwortlich sein, nicht die #NextGen. Eine Zusammenarbeit und Einbindung in die #NextGen kann bestehen bleiben.“

Heißt für die Technologie APEX, dass Niels aus der Development-Community für APEX für den Nachwuchs verantwortlich ist.

Was macht die NextGen dann zukünftig?
Die DOAG verfolgt das Ziel, sich neuen, auch Oracle-unabhängigen Technologien zu öffnen und genau hier soll, denke ich, die NextGen in Zukunft der Treiber sein. Weitere Details dazu dann von der NextGen auf der DOAG K+A.

Was bedeutet das für die APEX-Community?
Ganz ehrlich, zunächst einmal einen großen Rückschlag. Die Leute, die im APEX Umfeld sind und gleichzeitig das gemocht haben, was die NextGen bisher verkörpert hat, diesen jungen Tech Enthusiasts muss die DOAG Development-Community nun schnell und einfach den Einstieg in deren Community bereiten, ansonsten werden diese Leute abspringen und sich anderweitig engagieren. Ich rede hier nicht von mir, sondern von denen die ich auf meiner Reise getroffen und schätzen gelernt habe:
Jonas, Charlotte, Pierre, Caro, Matthias, Jan, Davide, Ali, Philipp, Felix, Louisa, Rebecca, Maximilian, Victoria, Sebastian, Steven, Christopher, Abby, Florian, um nur einige zu nennen.

Und meine Zukunft?
Ich werde meinen Spirit und meinem Community-Fokus beibehalten und über andere Wege das Besondere tun um diese einzigartige Community zu bereichern.

Das Ergebnis werdet ihr auf der APEX Connect 2019 sehen, weil ich ab der APEX Connect 2019 für den Track APEX die Verantwortung innehabe. Und hier gibt es natürlich nur ein Ziel: den Community-Spirit an die Spitze zu treiben und mit möglichst vielen APEX-Enthusiasten eine unvergessliche Konferenz auf die Beine zu stellen.

Außerdem unterstütze ich das FABE Projekt (forallabeautiful.earth) von Steven Feuerstein und Vincent Morneau aus Sicht der Datenmodellierung.

Der NextGen-Community selbst kann ich nur alles Gute und viel Erfolg auf dem neuen Weg wünschen. Mir werden diese besonderen Momente immer im Herzen erhalten bleiben und ich bin sehr dankbar dafür solch einen Community-Spirit erlebt haben zu dürfen. Menschen wie Carolin Hagemann, Davide Groppuso, Jonas Gassenmeyer, Matthias Nöll und viele Andere die dem Wort "Community" den Spirit eingehaucht haben den ich geliebt habe.

Danke für eine GEILE Zeit! Und auch Danke Ingo Sobik für das unterstützen von verrückten Aktionen und dem ganzen DOAG Office diese Aktionen dann am Ende gemeinsam auch in die Tat umgesetzt zu haben.

Never forget: #POUGTrip, #nextGENrocks #NextGENTrip18 #Roadshow # CommunitySpirit




APEX client side error messages - apex.message.showErrors

Von Tobias Arnhold → 10.25.2018
Since APEX 5.1 we have the ability to create client side messages without the requirement to use a plugin or custom code to create nice looking client side messages.

For that requirement the APEX team created the apex.message library.

This library provides the same look and feel as if you would create a message out of your Page Designer > Validation Area.



In this example I will tell you something about a more advanced way to use the client side error messages.

As the documentation says this is the default way to create a client side error message:

/* General page error message */
apex.message.showErrors([
{
type: "error",
location: "page",
message: "Page error has occurred!",
unsafe: false
}
]);
  /* Item error message */ apex.message.showErrors([
{
type: "error",
location: [ "page", "inline" ],
pageItem: "P1_ITEM",
message: "Value is required!",
unsafe: false
}
]);

Example for a page error message:




In my example I want to check more then one item. For that I created an array including all item names I wanted to check. Within a "FOR" loop I run through every item and created an error message if the value was NULL. If no error occurred I run another custom dynamic action.

apex.message.clearErrors();

var chkErr = 0;
var arr = [
   'P1_STRASSE', 
   'P1_HAUS_NR',
   'P1_PLZ', 
   'P1_ORT', 
   'P1_ITEM_XYZ'
];

for (var i in arr) {
  if ($v(arr[i]).length == 0) {
    apex.message.showErrors([
      {
        type: apex.message.TYPE.ERROR,
        location: ["inline"],
        pageItem: arr[i],
        message: "Value is required!",
        unsafe: false
      }
    ]);
    chkErr = 1;
  } 
}

if ( chkErr == 0 ) { 
  /* Custom dynamic action call when no error occurred */
  apex.event.trigger(document, 'customDA', [{customAttribute:'1'}]); 
}
You want to know more? Check out the documentation and this series of blog posts by Martin D'Souza:
https://www.talkapex.com/2018/03/custom-apex-notification-messages/
https://www.talkapex.com/2018/03/how-to-save-page-data-but-show-errors-in-apex/

Flagge zeigen - IT gegen Rechts

Von Tobias Arnhold → 9.03.2018
Ich habe lange gezögert und überlegt… Es ist aber Zeit! Zeit mich zu positionieren, damit jedem klar ist, für welche Form von IT ich stehe. In Zeiten wie diesen ist es nicht mehr möglich, sich einfach weg zu ducken und zu hoffen!
Dazu möchte ich euch kurz etwas über die Geschichte meiner Familie erzählen:
Zwei meiner Urgroßväter haben im 2. Weltkrieg gekämpft - der eine als Freiheitskämpfer für den Kommunismus und der andere als Soldat für die Wehrmacht.

Das Ergebnis:
Tod, Leid und Vertreibung.

Und heute?
Ich selbst bin auch in einer gewissen Art und Weise geflüchtet… Geflüchtet von diesem sinnlosen Spruch "sei froh, dass du Arbeit hast". Seit ich im Westen von Deutschland lebe, habe ich viele Menschen kennengelernt und nur wenige sind mir mit "Anti-Ossi"-Sprüchen begegnet, dafür viele neue Farben, Namen und Lebenseinstellungen, die ich so bisher nicht kannte. Dieses sogenannte "Multi-Kulti" und die zumeist vorurteilsfreie / offene Gesellschaft war eine Bereicherung für meine eigene Entwicklung, sowohl im IT Bereich als auch im normalen Leben.

Ich hatte das Glück Menschen aus allen Teilen der Welt kennenlernen und schätzen lernen zu dürfen.

Die Vorstellung, dass Menschen in unserem Land zukünftig gejagt, vertrieben oder getötet werden, lässt mich innerlich kalt erschauern. Wer nach Chemnitz meint, dass diese Angst an den Haaren herbeigezogen sei, hat die Lage noch nicht erkannt.

Ich für meinen Teil stehe für eine IT des Miteinanders, des Austauschs und der Zusammenarbeit unabhängig von Hautfarbe, Herkunft, Religion, Geschlecht und sexueller Orientierung. Ich bewerte den einzelnen Menschen nach dessen Fähigkeiten, ob und wie ich mit diesen zusammenarbeiten kann und will.
Es ist jetzt Zeit, dass wir Zeichen setzen, egal ob als Einzelperson, Verein oder Firma.
Bald schon könnte die Angst unsere Entscheidungen zu sehr beeinflussen.

Daher möchte ich gern auf die "Pride in London" referenzieren, diese sollte ein Vorbild für unser zukünftiges Handeln auch im IT Umfeld darstellen.

Bild von der #pridelondon2018 - Oracle OPEN (LGBTQ+)
Denn leider ist es nicht mehr nur Ausgrenzung für die wir auf die Straße müssen, jetzt ist unsere Demokratie gefährdet.

Ps.:
Dieser Kommentar von spiegel.de trifft meine Sicht der Dinge sehr gut:
http://www.spiegel.de/politik/deutschland/afd-wer-sie-waehlt-waehlt-nazis-a-1226160.html