Javascript Dynamics CRM 2013:在实体的表单中设置默认值

Javascript Dynamics CRM 2013:在实体的表单中设置默认值,javascript,dynamics-crm-2013,Javascript,Dynamics Crm 2013,我是Dynamics CRM 2013的新手 我希望能够在窗体加载时设置窗体的默认值。我正在考虑创建一个实体“Default Parameter”,为用户保存两个默认值 例如,交付日期或默认提供程序 是否可以在事件OnLoad上创建绑定在表单上的脚本,读取当前用户的实体“默认参数”的值,并使用这些值设置表单的字段 如果可能的话,是否有任何文档或示例代码可以这样做?tl;博士 这应该是可能的,起点如下所示。 使用数据填充表单的一种可能性是通过查询字符串 /main.aspx?etn=account

我是Dynamics CRM 2013的新手

我希望能够在窗体加载时设置窗体的默认值。我正在考虑创建一个实体“Default Parameter”,为用户保存两个默认值

例如,交付日期或默认提供程序

是否可以在事件OnLoad上创建绑定在表单上的脚本,读取当前用户的实体“默认参数”的值,并使用这些值设置表单的字段

如果可能的话,是否有任何文档或示例代码可以这样做?

tl;博士

这应该是可能的,起点如下所示。 使用数据填充表单的一种可能性是通过
查询字符串

/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以本机方式执行此操作才有效?