GXScheduler
ユーザーコントロールを使用すると、開催されるイベントのスケジュールを管理できます。イベントは日、週、月ごとに表示でき、マウスを使ってコントロール上で直接追加、更新、削除できます。
イベントは、ユーザーコントロールの実装によって提供される既定の編集コントロールか、
ナレッジベースで定義されている
Web Panel オブジェクトまたは
Transaction オブジェクトを使用して編集することができます。
GXScheduler ユーザーコントロールは、
ツールボックスの [
拡張コントロール ] グループにあります:
使用するには、
Web Panel オブジェクトの [ Web Layout ] にドラッグします。次のダイアログが表示されます:
[ Download ] ボタンを押すと、いくつかのオブジェクトがナレッジベースの Scheduler フォルダに自動的にインポートされます:
インポートされるオブジェクトの 1 つが "SchedulerEvents"
構造化データタイプ (SDT) です。この SDT にロードされるイベントは、GXScheduler ユーザーコントロールに表示されるイベントです。SDT の構造は次のとおりです:
"SchedulerEvents" SDT をロードするには、
Data Provider オブジェクトまたは
Procedure オブジェクトを定義する必要があります。その後、このオブジェクトの名前を GXScheduler コントロール (Web パネルに含まれている) の
[ Load Events Object ] プロパティで指定する必要があります。
注: 既定では、GXScheduler コントロールの
[ Load Events Object ] プロパティには "LoadEventsSampleDP" が設定されます (Scheduler フォルダに格納されているサンプルデータプロバイダーの名前。このフォルダには、"LoadEventsSampleProc" という名前のサンプルプロシージャーも格納されています)。その実装を確認して、独自のオブジェクトを定義できます。
指定された期間に発生したイベントを "SchedulerEvents" SDT にロードする責任があるデータプロバイダー (またはプロシージャー) は、次のパラメーターを受け取る必要があります:
Parm(&dateFrom, &dateTo);
// &dateFrom と &dateTo は Date データタイプに基づく
データプロバイダーの
[ Output ] プロパティには、"SchedulerEvents" 構造化データタイプを設定する必要があります。
次のデータ プロバイダー ソースは、最初のスクリーンショットを表示するために使用したものに対応します ("LoadEventsSampleDP" ソースと同様です):
SchedulerEvents
{
Items
{
event
{
Id = "Sample1"
Name = "World Cup Match"
Notes = "Venezuela vs Uruguay"
Link = "http://www.genexus.com"
StartTime = ymDHMStoT(&Today.Year(),&Today.Month(),&Today.Day(),01,30,0)
EndTime = ymDHMStoT(&Today.Year(),&Today.Month(),&Today.Day(),02,30,0)
AdditionalInformation = ""
}
event
{
Id = "Sample2"
Name = "World Cup Match"
Notes = "Argentina vs Brasil"
Link = "http://www.gxtechnical.com"
StartTime = ymDHMStoT(&Today.Year(),&Today.Month(),&Today.Day(),01,30,0)
EndTime = ymDHMStoT(&Today.Year(),&Today.Month(),&Today.Day(),02,30,0)
AdditionalInformation = ""
}
}
}
固定データを SDT にロードするためのデータ プロバイダー ソースを定義する代わりに、データベース上のデータをロードしたいとします。そのために、次の
Transaction オブジェクトがあるとします:
Event
{
EventId*
EventStart
EventEnd
EventDescription
EventDetails
}
SchedulerEvents SDT をデータプロバイダーの [ Source ] にドラッグし、次に示すようにソースを編集します:
SchedulerEvents
{
items
{
event
where EventStart >= &dateFrom
where EventEnd <= &dateTo
{
Id = EventId
StartTime = EventStart
EndTime = EventEnd
Notes = EventDescription
AdditionalInformation = EventDetails
}
}
}
1) Transaction オブジェクトの使用
イベントを更新するには、GXScheduler コントロールの
[ Details Form Object ] プロパティで Transaction オブジェクトを選択することができます。
このトランザクションは、特定の
Parm ルールで定義する必要があります。このトランザクションの Id は、
Character(20) データタイプに基づく必要があります ("SchedulerEvents" SDT の EventId として)。EventStart 項目属性および EventEnd 項目属性は、
DateTime データタイプに基づく必要があります。
parm(&Mode,EventId, &EventStart,&EventEnd);
default(EventStart,&EventStart);
default(EventEnd,&EventEnd);
2) コントロールイベントとビジネスコンポーネントの使用
GXScheduler コントロールを Web パネルの [ Web Layout ] にドラッグすると、Web パネルの [ Events ] エレメントにコードが追加されます。
Web パネルの [ Events ] エレメントと [ Variables ] エレメントを確認して、コードを分析します。
次の 4 つのイベントがあります:
- EventAdded
- EventDeleted
- EventUpdated
- EventSelected
これらのイベントは、スケジューラのセルをダブルクリックすることでトリガーされます (たとえば、EventAdded イベントは、ユーザーが GXScheduler の空のセルをダブルクリックするとトリガーされます)。
GXScheduler コントロールがこれらのイベントのいずれかをトリガーするとき、変数 (既定では、変数は ¤tEvent という名前で、そのタイプは SchedulerEvents.Event) にバインドされている [ CurrentEvent ] プロパティがロードされます。
言い換えれば、EventAdded、EventDeleted、EventUpdated、EventSelected のいずれかがトリガーされるたびに、追加、変更、削除、選択されたイベントに関して取得されたデータが ¤tEvent 変数に格納されます。
GXScheduler コントロールが EventAdded イベントをトリガーしたときに、データベース内にイベントを格納したいとします。そのためには、次の手順に従います:
- イベントをモデル化する Transaction オブジェクトを作成します。その [ Business Component ] プロパティを True に設定します。
- GXScheduler コントロールを含む Web Panel オブジェクトで、前の手順で定義したビジネス コンポーネント タイプに基づく変数を定義します (変数名を &businessComponent とします)。
- GXScheduler ユーザーコントロール (名前は gxScheduler1) を使用する Web パネル内で次のイベントを定義します:
Event gxScheduler1.EventAdded
&businessComponent.EventId = ¤tEvent.Id
&businessComponent.EventStart = ¤tEvent.StartTime
&businessComponent.EventEnd = ¤tEvent.EndTime
&businessComponent.EventDescription = ¤tEvent.Notes
&businessComponent.EventDetails = ¤tEvent.AdditionalInformation
&businessComponent.Save()
commit
EndEvent
3) コントロールメソッドの使用
コントロールを直接使用せずに GXScheduler イベントを使用することもできます。そのために、次のメソッドを使用できます:
- AddEvent(Events.Event) メソッド: 追加するイベントを受け取ります。
- UpdateEvent(Events.Event) メソッド: 更新するイベントを受け取ります。
- DeleteEvent(Events.Event) メソッド: 削除するイベントを受け取ります。
たとえば、Web パネルに次の内容を挿入できます:
また、これらのイベントを定義する必要があります。&auxEvent は、追加、更新、削除するイベントです:
Event 'AddEvent'
do 'GetRecords'
gxScheduler1.AddEvent(&auxEvent)
EndEvent
Event 'UpdateEvent'
do 'GetRecords'
gxScheduler1.UpdateEvent(&auxEvent)
EndEvent
Event'DeleteEvent'
do 'GetRecords'
gxScheduler1.DeleteEvent(&auxEvent)
EndEvent
Sub'GetRecords'
&auxEvent.Id = &id
&auxEvent.Name = &name
&auxEvent.StartTime = &startTime
&auxEvent.EndTime = &endtime
&auxEvent.Notes = ¬es
&auxEvent.AdditionalInformation = &additionalInformation
EndSub
- 1 つの Web Panel オブジェクトで使用できる GXScheduler コントロールは 1 つだけです。ベース実装 (dhtmlx.com) ではこの機能を使用できません。
- SDT ベース構造を変更して、たとえば Id データタイプを char(20) から numeric(4) に変更できます。ただし、それは GeneXus 内で配布されるため、GeneXus バージョンを更新するとこれらの変更が失われることに留意してください。
GXScheduler コントロールは、ベースコントロールとして
dhtmlxScheduler を使用します。
このコントロールに関するライセンス情報については、
こちらをご覧ください。