Quantcast
Channel: APEX-AT-WORK by Tobias Arnhold
Viewing all 177 articles
Browse latest View live

Working with XML files and APEX - Part 3: Detail elements in a row with OUTER JOIN

$
0
0
After I described how to successfully import XML files into an APEX application and gave some basic information about the analyzing of xml data.
It's time for another example. This time we want to get all detail elements of a master element in one row.
Example XML data:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>  
<data>
<stadium>
<team name="SG Dynamo Dresden" league="3. Liga"/>
<event name="Konzert"/>
<event name="Stadionführung"/>
</stadium>
<stadium>
<team name="RB Leipzig" league="2. Liga"/>
<event name="Konzert 1"/>
<event name="Konzert 2"/>
<event name="Konzert 3"/>
</stadium>
</data>
As you see we have two detail entries for element <stadium>. What I want are two rows including all the data of element <stadium>. Of course this means taking off some flexibility from my selection. Because I need to know what data I will have to deal with.
In my case I assume maximum one team and three events per stadium element.

The magic sql statement:
-- table: IMP_FM
-- XMLType column: XML_FILE
select
t1_team,
t1_league,
e1_event,
e2_event,
e3_event
from IMP_FM nx,
XMLTable('/data/stadium' passing nx.xml_file
columns
"P_T1" XMLTYPE PATH 'team[1]',
"P_E1" XMLTYPE PATH 'event[1]',
"P_E2" XMLTYPE PATH 'event[2]',
"P_E3" XMLTYPE PATH 'event[3]'
) STAD,
XMLTable('team' PASSING STAD.P_T1
columns t1_team varchar2(200) path '@name',
t1_league varchar2(200) path '@league'
) (+) T1,
XMLTable('event' PASSING STAD.P_E1
columns e1_event varchar2(200) path '@name'
) (+) E1,
XMLTable('event' PASSING STAD.P_E2
columns e2_event varchar2(200) path '@name'
) (+) E2,
XMLTable('event' PASSING STAD.P_E3
columns e3_event varchar2(200) path '@name'
) (+) E3
where nx.id = 1
Inside the sql I first create a set of four detail xml columns per row:
columns
  "P_T1" XMLTYPE PATH 'team[1]',
  "P_E1" XMLTYPE PATH 'event[1]',
  "P_E2" XMLTYPE PATH 'event[2]',
  "P_E3" XMLTYPE PATH 'event[3]'

Next I select the data of each xml element via an OUTER JOIN.
XMLTable('team' PASSING STAD.P_T1
    columns t1_team varchar2(200) path '@name',
                     t1_league varchar2(200) path '@league'
) (+) T1,

Finally I only have to select the columns I want to see.
If I wouldn't use the OUTER JOIN syntax then no result would appear. Because Oracle handles the XMLTable integration as INNER JOIN.
As I told this example only works if you know the exact definition of your XML detail data elements.

Calculate all unique combinations of one list (cartesian product)

$
0
0
A couple of days ago a had a task to combine a list with itself. The result should be a two column report of each possible combination.

What should not be part of the result:
- same element combinations should be excluded
- duplicate rows (even if the sides are switched)

Because I couldn't solve it myself *actually it's awful after I now know how to do it* I had to create a forum entry:
Oracle SQL and PL/SQL forum: Generate some kind of cartesian list
Time to try solving it myself (thinking/searching the www): 40 minutes --> Result: fail
Forum reaction time: 12 minutes --> Result: win (Thanks to Marwim and Karthick_Arp)

That's the way how it works:

-- Table name: MY_TAB
-- Columns: ID (VARCHAR2(100))
-- Insert
INSERT INTO MY_TAB ( ID ) VALUES ('10.251.14.197');
INSERT INTO MY_TAB ( ID ) VALUES ('10.251.14.198');
INSERT INTO MY_TAB ( ID ) VALUES ('10.251.14.199');
INSERT INTO MY_TAB ( ID ) VALUES ('10.251.14.202');
INSERT INTO MY_TAB ( ID ) VALUES ('10.251.14.203');
INSERT INTO MY_TAB ( ID ) VALUES ('10.251.14.204');
INSERT INTO MY_TAB ( ID ) VALUES ('10.251.14.205');
And here is the select statement:

SELECT
S1.ID as A,
S2.ID as B
FROM MY_TAB S1
CROSS JOIN MY_TAB S2
WHERE S1.ID < S2.ID
Mostly important is the "<" it kicks all unnecessary combinations.

