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的信息了。

原文地址:https://www.cnblogs.com/Farseer1215/p/12930276.html