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

时间:2013-11-06 10:41:15

标签: javascript dynamics-crm-2013

我是Dynamics CRM 2013的新手。

我希望能够在表单加载时在表单上设置默认值。我正在考虑创建一个实体“默认参数”来为用户保存几个默认值。

例如,交货日期或默认提供商。

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

如果可能,是否有任何文档或示例代码可以做到这一点?

5 个答案:

答案 0 :(得分:5)

TL;博士

应该是可能的,并在下面提供起点。

使用数据填充表单的一种可能性是通过query-string

/main.aspx?etn=account&extraqs=name%3DNew%20Account&pagetype=entityrecord

取自documentation

从第三方软件调用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”,它包含以下属性:

  • new_key(用于相关属性名称);
  • new_value(默认值);
  • new_userid(对于用户);

你应该有这样的东西:

    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。见下文。

https://community.dynamics.com/crm/b/develop1/archive/2015/05/24/turbo-forms-get-your-javascript-ready-for-crm2015-update-1

希望这有助于某人。