Mit dem IDayAtAGlanceWidget können Sie das Widget “Tag auf einem Blick” um weitere Datentypen erweitern.

Die Datentabelle sollte mindestens ein Datumsfeld haben, um es anzeigen zu können.

Zu definieren in dem Interface sind:

Eigenschaften

Guid Ihres Adapters. Als Guid nehmen Sie am Besten die DataSource Guid:

public Guid Guid => EnumDataSourceExtension.[YOURDATATABLE].ValueGuid;

Namen Ihres Adapters. Als Name nehmen Sie am besten die übersetzte DataSource:

public string Name => EnumDataSourceExtension.[YOURDATATABLE].Text;

Methoden

 IEnumerable<DayAtAGlanceWidgetDataModel> GetData(DayAtAGlanceFilterModel filter, bool tooltipOnly)

Diese Methode wird benötigt um die Datensätze in der Liste anzuzeigen. Mit dem Filtermodel erhalten Sie das Startdatum, das Enddatum und das aktuelle Benutzerprofil. Als Rückgabewert muss die Methode
ein IQueryable von DayAtAGlanceWidgetDataModels haben.

Als Beispiel die Implementierung für die Darstellung der Termine.

public IEnumerable<DayAtAGlanceWidgetDataModel> GetData(DayAtAGlanceFilterModel filter, bool tooltipOnly)
{
    Session session = Api.ORM.GetDefaultSession();

    JoinOperand parentOid = CriteriaOperatorBuilder.GetSourcesJoin(true, EnumRelationType.Parent, Guid.Empty, null, true, Aggregate.Single, CriteriaOperatorBuilder.Source);
    JoinOperand parentOrmType = CriteriaOperatorBuilder.GetSourcesJoin(true, EnumRelationType.Parent, Guid.Empty, null, true, Aggregate.Single, CriteriaOperatorBuilder.GetField("SourceType"));

    JoinOperand ownerOid = CriteriaOperatorBuilder.GetSourcesJoin(true, EnumRelationTypeExtension.AppointmentOwner, Guid.Empty, null, true, Aggregate.Single, CriteriaOperatorBuilder.Source);

    // Query recurrence table
    IQueryable<OrmSubRecurrenceDates> recurrenceQuery = ((IQueryable<OrmSubRecurrenceDates>)session
        .Query(Api.Types.GetByType(typeof(OrmAppointmentBase)).Properties[nameof(OrmAppointmentBase.Start)].CustomAttributes.GetFirst<RecurrentDateAttribute>().RecurrenceDatesTable.ClassType))
        .Where(ff => !ff.Original && ff.Date >= filter.StartDate && ff.Date < filter.EndDate);

    IQueryable<(OrmAppointmentBase, OrmSubRecurrenceDates)> matches = Api.ORM.GetQueryWithReadPermissions<OrmAppointmentBase>(session)
        .Where(ff => ff.IsInRecycleBin == false)
        .InnerJoin(recurrenceQuery, ff => ff.Oid, ff => (Guid)ff.GetMemberValue("Key." + nameof(OrmSubRecurrenceDates.Key.Parent)),
            (OrmAppointmentBase a, OrmSubRecurrenceDates s) => new ValueTuple<OrmAppointmentBase, OrmSubRecurrenceDates> { Item1 = a, Item2 = s })
        .Where(ff => filter.ProfileGuids.Contains((Guid)ff.Item1.Evaluate(ownerOid)));

    if (!tooltipOnly)
        return matches.Select(ff => new DayAtAGlanceWidgetDataModel()
        {
            Oid = ff.Item1.Oid,
            OrmTypeGuid = ff.Item1.OrmType.ToGuid(),
            Order = Order,
            EntityTitle = ff.Item1.EntityTitle,
            RecurrenceInfo = ff.Item1.Start_RecurrenceInfo,
            RecurrenceType = (AppointmentType)ff.Item1.Start_RecurrenceType,
            AllDay = ff.Item1.AllDay || (ff.Item2.StartsBefore && ff.Item2.EndsAfter),
            RealStart = ff.Item1.Start.ToLocalTime(),
            RealEnd = ff.Item1.End.ToLocalTime(),
            Start = ff.Item2.Date.ToLocalTime(),
            End = ff.Item2.Date.Date.Add(ff.Item1.End.TimeOfDay).ToLocalTime(),
            Flags = ff.Item2.Key.Flags,
            RecurrenceMaster = ff.Item1.Start_RecurrenceMaster.Oid,
            RelatedOwner = ff.Item1.RelatedOwner.Oid,
            RelatedOwnerTitle = ff.Item1.RelatedOwner.EntityTitle,
            OpenBehavior = EnumGridOpenActionCreateRecordTypes.UseDefault,
            MainInformation = new ListControlDataText(
                new ListControlDataContent(DayAtAGlanceWidgetHelper.GetOccurenceStartAndEnd(ff.Item1.Start, ff.Item1.End, ff.Item1.AllDay, (AppointmentType)ff.Item1.Start_RecurrenceType, ff.Item1.Start_RecurrenceInfo, ff.Item2.Key.Flags, filter.StartDate, filter.EndDate, true, ff.Item2.Date)),
                new ListControlDataContent(ff.Item1.EntityTitle)),
            ReferenceRecordOid = ff.Item1.Evaluate(parentOid) != null ? ff.Item1.Evaluate(parentOid).ToGuid() : Guid.Empty,
            ReferenceRecordOrmTypeGuid = ff.Item1.Evaluate(parentOrmType) != null ? ff.Item1.Evaluate(parentOrmType).ToGuid() : Guid.Empty
        });
    else
        return matches.Select(ff => new DayAtAGlanceWidgetDataModel()
        {
            Oid = ff.Item1.Oid,
            OrmTypeGuid = ff.Item1.OrmType.ToGuid(),
            Order = Order,
            EntityTitle = ff.Item1.EntityTitle,
            RecurrenceInfo = ff.Item1.Start_RecurrenceInfo,
            RecurrenceType = (AppointmentType)ff.Item1.Start_RecurrenceType,
            AllDay = ff.Item1.AllDay || (ff.Item2.StartsBefore && ff.Item2.EndsAfter),
            RealStart = ff.Item1.Start.ToLocalTime(),
            RealEnd = ff.Item1.End.ToLocalTime(),
            Start = ff.Item2.Date.ToLocalTime(),
            Flags = ff.Item2.Key.Flags,
            RecurrenceMaster = ff.Item1.Start_RecurrenceMaster.Oid,
            RelatedOwner = ff.Item1.RelatedOwner.Oid,
            Tooltip = EnumDataSourceExtension.Appointment.Text + " " + DayAtAGlanceWidgetHelper.GetOccurenceStartAndEnd(ff.Item1.Start, ff.Item1.End, ff.Item1.AllDay, (AppointmentType)ff.Item1.Start_RecurrenceType, ff.Item1.Start_RecurrenceInfo, ff.Item2.Key.Flags, ff.Item1.Start, filter.EndDate, true, ff.Item2.Date.ToLocalTime())
                + "\n" + ff.Item1.EntityTitle
        });
}