You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power Apps日历:实现单员工多假期按钮显示的改造问询

解决Power Apps日历应用单员工多假期按钮展示问题

核心问题定位

原代码中Gallery的Items属性使用LookUp函数,该函数仅返回第一条匹配的假期记录,这是单员工只能显示单假期的根本原因。要实现多假期展示,需改为返回员工的所有假期记录,让每个假期作为Gallery的独立条目。

改造方案

1. 重构Gallery的Items属性

替换原代码,从假期表ProbePowerApp出发,关联员工表并过滤目标组,确保每条假期对应一个Gallery条目:

SortByColumns(
    AddColumns(
        // 过滤选中组员工的所有假期
        Filter(
            ProbePowerApp,
            ID_Mitarbeiter in Filter(
                Mitarbeiter_3,
                Gruppe.Value = Dropdown2.Selected.Value && Gewerblich = true
            ).ID
        ),
        // 关联员工信息,用于显示员工姓名
        "MitarbeiterInfo",
        LookUp(Mitarbeiter_3, ID = Value(ID_Mitarbeiter))
    ),
    // 按员工姓名排序,同员工的假期按开始日期排序
    "MitarbeiterInfo.Title", SortOrder.Ascending,
    "Startdatum ", SortOrder.Ascending
)

2. 调整控件属性适配新数据源

原控件依赖ThisItem.Abwesenheitsgrund(单条假期记录),现在ThisItem本身就是假期记录,ThisItem.MitarbeiterInfo是员工信息,需修改以下控件:

Label Employee(员工姓名标签)

ThisItem.MitarbeiterInfo.Title

Label Holiday(假期按钮标签)

将所有属性中的ThisItem.Abwesenheitsgrund替换为ThisItem:

  • Fill:
Switch(
    ThisItem.Abwesenheitsgrund.Value,
    "Krank", RGBA(255, 99, 71, 1),
    "Urlaub", RGBA(70, 130, 180, 1),
    "Weiterbildung", RGBA(60, 179, 113, 1),
    "Freistellung", RGBA(255, 215, 0, 1),
    RGBA(70, 130, 180, 1)
)
  • Height:
If(DateDiff(ThisItem.'Startdatum ', ThisItem.'Enddatum ') < 0, 
   0, 
   Parent.Height*50%)
  • Hover Fill:
Switch(
    ThisItem.Abwesenheitsgrund.Value,
    "Krank", RGBA(255, 99, 71, 1),
    "Urlaub", RGBA(70, 130, 180, 1),
    "Weiterbildung", RGBA(60, 179, 113, 1),
    "Freistellung", RGBA(255, 215, 0, 1)
)
  • Text:
If(
    IsBlank(ThisItem.Abwesenheitsgrund.Value),
    Blank(),
    ThisItem.Abwesenheitsgrund.Value
)
  • Width:
If(
    Or(
        DateDiff(ThisItem.'Startdatum ', ThisItem.'Enddatum ') <= 0,
        IsBlank(ThisItem.'Startdatum '),
        IsBlank(ThisItem.'Enddatum ')
    ),
    0,
    (Parent.Width / LookUp(TageProMonatCollection, Monat = Month(ThisItem.'Startdatum ')).Tage * DateDiff(ThisItem.'Startdatum ', ThisItem.'Enddatum ', TimeUnit.Days)) + 2 * (Datum_1.Width)
)
  • X:
(Parent.Width/LookUp(TageProMonatCollection, Monat = Month(ThisItem.'Startdatum ')).Tage)*DateDiff(FirstDayOfMonth,ThisItem.'Startdatum ',TimeUnit.Days)-1.5*(Wochentag_1.Width)
  • Y(同员工假期垂直堆叠):
// 计算当前假期在该员工假期列表中的位置,实现垂直排列
(CountRows(Filter(Gallery1.AllItems, MitarbeiterInfo.ID = ThisItem.MitarbeiterInfo.ID && 'Startdatum ' <= ThisItem.'Startdatum ')) - 1) * (Parent.Height * 50%)

验证逻辑

改造后,Gallery的每个条目对应一条独立假期记录,单员工的多条假期会生成多个按钮,分别展示各自的假期类型、日期范围和样式。

内容的提问来源于stack exchange,提问作者marmar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 17:52:31