03.05.2011, 12:12 | #1 |
Участник
|
Проверки Best Practices только для объектов на текущем слое
В приложении есть масса полезных проверок Best Practices, которые помогают выявлять различные косяки в своем и чужом коде. Стоит, однако, отметить, что выполнение этих проверок
X++: private void doTreeNode(TreeNode _treeNode) { TreeNodeTraverser treeNodeTraverser; SysBPCheckBase sysBPCheckBase; TreeNode treeNodeToRelease; boolean checkChildren = true; TreeNodePath parentPath; int infologLines; Map map = new Map(Types::Integer, Types::Integer); MapEnumerator enum; int length; ; treeNodeToRelease = null; // if (_treeNode) //-gl00m, 14.02.2011 if (this.mustCheckTreeNode(_treeNode)) //+gl00m, 14.02.2011 { treeNodeTraverser = new TreeNodeTraverser(_treeNode); while (treeNodeTraverser.next()) // Check Best Practices { if (!sysCompilerOutput) { setprefix(treeNodeTraverser.infologPrefix()); } treeNode = treeNodeTraverser.currentNode(); if(treeNode) { length=strlen(treeNode.treeNodePath()); } else { length=0; } //If we are doing a BP check on a Query node within a View node then don't release the view node if (treeNodeToRelease && SysTreeNode::isApplObject(treeNode) && (treeNodeToRelease.sysNodeType()!= #NT_DBVIEW || (treeNode && treeNode.sysNodeType()!= #NT_QE) || length < strlen(treeNodeToRelease.treeNodePath()) || substr(treeNode.treeNodePath(),1,strlen(treeNodeToRelease.treeNodePath())) != treeNodeToRelease.treeNodePath())) { treeNodeToRelease.treeNodeRelease(); treeNodeToRelease = null; } // if (checkChildren || //-gl00m, 14.02.2011 if ((checkChildren || //+gl00m, 14.02.2011 substr(treeNode.treeNodePath(),1,strlen(parentPath)) != parentPath) //No longer a child to the parent && this.mustCheckTreeNode( treeNode )) //+gl00m, 14.02.2011 { sysBPCheckBase = this.getSysBpCheckBase(treeNode); sysBPCheckBase.parmSysBPCheck(this); // ... X++: // gl00m, 14.02.2011 protected boolean mustCheckTreeNode(TreeNode _treeNode) { UtilEntryLevel applObjectLayer; UtilEntryLevel currentAOLayer; boolean ret; ; if (_treeNode) { ret = true; currentAOLayer = currentAOLayer(); // если разработка ведется на sys-слое, то эта модификация, очевидно, бессмысленна if (currentAOLayer > UtilEntryLevel::sys) { applObjectLayer = _treeNode.applObjectLayer(); if ( applObjectLayer < currentAOLayer && enum2str(_treeNode.applObjectType()) != '' ) { // в зависимости от настроек можем не проверять объекты, которые расположены ниже текущего слоя // NB! это поле надо будет добавить в таблицу и на форму самостоятельно ret = !SysBPParameters::find().CheckBPForCurrentAOLayerOnly; } } } return ret; } |
|
|
За это сообщение автора поблагодарили: AlGol (2), Logger (8), AvrDen (1), MikeR (3), S.Kuskov (3), pitersky (2), JeS (1). |
02.05.2014, 11:34 | #2 |
Участник
|
Оказывается, в AX 2012 приделали штатную возможность выполнять проверки Best Practices только для объектов на текущем слое: для этого в Сервис / Параметры / Разработка / Рекомендации / Настройка слоя надо выбрать "Пропускать узлы с нижестоящих уровней".
|
|
|
За это сообщение автора поблагодарили: Мартынов Дмитрий (1), virtuoso (1), Dreadlock (2). |
Теги |
best practice, законченный пример, полезное, слой приложения |
|
|