Showing posts with label SSRS. Show all posts
Showing posts with label SSRS. Show all posts

Friday, 27 March 2020

How can I add a row number at each grouping header in SSRS reports



How can I add a row number at each grouping header in SSRS reports



Ex:   =RunningValue(Fields!ItemId.Value, countdistinct,Nothing)

here i did the grouping with item id so I given Fields!ItemId.Value
and countdistinct,Nothing are the key words

Friday, 22 March 2019

Having query in dialog form get the query values by using contract class

I am using query for dialog
need to get the values of that query

Create a query.
action type menu item
add to controller class
form controller class getting the service class
here in service class we are getting contract class.
here in attribute of contact class we are passing our query


contract class:

/// <summary>
/// Contract class for releasing sales order
/// </summary>
[DataContractAttribute]
class FBHSalesReleaseOrderContract
{
    str         packedQuery;

    [DataMemberAttribute,
    AifQueryTypeAttribute('_packedQuery', querystr(FBHSalesAgreementFollowUp))]
    /// <summary>
    ///    Parm method to return and set parameters.
    /// </summary>
    /// <param name="_packedQuery">
    /// </param>
    /// <returns>
    ///    Returnd the parameter passed.
    /// </returns>
    public str parmQuery(str _packedQuery = packedQuery)
    {
        packedQuery = _packedQuery;
        return packedQuery;
    }

    /// <summary>
    ///    Method to return query.
    /// </summary>
    /// <returns>
    ///    Returnd the query.
    /// </returns>
    public Query getQuery()
    {
        return new Query(SysOperationHelper::base64Decode(packedQuery));
    }

    /// <summary>
    ///    Method to set the query.
    /// </summary>
    /// <param name="_query">
    /// </param>
    public void setQuery(Query _query)
    {
        packedQuery = SysOperationHelper::base64Encode(_query.pack());
    }

}


Controller class:

/// <summary>
/// Controller class for release order
/// </summary>
class FBHSalesReleaseOrderController extends SysOperationServiceController
{
    /// <summary>
    /// Construct for calling service class
    /// </summary>
    /// <param name = "_args">Argument</param>
    /// <returns></returns>
    public static FBHSalesReleaseOrderController construct(SysOperationExecutionMode _executionMode=SysOperationExecutionMode::Synchronous)
    {
        FBHSalesReleaseOrderController FBHSalesReleaseOrderController = new FBHSalesReleaseOrderController(classStr(FBHSalesReleaseOrderService),methodStr(FBHSalesReleaseOrderService,process),_executionMode);
        return FBHSalesReleaseOrderController;
    }

    /// <summary>
    /// Main method for controller class
    /// </summary>
    /// <param name = "_args"></param>
    public static void main(Args _args)
    {
        FBHSalesReleaseOrderController   FBHSalesReleaseOrderController;
        FBHSalesReleaseOrderController = FBHSalesReleaseOrderController::construct();
        FBHSalesReleaseOrderController.startOperation();
    }

    /// <summary>
    /// To set the dialog caption
    /// </summary>
    /// <param name = "_dialogCaption"></param>
    /// <returns></returns>
    public LabelType parmDialogCaption(LabelType _dialogCaption = "")
    {
        return "@FBH:FBH50718";
    }

    /// <summary>
    ///
    /// </summary>
    /// <returns></returns>
    protected boolean canRunInNewSession()
    {
        boolean ret;
   
        ret = super();
        ret = true;
        return ret;
    }


}


Service class:


/// <summary>
/// Service class for releasing sales order
/// </summary>
class FBHSalesReleaseOrderService
{
 
    /// <summary>
    /// Method to run the query and apply validations.
    /// </summary>
    /// <param name="_FBHSalesReleaseOrderContract">
    /// FBHSalesReleaseOrderContract contract class parameter
    /// </param>
    public void process(FBHSalesReleaseOrderContract _FBHSalesReleaseOrderContract)
    {
        Query                query;
        QueryRun             queryRun;
        query                = _FBHSalesReleaseOrderContract.getQuery();
        queryRun             = new QueryRun(query);
        query                = queryRun.query();

        QueryBuildDataSource qbds = query.dataSourceTable(tableNum(AgreementLine));
        QueryFilter filter = query.findQueryFilter(qbds, fieldId2Name(tableNum(AgreementLine), fieldNum(AgreementLine, FBHReleaseDate)));
        if (filter == null)
        {
            filter = query.addQueryFilter(qbds, fieldId2Name(tableNum(AgreementLine), fieldNum(AgreementLine, FBHReleaseDate)));
        }
       
        if (filter && filter.value() == "")
        {
            filter.value(queryValue(DateTimeUtil::getToday(DateTimeUtil::getUserPreferredTimeZone())));
        }

        SalesAgreementHeader salesAgreementHeader;
       
        while(queryRun.next())
        {
            if (queryRun.changed(tableNum(SalesAgreementHeader)) )
            {
                salesAgreementHeader          = queryRun.get(TableNum(SalesAgreementHeader)) as SalesAgreementHeader;
                salesAgreementHeader          = SalesAgreementHeader::findAgreementId(SalesAgreementHeader.SalesNumberSequence);

                if((   SalesAgreementHeader.LatestLineExpirationDate
&& SalesAgreementHeader.LatestLineExpirationDate
<=  DateTimeUtil::getSystemDate(DateTimeUtil::getUserPreferredTimeZone()))
||!SalesAgreementHeader::hasdeliverySchedule(SalesAgreementHeader))
                {
                    continue;
                }
                try
                {
                    ttsbegin;
                    FBHSalesReleaseOrderService::releaseOrderFromAgreement(SalesAgreementHeader,query);
                    ttscommit;
                }
                catch(Exception::Error)
                {
                    continue;
                }
            }
        }
    }

