如何解决由于区域设置/设备设置,PowerApps 可能会错误处理日期
我们有一个应用程序部署到用户的智能手机设备上。此应用程序旨在捕获用户当月的“可用性”。该应用程序为他们提供一个月内每一天的月视图,每一天旁边都有一个切换开关。然后用户切换他们可以工作的日期并点击保存。然后保存按钮使用 ForAll + Patch 功能检查每条记录。如果记录存在,则更新任何更改,如果记录不存在,则创建。
问题
一部分用户(低于 2-5%)遇到了一个问题,即每月的第一天有时无法正确显示(通常默认为 false),然后当用户保存记录时,它会更新它在本月的第 1 日变为“假”。这会导致记录更改为 false,然后用户对为什么这从 true 更改为他们没有更改而感到困惑。仅在一个用户中,我们发现了一个问题,即该月的前 3 天未正确显示,然后他们将其保存。从那以后他们就再没有发生过这种情况,因此这可能是异常或用户错误,而不是此问题的一部分。
潜在原因
该集合建立在日期连接和从不同表中查找信息的基础上。日期是动态的,因此对它们进行 DateAdd 操作。应用程序和日期存储在英国,用户位于英国。在一位遇到问题的用户身上,我们注意到他们的时间以 12 小时格式而不是 24 小时格式显示在他们的手机上(与大多数英国设备一样)。所以我们为 TimeZone 添加了一段偏移代码,自从进入应用程序后,似乎已经为这个用户修复了它。此变量替换以下代码:
旧代码:
Today()
新代码:
Set(_todayOffset,DateValue(Text(DateAdd(Now(),TimeZoneOffset(),Minutes),"[$-en-GB]dd/mm/yyyy")));
潜在解决方案
似乎不太可能有一部分用户没有将他们的设备设置为他们的语言区域。所以我的问题是,是否还有其他原因可能导致这种情况?是否有处理设备区域设置和日期的默认方式?有没有办法强制日期显示在某个时区或区域设置中,覆盖设备设置以真正消除这个潜在问题? 为了完整起见,我添加了用于生成和保存以下数据的代码:
缓存显示的数据(gallery.Items 绑定到“aAvail”)
Set(userID,Office365Users.MyProfile().UserPrincipalName);
Set(empID,LookUp(PF_Workers,UPN = userID,'Employee ID'));
Set(_todayOffset,"[$-en-GB]dd/mm/yyyy")));
Set(_firstDayOfMonth,DateAdd(Date(Year(_todayOffset),Month(_todayOffset),0),1,Days));
Set(_firstDayOfNextMonth,DateAdd(_firstDayOfMonth,Months));
Set(_fdom_6monthBefore,-6,Months));
Set(_fdom_6monthAhead,6,Months));
ClearCollect(
aDates,Filter(
PF_Dates,Month >= _fdom_6monthBefore,Month < _fdom_6monthAhead
)
);
ClearCollect(
aComb1,AddColumns(
aDates,"Records",LookUp(
PF_Availabilty,And(
Date = aDates[@Date],'Employee ID' = empID
),'Record ID'
)
)
);
ClearCollect(
aAvail,AddColumns(
aComb1,"Work",'Record ID' = aComb1[@Records],Work
)
)
);
保存数据
// Set save variable
Set(_savingData,true);
// Cache and check data in database,and then perform Patch
ClearCollect(
avgalleryData,AddColumns(
galDatePicker.AllItems,"Availabletoggle",tglAvailability.Value
)
);
ForAll(
avgalleryData,If(
IsBlankOrError(avgalleryData[@Records]),Patch(
PF_Availabilty,Defaults(PF_Availabilty),{
'Employee ID': empID,Date: DateValue(Text(DateAdd(Date,"[$-en-GB]dd/mm/yyyy")),Month: DateValue(Text(DateAdd(Month,Work:
If(
Availabletoggle = true,'Work (PF_Availabilty)'.'true','Work (PF_Availabilty)'.'false'
)
}
),LookUp(
PF_Availabilty,'Record ID' = avgalleryData[@Records]
),{
Work:
If(
Availabletoggle = true,'Work (PF_Availabilty)'.'false'
)
}
)
)
);
// Reloading cached data
ClearCollect(
aComb1,Work
)
)
);
// Cleanup variables
Set(_savingData,false)
非常感谢任何帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。