2012-04-04 15 views
5

Tôi đang cố gắng làm cho câu hỏi này nghe rõ ràng nhất có thể.X ++ chuyển các bản ghi đã chọn hiện tại trong biểu mẫu cho báo cáo của bạn

Về cơ bản, tôi đã tạo báo cáo và giờ đây nó tồn tại dưới dạng nút menuitem để báo cáo có thể chạy khỏi biểu mẫu.

Điều tôi muốn làm là có thể chọn nhiều bản ghi, khi tôi nhấp vào nút để chạy báo cáo, các bản ghi đã chọn hiện tại được chuyển vào biểu mẫu hộp thoại (màn hình bộ lọc) xuất hiện.

Tôi đã cố gắng thực hiện điều này bằng cách sử dụng cùng một phương pháp như với biểu mẫu SaleLinesEdit, nhưng không thành công.

Nếu bất cứ ai có thể chỉ cho tôi đúng hướng, tôi sẽ đánh giá cao điều đó.

Trả lời

2

Đây là giải pháp tôi đã sử dụng cho sự cố này;

Hai phương pháp trên báo cáo để khi các trường được chọn nhiều trên biểu mẫu, các giá trị được chuyển đến hộp thoại bộ lọc;

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; 
    } 
} 

// này thiết lập các truy vấn và nhận được giá trị chuyển chúng tới các phạm vi ie "SO0001, SO0002, SO000 £ ...

Các phương pháp thứ hai là như sau;

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

Ngoài phương pháp init, điều này là bắt buộc;

public void init() 
{ 
    ; 
    super(); 

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

Hy vọng điều này sẽ giúp trong tương lai cho bất kỳ ai khác có vấn đề tôi có.

3

Hãy xem Axaptapedia passing values between forms. Điều này sẽ giúp bạn. Có thể bạn sẽ phải sửa đổi báo cáo của mình để sử dụng biểu mẫu cho hộp thoại thay vì sử dụng các phương thức hộp thoại cơ sở của báo cáo Here is a good place to start with that!

+0

Cảm ơn bạn Michael, tôi đánh giá cao sự giúp đỡ của bạn và sẽ bắt đầu làm việc về vấn đề này ngay lập tức. – will

2

Chỉ muốn thêm này

Bạn có thể sử dụng lớp MuliSelectionHelper để làm điều này rất đơn giản:

MultiSelectionHelper selection = MultiSelectionHelper::createFromCaller(_args.caller()); 
MyTable myTable = selection.getFirst(); 
while (myTable) 
{ 
    //do something 
    myTable = selection.getNext(); 
} 
Các vấn đề liên quan