5

我是 Dynamics CRM 2013 的新手。

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

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

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

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

4

5 回答 5

5

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 端点,您应该获得所需的所有信息。

于 2013-11-06T11:04:09.113 回答
2

对的,这是可能的。

如果您需要有关 CRM javascript 脚本的基本信息,我建议您使用微软官方参考: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);
            }
        });
    }
于 2014-03-12T22:01:23.187 回答
1

当我刚开始在 CRM 中做 Jscript 时,我遇到了一个很棒的链接,其中包含您需要做的任何事情的所有基本脚本。

http://garethtuckercrm.com/2011/03/16/jscript-reference-for-microsoft-dynamics-crm-2011/

你不能出错。

于 2013-11-06T11:20:47.683 回答
1

我建议您考虑使用业务规则来执行此操作。Condition = SomeField 不包含数据。行动 = 设置值(设置为您想要的任何值)。业务规则也可以移植到移动和平板电脑客户端,无需重写或重新测试。

于 2013-11-11T13:58:59.713 回答
0

只是想跟进这个答案,以防它帮助任何人。

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

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

希望这可以帮助某人。

于 2016-09-29T20:05:02.793 回答