Suche // Search:

Posts mit dem Label Calendar werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Calendar werden angezeigt. Alle Posts anzeigen

17.10.2011

Flexible Datumseingabe durch Datumsmuster
//
Flexible input of dates with date patterns

Ok, Datumsfelder sind ja sehr geläufig in Formularen, aber so richtig bequem sind sie manchmal nicht. Gerade wenn man das Datum in einem ganz bestimmten Format benötigt, scheitert es meistens an den Eigenheiten des Benutzers, wie er das Datum eingibt.
Klar, man kann ein Validierungsmuster definieren, wodurch der Benutzer informiert wird, wenn das eingegebene Datum nicht dem richtigen Format entspricht.
Wollen Sie, dass der Benutzer das Datum nur in diesem Format 17.10.2011 eingibt, verwenden Sie als Validierungsmuster date{DD.MM.YYYY}.
Entspricht die Eingabe nicht dem Muster, kommt eine Fehlermeldung.
Aber spätestens beim 3. Validierungsfehler hat der Benutzer dann auch keine Lust mehr.

Sie können das Problem für beide Seiten elegant lösen indem Sie auch Muster für das Bearbeiten und Anzeigen definieren.

So ein Muster beschreibt einfach, wie der Wert formatiert sein oder werden muss.
Durch die Möglichkeit mehrere Muster auch miteinander zu kombinieren, können Sie so vielfältige Eingaben erlauben und dennoch immer ein Datum nach einem festen Muster angezeigt bekommen.

Die Kombination aus diesen Bearbeitungsmustern date{DD.MM.YYYY}| date{DD:MM:YYYY}| date{DDMMYYYY}| date{DD MM YYYY}| date{DD-MM-YYYY}| date{DD,MM,YYYY}| date{DD/MM/YYYY}| date{DD.MM.YY}| date{DD:MM:YY}| date{DDMMYY}| date{DD MM YY}| date{DD-MM-YY}| date{DD,MM,YY}| date{DD/MM/YY} lässt verschiedenste Eingabeformate zu.

So kann der Benutzer das Datum als 17.10.2011, 17:10:2011, 17102011, 17 10 2011, 17-10-2011 usw. eingeben.
Über das Anzeigemuster date{DD.MM.YYYY} werden diese allesamt wieder in das Format 17.10.2011 umgewandelt, wodurch dann auch die Validierung erfolgreich ist.


Ok, date fields are very popular in forms, but sometimes not that comfortable as expected.
Especially when you need the date to be formatted in a specific way, it often fails with the way the user enters the date.
Sure, you can use a validation pattern to inform the users when the input is not correct.
If you want the user to enter dates like 10/17/2011 use the validation pattern date{MM/DD/YYYY}.
Does the entered date not match the pattern an error message is displayed.
But at least after the third failed attempt to enter the date correctly the user gets upset.

You can avoid such pitfalls when you use patterns for editing and displaying too.

With a pattern you simply describe, how a value has to be or will be formatted.
With the opportunity to combine several patterns you offer the user manifold ways for entering dates but also get the dates displayed in the one desired format.

The combination of these edit patterns date{MM.DD.YYYY}| date{MM:DD:YYYY}| date{MMDDYYYY}| date{MM DD YYYY}| date{MM-DD-YYYY}| date{MM,DD,YYYY}| date{MM/DD/YYYY}| date{MM.DD.YY}| date{MM:DD:YY}| date{MMDDYY}|date{MM DD YY}| date{MM-DD-YY}| date{MM,DD,YY}| date{MM/DD/YY} allows manifold way of entering.

So the user is allowed to enter the date 10/17/2011 as 10.17.2011, 10:17:2011, 10172011, 10 17 2011, 10-17-2011 and so on.
Through the display pattern date{MM/DD/YYYY} all those inputs will be formatted into 10/17/2011 which why the validation then is successful too.


Muster für Datumsfeld festlegen
//
Define patterns for date field
Anzeigemuster // Display pattern

Kombinierte Bearbeitungsmuster // Combined edit patterns


Validierungsmuster // Validation pattern

Beispielformular
//
Sample form

https://files.acrobat.com/preview/62ba90f1-c6df-4e8b-89b3-263d61f6aa88

12.01.2011

XFA Terminkalender
//
XFA Appointment Calendar

Heute will ich mal zeigen, was man alles mit XFA-Formularen und FormCalc realisieren kann. Dieses Beispiel ist ein Terminkalender.

Wenn Sie ein Jahr auswählen werden sämtliche Monate, Wochen und Tage durch ein Skript berechnet und der Kalender gerendert.
Allerdings ist dieser Vorgangs sehr rechenintensiv und dauert je nach Rechenleistung auch mal eine Minute und länger.

