Global form & workflow level work in d365fo x++

 Global form & workflow level work in d365fo x++

Code: 

[ExtensionOf(classStr(FormRun))]
final class DSFormRun_Extension
{

    public void init()
    {
        next init();

        if(LedgerParameters::find().IsMandatoryFD)
        {
            DSMandatoryFinancialDimensionsUtil extensionInstance;
            extensionInstance = new DSMandatoryFinancialDimensionsUtil(this);
        

            if(extensionInstance)
                extensionInstance.init();
        }

    }

}
Public class DSMandatoryFinancialDimensionsUtil
{
    FormRun fRun;
    boolean initialized;

    


        public void new(FormRun _formRunInstance)
    {
        initialized = false;
        fRun        = _formRunInstance;

        //register this extension with the main form
        fRun.registerExtensionInstance(classStr(DSMandatoryFinancialDimensionsUtil), this);
    }

    public void OnValidatedWriteHandler(FormDataSource _formDataSource, FormDataSourceEventArgs _eventArgs)
    {
        Common _Common = _formDataSource.cursor();
        FieldId FieldId = fieldName2Id(_Common.TableId, "DefaultDimension");

        if(FieldId && _Common.RecId)
        {
            int64 DefaultDimension = _Common.(FieldId);
            DSMandatoryFinancialDimensions  MandatoryDimensions;
            Defaultdimensionview            dimensionViewtoCheck;
            DimensionAttribute              DimensionAttribute;

            while
            select  DimensionAttribute

            join MandatoryDimensions
            where MandatoryDimensions.RefRecId == DimensionAttribute.RecId
            && MandatoryDimensions.Document == _Common.TableId

            notexists join dimensionViewtoCheck
            where dimensionViewtoCheck.Name == DimensionAttribute.Name
            && dimensionViewtoCheck.DefaultDimension == DefaultDimension
            {
                if(LedgerParameters::find().DSNotification == DSNotification::Warning)
                    checkFailed(strFmt("@DSALabel:DSA000265", DimensionAttribute.Name)); 
                else 
                    throw Error(strFmt("@DSALabel:DSA000265", DimensionAttribute.Name));
            }

        }

    }

    public void init()
    {
        if (initialized)
        {
            return;
        }

        initialized = true;
        
        for(counter i=1 ; i<=fRun.form().dataSourceCount(); i++)
        {
            FormDataSource fds = fRun.dataSource(i);

            if(DSMandatoryFinancialDimensions::findTable(new DictTable(fds.table()).id()))
            {
                fds.OnValidatedWrite += eventhandler(this.OnValidatedWriteHandler);
            }

        }

    }

    //Look up for Tables
    [FormControlEventHandler(formControlStr(DimensionDetails, DSMandatoryFinancialDimensions_Document), FormControlEventType::Lookup)]
    public static void DSMandatoryFinancialDimensions_Document_OnLookup(FormControl sender, FormControlEventArgs e)
    {
        FormControlCancelableSuperEventArgs formControlCancelSuper = e as FormControlCancelableSuperEventArgs;
        SysTableLookup              sysTableLookup = SysTableLookup::newParameters(tablenum(SYSTABLEIDVIEW), sender);
        Query                       query = new Query();
        QueryBuildDataSource        queryBuildDataSource;
        QueryBuildRange             nameQBR, typeQBR;

        sysTableLookup.addLookupfield(fieldnum(SYSTABLEIDVIEW, Id));
        sysTableLookup.addLookupfield(fieldnum(SYSTABLEIDVIEW, SqlName));
        queryBuildDataSource = query.addDataSource(tablenum(SYSTABLEIDVIEW));
        sysTableLookup.parmQuery(query);
        sysTableLookup.performFormLookup();
        formControlCancelSuper.CancelSuperCall();

    }

    [FormEventHandler(formStr(DimensionDetails), FormEventType::Initialized)]
    public static void DimensionDetails_OnInitialized(xFormRun sender, FormEventArgs e)
    {
        sender.design().controlName(formControlStr(DimensionDetails, DSMandatoryFinancialDimension)).visible(LedgerParameters::find().IsMandatoryFD);
    }

}
[ExtensionOf(classStr(Workflow))]
final class Workflow_DS_Extension
{
    public static server WorkflowCorrelationId activateFromWorkflowType(workflowTypeName _workflowTemplateName,
                                                                    recId _recId,
                                                                    WorkflowComment _initialNote,
                                                                    NoYes _activatingFromWeb,
                                                                    WorkflowUser _submittingUser)
    {
        WorkflowCorrelationId WorkflowCorrelationId = next  activateFromWorkflowType( _workflowTemplateName, _recId, _initialNote, _activatingFromWeb, _submittingUser);
        
        TableId _tableId = Workflow::getDocumentTableIdLoc(_workflowTemplateName);

        Common  _common = new DictTable(_tableId).makeRecord();
        select _Common where _Common.RecId == _recId;
        FieldId FieldId = fieldName2Id(_Common.TableId, "DefaultDimension");
        boolean isValid = true;

        if(FieldId)
        {
            int64 DefaultDimension = _Common.(FieldId);
            DSMandatoryFinancialDimensions  MandatoryDimensions;
            Defaultdimensionview            dimensionViewtoCheck;
            DimensionAttribute              DimensionAttribute;

            while
            select  DimensionAttribute

            join MandatoryDimensions
            where MandatoryDimensions.RefRecId == DimensionAttribute.RecId
            && MandatoryDimensions.Document == _Common.TableId

            notexists join dimensionViewtoCheck
            where dimensionViewtoCheck.Name == DimensionAttribute.Name
            && dimensionViewtoCheck.DefaultDimension == DefaultDimension
            {
                checkFailed(strFmt("@DSALabel:DSA000265", DimensionAttribute.Name));
                isValid = false;
            }

        }

        if(!isValid)
        {
            throw error("Failed to Submit Workflow");
        }

        return WorkflowCorrelationId;
    }

    private static tableId getDocumentTableIdLoc(workflowTypeName _workflowTemplateName)
    {
        Query query;
        WorkflowDocument workflowDocument;
        SysDictWorkflowType workflowTemplate;
        SysDictClass sysDictClass;
        WorkflowDocument document;
        ;
        workflowTemplate = new SysDictWorkflowType(_workflowTemplateName);
        workflowDocument = classfactory.createClass(className2Id(workflowTemplate.document()));
        query = workflowDocument.getQuery();
        
        return query.dataSourceNo(1).table();
    }

}

Comments

Popular posts from this blog

D365FO – AX – X++ –Refresh, Reread, Research, and ExecuteQuery

Create Inventory Journal through Code in D365FO X++

SalesLine Reservation in D365fo x++