    /// <summary>
    ///  Release order from agreement
    /// </summary>
    /// <param name = "salesAgreementHeader">sales agreement from which order is to be released</param>
    /// <param name = "_query">passing selected query from dialog</param>
    public static void releaseOrderFromAgreement(SalesAgreementHeader salesAgreementHeader,Query _query = new Query())
    {
        salesCreateReleaseOrderTableTmp salesCreateReleaseOrderTabletmp;
        salesCreateReleaseOrderLineTmp  salesCreateReleaseOrderLineTmp;
        SalesAgreementHeader.Currency = Ledger::accountingCurrency(CompanyInfo::current());
        FBHSalesAgreementGenerateReleaseOrder salesAgreementGenerateReleaseOrder
                                          = FBHSalesAgreementGenerateReleaseOrder::construct();

        salesAgreementGenerateReleaseOrder.parmSalesAgreementHeader(salesAgreementHeader);
        salesAgreementGenerateReleaseOrder.parmisBatch(NoYes::Yes);
        salesAgreementGenerateReleaseOrder.parmQuery(_query);
        salesAgreementGenerateReleaseOrder.createReleaseOrderTable(salesCreateReleaseOrderTableTmp);
        salesAgreementGenerateReleaseOrder.createReleaseOrderLine(salesCreateReleaseOrderLineTmp);
        salesAgreementGenerateReleaseOrder.parmReleaseOrderTable(salesCreateReleaseOrderTableTmp);
        salesAgreementGenerateReleaseOrder.parmReleaseOrderLine(SalesCreateReleaseOrderLineTmp);

        if (salesAgreementGenerateReleaseOrder.check())
        {
            ttsbegin;

            SalesAutoCreate salesAutoCreate = SalesAutoCreate::construct(salesAgreementGenerateReleaseOrder.getreleaseorderline(), null,salesAgreementGenerateReleaseOrder.getreleaseordertable());
            salesAutoCreate.create();

            ttscommit;
        }
    }


}

Friday, 20 November 2015

class for To get the printer names lookup in ax and dialog override method and last dialog values store next time dialog opens:


To get the printer names lookup in ax and dialog override method and last dialog values store next time dialog opens:

/// <summary>
/// to show the printer name lookup
/// </summary>

class MSSpindleLabelLookup extends RunBase
{
    dialog              dialog;
    dialogGroup         dialogGroup;
    dialogField         dialogField;
    PrinterName         getPrinterName;
    container _dialogValues;
}



/// <summary>
/// to get the dialog
/// </summary>
/// <returns>
/// returns printer name what you selected
/// </returns>
/// <remarks>
/// to get the dialog
/// </remarks>
/// <exception cref="Exception::Error">
/// if user cancel the printing
/// </exception>
protected Object dialog()
{
    FormStringControl   systemprinterNames;
    ;

    dialog              = new Dialog("@MPR5759");
    dialogGroup         = dialog.addGroup("@SYS62708");
    dialogField         = dialog.addField(extendedTypeStr(PrinterName));
    systemprinterNames  = dialogField.fieldControl();
    systemprinterNames.registerOverrideMethod(methodStr(FormStringControl, lookup), MethodStr(MSSpindleLabelLookup, msprinterLookup), this);
    systemprinterNames.mandatory(true);

    //Get the previouse values
    _dialogValues = xSysLastValue::getValue(curExt(), curUserId(), UtilElementType::Job, "@SYS62708");
    //Check if we have previouse values
    if(_dialogValues != conNull())
    {
        dialogField.value(conPeek(_dialogValues, 1));
    }
    if (dialog.run())
    {
        //Save the user choices
        _dialogValues = conNull();
        _dialogValues += dialogField.value();
        xSysLastValue::putValue(_dialogValues, curExt(), curUserId(), UtilElementType::Job, "@SYS62708");

    }

    if(dialog.closedOk() == false)
        throw error("@MPR5760");
    return Dialog;
}



/// <summary>
/// get the lookup
/// </summary>
/// <param name="_formControl">
/// passing  string control
/// </param>

