none
Lookup Método RRS feed

  • Pergunta

  • Olá Pessoal,

    Como faço para fazer um lookup utilizando INNER JOIN ou SELECT com outra tabela para retornar tais registros ?

    Criei uma tabela nova (KBS_InventModelGroup) que contém o campos :

    - Grupo de Modelo de Estoque 
    - Empresa(DataAreaID)

    Neste caso eu preciso que o campo Item na tela de Ordem de compra, retorne no lookup somente os itens cujo os grupos de modelo de itens estejam na tabela nova (INNER JOIN) e a empresa seja = ao que estou logado no sistema

    Utlizando um select simples para compreensão seria mais ou menos desta forma...


    Select * From InventTable
      Inner join KBS_InventModelGroup ON
          InventTable.ModelGroupID = KBS_InventModelGroup.ModelGroupID
     Where KBS_InventModelGroup.DataAreaID = <a empresa que estou logado no AX)


    O problema é que não sei como fazer este código no X++ no método Lookup ou Modified....

    Enquanto respondem vou tentando também.....


    Obrigado,
    Andre
    quarta-feira, 3 de março de 2010 17:34

Respostas

  • André,
    Isso ai resolve seu problema:


    []s
    Pichler

    Pichler
    • Marcado como Resposta André L.Silva sábado, 27 de março de 2010 13:28
    quarta-feira, 3 de março de 2010 19:44
  • Andre,

     

        No Lookup do AX a parte de trazer apenas os registros da empresa que você está logado já é default.

        Agora para fazer um lookup aonde traga apenas os registros que tenham o ModelGroupID na tabela KBS_InventModelGroup deve fazer uma Query com dois datasources e ativar a relation, mas as tabelas devem estar com seus relacionamentos configurados no AX.

    Exemplo:

    public void lookup()
    {
      Query                   query = new Query();
      QueryBuildDataSource    dtsInventTable;
      QueryBuildDataSource    dtsKBS_InventModelGroup;
      SysTableLookup  sysTableLookup = sysTableLookup::newParameters(tableNum(InventTable), this);
      ;
     
      dtsInventTable = query.addDataSource(tableNum(CustTable));
      
      //Faz o relacionamento entre as tabelas aqui
      dtsKBS_InventModelGroup = dsCustTable.addDataSource(tableNum(KBS_InventModelGroup));
      dtsKBS_InventModelGroup.relations(true);
      dtsKBS_InventModelGroup.joinMode(JoinMode::ExistsJoin);
     
      sysTableLookup.parmQuery(query);
      
      //Adiciona os campos que vão aparecer no lookup
      sysTableLookup.addLookupfield(fieldNum(InventTable, ItemId));
      sysTableLookup.addLookupfield(fieldNum(InventTable, ItemName));
     
      // Executa o lookup
      sysTableLookup.performFormLookup();
    }
    
    Espero ter ajudado! Abraços
    • Marcado como Resposta André L.Silva sábado, 27 de março de 2010 13:28
    sábado, 20 de março de 2010 12:52

Todas as Respostas

  • André,
    Isso ai resolve seu problema:


    []s
    Pichler

    Pichler
    • Marcado como Resposta André L.Silva sábado, 27 de março de 2010 13:28
    quarta-feira, 3 de março de 2010 19:44
  • Andre,

     

        No Lookup do AX a parte de trazer apenas os registros da empresa que você está logado já é default.

        Agora para fazer um lookup aonde traga apenas os registros que tenham o ModelGroupID na tabela KBS_InventModelGroup deve fazer uma Query com dois datasources e ativar a relation, mas as tabelas devem estar com seus relacionamentos configurados no AX.

    Exemplo:

    public void lookup()
    {
      Query                   query = new Query();
      QueryBuildDataSource    dtsInventTable;
      QueryBuildDataSource    dtsKBS_InventModelGroup;
      SysTableLookup  sysTableLookup = sysTableLookup::newParameters(tableNum(InventTable), this);
      ;
     
      dtsInventTable = query.addDataSource(tableNum(CustTable));
      
      //Faz o relacionamento entre as tabelas aqui
      dtsKBS_InventModelGroup = dsCustTable.addDataSource(tableNum(KBS_InventModelGroup));
      dtsKBS_InventModelGroup.relations(true);
      dtsKBS_InventModelGroup.joinMode(JoinMode::ExistsJoin);
     
      sysTableLookup.parmQuery(query);
      
      //Adiciona os campos que vão aparecer no lookup
      sysTableLookup.addLookupfield(fieldNum(InventTable, ItemId));
      sysTableLookup.addLookupfield(fieldNum(InventTable, ItemName));
     
      // Executa o lookup
      sysTableLookup.performFormLookup();
    }
    
    Espero ter ajudado! Abraços
    • Marcado como Resposta André L.Silva sábado, 27 de março de 2010 13:28
    sábado, 20 de março de 2010 12:52
  • Francis, Obrigado!!!

    Vou realizar os devidos testes.

     

    Obrigado,

     

    André

     

     


    Andre
    sábado, 27 de março de 2010 13:29