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
相关产品推荐
相关产品推荐