public  void msprinterLookup(FormStringControl _formControl )
{
    SysTableLookup                  sysTableLookup;
    TmpTableFieldLookup             tmpTableFieldLookup;
    Enumerator                      en;
    List                            entitylist      = new list(types::String);
    Map                             printerMap;
    MapEnumerator                   enumerator;
    PrinterName                     printerName;

    printerMap          = MSSpindleLabelLookup::printerMap();//If above method was created in Global class else call specific class
    enumerator          = printerMap.getEnumerator();
    while (enumerator.moveNext())
    {
        printerName = enumerator.currentValue();
        entitylist.addend(printerName);
    }

    en = entityList.getEnumerator();

    while (en.moveNext())
    {
        tmpTableFieldLookup.MSprinterName = en.current();
        tmpTableFieldLookup.insert();
    }

    sysTableLookup = SysTableLookup::newParameters(tableNum(tmpTableFieldLookup), _formControl);
    sysTableLookup.addLookupfield(fieldNum(TmpTableFieldLookup, MSprinterName));
    sysTableLookup.setLabel("@SYS62708");

    //BP Deviation documented
    sysTableLookup.parmTmpBuffer(tmpTableFieldLookup);
    sysTableLookup.performFormLookup();
}


/// <summary>
/// run the dialog
/// </summary>
/// <returns>
/// get the printer name
/// </returns>
public PrinterName runPrinterLookup()
{
    this.dialog();
    getPrinterName = dialogField.value();
    return getPrinterName;
}





public static MSSpindleLabelLookup construct()
{
    return new MSSpindleLabelLookup();
}


public static void main(Args args)
{
    MSSpindleLabelLookup  MSSpindleLabelLookup = MSSpindleLabelLookup::construct();

    MSSpindleLabelLookup.runPrinterLookup();

}



//This method loads all available printers to a Map object
static Map printerMap()
{
    Microsoft.Dynamics.AX.Framework.Reporting.Shared.PrinterHelper printerHelper;
    Microsoft.Dynamics.AX.Framework.Reporting.Shared.PrinterInfo printerInfo;
    System.Collections.ArrayList names;
    System.Collections.IEnumerator enumerator;
    Map         printerMap;

    str name;
    int printerStatus;
    str driverName;
    str portName;
    str comments;
    int jobCountSinceLastReset;

    if(!printerMap)
    {
        printerMap = new Map(Types::String, Types::Container);

        // BP Deviation documented
        printerHelper = new Microsoft.Dynamics.AX.Framework.Reporting.Shared.PrinterHelper();
        names = printerHelper.get_PrinterNames();
        if (names != null)
        {
            enumerator = names.GetEnumerator();
            while (enumerator.MoveNext())
            {
                name = enumerator.get_Current();
                printerInfo = printerHelper.GetPrinterInfo(name);

                // BP Deviation documented
                printerStatus           = CLRInterop::getAnyTypeForObject(printerInfo.get_PrinterStatus());
                // BP Deviation documented
                driverName              = CLRInterop::getAnyTypeForObject(printerInfo.get_DriverName());
                // BP Deviation documented
                portName                = CLRInterop::getAnyTypeForObject(printerInfo.get_PortName());
                // BP Deviation documented
                comments                = CLRInterop::getAnyTypeForObject(printerInfo.get_Comment());
                // BP Deviation documented
                jobCountSinceLastReset  = CLRInterop::getAnyTypeForObject(printerInfo.get_JobCountSinceLastReset());

                printerMap.insert(name, [name, printerStatus, driverName, portName, comments, jobCountSinceLastReset]);
            }
        }
    }

    return printerMap;
}

Tuesday, 17 November 2015

ui builder class lookup in one parameter depends on other parameters(passing range in parameters)

lookup in one parameter depends on other parameters:

here in we selected production id in parameter
that production having 4 Opr no parameter
here in i selected one opr no. parameter
for that production having 3 job identfication parameters
selected one job identification parameter
having 2 route card journal parameters

passing the range depends on above parameter we are showing lookup in other parametes





public class MSTravelCardUIBuilder extends SysOperationAutomaticUIBuilder
{
    DialogField          dialogProdId,dialogOprNum;
    DialogField          dialogProdJobId,dialogProdJournalRoute;
    MSTravelCardContract contract;
}



public void build()
{
    Dialog               dialogLocal = this.dialog();
    MSTravelCardContract contractLocal = this.dataContractObject();

    //dialogLocal.addGroup(“Parameters”);
    this.addDialogField(methodStr(MSTravelCardContract,parmProdId), contractLocal);
    this.addDialogField(methodStr(MSTravelCardContract,parmOprNum), contractLocal);
    this.addDialogField(methodStr(MSTravelCardContract,parmProdJobId), contractLocal);
    this.addDialogField(methodStr(MSTravelCardContract,parmProdJournalIdRoute), contractLocal);

}


public void getFromDialog()
{
    contract = this.dataContractObject();
    super();
}

public void initializeFields()
{
    contract = this.dataContractObject();
}