Oracle SQL regular expression - check for numbers or special characters

$
0
0
We all know the regular expression syntax is fast and you can do amazing things with little code snippets. But we do know as well that whenever you need it then you have no idea how to write it down. To be able to find a solution for your problem you use the WWW.

So here you have another example you may need one day. :)
I had to check a string for special characters and numbers. In those cases the rows should be highlighted.

Here is a simple example how to do it:

select
rn,
val as txt,
case
when regexp_like(val, '[[:cntrl:]]| |[[[:digit:]]|[[:punct:]]')
then 'Error'
else 'Ok'
end as type
from
(
select 1 as rn, '123' as val from dual
union all
select 2 as rn, 'xxxxx' as val from dual
union all
select 3 as rn, 'acbAaaBBB' as val from dual
union all
select 4 as rn, 'acb Aaa BBB' as val from dual
union all
select 5 as rn, '#abc' as val from dual
)
order by rn

Working with disabled textfields

$
0
0
In APEX you have the possibility to disable text fields.
Unfortunatelly you can not submit those fields after the value was changed by a dynamic action or some javascript code.
Out of a security point of view in most cases this makes sense.

In case you do have to change the value during the runtime and need to send it to the database. You have to pretend that the elements are disabled. Fortunately it is quite easy to do so.

1. First all textfields must be enabled.
2. Now create two dynamic actions using the following code snippets:
2.1 Disable all necessary fields "after page load":
$('#P1_ITEM_NAME').attr('disabled', 'disabled');
2.2 Enable all necessary fields "before page submit":
$("#P1_ITEM_NAME").removeAttr("disabled");

APEX ist überall

$
0
0
Obwohl APEX 5 noch nicht erschienen ist, ist die APEX Community aktiver denn je.

Hiermal eine Überischt der letzten Aktivitäten:

Frankfurt - 23.02.2015
Stuttgart - 22.02.2015
München - 21.02.2015
Colombus (USA) - 15.01.2015

Indien - 09.01.2015
München - 21.11.2014
Fühlt sich an als wäre der Start die DOAG 1014 gewesen:
Außerdem diese Woche am 27.01. in Nürnberg:
http://www.meetup.com/orclapex-nue/events/219081859

Weitere aktive Meetupgruppen gibt es in:
Düsseldorf - http://www.meetup.com/orclapex-dus/
Bielefeld - http://www.meetup.com/orclapex-Bielefeld/

Fragt man sich wo die anderen Standorte bleiben:
Berlin, Hamburg, Dresden...

Und nicht zu vergessen: APEX connect Juni 2015


In diesem Sinne allen ein schönes Wochenende..

Cookie Applikation

$
0
0
Ich habe in den letzten Tagen an einer Mini-Anwendung gearbeitet: "Cookie Applikation".

Hintergrund:
Die Verwendung von Cookies in APEX ist nicht kompliziert, ist aber ohne die passenden Beispiele etwas mühsam umzusetzen. Deswegen habe ich an einer Beispielanwendung gebaut, die genau die Funktionsweise der Cookie-Nutzung erläutert und LIVE darstellt.

Zusätzlich dazu habe ich den Super Cookie (Canvas Fingerprinting) beispielhaft implementiert.

Also schaut mal rein: https://apex.oracle.com/pls/apex/f?p=155555

DATE - First and Last day of a month

$
0
0
Simple task and simple solution:
-- First day: 
select TRUNC(sysdate,'MON') as first_day from dual
-- Alternative:
select TO_DATE('01.'||TO_CHAR(SYSDATE,'MM.YYYY'),'DD.MM.YYYY') as first_day from dual
-- Last day: 
select LAST_DAY(TRUNC(SYSDATE)) as last_day from dual
Use in APEX as computation for an empty field:

Tabular Form - Regular Expression Validation

$
0
0
A simple example how to check a tabular form column to be numeric with a max length of 2.

Use a regular expression validation:
Another example in checking only the length (length max 20 character):



Custom CSV Export in APEX

$
0
0

Sometimes the standard export doesn't fit your requirements. For example you do not want the double apostrophe ".



In those cases take a look at these examples:

http://spendolini.blogspot.de/2006/04/custom-export-to-csv.html
http://www.brainre.org/oracle-apex-csv-file-download-with-iso-encoding-not-utf-8/
https://community.oracle.com/thread/2318795

Let us assume that this is our table:
  CREATE TABLE "MY_TABLE"
