Xrm.Utility.openEntityForm的使用

本文详细介绍了如何使用Xrm.Utility.openEntityForm方法快速打开实体Form并直接设置默认值。通过实例展示了如何为查找类型、文本类型、日期类型和选项集类型字段赋值,并解释了URL字符串长度限制问题及解决方法。

通常需要直接打开某一个form,并且有时需要在打开时直接设置默认值。
SDK中直接给提供了下面这个方法: Xrm.Utility.openEntityForm
这里写图片描述
结合我个人的实际例子再进行说明:

OpenOrder = function () {

    var parameters = {};
    // 为查找类型字段赋值
    parameters["new_servicerequset"] = Xrm.Page.data.entity.getId();
    parameters["new_servicerequsetname"] = Xrm.Page.getAttribute("new_requestname").getValue();

    // 为文本类型字段进行赋值
    parameters["new_workordername"] = Xrm.Page.getAttribute("new_requestname").getValue();

    // 为日期类型字段进行赋值  
    parameters["new_receiving_date"] = "2015-11-15 16:00:00.000";
    // 或者
    parameters["new_receiving_date"] = Xrm.Page.getAttribute("new_expected_date").getValue().toDateString();

    // 为选项集类型字段进行赋值     
    parameters["new_type"] = Xrm.Page.getAttribute("new_type").getValue();

    // 打开实体Form
    Xrm.Utility.openEntityForm("new_serviceworkorder", null, parameters);
}

Note:
因为最后会拼接成url字符串,所以赋值时不能直接赋值为object.必须转化为字符串。
例如对日期类型的赋值。

在调用这个方法时通常会出现下面这个错误。

这里写图片描述

觉得很奇怪,调查之后发现在我们调用 Xrm.Utility.openEntityForm(“new_serviceworkorder”, null, parameters);方法时,最后会把我们传递的参数都拼接成URL字符串,而通常浏览器会对URL的长度有最大限制。

解决方案可以参考下面这个链接:
http://www.cnblogs.com/luchaocai/p/3182510.html
这里写图片描述

微软官方给出的方案如下:

RESOLUTION
To resolve this problem, follow these steps:
Click Start, type Notepad in the Start Search box, right-click Notepad, and then click Run as administrator.

Note If you are prompted for an administrator password or for a confirmation, type the password, or click Continue.

On the File menu, click Open, type %windir%\System32\inetsrv\config\applicationHost.config in the File name box, and then click Open.
In the ApplicationHost.config file, locate the requestLimits tag.
Remove the maxQueryString property. Or, change the value to a value that matches the length of the query string that you are using. By default, the value of the maxQueryString property is 2048.

For example, modify the following code.

Save the ApplicationHost.config file.

<think>好的,我现在需要回答用户关于Xrm.Page.context.getTimeZoneOffsetMinutes()函数的用法和解释的问题。首先,我得确认这个函数的具体作用和它在Dynamics CRM中的使用场景。 根据我之前的知识,Dynamics CRM中的客户端API有许多上下文方法,用于获取当前用户或环境的设置。时间相关的函数通常处理时区问题,尤其是在跨时区应用中很重要。这个函数的名字“getTimeZoneOffsetMinutes”看起来是获取当前用户的时区与UTC的分钟偏移量。例如,UTC+8时区的偏移量是-480分钟,因为比UTC早8小时,即8*60=480分钟,但通常偏移量的表示是UTC时间加上偏移等于本地时间,所以可能需要确认符号是否正确。 接下来,我需要检查是否有相关的引用资料可以支持我的解释。用户提供的引用中,引用[4]提到了Xrm.Page.getControl和getAttribute的区别,但没有直接涉及时间函数。不过,其他引用如[1]和[3]展示了如何使用Xrm.UtilityXrm.Navigation,这可能帮助我理解Xrm.Page.context的上下文方法通常如何被使用。 可能需要进一步验证这个函数是否存在,因为随着Dynamics 365的版本更新,某些方法可能被弃用或替换。例如,引用[2]提到D365 V9之后引入了新的Web API,但用户的问题是关于Xrm.Page.context,这属于客户端API的一部分,可能仍然有效,但需要注意兼容性。 另外,时区偏移量的计算方式需要准确解释。通常,JavaScript中的getTimezoneOffset()返回的是本地时间与UTC的分钟差,且是UTC = local + getTimezoneOffset()。所以,如果用户处于UTC+8时区,getTimezoneOffset()返回-480。但需要确认Xrm.Page.context.getTimeZoneOffsetMinutes()是否遵循同样的逻辑。 使用场景方面,这个函数可能在需要将用户本地时间转换为UTC时间,或者记录时间戳时非常有用。例如,当用户在表单中输入一个日期时间,系统需要将其转换为UTC存储,这时候知道用户的时区偏移量就很重要。 接下来,我应该编写一个示例代码,展示如何调用这个函数,并处理返回的偏移量。例如,获取偏移量后,可以用于调整日期时间的显示或计算。 最后,生成相关问题,帮助用户进一步探索时区处理或相关的客户端API方法。比如,如何转换本地时间和UTC时间,或者处理多时区数据的方法。 需要确保回答的结构清晰,分点解释,并引用相关资料,尽管现有的引用中没有直接提到这个函数,但可以关联到客户端API的一般用法。</think>关于Dynamics CRM中$Xrm.Page.context.getTimeZoneOffsetMinutes()$函数的详细解释如下: ### 功能说明 该函数用于获取**当前用户所在时区与UTC时间的分钟偏移量**,返回值为整数类型。例如: - 北京时区(UTC+8)返回 **-480分钟**(UTC时间 = 本地时间 + 偏移量) - 纽约时区(UTC-5)返回 **300分钟** ### 典型应用场景 1. 时间转换:将本地时间转换为UTC时间存储于数据库 2. 报表展示:根据用户时区动态调整时间显示格式 3. 跨时区协作:计算不同地区用户的时间差 ### 代码示例 ```javascript var timeZoneOffset = Xrm.Page.context.getTimeZoneOffsetMinutes(); var now = new Date(); var utcTime = new Date(now.getTime() + (timeZoneOffset * 60000)); console.log("UTC时间: " + utcTime.toISOString()); ``` ### 注意事项 1. **客户端依赖**:结果基于用户浏览器/设备时区设置[^4] 2. **版本兼容性**:适用于Dynamics CRM 2013及更高版本 3. **替代方案**:D365 V9+推荐使用$Xrm.Utility.getGlobalContext().userSettings.timeZoneOffset$[^2]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值