Microsoft/Dynamics2016. 11. 3. 19:11
728x90

static void CreatePrivilege(Args _args)

{

    UtilIdElements      _UtilIdElements;

    

    #AOT

    #properties

       

    

    void addPrivs(  str 200 _paramMenuItemName,

                    str 200 _paramPrivName,

                    str 200 _paramAccessLevel, 

                    str 200 _paramPropertyObjectType )

    {

        UtilIdElements      _UtilIdElements_valid;

        TreeNode            _TreeNode;

        TreeNode            _TreeNode_endtrypoints;

        TreeNode            _TreeNode_endtrypointschild;

        TreeNodeIterator    _TreeNodeIterator;

        TreeNodeIterator    _TreeNodeIteratorchild;

        int                 _Linenum;

        

        //오브젝트가 존재 하는지 여부 검색.

        select _UtilIdElements_valid

         where _UtilIdElements_valid.recordType == UtilElementType::SecPrivilege

            && _UtilIdElements_valid.name       == _paramMenuItemName + _paramPrivName;


        //존재 하지 않는다면 생성.

        if (!_UtilIdElements_valid)

        {

            _TreeNode = TreeNode::findNode(#SecPrivilegesPath);

            _TreeNode = _TreeNode.AOTadd(_paramMenuItemName + _paramPrivName);

            _TreeNodeIterator = _TreeNode.AOTiterator();


            //endtry point setup

            if (_TreeNodeIterator)

            {

                _TreeNode_endtrypoints = _TreeNodeIterator.next();


                while (_TreeNode_endtrypoints)

                {

                    _Linenum++;


                    //endtry point > add menu item object

                    //linenum == 1 -> entry point

                    if (_Linenum == 1)

                    {

                        //add menu item object

                        _TreeNode_endtrypoints.AOTadd(_paramMenuItemName);

                        _TreeNodeIteratorchild = _TreeNode_endtrypoints.AOTiterator();


                        if (_TreeNodeIteratorchild)

                        {

                            _TreeNode_endtrypointschild = _TreeNodeIteratorchild.next();

                            while (_TreeNode_endtrypointschild)

                            {

                                //set menu item object property

                                _TreeNode_endtrypointschild.AOTsetProperty(#PropertyObjectType, _paramPropertyObjectType);

                                _TreeNode_endtrypointschild.AOTsetProperty(#PropertyObjectname, _paramMenuItemName);

                                _TreeNode_endtrypointschild.AOTsetProperty(#PropertyAccessLevel, _paramAccessLevel);

                                _TreeNode_endtrypointschild = _TreeNodeIteratorchild.next();

                            }

                        }

                    }

                    _TreeNode_endtrypoints = _TreeNodeIterator.next();

                }

            }


            _TreeNode.AOTcompile();

        }

    }

    

    ;


    while

    select _UtilIdElements

     order by recordType

     where (_UtilIdElements.recordType == UtilElementType::DisplayTool ||

            _UtilIdElements.recordType == UtilElementType::ActionTool  ||

            _UtilIdElements.recordType == UtilElementType::OutputTool )

        //&& _UtilIdElements.name like "HST_GarmentExportPreviewReport"

        && _UtilIdElements.name like "HST_" + "*"

    {

        

        if (_UtilIdElements.recordType == UtilElementType::DisplayTool) //Display

        {

            addPrivs(_UtilIdElements.name, "Maintain", "Delete", "MenuItemDisplay");

            addPrivs(_UtilIdElements.name, "View", "Read", "MenuItemDisplay");

        }

        else if (_UtilIdElements.recordType == UtilElementType::ActionTool) //Action

        {

            addPrivs(_UtilIdElements.name, "Generate", "Delete", "MenuItemAction");

        }

        else if (_UtilIdElements.recordType == UtilElementType::OutputTool) //Output

        {

            addPrivs(_UtilIdElements.name, "Process", "Read", "MenuItemOutput");

        }

        

    }


    info ("완료!!");

}

Posted by swanseo