Aquí está el escenario:

Cuando un usuario ingresa un código postal, se debe mostrar el autocompletado, y cuando el usuario selecciona un código postal, los otros campos como la ciudad y el condado se deben completar automáticamente.

La información sobre el código postal, la ciudad y el código postal se encuentran en un objeto JSON.

¿Hay algún evento cuando el usuario hizo clic en la lista de autocompletar?

Alguien sabe como lograr esto ?

Gracias por tu ayuda

1
bidou88 12 may. 2016 a las 15:10

3 respuestas

La mejor respuesta

CRM 2016 agregó recientemente un evento de pulsación de tecla que puede usar para campos de cadena que le permiten hacer exactamente lo que está tratando de hacer (sin embargo, no funciona en dispositivos móviles). Aquí está el ejemplo del SDK:

/* 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);    
}

Luego puede usar el evento addOnChange para procesar la selección del usuario.

0
Polshgiant 12 may. 2016 a las 12:56

Desde el CRM de la casilla no tienes nada que hacer lo que estás pidiendo, pero tienes 3 posibilidades para hacerlo.

1 Cree una entidad para su código postal e ingrese su información. Después de crear la búsqueda en su formulario de la única manera que recuerdo hacer en forma compatible.

2 En el cambio de evento del campo, llame a su método js para que se complete automáticamente, pero con esto, el campo debe estar completamente escrito, para que su script obtenga la coincidencia.

3 esto no es compatible, pero puede manipular el DOM y poner su script js para rellenar automáticamente sus campos con un evento en el campo.

Salud

0
Jorge Cunha 12 may. 2016 a las 12:32

Acabo de probar su escenario usando el ejemplo de código que Polshgiant compartió y agregué un evento onchange en el atributo como lo sugirió Jorge Cunha.

Lamentablemente, mi prueba muestra que solo las pulsaciones de teclas activan el evento onchange: cuando selecciono un valor de autocompletar, el onchange no se activa.

Por lo tanto, no veo una solución compatible para esta pregunta.

Pero necesito la misma funcionalidad, así que espero que otros demuestren que estoy equivocada.

Edición 17 de mayo: una nueva prueba de hoy muestra que se llama al evento onchange, pero que

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

Obtener el valor escrito, y no el valor de autocompletar.

Sin embargo

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

Me da el valor autocompletado seleccionado.

De este modo, ahora puedo usar esta funcionalidad :-)

2
T. Jensen 17 may. 2016 a las 08:08