( "ID" NUMBER,
"CAR_NAME" NUMBER,
"CAR_VALUE" NUMBER,
"CAR_KM" NUMBER
) ;
Based on this table I want to create the export.
Next step is to create a view which generates the export as clob.
Why CLOB? The alternative would be a PL/SQL loop which takes much longer to be generated.
CREATE VIEW VW_MY_TABLE AS
SELECT
DBMS_XMLGEN.CONVERT(XMLAGG(XMLELEMENT(E,COL_VALUE||CHR(13)||CHR(10))).EXTRACT('//text()').GETCLOBVAL(),1) AS CLOB_VAL,
COUNT(*) AS NUMBER_OF_ROWS
FROM (
SELECT 'ID;CAR_NAME;CAR_VALUE;CAR_KM' AS COL_VALUE FROM DUAL
UNION ALL
SELECT ''||ID||';'||
CAR_NAME||';'||
CAR_VALUE||';'||
CAR_KM||'' AS COL_VALUE
FROM VW_MY_TABLE
);
Finally I create a "On Load - Before Header" process to export the data:
DECLARE
L_BLOB BLOB;
L_CLOB CLOB;
L_DEST_OFFSET INTEGER := 1;
L_SRC_OFFSET INTEGER := 1;
L_LANG_CONTEXT INTEGER := DBMS_LOB.DEFAULT_LANG_CTX;
L_WARNING INTEGER;
L_LENGTH INTEGER;
BEGIN

-- create new temporary BLOB
DBMS_LOB.CREATETEMPORARY(L_BLOB, FALSE);

--Select CLOB
SELECT CLOB_VAL INTO L_CLOB FROM VW_MY_TABLE;

-- tranform the input CLOB into a BLOB of the desired charset
DBMS_LOB.CONVERTTOBLOB( DEST_LOB => L_BLOB,
SRC_CLOB => L_CLOB,
AMOUNT => DBMS_LOB.LOBMAXSIZE,
DEST_OFFSET => L_DEST_OFFSET,
SRC_OFFSET => L_SRC_OFFSET,
BLOB_CSID => NLS_CHARSET_ID('WE8MSWIN1252'),
LANG_CONTEXT => L_LANG_CONTEXT,
WARNING => L_WARNING
);

-- determine length for header
L_LENGTH := DBMS_LOB.GETLENGTH(L_BLOB);

-- create response header
OWA_UTIL.MIME_HEADER( 'text/csv', FALSE);
HTP.P('Content-length: ' || L_LENGTH);
HTP.P('Content-Disposition: attachment; filename="export_my_table.csv"');

OWA_UTIL.HTTP_HEADER_CLOSE;

-- download the BLOB
WPG_DOCLOAD.DOWNLOAD_FILE( L_BLOB );

-- release BLOB from memory
DBMS_LOB.FREETEMPORARY(L_BLOB);

-- stop APEX
APEX_APPLICATION.STOP_APEX_ENGINE;
EXCEPTION
WHEN OTHERS THEN
DBMS_LOB.FREETEMPORARY(L_BLOB);
RAISE;
END;

Tabular Form, Dynamic Action und Neue Zeile

$
0
0
Einige von euch haben bestimmt schon die ein oder andere jQuery Codezeile in einem Tabular Form verwendet.
Das Ganze funktioniert recht zuverlässig solange der Button "Neue Zeile" nicht verwendet wird. In diesem Beitrag geht es darum, auch auf neue Zeilen reagieren zu können.

Angenommen ich habe in meinem Tabular Form eine Spalte mit einem Textfeld und will den Wert nach dem ändern in eine andere Spalten im Tabular Form übernehmen.
Dazu muss zunächst in der Spalte von "Textfeld1" eine fiktive CSS Klasse hinterlegt werden.
Column Attributes > Element CSS Classes > tf_textfeld1

Normalerweise würden Sie nun eine Dynamic Action anlegen, die bei Veränderung (Change) auf die Klasse "tf_textfeld1" reagiert.
Im folgenden JavaScript Code übertragen Sie anschließend den Wert in das neue Feld:
$(this.triggeringElement).parent().parent().find('input[name=f02]').val($(this.triggeringElement).val());
Was passiert in dem Code Schnipsel?
Davon ausgehend das wir vom "Textfeld1" aus starten, wird über die parent() Funktion die nächst höhere Instanz aufgerufen.
Nach zwei Ebenen sind wir auf der TR-Ebene (Zeile). Nun suchen wir in dieser nach dem "Textfeld2" hinterlegt mit dem Namen "f02_xxxx". Der vordere Teil definiert die Spalte und der hintere Teil des Names verkörpert die Zeilennummer. Über die val() Funktion übergeben wir nun noch den Wert des Quell-Elements in das Zielelement.
Wie anfänglich erwähnt funktioniert diese Lösung nur solange Sie keine neuen Zeilen hinzufügen. Auch der Event Scope "Dynamic" löst dieses Problem NICHT.

