代码之家  ›  专栏  ›  技术社区  ›  bidou88

Dynamics CRM 2016:自动完成多个字段

  •  1
  • bidou88  · 技术社区  · 8 年前

    以下是场景:

    当用户输入邮政编码时,必须显示自动补全,当用户选择邮政编码后,其他字段(如城市和县)应自动填写。

    有关邮政编码、城市和邮政编码的信息位于JSON对象中。

    用户单击自动完成列表时是否有事件?

    有人知道如何做到这一点吗?

    谢谢你的帮助

    3 回复  |  直到 8 年前
        1
  •  2
  •   T. Jensen    8 年前

    我刚刚使用Polshgiant共享的代码示例测试了您的场景,并按照Jorge Cunha的建议在属性上添加了一个onchange事件。

    不幸的是,我的测试表明,只有按键触发onchange事件: 当我选择自动完成值时,不会触发onchange。

    因此,我认为这个问题没有得到支持的解决方案。

    但我需要相同的功能,所以我希望其他人会证明我错了。

    5月17日编辑: 今天的一个新测试表明,调用了onchange事件,但

    var newValue = Xrm.Page.getControl(control).getValue(); 
    

    获取键入的值,而不是自动完成的值。

    然而

    var newValue = Xrm.Page.getControl(control).getAttribute().getValue();
    

    给我自动完成选定值。

    因此,我现在可以使用此功能:-)

        2
  •  0
  •   Polshgiant    8 年前

    CRM 2016最近添加了一个按键事件,您可以将其用于字符串字段,使您能够准确地执行您要执行的操作(但在移动设备上不起作用)。这里是 SDK's example :

    /* Sample JavaScript code to demonstrate the auto-completion feature.
       This sample configures the auto-complete feature for the "Account Name"
       field in the account form. */
    
    function suggestAccounts() {
    
        // List of sample account names to suggest
        accounts = [
      { name: 'A. Datum Corporation', code: 'A01' },
      { name: 'Adventure Works Cycles', code: 'A02' },
      { name: 'Alpine Ski House', code: 'A03' },
      { name: 'Bellows College', code: 'A04' },
      { name: 'Best For You Organics Company', code: 'A05' },
      { name: 'Blue Yonder Airlines', code: 'A06' },
      { name: 'City Power & Light', code: 'A07' },
      { name: 'Coho Vineyard', code: 'A08' },
      { name: 'Coho Winery', code: 'A09' },
      { name: 'Coho Vineyard & Winery', code: 'A10' },
      { name: 'Contoso, Ltd.', code: 'A11' },
      { name: 'Proseware, Inc.', code: 'A30' },
      { name: 'Relecloud', code: 'A31' },
      { name: 'School of Fine Art', code: 'A32' },
      { name: 'Southridge Video', code: 'A33' },
      { name: 'Tailspin Toys', code: 'A34' },
      { name: 'Trey Research', code: 'A35' },
      { name: 'The Phone Company', code: 'A36' },
      { name: 'VanArsdel, Ltd.', code: 'A37' },
      { name: 'Wide World Importers', code: 'A38' },
      { name: '​Wingtip Toys', code: 'A39' },
      { name: 'Woodgrove Bank', code: 'A40' }    
        ];
    
        var keyPressFcn = function (ext) {
            try {
                var userInput = Xrm.Page.getControl("name").getValue();
                resultSet = {
                    results: new Array(),
                    commands: {
                        id: "sp_commands",
                        label: "Learn More",
                        action: function () {
                            // Specify what you want to do when the user
                            // clicks the "Learn More" link at the bottom
                            // of the auto-completion list.
                            // For this sample, we are just opening a page
                            // that provides information on working with
                            // accounts in CRM.
                            window.open("http://www.microsoft.com/en-us/dynamics/crm-customer-center/create-or-edit-an-account.aspx");
                        }
                    }
                };
    
                var userInputLowerCase = userInput.toLowerCase();
                for (i = 0; i < accounts.length; i++) {
                    if (userInputLowerCase === accounts[i].name.substring(0, userInputLowerCase.length).toLowerCase()) {
                        resultSet.results.push({
                            id: i,
                            fields: [accounts[i].name]
                        });
                    }
                    if (resultSet.results.length >= 10) break;
                }
    
                if (resultSet.results.length > 0) {
                    ext.getEventSource().showAutoComplete(resultSet);
                } else {
                    ext.getEventSource().hideAutoComplete();
                }
            } catch (e) {
                // Handle any exceptions. In the sample code,
                // we are just displaying the exception, if any.
                console.log(e);
            }
        };
    
        Xrm.Page.getControl("name").addOnKeyPress(keyPressFcn);    
    }
    

    然后您可以使用 addOnChange event 以处理用户的选择。

        3
  •  0
  •   Jorge Cunha    8 年前

    从盒子的CRM中,你没有什么可以做你所要求的,但你有3种可能性去做。

    1为您的邮政编码创建一个实体,并将您的信息放入其中。在您的表单上创建查找后,我只记得以支持的方式进行查找。

    2在字段的事件更改时,调用方法js自动填充,但在此情况下,字段需要完全写入,以便脚本获得匹配。

    3这是不受支持的,但您可以操作DOM并放入js脚本,以便在字段上用事件自动填充字段。

    干杯