• D365 FO最佳实践BP(二)-特定情况下忽略BP


    BP只是给出一些建议,这些建议在通常情况下是成立的,但是在某些特殊的场景下,这些BP可能并不适合。
    同样一条BP,可能在其他场景下需要检查,这个时候就需要根据具体的代码去决定是否忽略BP,而不是整条BP规则全部忽略。
    在AX2012及以前版本是通过在代码里添加注释 //BP deviation documented来告诉BP这段代码是有充足理由忽略BP的。
    D365 FO显然 更完善了, 它提供了两种特定场景下忽略BP的方法。
    对于某个方法想要忽略特定的BP规则,可以在方法体上通过SuppressBPWarning这个Atrribute来忽略BP。

     1  [SuppressBPWarning("BPCheckInsertMethodInLoop", "因为覆盖了表的insert方法,导致RecordInsertList降级,所以不采用此方法。")]
     2     public static void main(Args _args)
     3     {
     4         BulkInsertTest          bulkInsertTest;
     5 
     6         ttsbegin;
     7         for (int i = 0 ; i < 100; i++)
     8         {
     9             bulkInsertTest.ItemName = "品名" + int2Str(i);
    10             bulkInsertTest.insert();
    11         }
    12         ttscommit;
    13     }

    SuppressBPWarning这个属性有两个变量,一个是要忽略的BP检查的名字,代码里如果有BP警告,会提示BP检查的名字,另一个是忽略的理由。
    如果一个方法要忽略多个BP检查规则,多写几个。

     1 [SuppressBPWarning("BPCheckInsertMethodInLoop",
     2         "因为覆盖了表的insert方法,导致RecordInsertList降级,所以不采用此方法。"),
     3         SuppressBPWarning("BPUpgradeCodeSystemDate", "Just For Test")]
     4     public static void main(Args _args)
     5     {
     6         BulkInsertTest          bulkInsertTest;
     7 
     8         TransDate transDate =  systemDateGet();
     9 
    10         ttsbegin;
    11         for (int i = 0 ; i < 100; i++)
    12         {
    13             
    14             bulkInsertTest.ItemName = "品名" + int2Str(i);
    15             bulkInsertTest.insert();
    16         }
    17         ttscommit;
    18     }

    想在方法中忽略所有的BP检查,就直接属性SupressBPWarning,不带入参就可以了。
    对于表的属性和窗体的属性的BP就没办法通过代码属性的办法忽略BP检查,D365 FO提供了通过XML设置的方式忽略BP检查。
    对于新建的model,需要在model对应的文件夹中的子文件夹AxIgnoreDiagnosticList中创建一个[Model名字]_BPSuppressions.xml的文件,如下图所示:

     然后就可以在VS中的项目中点右键编辑了。

     针对不同的BPRule增加Diagnotic节点就可以了。

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <IgnoreDiagnostics>
     3   <Name>ModelName_BPSuppressions</Name>
     4   <Items>
     5     <Diagnostic>e
     6       <DiagnosticType>BestPractices</DiagnosticType>
     7       <Severity>Warning</Severity>
     8       <Path>dynamics://Form/SomeForm/FormDesign/FormDesign/FormTabControl/FormTabControl/FormTabPageControl/FormTabPageControlTable111</Path>
     9       <Moniker>SomeBPRule</Moniker>
    10       <Message>BPRule Info</Message>
    11       <Justification></Justification>
    12     </Diagnostic>    
    13   </Items>
    14 </IgnoreDiagnostics>

    其中Path,Moniker和Message在BP警告里都可以找到,Justification写出自己忽略BP规则的理由。
    其实这个Message没什么必要,只要知道Moniker就知道具体是哪个BP规则了,没必要再把Message拷贝过来了,AX自带的Supression.xml文件里有一些是不包含Message节点的。
    我自己用的时候(版本10.0.0.10)发现添加了这个Message节点后,就没办法忽略BP规则了,去掉Message节点以后一切正常,所以还是不要再拷贝一次Message的信息了。

  • 相关阅读:
    Linux0.11之初识Makefile/build.c
    主机(windows10)虚拟机(ubuntu18)arm板(linux3.4)相互ping通
    windows上利用dhcpsrv搭建DHCP服务器
    《剑指offer》面试题27 二叉搜索树与双向链表 Java版
    《剑指offer》面试题26 复杂链表的复制 Java版
    《剑指offer》面试题25 二叉树中和为某一值的路径 Java版
    《剑指offer》面试题24 二叉搜索树的后序遍历序列 Java版
    异常处理
    三元表达式、列表推导式、生成器表达式、匿名函数、内置函数、递归调用与二分法的简单认识
    迭代器与生成器
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/12930276.html
Copyright © 2020-2023  润新知