public void lookupOprNum(FormStringControl _control)
{

    Query          query = new Query();
    SysTableLookup sysTablelookup;

    sysTablelookup =SysTableLookup::newParameters(tableNum(ProdJournalRoute),_control);
    sysTablelookup.addLookupfield(fieldNum(ProdJournalRoute,OprNum));
    sysTablelookup.addLookupfield(fieldnum(ProdJournalRoute,ProdId));

    query.addDataSource(tableNum(ProdJournalRoute));
    query.dataSourceTable(tableNum(ProdJournalRoute)).addRange(fieldNum(ProdJournalRoute, ProdId)).value(queryValue(dialogProdId.value()));

    sysTablelookup.parmQuery(query);
    sysTablelookup.performFormLookup();
}



public void lookupProdJobId(FormStringControl _control)
{
    Query                   query = new Query();
    QueryBuildDataSource    qbdsJournalRoute,qbdsRouteTrans;
    SysTableLookup          sysTablelookup;

    sysTablelookup =SysTableLookup::newParameters(tableNum(ProdJournalRoute),_control);
    sysTablelookup.addLookupfield(fieldNum(ProdJournalRoute,JobId));
    sysTablelookup.addLookupfield(fieldNum(ProdJournalRoute,OprNum));
    sysTablelookup.addLookupfield(fieldnum(ProdJournalRoute,ProdId));

    qbdsJournalRoute = query.addDataSource(tableNum(ProdJournalRoute));
    qbdsJournalRoute.addRange(fieldNum(ProdJournalRoute, ProdId)).value(queryValue(dialogProdId.value()));
    qbdsJournalRoute.addRange(fieldNum(ProdJournalRoute, OprNum)).value(queryValue(dialogOprNum.value()));
    qbdsJournalRoute.addRange(fieldNum(ProdJournalRoute, QtyGood)).value(queryValue('>0'));

    qbdsRouteTrans = qbdsJournalRoute.addDataSource(tableNum(ProdRouteTrans));
    qbdsRouteTrans.addLink(fieldNum(ProdJournalRoute,ProdId),fieldNum(ProdRouteTrans,TransRefId));
    qbdsRouteTrans.addLink(fieldNum(ProdJournalRoute,JobId),fieldNum(ProdRouteTrans,JobId));
    qbdsRouteTrans.joinMode(joinmode::ExistsJoin);
    qbdsRouteTrans.addRange(fieldNum(ProdRouteTrans,TransType)).value(queryValue(ProdRouteTransType::Qty));
    qbdsRouteTrans.addRange(fieldNum(ProdRouteTrans,QtyGood)).value(queryValue('>0'));

    sysTablelookup.parmQuery(query);
    sysTablelookup.performFormLookup();

}


public void lookupProdJournalRoute(FormStringControl _control)
{

    Query                   query = new Query();
    QueryBuildDataSource    qbdsJournalRoute,qbdsRouteTrans;
    SysTableLookup sysTablelookup;

    sysTablelookup =SysTableLookup::newParameters(tableNum(ProdJournalRoute),_control);
    sysTablelookup.addLookupfield(fieldNum(ProdJournalRoute,JournalId),true);
    sysTablelookup.addLookupfield(fieldNum(ProdJournalRoute,JobId));
    sysTablelookup.addLookupfield(fieldNum(ProdJournalRoute,OprNum));
    sysTablelookup.addLookupfield(fieldnum(ProdJournalRoute,ProdId));

    qbdsJournalRoute = query.addDataSource(tableNum(ProdJournalRoute));
    qbdsJournalRoute.addRange(fieldNum(ProdJournalRoute, ProdId)).value(queryValue(dialogProdId.value()));
    qbdsJournalRoute.addRange(fieldNum(ProdJournalRoute, OprNum)).value(queryValue(dialogOprNum.value()));
    qbdsJournalRoute.addRange(fieldNum(ProdJournalRoute, QtyGood)).value(queryValue('>0'));

    qbdsRouteTrans = qbdsJournalRoute.addDataSource(tableNum(ProdRouteTrans));
    qbdsRouteTrans.addLink(fieldNum(ProdJournalRoute,ProdId),fieldNum(ProdRouteTrans,TransRefId));
    qbdsRouteTrans.addLink(fieldNum(ProdJournalRoute,JobId),fieldNum(ProdRouteTrans,JobId));
    qbdsRouteTrans.joinMode(joinmode::ExistsJoin);
    qbdsRouteTrans.addRange(fieldNum(ProdRouteTrans,TransType)).value(queryValue(ProdRouteTransType::Qty));
    qbdsRouteTrans.addRange(fieldNum(ProdRouteTrans,QtyGood)).value(queryValue('>0'));
    qbdsRouteTrans.addRange(fieldNum(ProdRouteTrans,JobId)).value(queryValue(dialogProdJobId.value()));

    sysTablelookup.parmQuery(query);
    sysTablelookup.performFormLookup();
}




