我是Dynamics CRM 2013的新手。
我希望能够在表单加载时在表单上设置默认值。我正在考虑创建一个实体“默认参数”来为用户保存几个默认值。
例如,交货日期或默认提供商。
是否可以在事件OnLoad上的表单上创建绑定的脚本,并为当前用户读取实体“Default parameter”的值,并使用这些值设置表单的字段?
如果可能,是否有任何文档或示例代码可以做到这一点?
答案 0 :(得分:5)
TL;博士
使用数据填充表单的一种可能性是通过query-string
/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对象模型可以保护代码免受页面实现方式的影响
用于处理的“ Microsoft-Way ”是通过Xrm.Page - 对象。
如果您需要用户特定信息,请查看Xrm.Page.context
查询您的REST端点,您应该获得所需的非常信息。
答案 1 :(得分:2)
是的,这是可能的。
如果您需要有关CRM javascript脚本的基本信息,我建议您使用此官方Microsoft参考: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);
}
});
}
答案 2 :(得分:1)
当我刚开始在CRM中使用Jscript时,我遇到了一个很棒的链接,其中包含了您需要做的所有基本脚本。
http://garethtuckercrm.com/2011/03/16/jscript-reference-for-microsoft-dynamics-crm-2011/
你不能出错。
答案 3 :(得分:1)
我建议您使用业务规则来执行此操作。 Condition = SomeField不包含数据。动作=设定值(无论你想要的是什么)。 业务规则也可移植到移动和平板电脑客户端,无需重写或重新测试。
答案 4 :(得分:0)
只是想跟进这个答案,以防它对任何人有帮助。
虽然extraqs可以根据查询字符串参数自动设置CRM字段值,但这仅适用于创建记录。见https://msdn.microsoft.com/en-us/library/gg334375.aspx
我有一种情况,我需要这个来编辑记录也要这样做我必须使用标准的javascript window.location.href功能。
但是,如果由于新的Turbo Forms渲染引擎而使用CRM 2015更新1,则需要使用parent.window.location.href。见下文。
希望这有助于某人。