2012-04-04 6 views
5

Estoy tratando de hacer que esta pregunta suene lo más clara posible.X ++ pasando los registros seleccionados actuales en un formulario para su informe

Básicamente, he creado un informe, y ahora existe como un botón de menú para que el informe pueda ejecutarse fuera del formulario.

Lo que me gustaría hacer es poder seleccionar múltiples registros, luego cuando hago clic en mi botón para ejecutar mi informe, los registros seleccionados actuales se pasan al formulario de diálogo (pantalla de filtro) que aparece.

He intentado hacer esto utilizando los mismos métodos que con el formulario SaleLinesEdit, pero no tuve éxito.

Si alguien pudiera señalarme en la dirección correcta, lo agradecería mucho.

Respuesta

2

Aquí está la resolución que utilicé para este problema;

Dos métodos en el informe para que cuando los campos se seleccionan de forma múltiple en los formularios, los valores se pasan al cuadro de diálogo de filtro;

private void setQueryRange(Common _common) 
    { 
    FormDataSource    fds; 

    LogisticsControlTable  logisticsTable; 

    QueryBuildDataSource  qbdsLogisticsTable; 
    QueryBuildRange    qbrLogisticsId; 
    str       rangeLogId; 

    set       logIdSet = new Set(Types::String); 

    str addRange(str _range, str _value, QueryBuildDataSource _qbds, int _fieldNum, Set _set =  null) 
    { 
     str    ret = _range; 
     QueryBuildRange qbr; 
     ; 

     if(_set && _set.in(_Value)) 
     { 
      return ret; 
     } 

     if(strLen(ret) + strLen(_value) + 1 > 255) 
     { 
      qbr = _qbds.addRange(_fieldNum); 
      qbr.value(ret); 
      ret = ''; 
     } 

     if(ret) 
     { 
      ret += ','; 
     } 

     if(_set) 
     { 
      _set.add(_value); 
     } 

     ret += _value; 
     return ret; 
    } 
    ; 

    switch(_common.TableId) 
    { 
     case tableNum(LogisticsControlTable): 

      qbdsLogisticsTable = element.query().dataSourceTable(tableNum(LogisticsControlTable)); 
      qbrLogisticsId  = qbdsLogisticsTable.addRange(fieldNum(LogisticsControlTable, LogisticsId)); 

      fds = _common.dataSource(); 

      for(logisticsTable = fds.getFirst(true) ? fds.getFirst(true) : _common; 
       logisticsTable; 
       logisticsTable = fds.getNext()) 
      { 
       rangeLogId = addrange(rangeLogId, logisticsTable.LogisticsId, qbdsLogisticsTable, fieldNum(LogisticsControlTable, LogisticsId),logIdSet); 
      } 

      qbrLogisticsId.value(rangeLogId); 
      break; 
    } 
} 

// Este conjunto la consulta y obtiene los valores de pasarlos a la gama es decir, "SO0001, SO0002, SO000 £ ...

El segundo métodos es el siguiente;

private void setQueryEnableDS() 
{ 
    Query   queryLocal = element.query(); 
    ; 
} 

también en el método init esto es necesario;

public void init() 
{ 
    ; 
    super(); 

    if(element.args() && element.args().dataset()) 
    { 
     this.setQueryRange(element.args().record()); 
    } 
} 

Espero que esto ayude en el futuro para cualquier otra persona que tiene la problema que tuve.

2

sólo quería añadir este

Usted puede utilizar la clase MuliSelectionHelper hacer esto de manera muy sencilla:

MultiSelectionHelper selection = MultiSelectionHelper::createFromCaller(_args.caller()); 
MyTable myTable = selection.getFirst(); 
while (myTable) 
{ 
    //do something 
    myTable = selection.getNext(); 
} 
Cuestiones relacionadas