Kategorien
Allgemein

Report per DA aktualisieren: Geblätterte Seite beibehalten

Die Dynamic Action (DA) vom Typ “Refresh” ist eine schöne Sache, um Items, Regionen und Reports zu aktualisieren. Allerdings bin ich dabei über ein Problem gestoßen:

Ich habe für einen Report eine DA  erstellt, die bestimmte Daten manipuliert und danach den Report aktualisiert. Das Problem war nur, dass der Report nicht die geblätterte Seite anzeigte, sondern wieder zur ersten Seite zurück sprang. Das klappte weder im Classic noch im Interactive Report.

Hier eine Demo: http://apex-experts.de/ords/f?p=130:2

Kategorien
Allgemein

APEX Bug Fixes: Übersicht und Verlauf

Im Juli 2016 wurde das Patch Set APEX 5.0.4 veröffentlicht. Ein guter Zeitpunkt um sich mal anzuschauen, wie viele Fehler in der Vergangenheit gefunden und behoben wurden.

Kategorien
Allgemein

Benutzername (APEX/OS/Database) in PL/SQL ermitteln

In Oracle-Funktionen und -Triggern hole ich mir den aktuellen Benutzer meistens über folgende Logik:

coalesce(
    sys_context('apex$session', 'app_user')
  , sys_context('userenv', 'os_user')
  , sys_context('userenv', 'session_user')
);

Der Vorteil davon ist, dass das ganze sowohl mit APEX als auch unabhängig davon funktioniert.

Kategorien
Allgemein

Vorlage: create table + trigger + sequence (Oracle)

Wenn ich die Wahl habe, erstelle ich eine Tabelle in Oracle-Datenbanken mit folgender Grundstruktur:

create table NEW_TABLE (
    id number not null 
  , my_column varchar2(200)
  , created_on date 
  , created_by varchar2(200)
  , updated_on date 
  , updated_by varchar2(200) 
);

create unique index NEW_TABLE_pk on NEW_TABLE (id asc);

alter table NEW_TABLE
add constraint NEW_TABLE_pk primary key (id)
using index NEW_TABLE_pk enable;


create sequence NEW_TABLE_seq increment by 1;


create or replace trigger NEW_TABLE_trg 
    before insert or update on NEW_TABLE
    for each row
declare
    v_user varchar2(200);
begin
    v_user := coalesce(
                sys_context('apex$session', 'app_user'), 
                sys_context('userenv', 'os_user'), 
                sys_context('userenv', 'session_user') );
    if inserting then
        if :new.id is null then
            :new.id := NEW_TABLE_seq.nextval; 
        end if;
       :new.created_on := sysdate;
       :new.created_by := v_user;
       :new.updated_on := sysdate;
       :new.updated_by := v_user;
    end if;
    if updating then
        :new.updated_on := sysdate;
        :new.updated_by := v_user;
    end if;
end; 
/

alter trigger NEW_TABLE_trg enable;
Kategorien
Allgemein Kleine Tipps

Ist Benutzer angemeldet als Entwickler?

Manchmal muss man wissen, ob der angemeldete Applikations-Benutzer  auch als Entwickler im Workspace angemeldet ist. Das kann man über die undokumentierte PL/SQL-Funktion apex_application.g_edit_cookie_session_id herausfinden.

Die Funktion gibt uns die ID der Workspace-Session zurück. (Im Gegensatz zur Funktion apex_application.g_cookie_session_id bzw. zum Substitution String :APP_SESSION, die uns die Session ID der Anwendung zurück geben.)

Dieser Tipp wurde vor längerer Zeit schon von Patrick Wolf gepostet.

http://www.inside-oracle-apex.com/is-my-application-running-in-developer-mode/

Weil ich nicht mit Google-Skills, sondern erst durch Zufall wieder auf diesen Beitrag gestoßen bin, erwähne ich es hier noch einmal.

Mit der Workspace-Session-ID kann man übrigens auch weitere interessante Sachen anstellen. Unter anderem ist damit ein Deep Link zum Workspace möglich und man kann z.B. eine bestimmte Stelle im Page Designer verklinken. Derartige Links sind ohne gültige Session nicht möglich, denn man landet nach dem Login immer auf der Startseite des Workspaces.

Übrigens: Wenn man wissen möchte, ob der angemeldete Benutzer prinzipiell Workspace-Rechte besitzt, auch wenn die Seite nicht im Developer Mode läuft, dann hilft sicher mein Tipp “Feststellen ob Benutzer APEX-Developer ist”.

Kategorien
Allgemein

IE11: Textfelder werden nach Schließen von Modal Dialogen inaktiv

Für alle diejenigen, die APEX 5.0 in Verbindung mit Modal Dialog (Universal Theme) und Internet Explorer benutzen, ist dieser Hinweis wichtig.

Nach dem Schließen von Modal Dialogen kann es passieren, dass Textfelder und Textareas inaktiv und damit nicht mehr benutzbar sind. Beispiel: Wenn man vom Interactive Report (IR) eine Modal Page öffnet, dort in ein Textfeld klickt und danach das Fenster mit Cancel oder der Schaltfläche Schließen (rechts oben) schließt, ist das kleine Suchfeld des IR inaktiv. Erst nach einem Page Reload ist es dann wieder normal nutzbar.

John Snyders hat glücklicherweise eine Lösung gefunden und im Oracle Form veröffentlicht.
Der entscheidende Hinweis: In der aufrufenden Seite folgenden Javascript Code unter “Execute when Page Loads” einfügen.

$("body").on("dialogclose", ".ui-dialog--apex", function() {
    $(this).find("iframe").attr("src", "");
});
Kategorien
Allgemein Kleine Tipps

Classic Report über gesamte Breite strecken

Update:

Ich habe irgendwann durch Zufall gesehen, dass man auch auf deklarativem Weg einen Classic Report über die ganze Region strecken kann. Einfach den Haken setzen unter Classic-Report >> Attributes >> Template Options >> Stretch Report.

Das ist natürlich besser (!), weil deklarativ, weil Standard und für spätere APEX-Updates wartungsfrei.

Kategorien
Allgemein

APEX 5.1 EA is coming

apex_51_ea_is_coming

Something is happening on apexea.oracle.com. It looks like the APEX team is preparing the first 5.1 early adopter release. At the moment you can see only a coming soon page. However yesterday I visited the page and for a couple of minutes I was able to see these screens:

Kategorien
Allgemein

Wie stelle ich fest, ob der Benutzer ein APEX-Entwickler ist?

teaser_is_user_apex_developer

In einem meiner letzten Projekte musste ich wissen, ob der angemeldete Benutzer auch Entwicklerrechte für den Workspace hat oder ob es sich “nur” um einen normalen User handelt.

Im Unterschied zu einem anderen Tipp möchte ich nicht feststellen, ob er auch bereits am Workspace eingeloggt ist. Ich möchte wissen, ob er für den Workspace freigeschaltet ist und sich anmelden könnte.

Der Aufruf APEX_UTIL.GET_USER_ROLES(:APP_USER) kann uns dabei folgendermaßen weiterhelfen.

Kategorien
Allgemein

APEX User Roles: Eine Übersicht

Hier eine Übersicht darüber, welche Werte die Funktion APEX_UTIL.GET_USER_ROLES(p_user_name) zurückgibt. Diese Benutzerrechte kann man im APEX-Workspace einstellen unter Workspace-Administration >> Manager Users and Groups >> Users.


Workspace-Administrator
ADMIN:CREATE:EDIT:HELP:MONITOR:SQL:DATA_LOADER

apex_role_admin
Option “Workspace Administrator” ausgewählt