Chọn nhiều dòng trong parameter SSRS


29/07/2020- duocnt    904 Views    

MỤC ĐÍCH.

Hướng dẫn cách tạo SSRS report trong D365FO với parameter có thể chọn nhiều dòng dữ liệu.

GIAO DIỆN HOÀN THÀNH.


CÁC BƯỚC THỰC HIỆN.

1 - Tạo DataContract.

    1.1    Add vào project 1 class với name multipSelectionParameterReportContract.

    1.2    Tạo phương thức parmListItemId() để chọn nhiều ItemId.

2 - Tạo DataContractUIBuilder.

    2.1    Add vào project 1 class với name multipSelectionParameterReportUIBuilder.

    2.2    Extends từ class SrsReportDataContractUIBuilder.

    2.3    Khai báo instance variable của DialogField.

    2.4    Tạo phương thức lookupListItem() để hiển thị ra danh sách Item cho người dùng chọn sử dụng SysLookupMultiSelectGrid

    2.5    Override phuong thức postBuild().

    2.6    Override phương thức postRun() và comment super().

3 - Edit DataContract.

    3.1    Gắn class UIBuilder vào DataContract.

4 - Tạo table TempDB.

    4.1    Add vào project 1 table với name multipSelectionParameterReportTmp.

    4.2    Tạo các field cho table TempDB.

    4.3    Chọn TempDB cho thuộc tính Table Type.

5 - Tạo DataProvider.

    5.1    Add vào project 1 class với name multipSelectionParameterReportProvider.

    5.2    Extends từ class SRSReportDataProviderBase.

    5.3    Gắn DataContract vào Provider sử dụng thuộc tính SrsReportParameterAttribute.

    5.4    Khai báo các Instance cần thiết (Contract và TempDB).

    5.5    Viết phương thức trả về DataSet cho SSRS.

    5.6    Override phương thức  processReport().

6 - Tạo SSRS Report.

    6.1    Add vào project 1 SSRS với name multipSelectionParameterReportSSRS.

    6.2    Tạo DatasSet từ DataProvider.

    6.3    Tạo report Designer để view dữ liệu từ DataSet.

7 - Tạo MenuItem để run Report.

    7.1    Add vào project 1 OutputMenuItem với name multipSelectionParameterReportMenuItem.

    7.2    Setup các thuộc tính cần thiết cho OutputMenuItem.

    7.3    Add OutputMenuItem vào menu extension tùy chọn.

8 - Build project  và Deploy Report.

9 - Run Report.



THỰC HIỆN

1 - Tạo DataContract.

    1.1    Add vào project 1 class với name multipSelectionParameterReportContract.

    1.2    Tạo phương thức parmListItemId() để chọn nhiều ItemId.

class multipSelectionParameterReportContract
{
    List        listItemId;
    [
        DataMember("listItemId"),
        AifCollectionType("listItemId",Types::String),
        SysOperationLabel(literalStr("Multiple ItemId"))
    ]
    public List parmListItemId(List _listItemId = listItemId)
    {
        listItemId  =  _listItemId;
        return  listItemId;
    }
}


2 - Tạo DataContractUIBuilder.

    2.1    Add vào project 1 class với name multipSelectionParameterReportUIBuilder.

    2.2    Extends từ class SrsReportDataContractUIBuilder.

class multipSelectionParameterReportUIBuilder extends SrsReportDataContractUIBuilder
{    
}

    2.3    Khai báo instance variable của DialogField.

