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




Thursday 5 November 2015

security role

public static void main(Args _args, container _con,Noyes _printDigitopiaRouteCard)
{
    WHSWorkTable          whsWorkTable;
    MSRouteCardController MSRouteCardController = new MSRouteCardController();
    ProdTable             prodtable = _args.record();
    Args                  args = new Args();
    SecurityUserRole      securityUserRole;
    boolean  roleexist = false;
    UserId   user;

        user = curUserId();
    // added for checking the roles of current user
    while select securityUserRole where securityUserRole.User == user
    {                                                                                                 //  role name             roleid, role name            roleid
        if( (securityUserRole.SecurityRole == 886351) || (securityUserRole.SecurityRole == 886340)    //System administrator    886351, Production planner     886340
          ||(securityUserRole.SecurityRole == 886333) || (securityUserRole.SecurityRole == 886332)    //Production supervisor    886333, Production manager     886332
          ||(securityUserRole.SecurityRole == 886282) || (securityUserRole.SecurityRole == 886281) )  //Product design manager    886282, Product designer     886281
        {
            roleexist = true;
        }
    }

    select whsWorkTable
        where whsWorkTable.OrderNum   == prodtable.ProdId
        && whsWorkTable.WorkTransType == WHSWorkTransType::ProdPick
        && whsWorkTable.WorkStatus    != WHSWorkStatus::Cancelled
        && whsWorkTable.AutoExecute   == NoYes::Yes;
    if (whsWorkTable)
    {
        ttsBegin;
        MsWhsWorkAutoExecute::autoExecuteWork(whsWorkTable.WorkId);
        ttsCommit;
        if(roleexist == true && whsWorkTable.WorkId && _printDigitopiaRouteCard == NoYes::Yes)
        {
            args.record(whsWorkTable);
            MSRouteCardController::main(args,_con);
        }
    }
    else
    {
        select whsWorkTable where whsWorkTable.OrderNum      == prodtable.ProdId
                               && whsWorkTable.WorkTransType == WHSWorkTransType::ProdPick
                               && whsWorkTable.WorkStatus    != WHSWorkStatus::Cancelled;
        if(roleexist == true && whsWorkTable.WorkId && _printDigitopiaRouteCard == NoYes::Yes)
        {
            args.record(whsWorkTable);
            MSRouteCardController::main(args,_con);
        }
    }



}