Des Rätsels Lösung ist die Verwendung einer Funktion in Kombination mit einer Dynamic Action:
Gehen Sie dazu in die Page Defintion und hinterlegen Sie eine JS-Funktion.
function tfChangeEvent() {
$('.tf_textfeld1').on('change', function() {
$(this).parent().parent().find('input[name=f02]').val($(this).val());
});
}
Nun noch zwei Schritte bis zum Ziel:
1. Button: Dieser muss so konfiguriert werden, dass er durch eine Dynamic Action startet.

2. Dynamic Action: Diese muss nun die Funktionalität des "Neue Zeile" Button adaptieren und anschließend unsere Funktion aufrufen.
Code 1: apex.widget.tabular.addRow();
Code 2: tfChangeEvent();
Info: Fire On Page Load bei Code 2 nicht vergessen

Das wärs. Jetzt können Sie beliebig komplexe Szenarien entwickeln. Mit und ohne "Neue Zeile"! :)

Ps: Ich selbst habe es nicht mit einem Texfeld sondern mit einem PopUp LOV umgesetzt. Von daher könnte es sein, das der Change Event eher SubOptimal ist und ein LoseFocus besser geeignet wäre. 

APEX Anwendung importen und exportieren mit Hilfe des SQL Developers

$
0
0
Wussten Sie das der Oracle SQL Developer eine sehr gute APEX Integration bietet? Ich möchte dies Anhand der Import und Export Fähigkeit näher demonstrieren.

Im SQL Developer gibt es im Navigationsmenü neben den üblichen Verdächtigen (Tabellen, Funktionen, Triggern, ...) auch einen Punkt Namens: Application Express
Wenn Sie diesen öffnen, dann sehen Sie alle installierten APEX Anwendungen die auf das Schema referenziert sind.

Export
Über die Rechte Maustaste > Schnell-DDL > In Datei schreiben... können Sie die Anwendung exportieren.

Import
Rechte Maustaste auf Application Express, anschließend "Anwendung importieren..." auswählen. 
 Natürlich können Sie auch im SQL Developer alle Installations-Optionen wie in APEX mitgeben.
Und nun kommt etwas Neues!
Wenn die Installation gestartet ist, dann können Sie die komplette Installation im Log nachverfolgen.

Diese Info hat mir schon einmal mehrere Stunden Suche gespart. Denn falls Sie es hin bekommen eine APEX Anwendung zu zerstören, so dass der Import nicht mehr funktioniert. Können Sie mit Hilfe des SQL Developer's die genaue Stelle des Fehlers herausfinden und anschließend die Anwendung korrigieren und erneut exportieren.

Twitter und der Oracle SQL Developer

$
0
0
Der Oracle SQL Developer hat eine kurze und bewegte Geschichte hinter sich. Aus meiner persönlichen Sicht ist die Software inzwischen wirklich gereift, läuft performant und wirkt immer noch nicht überfrachtet. Nichts desto trotz gibt es auch im SQL Developer eine Reihe versteckter sehr nützlicher Features. Um diese den Leuten näher zu bringen, hat das Oracle SQL Developer Team einen sehr eleganten Weg gefunden. Sie nutzen einen Twitter Account OracleSQLDev. Unter diesem werden immer wieder die versteckten TOP Features gepostet. Um Ihnen das Leben leicht zu machen, habe ich mal die aus meiner Sicht bisher Besten zusammengefasst:






Ps.: Neues Feature unter 4.1

APEX 4.2.5 Tabular Form - Komischer Bug

$
0
0
In einem meiner Projekte habe ich etwas intensiver auf Tabular Forms gesetzt.

In gewissen Konstellationen habe ich immer wieder folgende Meldung nach einem Validierungsfehler erhalten:
Aktuelle Daten für tabulare Forms sind zu alt; die Quelldaten wurden geändert.
Klicken Sie hier, um Ihre Änderungen zu verwerfen und die Daten aus der Datenbank neu zu laden.


Eventuell auch in Englisch:
Current tabular form data is too old; the source data has been modified.
Click here to discard your changes and reload the data from the database.


