Javascript Dynamics CRM 2013:在实体的表单中设置默认值
我是Dynamics CRM 2013的新手 我希望能够在窗体加载时设置窗体的默认值。我正在考虑创建一个实体“Default Parameter”,为用户保存两个默认值 例如,交付日期或默认提供程序 是否可以在事件OnLoad上创建绑定在表单上的脚本,读取当前用户的实体“默认参数”的值,并使用这些值设置表单的字段 如果可能的话,是否有任何文档或示例代码可以这样做?tl;博士 这应该是可能的,起点如下所示。 使用数据填充表单的一种可能性是通过Javascript Dynamics CRM 2013:在实体的表单中设置默认值,javascript,dynamics-crm-2013,Javascript,Dynamics Crm 2013,我是Dynamics CRM 2013的新手 我希望能够在窗体加载时设置窗体的默认值。我正在考虑创建一个实体“Default Parameter”,为用户保存两个默认值 例如,交付日期或默认提供程序 是否可以在事件OnLoad上创建绑定在表单上的脚本,读取当前用户的实体“默认参数”的值,并使用这些值设置表单的字段 如果可能的话,是否有任何文档或示例代码可以这样做?tl;博士 这应该是可能的,起点如下所示。 使用数据填充表单的一种可能性是通过查询字符串 /main.aspx?etn=account
查询字符串
/main.aspx?etn=account&extraqs=name%3DNew%20Account&pagetype=entityrecord
摘自《圣经》
当从第三方软件调用CRM页面时(例如,您的CTI软件:使用呼叫者号码预填充新的联系人表单),这种方法非常方便
当然,您可以使用普通javascript以任何形式操纵表单,您可以这样做。这是可能的,但微软并不鼓励:
JavaScript开发人员习惯于在代码中与文档对象模型(DOM)元素交互。您可以使用window.getElementById方法或jQuery库。您可以在HTML web资源中自由使用这些技术,但不支持访问Microsoft Dynamics CRM应用程序页面或实体表单中的元素。相反,对实体表单元素的访问是通过Xrm.Page对象模型公开的。Microsoft Dynamics CRM开发团队保留更改页面组成方式的权利,包括元素的ID值,因此使用Xrm.Page对象模型可以保护您的代码不受页面实现方式更改的影响
做事情的“微软方式”是通过-对象
如果您需要特定于用户的信息,请查看
查询REST端点时,您应该会得到所需的服务器信息。当我刚开始在CRM中执行Jscript时,我遇到了一个很棒的链接,其中包含了您需要执行的所有基本脚本
你不能出错。我建议你考虑使用业务规则来做到这一点。Condition=SomeField不包含数据。动作=设置值(设置为您想要的值)。 业务规则也可以移植到移动和平板电脑客户端,无需重写或重新测试。是的,这是可能的 如果您需要有关CRM javascript脚本的基本信息,我建议您使用以下Microsoft官方参考: crmsdk中已经有一些关于如何查询另一个实体以获取信息的示例,但是我建议您使用这个库来完成这项工作。 您还需要在表单脚本中为ajax添加JQuery库 现在,假设您的“Default parameter”实体称为“new_defaultparameter”,并且它包含以下属性:
- 新的_键(用于相关属性名称)李>
- 新的_值(默认值)李>
- 新用户ID(针对用户)李>
function onLoad()
{
if (Xrm.Page.ui.getFormType() == 1/*Create*/)
{
getDefaultFields(Xrm.Page.context.getUserId(), updateWithDefaultValue);
}
}
function getDefaultFields(userId, callback)
{
var filter = "new_userid/Id eq guid'" + userId + "'";
//you need to use the "Schema Name" for both the entity and the attributes
CrmRestKit.ByQuery('new_defaultparameter', ['new_key', 'new_value'], filter)
.done(function (data, status, xhr)
{
callback(data.d.results.map(function (field)
{
return { key: field['new_key'], value: field['new_value'] }
}));
});
}
function updateWithDefaultValue(keyValues)
{
keyValues.forEach(function (keyValue)
{
var attribute = null;
if (attribute = Xrm.Page.getAttribute(keyValue.key))
{
// You may need to add some logic to convert the value to
// the correct format.
// You can use the attribute.getAttributeType() to help you.
// See: http://msdn.microsoft.com/en-us/library/6881e99b-45e4-4552-8355-2eef296f2cd8#BKMK_getAttributeType
attribute.setValue(keyValue.value);
}
});
}
只是想跟进这个答案,以防对任何人都有帮助 尽管extraqs可以根据querystring参数自动设置CRM字段值,但它仅适用于创建记录。看 我曾经遇到过这样一种情况,我需要使用它来编辑记录,而要做到这一点,我必须使用标准的javascript window.location.href功能 但是请注意,如果由于新的Turbo Forms渲染引擎而使用CRM 2015 update 1之后的版本,则需要使用parent.window.location.href。见下文
希望这对某人有所帮助。问题特别是关于将日期设置为当前日期。我看不到将“值”设置为动态值的方法,它只接受静态日期值。似乎只有在创建新记录而非编辑时,使用extrareqs以本机方式执行此操作才有效?