public void postBuild()
{
    ;
    super();

    dialogProdId = this.bindInfo().getDialogField(
                         this.dataContractObject(),
                         methodStr(MSTravelCardContract,parmProdId));

    dialogOprNum = this.bindInfo().getDialogField(
                         this.dataContractObject(),
                         methodStr(MSTravelCardContract,parmOprNum));

    dialogOprNum.registerOverrideMethod(methodStr(FormStringControl, lookup),methodStr(MSTravelCardUIBuilder, lookupOprNum), this);
    if (dialogOprNum)
    {
        dialogOprNum.lookupButton(2);
    }

    dialogProdJobId = this.bindInfo().getDialogField(
                         this.dataContractObject(),
                         methodStr(MSTravelCardContract,parmProdJobId));

    dialogProdJobId.registerOverrideMethod(methodStr(FormStringControl, lookup),methodStr(MSTravelCardUIBuilder, lookupProdJobId), this);
    if (dialogProdJobId)
    {
        dialogProdJobId.lookupButton(2);
    }


    dialogProdJournalRoute = this.bindInfo().getDialogField(
                         this.dataContractObject(),
                         methodStr(MSTravelCardContract,parmProdJournalIdRoute));

    dialogProdJournalRoute.registerOverrideMethod(methodStr(FormStringControl, lookup),methodStr(MSTravelCardUIBuilder, lookupProdJournalRoute), this);
    if (dialogProdJournalRoute)
    {
        dialogProdJournalRoute.lookupButton(2);
    }


}




public void postRun()
{
    super();
}


public boolean transTypeModified(FormStringControl _control)
{
    dialogProdId.value(_control.valueStr());
    dialogOprNum.value("");
    dialogProdJobId.value("");
    dialogProdJournalRoute.value("");
    return true;
}




Friday, 23 October 2015

UI Builder class overwrite Build method for group wise parameters

if you are using UI builder class then in contract class what ever you added parameters  group by
it will not show group by for that we need to overwrite build method with this things

we need to add

DialogGroup    groupDate, groupType, groupWarehouse;


Section group by Date
    groupDate = dialog.addGroup("@SYS80056");
    groupDate.columns(1);
    groupDate.caption("@SYS80056");



Example:


/// <summary>
/// to build the parameters
/// </summary>

public void build()
{
    DialogGroup    groupDate, groupType, groupWarehouse;
    Dialog         dialogLocal = this.dialog();

    MSMasteringRejectsContract = this.dataContractObject();

    //Section group by Date
    groupDate = dialog.addGroup("@SYS80056");
    groupDate.columns(1);
    groupDate.caption("@SYS80056");
    this.addDialogField(methodStr(MSMasteringRejectsContract,parmInventJournalType), MSMasteringRejectsContract);
    this.addDialogField(methodStr(MSMasteringRejectsContract,parmmprBaseItemType), MSMasteringRejectsContract);

    //Section group by Type
    groupType = dialog.addGroup("@PSA1497");
    groupType.columns(1);
    groupType.caption("@PSA1497");
    this.addDialogField(methodStr(MSMasteringRejectsContract,parmFromDate),MSMasteringRejectsContract);
    this.addDialogField(methodStr(MSMasteringRejectsContract,parmToDate),MSMasteringRejectsContract);

    //Section group by Warehouse
    groupWarehouse = dialog.addGroup("@SYS6437");
    groupWarehouse.columns(1);
    groupWarehouse.caption("@SYS6437");
    this.addDialogField(methodStr(MSMasteringRejectsContract,parminventLocationIdOutBound),MSMasteringRejectsContract);
    this.addDialogField(methodStr(MSMasteringRejectsContract,parminventLocationIdInBound),MSMasteringRejectsContract);

}

Wednesday, 20 May 2015

Printer settings in ax 2012 (Print management in ax 2012)


Printer settings in ax 2012 (Print management in ax 2012):