Direkt kam mir der Gedanke mit der Sprache und der Number-Spalte (., Setzung). Habe auch danach gesucht:
https://community.oracle.com/thread/2458512

Aber mein Fehler hatte nix mit der Sprache zu tun, sondern lag an einem Unique Constraint.
https://community.oracle.com/thread/2143396

Sobald ich diesen gelöscht habe, gab es dieses Phänomen nicht mehr! Habe ich Ihn wieder hinzugefügt, so habe ich den Fehler direkt wieder erhalten. :(




APEX 5 EA Impressions: Custom jQuery / jQuery UI implementations

$
0
0
Next days / weeks I will post from my experiences with the new APEX 5 EA. Today I will show a common mistake in current APEX applications. Because APEX 4 has not the newest versions of jQuery or jQuery UI included. Even so the development continued and some developers just added newer version of jQuery (UI) into their page templates or headers. Unfortunately APEX 5 is not so happy about it. :)

Example of wrong page template implementations:

And how APEX 5 does handle it:
TypeError: e.widget.extend is not a function ...+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._ge...
 

The result is a not working application where even the Developer Toolbar is missing. Be aware of custom jQuery and jQuery UI implementations.



APEX 5 EA Impressions: Little visual changes

$
0
0
This time I will show you the small changes which will appear in every migrated APEX application.

For the better understanding I show you an old and a new example (all tested with Mac and Firefox):

Date Picker - Icon:

 Date Picker - Date Selector:



Rich Text Editor:

Interactive Report (IRR):
Compared to the other both examples the new IRR makes the biggest different. For that I added 3 examples with different themes to show you what you have to expect. 
As Joel Kallman already mentioned the IRR will not work with custom plugins or changes as it did before. None of my examples uses custom plugins or JS code. Only CSS code has maybe been modified!

Example 1 - Sample Application


Example 2

Example 3


So be aware that especially the interactive report does not look like before.  You may even have to consider more work in updating your application documentation.



APEX 5 EA Impressions: Pager Designer (Part 1)

$
0
0
The development with the new page designer feels different.
Before you can say if it is good or not. You will have to make a whole APEX project and force yourself to only use the new "Page Designer" instead of the old "Component View".

So in this post I will show you where everything ended up when you compare the old dropped "Tree View" with the new "Page Designer".

First we take a look at the old "Tree View":
There we have 4 different types: Processing, HTML Elements, Shared Components, Dynamic Actions
As you see most of the page is filled with type "Processing".

This has changed in the new "Page Designer".


The "HTML Elements" has taken most place. Important is the fact that the different types are still differenced on the left side.
You just need to click on the respective icon:

Each object on left and in the middle can be clicked. Details will appear on the right side and can be edited there.
If you still feel insecure then just switch to the old "Component View":
 




APEX 5 EA Impressions: Page Designer (Part 2)

$
0
0
In part 2 I want to show you a nice collection of valuable information about the new "Page Designer"

First link will lead to a great presentation from Scott Wesley (Nov 2014). It is a "must have" if you want to know more about the topic.



Next is information about a webinar presented by David Peake on Tue, Mar 31, 2015 6:00 PM - 7:00 PM CEST:
https://attendee.gotowebinar.com/register/1981463254531772929

Until then you can watch a video created by him about the new "Page Designer":
APEX 5.0 - Page Designer Grid Layout

Also Dimitri Gielis blogged about his impressions with the new "Page Designer":
http://dgielis.blogspot.de/2014/06/apex-50-page-designer-immediate.html

Another blog post shows you some of the differences in creating regions with APEX 4.2 Tree View and APEX 5 Page Designer:
http://apextips.blogspot.de/2015/02/apex-5-creating-regions-on-existing-page.html

Finally the new Early Adopter documentation completes my list:
https://docs.oracle.com/cd/E59726_01/doc.50/e39147/toc.htm

APEX 5 EA Impressions: Page Designer (Part 3)

$
0
0
I think one part of the "Page Designer" is quite unfamiliar even to experienced APEX developers.

It is the "Grid Layout". Even I still struggle getting used to this new feature.
For that I will give you a small example how to read the new grid.
Maybe some of you have seen my example application about RaphaelJS.

I migrated this application into the new APEX 5 EA. Btw: No issues occurred.

What you see are three regions. The one above is including a select item and below are the other two beside each other. One is showing the harbor (report-view on the left) and the other one is showing the detail mask (on the right).

Inside the new "Page Designer" it looks like this:

You can see all three regions including all detail elements in each region.

To make it even more clear I put both views together:

