在CRM 2011的日期时间字段中隐藏非工作时间

Hide non working hours in datetime fields in CRM 2011

本文关键字:时间 隐藏 工作 字段 2011 日期 CRM      更新时间:2023-09-26

在创建新任务、电话、电子邮件、约会等时,是否有任何方法可以过滤日期-时间控件以仅显示工作时间?

我已经为用户1配置了工作时间,日历现在显示正确的工作时间。但是,当用户创建一个新任务时,显示截止日期的控件会显示所有小时,从12:00 AM开始。2

关于如何根据之前定义的工作时间筛选该字段,有什么建议吗?

没有支持的方法。

不受支持(从来都不是一个好主意),您可能会编写一些JavaScript并操纵DOM来更改pick-list值。

我终于找到了如何隐藏日期和时间字段的几个小时。在我的情况下,开始时间和结束时间是硬编码的(从上午07:00到下午06:30)。

这就是产生魔力的javascript。

function InitializeDateTimeControls(){
    var scheduledendAttr = Xrm.Page.getAttribute('scheduledend');
    var scheduledstartAttr = Xrm.Page.getAttribute('scheduledstart');
    if(scheduledendAttr != null)
    {
        RemoveNotWorkingHours('scheduledend');
        SetActualDueDate('scheduledend');
    }
    if(scheduledstartAttr != null)
    {
        RemoveNotWorkingHours('scheduledstart');
        SetActualDueDate('scheduledstart');
    }
};
function RemoveNotWorkingHours(controlname) {
    if(Xrm.Page.ui.getFormType() == 1)
    {
        var timetable = $("td[id^='" + controlname + "Time.']");
        timetable.each(function () {
        var time = $(this)[0].innerText;
        var hours = time.substring(0, time.indexOf(":"));
        var mins = time.substring(time.indexOf(":") + 1, time.indexOf(":") + 3);
        var am_pm = time.substring(time.indexOf(" ") + 1, time.indexOf(" ") + 3);

        var fulltime = hours + ":" + mins + " " + am_pm;

            var hourint = +hours;
            if((hourint < 7 || hourint == 12) && am_pm == 'AM')
            {
                $(this).parent().remove();
            }
            if((hourint > 6 && hourint != 12) && am_pm == 'PM')
            {
                $(this).parent().remove();
            }

        });
    }
};
function SetActualDueDate(controlname)
{
    if(Xrm.Page.ui.getFormType() == 1)
    {
        var dueDate = Xrm.Page.data.entity.attributes.get(controlname);
        var now = new Date();
        dueDate.setValue(now);
    }
}