lsFusion 4: Pivot-Tabellen, Diagramme, Karten und Kalender, OAuth-Authentifizierung, dunkles Thema und mehr





lsFusion. gif- ( ). , - lsFusion.







lsFusion ( ). , ( , ).







, ( ), ( ) — UI .







, , . . , , ( ). MyCompany. ( , , ), , . , , , , .







, , .











. : . , , — , , , , - , , .







, , . , frontend ( javascript HTML). , , ( Java Swing RCP) . . . , , , - ( http-). - lsFusion OLTP-, , . - , lsFusion -.









, lsFusion ( , , ) , , (BI) ( , BI- ). , , , , .







lsFusion . ( ) , , . , , .











Beachten Sie, dass auf physischer Ebene der Gruppierungsvorgang in Gruppierungsansichten sowohl auf dem Datenbankserver als auch auf dem Client ausgefĂŒhrt werden kann. Die Plattform verwaltet diese Auswahl automatisch: Wenn die Anzahl der Gruppen abnimmt oder die Menge der Anfangsdaten unter dem Schwellenwert liegt, werden die Daten auf dem Client verarbeitet (um unnötige Anrufe an den Server auszuschließen). In den meisten anderen FĂ€llen wird die Gruppierung auf dem SQL Server mithilfe einer Abfrage durchgefĂŒhrt (Zwischensummen werden jedoch weiterhin auf dem Client berechnet).







Die Gruppierung kann vom Benutzer ĂŒber die entsprechende Drag-Drop-OberflĂ€che geĂ€ndert werden. Der Entwickler kann Gruppierungen mithilfe der entsprechenden Syntax in der FORM-Anweisung definieren.

FORM myReport

    OBJECTS l = Ledger PIVOT 'Area Chart'

    PROPERTIES (l) customer ROW, sum MEASURE

;





Übersichtstabelle



. , :







  • . , — --, .
  • . , .


, , , , Excel . :







  1. ( ), ( drag-drop ). , ( , ).
  2. Excel , , /


(drill-down) — , , , , , .







, , , (, ), . - , .

















, .







/ :







  • ( / , / )






. open-source plotly, ( ). , ( , , , ), .







img-, ( / ) . , , , , , .









, ( -) , . , time-tracking, ..







lsFusion :







    • / .
    • , , ..
    • ,
    • ( ), ( ).
    • .
    • ( ).










, , . :







    • longitude —
    • latitude —
    • polygon —
    • line —
    • icon —
    • ..
    • date, dateTime — /
    • dateFrom, dateTimeFrom — /
    • dateTo, dateTimeTo — /
    • name —
    • ..