Besonderheiten:
In diesem Beispiel werden die Wochenenden ausgenommen, da man da gewöhnlich nicht arbeitet.
Zeiten bei denen eine Notiz oder ein Termin hinterlegt wurden, werden automatisch durch eine Farbe hervorgehoben.
Des Weiteren wird auch der heutige Tag wird in der Kopfzeile hervorgehoben.


Today I like to show what is possible with XFA forms and FormCalc. This example is an appointment calender.

If you select a year a script starts to calculate all months, week and days in front of rendering the calendar.
But, this progress need thousands of calculations and takes about a minute or longer to finish, depending on the computing power.

Features:
In the example all weekends are excluded because you generally do not work on this days.
Timeslots where a note or appointment has been added are automatically highlighted by a color.
Also, the current date is highlighted in the headline.

Kalender // Calendar


FormCalc-Skript - Berechnung der Kalenderblätter
//
FormCalc script - Calculation of the Calendar Sheets

if (RenderForm.value eq 1) then
    var nPages = Page.instanceManager.count 
    var nStart
    var nLength
    var nIndex
    var nDayNumber
    var nDayName 
    var nWeekDay
    var nWeekNumber
    var nYear = Year
    var nBegin
    var nFirstDay
    var nLastDay
    var nAddDay
    var nCheck

 for p = 0 upto nPages - 1 step 1 do
    nBegin = Concat("1.", p+1, ".", nYear)
    nFirstDay = Date2Num(nBegin, "D.M.YYYY")
    nAddDay = nFirstDay


    for d = 0 upto 31 step 1 do
        nAddDay = nAddDay + 1
        nCheck = Num2Date(nAddDay, "M")
        if (nCheck eq p+1) then
            nLastDay = nAddDay
        endif
    endfor

    nLength = Num2Date(nLastDay, "D")
    Page[p].Head.Month = Num2Date(Date2Num(nBegin, "D.M.YYYY"), "MMMM")
    Page[p].Body._Day.setInstances(nLength)
    nStart = Date2Num(nBegin, "D.M.YYYY")

    for d = 0 upto nLength - 1 step 1 do 
        nIndex = Sum(nStart, d)
        nDayNumber = Num2Date(nIndex, "DD")
        nDayName = Num2Date(nIndex, "EEE")
        nWeekDay = Num2Date(nIndex, "E")
        nWeekNumber = Num2Date(nIndex, "WW")
        if(nWeekDay eq "1" or nWeekDay eq "7") then
            Page[p].Body.Day[d].DayName.Text.w = S_S.value
            Page[p].Body.Day[d].DayName.Text.border.fill.color.value = "128,128,128"
            Page[p].Body.Day[d].Week.Text.w = S_S.value
            Page[p].Body.Day[d].Detail[*].Notes.w = S_S.value
            Page[p].Body.Day[d].Detail[*].Notes.ui.textEdit.border.fill.color.value = "128,128,128"
            Page[p].Body.Day[d].Detail[*].Notes.margin.topInset = "0.0mm"
            Page[p].Body.Day[d].Detail[*].Notes.margin.bottomInset = "0.0mm"
            Page[p].Body.Day[d].Detail[*].Notes.margin.leftInset = "0.0mm"
            Page[p].Body.Day[d].Detail[*].Notes.margin.rightInset = "0.0mm"
            Page[p].Body.Day[d].DayName.Text.value.text.value = ""
            Page[p].Body.Day[d].Week.Text.value.text.value = ""
        else
            Page[p].Body.Day[d].DayName.Text.w = M_F.value  
            Page[p].Body.Day[d].DayName.Text.border.fill.color.value = "255,255,255"
            Page[p].Body.Day[d].Week.Text.w = M_F.value 
            Page[p].Body.Day[d].Detail[*].Notes.w = M_F.value
            Page[p].Body.Day[d].Detail[*].Notes.ui.textEdit.border.fill.color.value = "255,255,255"
            Page[p].Body.Day[d].Detail[*].Notes.margin.topInset = "0.5mm"
            Page[p].Body.Day[d].Detail[*].Notes.margin.bottomInset = "0.5mm"
            Page[p].Body.Day[d].Detail[*].Notes.margin.leftInset = "0.5mm"
            Page[p].Body.Day[d].Detail[*].Notes.margin.rightInset = "0.5mm"
            Page[p].Body.Day[d].DayName.Text.value.text.value = Concat(nDayNumber, ".\u000a", nDayName)

            if(nWeekDay == "2") then
                Page[p].Body.Day[d].Week.Text.value.text.value = nWeekNumber
            else
                Page[p].Body.Day[d].Week.Text.value.text.value = ""
            endif
        endif
    endfor
endfor
RenderForm.value = 0
endif

Beispiel-Kalender // Example Calendar
https://acrobat.com/#d=YpV-ajdmwMmAXZHUPL1E-g