Oto moje zdanie - proszę dać mi znać, jeśli czegoś mi brakuje:
oparta na opcji Outlook nawrotu, masz tabelę z regularnych wymagane pola:
FieldName DataType Sample Data
ID int primary key
EventID int foreign key (to EventID from Event Table)
StartTime DateTime 8:00 AM
EndTime DateTime 8:30 AM
Duration int 30 (minutes)
StartDate DateTime 01/25/2014
EndBy DateTime 01/25/2024
NoEndDate bit False
NumOccurrences int 10
RecurrenceType int ****See below for instructions on how to use these last 6 fields
Int1 int
Int2 int
Int3 int
String1 nvarchar(50)
IntYears int
Oto, gdzie dzieje się magia. ta logika wymaga tylko 4 liczb całkowitych i jednego ciągu.
The month of year (1 = Jan, 12 = Dec),
The day of the month (1 = the 1st, 31 = 31st),
Day of the week (0 = Sunday, 1=Monday, 6= Saturday),
Week of the month (1 = first, 4 = forth, 5 = last),
Yearly reocurrence (1=1,2=2)
When multiple days can be selected I use a comma delimited string (1,3,5 = Monday, Wed, Friday)
I wprowadzić 3 liczb całkowitych w kolejności, w jakiej pojawiają się w Outlook Powołanie Powtarzanie scheduler, oszczędza dodatkowych feilds, logika, rozdrażnienie. * Jeśli otworzysz do terminarza perspektywy APPT, to będzie nieco łatwiejsze do naśladowania:
The RecurrenceType field can be any of the 7 following choices
(Są 2 opcje dziennym, miesięcznym i rocznym oraz jedna opcja za tydzień):
10 = Daily (Every `Int1` day(s))
Every 4 day(s)
11 = Daily (Every Weekday) -- no variables needed
Every Weekday (MTWTF)
20 = Weekly (Recur every `Int1` week(s) on: `String1`
Recur every 3 week(s) on Monday, Wednesday, Friday
(`String1` will be a list of days selected (0=Sunday, 1=Monday, 2=Tuesday... 7=Saturday) so for (Mon, Wed, Fri) String1 would hold "1,3,5". You would parse this on the code side to pull the actual days.)
30 = Monthly (Day `Int1` of every `int2' month(s)
Day 28 of every 2 month(s)
31 = Monthly (The `Int1` `Int2` of every `Int3` month(s)
The forth Tuesday of every 1 month(s)
40 = Yearly (Recur every `intYears` year(s) On `Int1` `Int2`) --
Recur every 1 year(s) on Jan 28th
41 = Yearly (Recur every `intYears` year(s) on the `Int1` `Int2` of `Int3`) --
Recur every 1 year(s) on the forth Tuesday of January
Kod ciągnąć lub zapisać reocurrence staje się dość prosta
if (RecurrenceType = 10)
Every `int1` days
if (RecurrenceType = 11)
Every Weekday
if (RecurrenceType = 20)
Every `int1 weeks on
parse `string1` and populate checkboxes for Mon, Tues, ...
if (RecurrenceType = 30)
`int1 day of every `int2` month
etc...
Mam nadzieję, że wyjaśnię to wystarczająco dokładnie. Daj mi znać, jeśli coś jest niejasne lub nie działa. Buduję to dla bieżącej aplikacji. Dziękuje za wszystko.
Hej! Świetna odpowiedź! Pozostawia mi jedno otwarte pytanie: czy istnieje szybki sposób obliczania wszystkich dat między datą początkową a końcową według daty, bez powtarzania każdej daty? –