Pregunta

Tengo una forma en Axapta / Dynamics AX (EmplTable) que tiene dos fuentes de datos (EmplTable y HRMVirtualNetworkTable) donde la fuente segundos datos (HRMVirtualNetworkTable) está unido a la primera con el tipo de enlace "retardada".

¿Hay una manera de establecer un filtro en los registros, basado en la segunda fuente de datos, sin tener que cambiar el tipo de enlace a "InnerJoin"?

¿Fue útil?

Solución

Se puede usar "unión externa" en lugar de "retardada" a continuación, cambiar el modo de unirse a programmaticly cuando hay búsqueda de campos de HRMVirtualNetworkTable.

Añadir este método para SysQuery clase:

static void updateJoinMode(QueryBuildDataSource qds)
{
    Counter r;
    if (qds)
    {
        qds.joinMode(JoinMode::OuterJoin);
        for (r = 1; r <= qds.rangeCount(); r++)
        {
            if (qds.range(r).value() && qds.range(r).status() == RangeStatus::Open)
            {
                qds.joinMode(JoinMode::InnerJoin);
                break;
            }
        }
    }
}

En el executeQuery () en la fuente de datos EmplTable:

public void executeQuery()
{;
    SysQuery::updateJoinMode(this.queryRun() ? this.queryRun().query().dataSourceTable(tableNum(HRMVirtualNetworkTable)) : this.query().dataSourceTable(tableNum(HRMVirtualNetworkTable)));    
    super();
}

A veces nula this.queryRun () vuelven a fin de utilizar this.query () en su lugar.

Actualización:

Tenga en cuenta que lo anterior no es relevante para AX 2012 y más adelante, donde se puede utilizar filtros de consulta en combinaciones externas. Ver Cómo utilizar la clase QueryFilter con combinaciones externas .

Otros consejos

Puede hacerlo mediante programación al unirse QueryBuildDataSource o por el filtro extendido (Alt + F3, haga clic en el botón derecho en la fuente de datos, 1: N y encontrar sev \ cundaria DS)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top