public client static void main(Args _args, container _con)
{
    SRSPrintDestinationSettings printSettings;
    SRSPrintMediumType    printMediumType;
    SRSReportFileFormat   printFileFormat;
    FilePath              path;
    MSRouteCardController controller = new MSRouteCardController();
   
    controller.parmReportName(#ReportName);
    printMediumType = conPeek(_con,3);
    printFileFormat = conPeek(_con,21);
    path            = conPeek(_con,20);
   
    controller.setRange(_args, controller.parmReportContract().parmQueryContracts().lookup(controller.getFirstQueryContractKey()));
    printSettings = controller.parmReportContract().parmPrintSettings();
   
    switch(printMediumType)
    {
        case SRSPrintMediumType::Archive:
        case SRSPrintMediumType::Screen:
            printSettings.printMediumType(printMediumType);
            break;
        case SRSPrintMediumType::Printer:
            printSettings.printMediumType(printMediumType);
            printSettings.printAllPages(true);
            printSettings.fileName(@path);
            printSettings.printerName(conPeek(_con,4));
            break;
        case SRSPrintMediumType::File:
            printSettings.printMediumType(printMediumType);
            printSettings.fileFormat(printFileFormat);
            printSettings.overwriteFile(true);
            printSettings.fileName(@path);
            break;
        case SRSPrintMediumType::Email:
            printSettings.printMediumType(printMediumType);
            printSettings.emailTo(conPeek(_con,15));
            printSettings.emailCc(conPeek(_con,16));
            printSettings.emailSubject(conPeek(_con,17));
            printSettings.emailAttachmentFileFormat(conPeek(_con,18));
            printSettings.emailAttachmentImageFileFormat(conPeek(_con,19));
            break;
       
    }
    //controller.parmArgs(_args);
    //controller.setRange(_args, controller.parmReportContract().parmQueryContracts().lookup(controller.getFirstQueryContractKey()));
    controller.parmShowDialog(true);
    controller.startOperation();
}

Note : here in container (_con) i am inserting values(print desination settings values ex :printer , email,file..etc ) in form level and passing that as parmeter to main method of controller

ex:
added a button in form level like


here setup(d) is the button. here  i added clicked method of this button as
clicked method:                                                     
void clicked()                                            
{                                                                
                                         SRSPrintDestinationSettings printJobSettings;                              
    ;                                                                  
    super();                                                      
printJobSettings = new                          SRSPrintDestinationSettings(prodParmRelease.SetupPrintDigitopiaRoutecard);
                               SrsReportRunUtil::showSettingsDialog(printJobSettings);
                                           prodParmRelease.SetupPrintDigitopiaRoutecard = printJobSettings.pack();
}      


here in this prodparmRelease is my table here i added the one container field as "SetupPrintDigitopiaRoutecard "
and this field is extended from "PrintJobSettingsPacked:











Tuesday, 31 March 2015

command for create new line in ssrs report

command for create new line in ssrs report:
VbCrlf
ex:
field1.value & vbcrlf & field2.value

=Fields!ItemId.Value & VbCrlf & Fields!ItemName.Value

Thursday, 3 July 2014

Through controller class selecting the design

public class DNGRMDashUnitStatusEachDateController extends SrsReportRunController
{
    #define.ReportName(‘DNGRMDashUnitStatusEachDateReport.DNGRMDashUnitStatusEachDateDesignPercent′)
    DNGRMDashUnitStatusEachDateContract dNGRMDashUnitStatusEachDateContract;

    boolean isPercent;
}
protected void preRunModifyContract()
{
    SrsReportDataContract dataContract = this.parmReportContract();
    SrsReportRdlDataContract contract = dataContract.parmRdlContract();
    ;

    if (!dNGRMDashUnitStatusEachDateContract)
    {
        dNGRMDashUnitStatusEachDateContract = this.parmReportContract().parmRdpContract();
    }

    isPercent = dNGRMDashUnitStatusEachDateContract.parmIsPercent();

    if(isPercent)
    {
        dataContract.parmReportName('DNGRMDashUnitStatusEachDateReport.DNGRMDashUnitStatusEachDateDesignPercent');
    }
    else
    {
        dataContract.parmReportName('DNGRMDashUnitStatusEachDateReport.DNGRMDashUnitStatusEachDateDesignNumber');
    }


    super();
}
public client static void main(Args _args)
{
    DNGRMDashUnitStatusEachDateController controller = new DNGRMDashUnitStatusEachDateController ();

    controller.parmReportName('DNGRMDashUnitStatusEachDateReport.DNGRMDashUnitStatusEachDateDesignPercent');
    controller.parmArgs(_args);
    controller.startOperation();

}

Tuesday, 28 January 2014

Deploy the all default reports [AX 2012] ,error 105: Unable to resolve the server's DNS address

Deploy the default reports [AX 2012]

Hi,
Open Windows PowerShell as an administrator by following these steps:
·         Click Start > Administrative Tools.
·         Right-click the Microsoft Dynamics AX 2012 Management Shell option.
·         Click Run as administrator.
In the Windows PowerShell
Publish-AXReport -ReportName CustTransList
Above code is to deploy specific report
Below code to deploy list of reports
Publish-AXReport -ReportName CustTransList, CustTransOpenPerDate
To deploy all reports, enter the following command:
Publish-AXReport –ReportName *

error 105: Unable to resolve the server's DNS address

Hi,

Start > All Programs > Accessories > Command Prompt. Right click on it and 'Run as Administrator'. Type the following and hit enter: ipconfig /flushdns


Wednesday, 8 January 2014

Email sending/saving PDF through class (batch job):

Email sending/saving PDF through class (batch job):
KNBEmailProcessing class:
class KNBEmailProcessing extends runbaseBatch
{
     // Packed
    PAYPeriodCode                       PeriodCode;//edit field
    HcmPersonnelNumberId                hcmPersonnelNumberId;//edit field
    DimensionDefault                    defaultDimension;//edit field
    PAYEmplGroupId                      Emplgrp;//edit field

    sysQueryrun     queryrun;
    str             PrintSlipEmplId;
    PAYPeriods      PAYPeriods;//table
    PAYParameters   PayParm;//table
    ETamount        DeservedBasicSalary;//edit field

    dialogField     dlgPeriodCode;
    dialogField     dlgEmplId;
    dialogField     dlgDimension;
    dialogField     dlgEmplgrp;
    boolean         ProjEmpl;
    //DialogRunbase       dialog;// Added by

    #define.CurrentVersion(1)
    #define.Version1(1)
    #localmacro.CurrentList
    PeriodCode,
    hcmPersonnelNumberId,
    defaultDimension,
    Emplgrp
    #endmacro
}



public boolean canGoBatch()
{
//    return false;
    return true;
}


public Object dialog()
{
     dialogRunbase   dialog = dialog::newFormnameRunbase(formstr(Approveperiod),this);//Approveperiod-form name
;
    dialog = super();
     dlgPeriodCode   = dialog.addField(extendedTypeStr(PAYPeriodCode));
    return dialog;
}



public boolean getFromDialog()
{
    boolean ret;

    ret = super();

    PeriodCode = dlgPeriodCode.value();

    // custAccount is handled via the edit method on the form

    return ret;
}



boolean getInfoNProcess(QueryRun _EmplRun)
{
  HcmWorker        hcmWorker;
  boolean ret;
  ;
  while (_EmplRun.next())
  {
      hcmWorker =_EmplRun.getNo(1);
      this.saveReportToPDF(hcmWorker);
      this.SendMail(hcmWorker);

      ret=true;
  }
  return ret;
}



public void initParmDefault()
{
    this.initQuery();

    super();
}



void initQuery()
{
    query   query = new query();
    QueryBuildDataSource QBDS1,QBDS2;
;
    QBDS1 = query.addDataSource(tablenum(HcmWorker));
   // QBDS2 = QBDS1.addDataSource(tableNum(HcmEmployment));
    //QBDS1.addRange(fieldnum(HcmWorker,PAYEmplGroupId));
    //QBDS2.addRange(fieldnum(HcmEmployment,defaultDimension));
    QBDS1.addRange(fieldnum(HcmWorker,PersonnelNumber));


    queryrun = new sysqueryrun(query);


}



public void new()
{
;
    super();

}



public container pack()
{
    return [#CurrentVersion,#CurrentList,queryRun.pack()];
}



void PrintReport(Hcmworker _hcmWorker)
{
    SrsReportRun                        reportRun;
    Query                               query;
    SRSReportPrintDestinationSettings   SRSReportPrintDestinationSettings;
    SRSPrintDestinationSettings         srsPrintSettings;
    ;
    delete_from SRSReportPrintDestinationSettings;
    reportRun = new SRSReportRun();
    reportRun.reportName("KNBAllEmplsPayslipReport.Report");  //<ReportName>.<DesignName>
    // Set printersettings
    srsPrintSettings = reportRun.printDestinationSettings();
    srsPrintSettings.printMediumType(SRSPrintMediumType::Email);
    srsPrintSettings.emailTo("a.mohamed@dynamicnetsoft.com");//
    srsPrintSettings.emailAttachmentFileFormat(SRSReportFileFormat::PDF);
    srsPrintSettings.emailSubject(strfmt("Payslip – %1", systemdateget()));
    srsPrintSettings.pack();
    reportRun.showDialog(false);
    reportRun.init();
    reportRun.run();
}



public QueryRun queryRun()
{
    return queryRun;
}



public void run()
{
  // ttsbegin;
    super();
    PAYPeriods = PAYPeriods::find();
    PayParm = PayParameters::find();
    QueryRun.query().dataSourceNo(1).addRange(fieldnum(HcmWorker,Status)).value(SysQuery::value(HRMEmplStatus::Employed));

    if(this.getInfoNProcess(QueryRun))
    {
          info("Processing is done!");
    }
    else
    {
        info("No records processed");
    }
     // Warning("Use Salary Payslip Report to print the Pay Slips");
     // this.printPaySlip(); ///TODO check
   // ttscommit;
}



void SaveReport(Hcmworker _hcmWorker)
{
    //SrsReportRun                        reportRun;
    //SRSPrintDestinationSettings         srsPrintSettings;
    //SRSReportPrintDestinationSettings   SRSReportPrintDestinationSettings;
    //;
    //delete_from SRSReportPrintDestinationSettings;
    //reportRun = new SRSReportRun();
    //reportRun.reportName("KNBAllEmplsPayslipReport.Report");  //<ReportName>.<DesignName>
    //// Set printersettings
    //reportRun.saveParameters();
//
    //srsPrintSettings = reportRun.printDestinationSettings();
    //srsPrintSettings.overwriteFile(true);
    //srsPrintSettings.printMediumType(SRSPrintMediumType::File);
    //srsPrintSettings.fileFormat(SRSReportFileFormat::PDF);
    //srsPrintSettings.fileName("\\\\DNWADY0016L\\Users\\dns.pradeepk\\Desktop\\KNBEmailFld\\Payslip.pdf");
    //// srsPrintSettings.fileName("C:\\Test.pdf");
    //srsPrintSettings.pack();
    //reportRun.showDialog(false);
    ////reportRun.saveParameters();                         //For Report parameters
    //reportRun.init();
    //reportRun.run();
}




void saveReportToPDF(Hcmworker _hcmWorker)
{
    SrsReportRun srsReportRun;
    srsReportRun = new SrsReportRun("KNBAllEmplsPayslipReport.report");

    srsReportRun.init();
    srsReportRun.reportCaption("Payslip");
    //srsReportRun.reportParameter("KNBPaySlipQry_PersonnelNumber").value("000526");
    srsReportRun.reportParameter("KNBPaySlipQry_PersonnelNumber").value(_hcmWorker.PersonnelNumber);//KNBPaySlipQry_PersonnelNumber - is visual studio parameter name(contract class parameter)

    srsReportRun.showDialog(false);

    // Print to a file named ReportExample in HTML/PDF format.
    srsReportRun.printDestinationSettings().printMediumType(SRSPrintMediumType::File);
    srsReportRun.printDestinationSettings().fileFormat(SRSReportFileFormat::PDF);
    srsReportRun.printDestinationSettings().overwriteFile(true);
    srsReportRun.printDestinationSettings().fileName(@"\\\\DNWADY0016L\\Users\\dns.pradeepk\\Desktop\\KNBEmailFld\\Payslip"+_hcmWorker.PersonnelNumber+".pdf");//computer path

    if(srsReportRun)
    {
        srsReportRun.executeReport();
    }
}





    // BP deviation documented
void SendMail(HcmWorker _hcmWorker)
{
    SysMailer mailer;
    SysEmailParameters parameters;
    InteropPermission permission;
    str subject , body ;
    email                                   emplEmailId;
    ;
  //emplEmailId = HcmWorker::findByPersonnelNumber('000526').email();
    emplEmailId = HcmWorker::findByPersonnelNumber(_hcmWorker.PersonnelNumber).email();
    //if (email == '')
    //{
        //checkFailed("From email address is missing, please specify on company information.");
        //return;
    //}
    if (emplEmailId == '')
    {
        checkFailed(strfmt("Employee email address is missing.",_hcmWorker.PersonnelNumber)); //_hcmWorker.PersonnelNumber));
        return;
    }
         permission = new InteropPermission(InteropKind::ComInterop);
    Body = strfmt("Dear %1, <br/><br/> Kindly find the attached Pay slip <br/><br/> Regards <br/>,%2",_hcmWorker.name(),HcmWorker::findUserName(curuserId()));//<br/><br/>  - for new line
    Subject = strfmt("Salary Slip for Employee %1", _hcmWorker.name());

    permission.assert();

    //InteropPermission.assert() ;
    mailer = new SysMailer();
    parameters = SysEmailParameters::find();
    mailer.SMTPRelayServer(parameters.SMTPRelayServerName, parameters.SMTPPortNumber, parameters.SMTPUserName, SysEmailParameters::password(), false );

    mailer.fromAddress("hr@dynamicnetsoft.com"); // temporary created by Fasith later his will integrated with email parameter value
    //FileName = strfmt("%1_%2.pdf",vendParameters.KNBVendInvoicePath + vendInvoiceJour.InvoiceId,
    //date2str(systemdateget(),123,2,123,2,123,4));
    mailer.attachments().add("\\\\DNWADY0016L\\Users\\dns.pradeepk\\Desktop\\KNBEmailFld\\Payslip"+_hcmWorker.PersonnelNumber+".pdf");//completeFilePath);
    mailer.tos().appendAddress(emplEmailid);
    mailer.subject(subject);
    mailer.htmlBody(body);
    mailer.sendMail();


}




public boolean showQueryValues()
{
    return true;
}




public boolean unpack(container packedClass)
{
    version     version = runbase::getVersion(packedClass);
    container   queryCon;

    switch (version)
    {
        case #CurrentVersion:
            [version,#CurrentList,queryCon] = packedClass;
            if (sysQuery::isPackedOk(queryCon))
                queryRun = new queryRun(queryCon);
            else
                this.initQuery();
            break;
        default:
            return false;
    }

    return true;
}




public boolean validate (Object calledFrom = null)
{
    boolean ret;

    ret = super(calledFrom);
    if(PAYPeriods::findCertn(PeriodCode).Approved || PAYPeriods::findCertn(PeriodCode).JournalCreated)
      throw error("Period is already approved/processed !,you can not do any calculation on this period");
    return ret;
}



static void main(args args)
{
    //Code by Alfasith for email generation
    KNBEmailProcessing   KNBEmailProcessing = new KNBEmailProcessing();

    if (KNBEmailProcessing.prompt())
        KNBEmailProcessing.run();

}