What you see on the left is a shortened version of the "Pager Designer Grid View", surrounded with different rectangles to show the different regions and arrows showing to the right. There you see the application marked with the belonged rectangles.
Maybe you have seen that the button area on the left is shortened because of lack of space. But this example makes one thing clear. You need a big screen to not get the wrong perspective on the new "Grid View". For that I propose a curved 34" monitor. ;)

Sure it is not easy getting used to the new "Grid View" but on the other side if you are new to APEX it will be a really handy tool to learn and build even faster. :)

Oracle SQL: Calculate the amount of workdays (Mon-Fri) between two dates

$
0
0
I searched the net for a problem in finding a way to calculate the workdays between two date values. After I tested a couple of solutions I focused to one where I didn't necessarily need a extra select to solve that issue.

I found a post at asktom.oracle.com
The described function itself looked like that:
-- Created by Sonali Kelkar from Newton, MA USA
CREATE OR REPLACE FUNCTION num_business_days(start_date IN DATE, end_date IN DATE)
RETURN NUMBER IS
busdays NUMBER := 0;
stDate DATE;
enDate DATE;

BEGIN

stDate := TRUNC(start_date);
enDate := TRUNC(end_date);

if enDate >= stDate
then
-- Get the absolute date range
busdays := enDate - stDate
-- Now subtract the weekends
-- this statement rounds the range to whole weeks (using
-- TRUNC and determines the number of days in the range.
-- then it divides by 7 to get the number of weeks, and
-- multiplies by 2 to get the number of weekend days.
- ((TRUNC(enDate,'D')-TRUNC(stDate,'D'))/7)*2
-- Add one to make the range inclusive
+ 1;

/* Adjust for ending date on a saturday */
IF TO_CHAR(enDate,'D') = '7' THEN
busdays := busdays - 1;
END IF;

/* Adjust for starting date on a sunday */
IF TO_CHAR(stDate,'D') = '1' THEN
busdays := busdays - 1;
END IF;
else
busdays := 0;
END IF;

RETURN(busdays);
END;
/
I did had some issues with the TO_CHAR(stDate,'D') logic and my German character set.
Because of this I looked further and found a solution by Frank Kulash at the Oracle forum:
1 + TRUNC (dt)
- TRUNC (dt, 'IW')
Finally I was able creating a logic which I could use in my select. To make it more readable for you I created a from dual select:
select 
(end_date-start_date)
- (((TRUNC(end_date,'D')-TRUNC(start_date,'D'))/7)*2)
+ 1
- case when (1 + TRUNC (end_date) - TRUNC (end_date, 'IW')) = '6' then 1 else 0 end
- case when (1 + TRUNC (end_date) - TRUNC (end_date, 'IW')) = '7' then 2 else 0 end
+ case when (1 + TRUNC (start_date) - TRUNC (start_date, 'IW')) = '7' then 1 else 0 end
as amount_of_workdays
from
( select
to_date('06.03.2015','dd.mm.yyyy') as start_date,
to_date('07.03.2015','dd.mm.yyyy') as end_date
from dual
)

APEX 5 & Hackathon der Deutschen Bahn in Frankfurt

$
0
0
Wir alle wissen wie schnell es möglich ist mit Hilfe von Oracle APEX professionelle Anwendungen zu bauen. Nun wird es Zeit das Ganze in einer Challenge zu beweisen.

Die Deutsche Bahn veranstaltet am 20. und 21. März in Frankfurt am Main die DB Open Data-Train Challenge.

Ich werde Teil eines 4-Mann Teams sein und alles geben um APEX scheinen zu lassen. Um den Ganzen noch mehr Würze zu geben, werden wir die Anwendung mit einem APEX 5 Prototypen erstellen. ;)

Wer im Raum Frankfurt wohnt und bereit ist für eine richtige Challenge der kann sich hier anmelden:
https://www.eventbrite.com/e/db-open-data-train-challenge-tickets-16026244930

Links rund um das Thema:
http://www.heise.de/developer/meldung/Hackathon-der-Deutschen-Bahn-in-Frankfurt-2571719.html
http://www.informatik-aktuell.de/aktuelle-meldungen/2015/maerz/hackathon-bei-der-bahn-eisenbahn-spielen-fuer-grosse.html
https://www.aixpro.de/hackathon-der-deutschen-bahn-in-frankfurt/
http://www.hackevents.co/hackathon/frankfurt/db-open-data-train-challenge/

Viewing all 177 articles
Browse latest View live