FORM map 'Map'

    OBJECTS o = Element MAP

    PROPERTIES (o) longitude, latitude, polygon

    PROPERTIES name = name(o) IF o IS Point, color = RGB(25500IF isInAnyArea(o)

    PROPERTIES SHOWIF o IS Point namePopup = name(o) PANEL, inParis '' = 'I am ' + (CASE WHEN isInAnyArea(o) THEN '' ELSE 'not ') + 'in Paris. Drag me' PANEL

    PROPERTIES (o) 'Add point' = NEW[Point], 'Add area' = NEW[Area], DELETE

;

FORM calendar 'Calendar'

    OBJECTS e = Event CALENDAR

    PROPERTIES (e) date, name, NEWDELETE

;





Falls gewĂŒnscht, können Sie mit der Karte und dem Kalender auf der offiziellen lsFusion- Website im Abschnitt Online testen (Plattformmodus -> Karte und Kalender) experimentieren .



Benutzerdefinierte Ansichten



UnabhĂ€ngig davon, welche Ansichten in lsFusion standardmĂ€ĂŸig unterstĂŒtzt werden, sind sie möglicherweise nicht immer ausreichend (oder es sind möglicherweise nicht genĂŒgend Einstellungen in vorhandenen Ansichten vorhanden). Um das Problem im allgemeinen Fall zu lösen, unterstĂŒtzt die Plattform die sogenannten benutzerdefinierten Ansichten.







Die UnterstĂŒtzung dieser Ansichten besteht aus zwei Teilen:







  1. javascript css web-. , web ( ) , -, , web-. , , , , .
  2. . javascript-, ( window , javascript function window, ). :
    • element — DOM,
    • objects — javascript-, ( = , = )
    • controller — javascript-, / (, , ).


.







web js css ( , test.js test.css):



function calendar(element, objects, controller) {
    if(controller.calendar == null) { // lazy initialization
        controller.calendar = new FullCalendar.Calendar(element, {
            height: 'parent',
            editable: true,
            eventChange: function(info) {
                controller.changeDateProperty('date', controller.objects[info.event.extendedProps.index], info.event.start.getFullYear(),
                    info.event.start.getMonth() + 1,info.event.start.getUTCDate() + 1); // month and day are zero-based in full calendar
            },
            eventClick: function(info) {
                controller.changeSimpleGroupObject(controller.objects[info.event.extendedProps.index], false, info.el);
            }
        });
        setTimeout(function () {
            controller.calendar.render();
        }, 0);
    }

    controller.objects = objects; // need to save it to work with changes
    controller.calendar.setOption('events', objects.map((obj, index) =>
        Object.assign({}, obj, {
            index: index, // needed to work with changes
            classNames: controller.isCurrent(obj) ? 'event-highlight' : '' // highlighting current element
        })));
}

      
      





.event-highlight {
    border-color: #2C4751;
    background-color: #2C4751;
}

      
      





(web) ( js css, web, -, ).

, e:

CLASS Event;

date = DATA DATE (Event);

date(Event e) <- currentDate() WHEN SET(e IS Event);

title = DATA STRING (Event);

title(Event e) <- 'Event' + e WHEN SET(e IS Event);



FORM calendar

    OBJECTS e=Event CUSTOM 'calendar'

    PROPERTIES (e) date, title, NEWEDITDELETE 

;



NAVIGATOR {

    NEW calendar;

}





:









lsFusion , Flatlaf, , , , Intellij. - Flatlaf , - «» . lsFusion :







  • ( ) — -
  • — -


«» . , , / ( ). , lsFusion , , , - ( ). (, ).









OAuth



«»: , , , . :







  • - ( ). , .
  • .


( ) OAuth . , (, lsFusion) / . / , / (, — ). « » lsFusion / : Facebook, Google, Github, . (Authorization URI, Token URI ..). , ( OAuth , , , ).







lsFusion — «» « ». «» -. « » (, ).









, ( «», OAuth-) « ». , « ». , , , , .







url user password ( http://myserver?user=X&password=Y



). , , , , VPN.









lsFusion :







  • ( , 'Some text {x.y}'



    ).
  • - :
    • ( ),
    • .


, , . :







  • / .
  • ( ).


« ». :







  • , , .
  • , , , .
  • , ( ).


, , :







  • , ;
  • « », .


:







  • , ;
  • .


:







  • .
  • , , Google Translate. , . , .
  • , .
  • PROFIT


, , , - lsFusion. / : guestuk / guestuk ( ), guestbe / guestbe ( ).









lsFusion, , , . :







  • CTRL ( Excel). , ( EDIT_OBJECT



    ) .
  • « » .
  • ( ) « ».
  • ( CHANGE



    , , )


, .







. , .









« »



lsFusion ( ), ( ) . :







  • .
  • , .


. N+1, , , .







-.
(GROUP_CHANGE) :

onChange(a);

PUSH REQUEST

    FOR [FILTER formY.a](ga) AND NOT a=ga DO

        onChange(ga);





onChange — (CHANGE), a — ( , ).

, f(a,b) :

DIALOG formX OBJECTS x = f(a,b) CHANGE//   formX,   f(a,b)    x





? «». ( CHANGE , ):

REQUEST 

    DIALOG formX OBJECTS x=f(a,b) INPUT DO requestedX() <- x; 

DO 

    f(a,b) <- requestedX();



PUSH REQUEST 

    FOR [FILTER formY.a](ga) AND NOT a=ga DO

        REQUEST 

            DIALOG formX OBJECTS x=f(a,b) INPUT DO requestedX() <- x; 

        DO 

            f(a,b) <- requestedX();





PUSH REQUEST REQUEST ( DO ). , :

PUSH REQUEST 

    FOR [FILTER formY.a](ga) AND NOT a=ga DO

        f(a,b) <- requestedX();





, lsFusion, FOR WHERE:

PUSH REQUEST 

        f(a,b) <- requestedX() WHERE [FILTER formY.a](ga) AND NOT a=ga;





, « ».


, (, , ).











( , ) — . , . , :





DESIGN order {

    caption = ' â„–' + number(o);



    lines {

        caption  = ' (' + (GROUP SUM 1 IF line(OrderDetail od) = o) + ')';

    }

}







, . (, width pattern) ( )









:







  • .
  • , .


, , , . , , . , lsFusion . , ( ). , .











lsFusion « » — (, , , ..). , , , , , , , , ( ). / ( , ).







, , , «». .









, ( ), / - .







http-



, . , - 2 :







  • . javascript, , , css html ( ) .
  • «» . , / , .


( Chrome V8 ), , , . , , — , http-. http- , .







Nun zurĂŒck zu lsFusion. FĂŒr die Arbeit mit externen Systemen, einschließlich des http-Protokolls, verwendet die Plattform den Operator EXTERNAL. Die Besonderheit dieses Operators ist zwar, dass er in der dritten Version nur auf dem Server ausgefĂŒhrt werden konnte, was bedeutet, dass es unmöglich war, ihn fĂŒr dieselbe Arbeit mit GerĂ€ten auf dem Client zu verwenden. Dementsprechend wurde es in der vierten Version der Plattform fĂŒr das HTTP-Protokoll möglich, den EXTERNAL-Operator auf dem Client auszufĂŒhren. Syntaktisch sieht es so aus:





reportX(Pos p) {

    generateUUID();

    EXPORT reportX JSON CHARSET 'UTF-8';

    TRY {

        EXTERNAL HTTP CLIENT 'http://' + hostname(p) + ':16732/requests' PARAMS exportFile();

    } CATCH {

        CASE

            WHEN statusHttp() > 299 THEN

                MESSAGE ' - ' + STRING(statusHttp());

            WHEN NOT statusHttp() THEN

                MESSAGE ' -      v.10';

            ELSE

                MESSAGE ' -      v.10';

    }

}





Genau wie beim AusfĂŒhren anderer Clientaktionen (z. B. Anzeigen von Formularen / Nachrichten) stoppt die Plattform selbst die Aktion auf dem Server, ĂŒbertrĂ€gt die Kontrolle an den Client, fĂŒhrt dort eine http-Anforderung aus, gibt dann die Kontrolle an den Server zurĂŒck und setzt die AusfĂŒhrung der gestoppten Aktion auf dem Server fort.





, . , , , . , , , . , — «» ( OBJECTS) / . , , — FILTERS :





exportAndShowIncomes (Supplier s) {

    // i -      (incomes)

    EXPORT incomes FILTERS supplier(i) = s;

    open(exportFile());

    DIALOG incomes FILTERS supplier(i) = s;

}





Wie bei berechneten Titeln ist eine wichtige Neuerung nicht die FunktionalitĂ€t, zusĂ€tzliche Filter zum Formular selbst hinzuzufĂŒgen, sondern im Allgemeinen die Infrastruktur fĂŒr die Verwendung des Kontexts zum Öffnen des Formulars innerhalb des Formulars. In zukĂŒnftigen Versionen ist es daher einfach, die UnterstĂŒtzung fĂŒr das HinzufĂŒgen beispielsweise zusĂ€tzlicher Eigenschaften oder AuftrĂ€ge beim Öffnen eines Formulars zu implementieren. Beim HinzufĂŒgen dieser Elemente können Sie auch Parameter aus dem Kontext des Öffnens des Formulars verwenden. Alle diese zusĂ€tzlichen Elemente (mit Ausnahme von Filtern) hĂ€ngen jedoch viel seltener vom Kontext ab. Um sie hinzuzufĂŒgen, wĂ€re es dennoch logischer, den Vererbungs- (Aggregations-) Mechanismus von Formularen zu verwenden, der auch in einer der nĂ€chsten Versionen enthalten sein wird (dieser Mechanismus wird in der nĂ€chsten ausfĂŒhrlich beschrieben Artikel).



DOM-Optimierung



, lsFusion -, - . , (- ), Swing ( , / ), / HTML DOM. , . , . , :







  1. “” -.
  2. - .


— . , lsFusion- ( -), . - ( lsFusion), DOM . , - MyCompany ( ). , , ( , / , ).









( github). , (UX) developer experience (DX), . ( -) , .







MyCompany. (, custom-made ), , . -, ERP-, / «» . MyCompany. SME ( ERP ), ( , , Apache 2.0 ). WMS, , , WMS - ( lsFusion), - ( -).










All Articles