class multipSelectionParameterReportUIBuilder extends SrsReportDataContractUIBuilder
{
    DialogField dlgField_ListItemId;
}

    2.4    Tạo phương thức lookupListItem() để hiển thị ra danh sách Item cho người dùng chọn sử dụng SysLookupMultiSelectGrid

    private void lookupListItem(FormStringControl _control)
    {
        Query       _query;
        QueryBuildDataSource       _qbdsInventTable,_qbdsEcoResProduct,_qbdsEcoResProductTranslation;
        container   _cont;
 
        _query      =      new Query();
        _qbdsInventTable   =      _query.addDataSource(tableNum(InventTable));
        _qbdsInventTable.addSelectionField(fieldNum(InventTable,ItemId));
 
        //Add another datasource (EcoResProduct)
        _qbdsEcoResProduct  =  _qbdsInventTable.addDataSource(tableNum(EcoResProduct));       
        _qbdsEcoResProduct.addLink(fieldNum(InventTable,Product),fieldNum(EcoResProduct,RecId));      
        _qbdsEcoResProduct.joinMode(JoinMode::InnerJoin);
        _qbdsEcoResProduct.relations(true);
        _qbdsEcoResProduct.addSelectionField(fieldNum(EcoResProduct,Searchname));
       
 
        //Add another source
        _qbdsEcoResProductTranslation  =   _qbdsEcoResProduct.addDataSource(tableNum(EcoResProductTranslation));
        _qbdsEcoResProductTranslation.addLink(fieldNum(EcoResProduct,RecId),fieldNum(EcoResProductTranslation,Product));       
        _qbdsEcoResProductTranslation.joinMode(JoinMode::InnerJoin);   
                _qbdsEcoResProductTranslation.relations(true);
        _qbdsEcoResProductTranslation.addSelectionField(fieldNum(EcoResProductTranslation,Name));
    
       
        SysLookupMultiSelectGrid::lookup(_query,_control,_Control,_control,_cont);
    }

    2.5    Override phuong thức postBuild().

    public void postBuild()
    {
        super();
 
        multipSelectionParameterReportContract  _contract;
        _contract   =   this.dataContractObject() as multipSelectionParameterReportContract;
        dlgField_ListItemId =   this.bindInfo()
                                                                        .getDialogField(this.dataContractObject(),methodStr(multipSelectionParameterReportContract,parmListItemId));
 
        //đăng ký phương thức lookupListItem của UIBuilder để Override với phương thức Lookup của FormStringControl.                                 dlgField_ListItemId.registerOverrideMethod(methodStr(FormStringControl,lookup),methodStr(multipSelectionParameterReportUIBuilder,lookupListItem),this);
        if(dlgField_ListItemId)
        {
            dlgField_ListItemId.lookupButton(2);
        }
    }

    2.6    Override phương thức postRun() và comment super().

    public void postRun()
    {
        //super();
    }


3 - Edit DataContract.

    3.1    Gắn class UIBuilder vào DataContract.

[SysOperationContractProcessing(classStr(multipSelectionParameterReportUIBuilder))]
class multipSelectionParameterReportContract


4 - Tạo table TempDB.

    4.1    Add vào project 1 table với name multipSelectionParameterReportTmp.

    4.2    Tạo các field cho table TempDB.

    4.3    Chọn TempDB cho thuộc tính Table Type.


5 - Tạo DataProvider.

    5.1    Add vào project 1 class với name multipSelectionParameterReportProvider.

    5.2    Extends từ class SRSReportDataProviderBase.

class multipSelectionParameterReportProvider extends SRSReportDataProviderBase
{
}

    5.3    Gắn DataContract vào Provider sử dụng thuộc tính SrsReportParameterAttribute.

[SrsReportParameterAttribute(classStr(multipSelectionParameterReportContract))]
class multipSelectionParameterReportProvider extends SRSReportDataProviderBase
{
}

    5.4    Khai báo các Instance cần thiết (Contract và TempDB).

[SrsReportParameterAttribute(classStr(multipSelectionParameterReportContract))]
class multipSelectionParameterReportProvider extends SRSReportDataProviderBase
{
    multipSelectionParameterReportTmp       _tmp;
    multipSelectionParameterReportContract  _contract;
}

    5.5    Viết phương thức trả về DataSet cho SSRS.

    [SRSReportDataSetAttribute(tableStr(multipSelectionParameterReportTmp))]
    public multipSelectionParameterReportTmp  reportdata()
    {
        return _tmp;
    }

    5.6    Override phương thức  processReport().

    public void processReport()
    {
        super();
        ListIterator    _listItemIdIterator;
        List            _listItemId;
 
        _contract   =   this.parmDataContract() as multipSelectionParameterReportContract;
        _listItemId =   _contract.parmListItemId();
        if(_listItemId)
        {
            _listItemIdIterator =   new ListIterator(_listItemId);
        }
 
        _tmp.clear();
        while(_listItemIdIterator.more())
        {
            EcoResProduct               _ecoresproduct;
            EcoResProductTranslation    _translation;
            ItemId                      _itemid;
            InventTable                 _inventTable;
 
            _itemid         =  _listItemIdIterator.value();
            _inventTable    =   InventTable::find(_itemid);
            _ecoresproduct  =   EcoResProduct::find(_inventTable.Product);
            _translation    =   EcoResProductTranslation::findByProductLanguage(_ecoresproduct.RecId,"en-US");
            _tmp.ItemId     =  _itemid;
            _tmp.ItemName   =  _translation.Name;
            _tmp.insert();
            _listItemIdIterator.next();
        }            }


6 - Tạo SSRS Report.

    6.1    Add vào project 1 SSRS với name multipSelectionParameterReportSSRS.

    6.2    Tạo DatasSet từ DataProvider.





    6.3    Tạo report Designer để view dữ liệu từ DataSet.




7 - Tạo MenuItem để run Report.

    7.1    Add vào project 1 OutputMenuItem với name multipSelectionParameterReportMenuItem

    7.2    Setup các thuộc tính cần thiết cho OutputMenuItem.

    7.3    Add OutputMenuItem vào menu extension tùy chọn.

8 - Build project  và Deploy Report.

9 - Run Report.





Góp ý kiến

;
;