• Este debate está vacío.
Viendo 9 entradas - de la 1 a la 9 (de un total de 9)
  • Autor
    Entradas
  • #32857
    Javier Loffredo
    Participante

    Buenas, quisiera saber si hay forma (o planes para la próxima versión) de poder buscar un registro por el nombre (bPartnerRetrieveByName o algo asi).

    Estoy buscando hacer algo como el bPartnerRetrieveByValue, pero con el nombre en lugar del Value.

    Gracias!!

    #38813
    Federico Cristina
    Superadministrador

    Buenas,

    Podés resolver el problema de otra manera, sin necesidad de esperar por una nueva versión. La versíon más actual de LYWS cuenta con la operación recordQuery(). Mediante esa operación podés recuperar uno o varios registros de una tabla a partir de un criterio especificado, e incluso filtrar sólo un número de columnas a retornar.

    Code:
    /**
    * Devuelve una serie de registros de una tabla dada
    * @param data parametros generales de acceso y columnas a recuperar
    * @param tableName Nombre de tabla (M_Product, C_BPartner, C_Order, C_Invoice, M_InOut, C_AllocationHdr, etc.)
    * @param whereClause criterio de filtrado
    * @param includeNamedReferences para las foreign keys, devolver además del ID, el name, value o identificador correspondiente al registro referenciado
    * @return MultipleRecordsResultBean con OK, ERROR, los registros correspondientes
    */
    public MultipleRecordsResultBean recordQuery(FilteredColumnsParameterBean data, String tableName, String whereClause, boolean includeNamedReferences);

    Es posible por lo tanto, recuperar el ID de un BPartner a partir de su Name, y luego utilizar la operación bPartnerRetrieveByID() para recuperar todos los datos del BPartner. También podrías utilizar directamente recordQuery() para recuperar un registro de la tabla C_BPartner, pero la operación bPartnerRetrieveByID() incluye datos adicionales, como su localización.

    Saludos,
    Federico

    #38814
    Javier Loffredo
    Participante

    Excelente, muchas gracias!

    #38818
    Javier Loffredo
    Participante

    Puede ser que no funcione el recordQuery con la tabla c_currency?

    con c_bpartner, m_product y m_pricelist funciona de 10, pero cuando quiero usarlo con c_currency me vuelve un array vacio (sin ningun error)

    el whereClause es: c_currency_id=118

    #38864
    Saulo Gil
    Miembro
    jloffredo wrote:
    Puede ser que no funcione el recordQuery con la tabla c_currency?

    con c_bpartner, m_product y m_pricelist funciona de 10, pero cuando quiero usarlo con c_currency me vuelve un array vacio (sin ningun error)

    el whereClause es: c_currency_id=118

    ¿Has probado sin aplicar filtros?

    #38865
    Federico Cristina
    Superadministrador

    Buenas,

    Es extraño. Lo único que se me ocurre en función de lo que comentás es que C_Currency tiene como AD_Client_ID = 0 (la cual es System, dado que es información para todas las compañías). Podrías probar a acceder al WS con dicha compañía a ver si en ese caso sí devuelve la información. De ser así, es probable que en algún lugar se esté aplicando algún filtro por compañía.

    Slds,
    Federico

    #38815
    Javier Loffredo
    Participante

    Bueno, sin filtros da lo mismo.
    Debe venir por el lado que es system, pero para lo que estoy haciendo no tengo como cambiarle el usuario de login para que pueda entrar con el otro cliente (o bien tener que habilitar el usuario para que loguee con system).

    Gracias igual

    #38868
    Saulo Gil
    Miembro

    Me pregunto cual puede ser el impacto de cambiarle la compañía (ad_client_id) a las monedas que están dadas de alta. Esto no debería tener efectos colaterales, al menos que tengas más de una compañía dada de alta dentro de la misma base de datos. Creo que no se pierde mucho con probar, seguramente con esto puedas resolver tu problema.

    #38874
    Federico Cristina
    Superadministrador

    Buenas,

    Estaba equivocado, el problema no radicaba en la compañía, sino en que MCurrency no implementaba uno de los dos tradicionales constructores de POs, y justamente GeneralRecordQueryHandler (clase de LYWS) lo necesita. En particular, el faltante es el siguiente en MCurrency:

    Code:
    public MCurrency(Properties ctx, ResultSet rs, String trxName) {
    super(ctx, rs, trxName);
    }

    Esto disparaba una excepción que impedía instanciar los correspondientes POs y llevarlos luego a la map de resultados.

    Ya está commiteado el fix. Revisión r1104.

    Slds,
    Federico

Viendo 9 entradas - de la 1 a la 9 (de un total de 9)
  • Debes estar registrado para responder a este debate.