D365 Omnichannel Filter Form

D365 Omnichannel formulario

Recientemente se ha actualizado una versión de Omnichannel, en el que el formulario de Omnichannel ha cambiado drásticamente, permitiendo editar este de forma rápida gracias a un nuevo PCF de Microsoft. El problema que teniamos hasta ahora en nuestros proyectos, es que no se podía filtrar de forma estándar ese campo, ya que los PCFs no reconocían correctamente ese parámetro que incluíamos en el campo.

Anteriormente el formulario se mostraba de esta forma:

Ahora se muestra de la siguiente forma:

Incluso si quieres cambiar las características puedes realizarlo desde aquí:

Javascript

Dentro de Javascript, vamos a ver que tenemos varios métodos con los que podemos jugar. Normalmente, se suele utilizar el siguiente método:


function preSearchFunction(executionContext) {
    // get the form context
    formContext = executionContext.getFormContext();
    formContext.getControl("customerid").addPreSearch(filterFunction);
}

function filterFunction() {

    // Only show accounts with the type 'Preferred Customer'
    var customerAccountFilter = "<filter type='and'><condition attribute='accountcategorycode' operator='eq' value='1'/></filter>";
    formContext.getControl("customerid").addCustomFilter(customerAccountFilter, "account");
}

function onLoad(){
    filterFunction();
}

El problema es que por más que lo uses, esto no funciona.

Solución

Para poder resolver este problema es super simple. No solamente tienes que usar la linea que comentábamos arriba.

También hay que añadir:

    formContext.getControl("customerid").startCustomFilter()
    formContext.getControl("customerid").endCustomFilter()

Quedando de la siguiente manera:


function preSearchFunction(executionContext) {
    // get the form context
    formContext = executionContext.getFormContext();
    formContext.getControl("customerid").addPreSearch(filterFunction);
}

function filterFunction() {

    // Only show accounts with the type 'Preferred Customer'
    var customerAccountFilter = "<filter type='and'><condition attribute='accountcategorycode' operator='eq' value='1'/></filter>";
    formContext.getControl("customerid").startCustomFilter()
    formContext.getControl("customerid").addCustomFilter(customerAccountFilter, "account");
    formContext.getControl("customerid").endCustomFilter()
}

function onLoad(){
    filterFunction();
}

Otra Solución

Otra de las soluciones que podemos realizar es la siguiente:

function filterContacts() {
    // the view ID can be anything unique
    var viewId = "{10101010-1010-1010-1010-101010101010}";
    var entityName = "contact";
    var viewDisplayName = "Contacts which start with Victor Sanchez";
    fetchXml = `
    <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
        <entity name="contact">
            <attribute name="fullname" />
            <attribute name="telephone1" />
            <attribute name="contactid" />
            <order attribute="fullname" descending="false" />
            <filter type="and">
            <condition attribute="fullname" operator="like" value="Victor Sanchez%" />
            </filter>
        </entity>
    </fetch>
    `

    var layoutXml = `<grid name="resultset" object="2" jump="lastname" select="1" icon="1" preview="1"><row name="result" id="contactid"><cell name="firstname" width="300"/><cell name="lastname" width="100"/></row></grid>`;

    formContext.getControl("customerid").addCustomView(viewId, entityName, viewDisplayName, fetchXml, layoutXml, false);
    formContext.getControl("customerid").setDefaultView(viewId);
}

## Como probar cosas rápidas de este estilo

Normalmente, para poder probar todo este tipo de cosas, juego mucho con el DOM y con la consola. Para ello me meto con el Xrm.Page (bendito sea), para poder ver que capacidades tienen los campos. Para ello, veo que el Xrm.Page.getControl(“customerid”) tiene todos esos atributos y métodos que nos permiten realizar diferentes acciones sobre ello.

Conclusiones

Creo que esto es algo que Microsoft arreglará en alguna versión de este PCF, ya que debería de poder ser tratado de forma estándar y no tener que desarrollar una línea de código.

Aun así, si tienes alguna duda, ponte en contacto conmigo a través del mail me@victorsolaya.com estaré encantado de ayudarte.


Únete a la newsletter