我是 Dynamics CRM 2013 的新手。
我希望能够在表单加载时在表单上设置默认值。我正在考虑创建一个实体“默认参数”来为用户保存几个默认值。
例如,交货日期或默认提供商。
是否可以在事件 OnLoad 上创建绑定在表单上的脚本并读取当前用户的实体“默认参数”的值并使用这些值设置表单的字段?
如果可能的话,是否有任何文档或示例代码可以做到这一点?
我是 Dynamics CRM 2013 的新手。
我希望能够在表单加载时在表单上设置默认值。我正在考虑创建一个实体“默认参数”来为用户保存几个默认值。
例如,交货日期或默认提供商。
是否可以在事件 OnLoad 上创建绑定在表单上的脚本并读取当前用户的实体“默认参数”的值并使用这些值设置表单的字段?
如果可能的话,是否有任何文档或示例代码可以做到这一点?
tl;博士
用数据填充表单的一种可能性是通过query-string
/main.aspx?etn=account&extraqs=name%3DNew%20Account&pagetype=entityrecord
取自文档。
当从第 3 方软件调用 CRM 页面时,这种方式非常方便(例如,您的 CTI 软件:使用呼叫者的号码预先填充新的联系表格)。
当然,你可以使用普通的 javascript 来以任何你想要的方式操作表单。这是可能的,但微软不鼓励这样做:
JavaScript 开发人员习惯于与代码中的文档对象模型 (DOM) 元素进行交互。您可以使用 window.getElementById 方法或 jQuery 库。您可以在 HTML Web 资源中自由使用这些技术,但不支持它们访问 Microsoft Dynamics CRM 应用程序页面或实体表单中的元素。相反,对实体表单元素的访问是通过 Xrm.Page 对象模型公开的。Microsoft Dynamics CRM 开发团队保留更改页面组成方式的权利,包括元素的 ID 值,因此使用 Xrm.Page 对象模型可以保护您的代码免受页面实现方式的更改
做事的“微软方式”是通过Xrm.Page -Object。
如果您需要特定于用户的信息,请查看Xrm.Page.context
查询您的 REST 端点,您应该获得所需的所有信息。
对的,这是可能的。
如果您需要有关 CRM javascript 脚本的基本信息,我建议您使用微软官方参考:http: //msdn.microsoft.com/en-us/library/jj602964.aspx
CRM SDK 中已经有一些关于如何查询另一个实体以获取信息的示例,但我建议您使用这个库来完成这项工作。 http://crmrestkit.codeplex.com/
您还需要在 ajax 表单脚本中添加 JQuery 库。
现在,假设您的“默认参数”实体称为“new_defaultparameter”并且它包含以下属性:
你应该有这样的东西:
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);
}
});
}
当我刚开始在 CRM 中做 Jscript 时,我遇到了一个很棒的链接,其中包含您需要做的任何事情的所有基本脚本。
http://garethtuckercrm.com/2011/03/16/jscript-reference-for-microsoft-dynamics-crm-2011/
你不能出错。
我建议您考虑使用业务规则来执行此操作。Condition = SomeField 不包含数据。行动 = 设置值(设置为您想要的任何值)。业务规则也可以移植到移动和平板电脑客户端,无需重写或重新测试。
只是想跟进这个答案,以防它帮助任何人。
尽管 extraqs 可以根据查询字符串参数自动设置 CRM 字段值,但这仅适用于创建记录。请参阅https://msdn.microsoft.com/en-us/library/gg334375.aspx
我有一种情况,我需要它来编辑记录,为此我必须使用标准的 javascript window.location.href 功能。
但是请注意,如果由于新的 Turbo Forms 渲染引擎而使用 CRM 2015 update 1 之后,您将需要使用 parent.window.location.href。见下文。
希望这可以帮助某人。