目标是通过 DMN 中的决策表运行具有 IP 的设备列表,以根据使用 CIDIR 的 IP 规划来确定设备使用哪种命名约定,以选择要使用的命名模式。
tDevices
列表,尽管 DMN 获取具有给定名称模式的 tIPPlanLine
列表,以便在后续流程中使用。DMN 由具有 FEEL 函数的 BKM(业务知识模型)组成,它将 IP 与 CIDIR 进行匹配并返回布尔值和使用 FEEL 函数的决策表。
使用给定的数据类型:
t设备(结构)
ip
(字符串)mac
(字符串)vendor
(字符串)match
(布尔值)//这只是一个虚拟占位符,用于进行匹配检查tIPPlanLine(结构)
cidrIP
(字符串)prefixLength
(字符串)namePattern
(字符串)tIP段(数量)列表
使用给定函数
CIDRvalidator (boolean)
,它接受以下输入:
ip
(字符串)cidrIp
(字符串)prefixLength
(数字)它运行以下 FEEL 函数,该函数使用 Context 来存储时间值
F | CIDRvalidator(布尔值) | |
---|---|---|
F |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
然后,我尝试在决策表中使用此函数,该决策表将
tDevice (Structure)
作为输入并生成 tIPPlanLine
作为输出。我尝试了各种创建决策表的方法,以使其使用该函数并使用 cidrIp
和 prefixLength
来选择名称。
(“match”属性不是 tDevice 的一部分)
(输入)设备.ip | (输入)Device.mac | (输入)设备.供应商 | (输入)CIDRvalidator(Device.ip,cidrIp,prefixLength) | (输出)cidr | (输出)前缀长度 | (输出)名称模式 |
---|---|---|---|---|---|---|
- | - | - | 真实 | 192.168.1.1 | 24 | 名称模式1 |
- | - | - | 真实 | 192.168.2.1 | 24 | 名称模式2 |
问题:它重复了输入行。
(“匹配”属性已添加到tDevice)
(输入)设备.ip | (输入)Device.mac | (输入)设备.供应商 | (输入)匹配 | (输出)cidr | (输出)前缀长度 | (输出)名称模式 |
---|---|---|---|---|---|---|
- | - | - | CIDRvalidator(Device.ip, cidrIp, prefixLength) | 192.168.1.1 | 24 | “名称模式1” |
- | - | - | CIDRvalidator(Device.ip, cidrIp, prefixLength) | 192.168.2.1 | 24 | “名称模式2” |
问题:它重复了输入行。
(输出中的“cidrIp”和“prefixLength”属性被替换为它们的值,以使行唯一(复制这些值是次要的))
(输入)设备.ip | (输入)Device.mac | (输入)设备.供应商 | (输入)匹配 | (输出)cidr | (输出)前缀长度 | (输出)名称模式 |
---|---|---|---|---|---|---|
- | - | - | CIDRvalidator(Device.ip, "192.168.1.1", 24) | 192.168.1.1 | 24 | “名称模式1” |
- | - | - | CIDRvalidator(Device.ip, "192.168.2.1", 24) | 192.168.2.1 | 24 | “名称模式2” |
问题: FEEL 表达式存在语法错误。
[ERROR] Error compiling FEEL expression '(ipBits & mask) = (cidrBits & mask)' for name 'CIDRvalidator' on node 'CIDRvalidator': syntax error near '&'
<?xml version="1.0" encoding="UTF-8"?>
<dmn:definitions xmlns:dmn="http://www.omg.org/spec/DMN/20180521/MODEL/" xmlns="https://kiegroup.org/dmn/_8213A7EA-FB3C-4323-8E45-D1AE2F2CDCB3" xmlns:feel="http://www.omg.org/spec/DMN/20180521/FEEL/" xmlns:kie="http://www.drools.org/kie/dmn/1.2" xmlns:dmndi="http://www.omg.org/spec/DMN/20180521/DMNDI/" xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/" xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/" id="_80BEA9F1-0F0C-4FBC-ABBB-8A4F66A10B9C" name="ip_plan" typeLanguage="http://www.omg.org/spec/DMN/20180521/FEEL/" namespace="https://kiegroup.org/dmn/_8213A7EA-FB3C-4323-8E45-D1AE2F2CDCB3">
<dmn:extensionElements/>
<dmn:itemDefinition id="_DDC31CD8-7CB4-4993-B0EE-85131DFDA7C4" name="tDevice" isCollection="false">
<dmn:itemComponent id="_3EFAF0CF-6490-4F55-A40C-DF47AB112388" name="ip" isCollection="false">
<dmn:typeRef>string</dmn:typeRef>
</dmn:itemComponent>
<dmn:itemComponent id="_A77DC46A-B52A-4A69-9FE7-BBA7C2014578" name="mac" isCollection="false">
<dmn:typeRef>string</dmn:typeRef>
</dmn:itemComponent>
<dmn:itemComponent id="_ECCE017F-FB81-4D39-83D5-490798BDC7E8" name="vendor" isCollection="false">
<dmn:typeRef>string</dmn:typeRef>
</dmn:itemComponent>
<dmn:itemComponent id="_5775B59C-D190-474A-9E72-0E810F658685" name="match" isCollection="false">
<dmn:typeRef>boolean</dmn:typeRef>
</dmn:itemComponent>
</dmn:itemDefinition>
<dmn:itemDefinition id="_CBF7CF1B-DAC1-41FE-9B44-B3AFBCFBA553" name="tIPPlanLine" isCollection="false">
<dmn:itemComponent id="_56B199F3-BB24-4E7A-B6A0-FE944867B950" name="cidrIP" isCollection="false">
<dmn:typeRef>string</dmn:typeRef>
</dmn:itemComponent>
<dmn:itemComponent id="_5B3A06F6-FEF9-411D-9D5C-CB8DACB9CE46" name="prefixLength" isCollection="false">
<dmn:typeRef>string</dmn:typeRef>
</dmn:itemComponent>
<dmn:itemComponent id="_B7A96201-879B-4EEE-9244-8198CF085C64" name="namePattern" isCollection="false">
<dmn:typeRef>string</dmn:typeRef>
</dmn:itemComponent>
</dmn:itemDefinition>
<dmn:itemDefinition id="_CFE6F064-C8FE-42C8-878D-84B72A05F972" name="tIPSegments" isCollection="true">
<dmn:typeRef>number</dmn:typeRef>
</dmn:itemDefinition>
<dmn:inputData id="_19F5D0A7-D55D-4E17-9BAE-7359B0C2FE21" name="Device">
<dmn:extensionElements/>
<dmn:variable id="_F7A74B32-C449-4F80-A879-3D65722C3CC3" name="Device" typeRef="tDevice"/>
</dmn:inputData>
<dmn:decision id="_E0CF4F27-2184-4C01-BE0B-314EDCE8441D" name="IPplanLine">
<dmn:extensionElements/>
<dmn:variable id="_DE1B32F5-F93F-4341-9D6D-B087E16755A4" name="IPplanLine" typeRef="tIPPlanLine"/>
<dmn:informationRequirement id="_DE116BF0-FC7D-4AEC-AAC0-BE2D67EACC41">
<dmn:requiredInput href="#_19F5D0A7-D55D-4E17-9BAE-7359B0C2FE21"/>
</dmn:informationRequirement>
<dmn:knowledgeRequirement id="_AEB52860-B199-438A-9A34-C59A08B28ECC">
<dmn:requiredKnowledge href="#_6FE98E04-586E-46D3-BB1D-E2E2FB305791"/>
</dmn:knowledgeRequirement>
<dmn:decisionTable id="_9059DF09-BB5D-4B93-85E8-98666481B9CA" hitPolicy="FIRST" preferredOrientation="Rule-as-Row">
<dmn:input id="_8D618DA3-4BC1-4C77-AB95-6B0C43B32DA6">
<dmn:inputExpression id="_743D7EBE-2B2B-4EE5-B4DE-33D1D241D0EE">
<dmn:text>Device.ip</dmn:text>
</dmn:inputExpression>
</dmn:input>
<dmn:input id="_A5E17F4F-5A87-489B-AE41-59DD69581B4D">
<dmn:inputExpression id="_B19A149E-4257-4656-BD00-90935F09E16B" typeRef="string">
<dmn:text>Device.mac</dmn:text>
</dmn:inputExpression>
</dmn:input>
<dmn:input id="_1CC9B798-BDC2-44E2-AE95-1D34F0D3A2CF">
<dmn:inputExpression id="_4ADA3384-F73A-471E-8F24-2AFAD6904AD4" typeRef="string">
<dmn:text>Device.vendor</dmn:text>
</dmn:inputExpression>
</dmn:input>
<dmn:input id="_4DAF1A7A-6330-4388-B49F-A45DF96D16AD">
<dmn:inputExpression id="_8530615F-DA05-468F-A3A8-7A108014BD46" typeRef="boolean">
<dmn:text>Device.match</dmn:text>
</dmn:inputExpression>
</dmn:input>
<dmn:output id="_DDCAFA4F-7756-41A1-860D-6A1DD21B0F3E" name="cidrIP" typeRef="string"/>
<dmn:output id="_723BE867-D081-4B7F-AB86-AFE4BB176A90" name="namePattern" typeRef="string"/>
<dmn:output id="_7C5554BD-C2D8-4DDB-9194-3D5B39A2136D" name="prefixLength" typeRef="number"/>
<dmn:annotation name="annotation-1"/>
<dmn:rule id="_B874FE75-6478-4F28-9FE0-88FB601B41E2">
<dmn:inputEntry id="_ED696F9F-6E9D-48A0-8905-E01857B05868">
<dmn:text>-</dmn:text>
</dmn:inputEntry>
<dmn:inputEntry id="_BC1C6BE6-63CA-480A-8155-81B2BACCE39C">
<dmn:text>-</dmn:text>
</dmn:inputEntry>
<dmn:inputEntry id="_AB4F5322-734F-4C93-9AF0-829151AD1587">
<dmn:text>-</dmn:text>
</dmn:inputEntry>
<dmn:inputEntry id="_68947F2A-D021-4DC4-8F78-7BBFD20DF3DF">
<dmn:text>CIDRvalidator(Device.ip,"10.56.11.222",24)</dmn:text>
</dmn:inputEntry>
<dmn:outputEntry id="_E592BEDC-24F0-4A48-9AA5-41D9562F9A26">
<dmn:text>"10.56.11.222"</dmn:text>
</dmn:outputEntry>
<dmn:outputEntry id="_F710DBFE-255D-4A15-B82E-AAE132A5CB2C">
<dmn:text>"name1"</dmn:text>
</dmn:outputEntry>
<dmn:outputEntry id="_5F9C9052-4146-479D-86BC-E86732F6AEE4">
<dmn:text>24</dmn:text>
</dmn:outputEntry>
<dmn:annotationEntry>
<dmn:text/>
</dmn:annotationEntry>
</dmn:rule>
<dmn:rule id="_61F5698F-EBDE-4AB1-9C97-C572A46A645D">
<dmn:inputEntry id="_AC6CCC25-2DAA-4F27-B005-A392C03B3D69">
<dmn:text>-</dmn:text>
</dmn:inputEntry>
<dmn:inputEntry id="_3469243A-E23E-402C-B14B-8E9186B1F97B">
<dmn:text>-</dmn:text>
</dmn:inputEntry>
<dmn:inputEntry id="_FAA65F8D-ADD1-4399-9629-537BB7624572">
<dmn:text>-</dmn:text>
</dmn:inputEntry>
<dmn:inputEntry id="_6E5A1053-411D-448F-BB4D-D91141415642">
<dmn:text>CIDRvalidator(Device.ip,"10.56.21.8",24)</dmn:text>
</dmn:inputEntry>
<dmn:outputEntry id="_351FEF01-D875-4F6B-A01C-229E4B6A4F93">
<dmn:text>"10.56.21.8"</dmn:text>
</dmn:outputEntry>
<dmn:outputEntry id="_CDB14B6F-C537-4784-AF6E-4ECF9C4A4485">
<dmn:text>"name2"</dmn:text>
</dmn:outputEntry>
<dmn:outputEntry id="_691324BE-A9DB-48B7-9568-0AB91283CFA2">
<dmn:text>24</dmn:text>
</dmn:outputEntry>
<dmn:annotationEntry>
<dmn:text/>
</dmn:annotationEntry>
</dmn:rule>
</dmn:decisionTable>
</dmn:decision>
<dmn:businessKnowledgeModel id="_6FE98E04-586E-46D3-BB1D-E2E2FB305791" name="CIDRvalidator">
<dmn:extensionElements/>
<dmn:variable id="_2B2A3D19-C45E-4EAD-8DC0-D81BA1D183D3" name="CIDRvalidator" typeRef="boolean"/>
<dmn:encapsulatedLogic id="_6307CC06-C3AC-4A34-B833-E81C7721D0D5" kind="FEEL">
<dmn:formalParameter id="_A8442321-71DB-4142-A8AD-75D1859C649F" name="ip" typeRef="string"/>
<dmn:formalParameter id="_6904C2A7-7BF2-4F00-B74D-FB46E2F95D8D" name="cidrIp" typeRef="string"/>
<dmn:formalParameter id="_F5A37C49-D10C-4BC5-B8A1-71E3D5849EFB" name="prefixLength" typeRef="number"/>
<dmn:context id="_957FE2BD-70DE-4762-AC21-C998ADB67341">
<dmn:contextEntry>
<dmn:variable id="_8DA684EA-CA55-46E3-8774-0D8A1A0E16FD" name="splitIp" typeRef="tIPSegments">
<dmn:description>Split IP address into numerical parts</dmn:description>
</dmn:variable>
<dmn:literalExpression id="_972AACD9-3443-48E2-8697-AF20FD4DBFB5">
<dmn:text>[for part in split(ip, ".") return number(part)]</dmn:text>
</dmn:literalExpression>
</dmn:contextEntry>
<dmn:contextEntry>
<dmn:variable id="_ADA7E3AC-0E7B-42DB-BD80-6387F9E8CAB9" name="splitCidrIp" typeRef="tIPSegments">
<dmn:description>Split CIDR IP address into numerical parts</dmn:description>
</dmn:variable>
<dmn:literalExpression id="_20CA00E3-9838-41E9-985E-CEBA4C5FC035">
<dmn:text>[for part in split(cidrIp, ".") return number(part)]</dmn:text>
</dmn:literalExpression>
</dmn:contextEntry>
<dmn:contextEntry>
<dmn:variable id="_AB3A623E-342B-48CA-98AC-1355F5ACAA25" name="ipBits" typeRef="number">
<dmn:description>Convert split parts to IP bits</dmn:description>
</dmn:variable>
<dmn:literalExpression id="_C9CE7B83-E441-47C9-AE35-BD8786EC19BA">
<dmn:text>splitIp[1] * 2**24 + splitIp[2] * 2**16 + splitIp[3] * 2**8 + splitIp[4]</dmn:text>
</dmn:literalExpression>
</dmn:contextEntry>
<dmn:contextEntry>
<dmn:variable id="_D072192F-95B4-4C17-89B8-7DD24EACDC1F" name="cidrBits" typeRef="number">
<dmn:description>Convert split parts to CIDR IP bits</dmn:description>
</dmn:variable>
<dmn:literalExpression id="_1B107F0B-22CD-4FF3-818B-73DF7C138C92">
<dmn:text>splitCidrIp[1] * 2**24 + splitCidrIp[2] * 2**16 + splitCidrIp[3] * 2**8 + splitCidrIp[4]</dmn:text>
</dmn:literalExpression>
</dmn:contextEntry>
<dmn:contextEntry>
<dmn:variable id="_60A2DE4A-29E0-4815-80DD-64AF0B948B24" name="mask" typeRef="number">
<dmn:description>Generate mask</dmn:description>
</dmn:variable>
<dmn:literalExpression id="_8F50D5B8-1444-4C89-9DDA-E63ABC0D7DD4">
<dmn:text>(2**prefixLength - 1) * 2**(32 - prefixLength)</dmn:text>
</dmn:literalExpression>
</dmn:contextEntry>
<dmn:contextEntry>
<dmn:literalExpression id="_B3CEE1BC-E004-457E-B200-28A60280D229">
<dmn:text>(ipBits & mask) = (cidrBits & mask)</dmn:text>
</dmn:literalExpression>
</dmn:contextEntry>
</dmn:context>
</dmn:encapsulatedLogic>
</dmn:businessKnowledgeModel>
<dmndi:DMNDI>
<dmndi:DMNDiagram id="_65E29651-CE18-4371-A45A-323DE635E4B9" name="DRG">
<di:extension>
<kie:ComponentsWidthsExtension>
<kie:ComponentWidths dmnElementRef="_9059DF09-BB5D-4B93-85E8-98666481B9CA">
<kie:width>50</kie:width>
<kie:width>100</kie:width>
<kie:width>100</kie:width>
<kie:width>100</kie:width>
<kie:width>286</kie:width>
<kie:width>100</kie:width>
<kie:width>100</kie:width>
<kie:width>100</kie:width>
<kie:width>100</kie:width>
</kie:ComponentWidths>
<kie:ComponentWidths dmnElementRef="_957FE2BD-70DE-4762-AC21-C998ADB67341">
<kie:width>50</kie:width>
<kie:width>120</kie:width>
<kie:width>279</kie:width>
</kie:ComponentWidths>
<kie:ComponentWidths dmnElementRef="_972AACD9-3443-48E2-8697-AF20FD4DBFB5">
<kie:width>279</kie:width>
</kie:ComponentWidths>
<kie:ComponentWidths dmnElementRef="_20CA00E3-9838-41E9-985E-CEBA4C5FC035">
<kie:width>279</kie:width>
</kie:ComponentWidths>
<kie:ComponentWidths dmnElementRef="_C9CE7B83-E441-47C9-AE35-BD8786EC19BA">
<kie:width>279</kie:width>
</kie:ComponentWidths>
<kie:ComponentWidths dmnElementRef="_1B107F0B-22CD-4FF3-818B-73DF7C138C92">
<kie:width>279</kie:width>
</kie:ComponentWidths>
<kie:ComponentWidths dmnElementRef="_8F50D5B8-1444-4C89-9DDA-E63ABC0D7DD4">
<kie:width>279</kie:width>
</kie:ComponentWidths>
<kie:ComponentWidths dmnElementRef="_B3CEE1BC-E004-457E-B200-28A60280D229">
<kie:width>279</kie:width>
</kie:ComponentWidths>
<kie:ComponentWidths dmnElementRef="_6307CC06-C3AC-4A34-B833-E81C7721D0D5">
<kie:width>50</kie:width>
<kie:width>469</kie:width>
</kie:ComponentWidths>
</kie:ComponentsWidthsExtension>
</di:extension>
<dmndi:DMNShape id="dmnshape-drg-_19F5D0A7-D55D-4E17-9BAE-7359B0C2FE21" dmnElementRef="_19F5D0A7-D55D-4E17-9BAE-7359B0C2FE21" isCollapsed="false">
<dmndi:DMNStyle>
<dmndi:FillColor red="255" green="255" blue="255"/>
<dmndi:StrokeColor red="0" green="0" blue="0"/>
<dmndi:FontColor red="0" green="0" blue="0"/>
</dmndi:DMNStyle>
<dc:Bounds x="550" y="172" width="100" height="50"/>
<dmndi:DMNLabel/>
</dmndi:DMNShape>
<dmndi:DMNShape id="dmnshape-drg-_E0CF4F27-2184-4C01-BE0B-314EDCE8441D" dmnElementRef="_E0CF4F27-2184-4C01-BE0B-314EDCE8441D" isCollapsed="false">
<dmndi:DMNStyle>
<dmndi:FillColor red="255" green="255" blue="255"/>
<dmndi:StrokeColor red="0" green="0" blue="0"/>
<dmndi:FontColor red="0" green="0" blue="0"/>
</dmndi:DMNStyle>
<dc:Bounds x="378" y="304" width="100" height="50"/>
<dmndi:DMNLabel/>
</dmndi:DMNShape>
<dmndi:DMNShape id="dmnshape-drg-_6FE98E04-586E-46D3-BB1D-E2E2FB305791" dmnElementRef="_6FE98E04-586E-46D3-BB1D-E2E2FB305791" isCollapsed="false">
<dmndi:DMNStyle>
<dmndi:FillColor red="255" green="255" blue="255"/>
<dmndi:StrokeColor red="0" green="0" blue="0"/>
<dmndi:FontColor red="0" green="0" blue="0"/>
</dmndi:DMNStyle>
<dc:Bounds x="204" y="402" width="100" height="50"/>
<dmndi:DMNLabel/>
</dmndi:DMNShape>
<dmndi:DMNEdge id="dmnedge-drg-_DE116BF0-FC7D-4AEC-AAC0-BE2D67EACC41-AUTO-SOURCE-AUTO-TARGET" dmnElementRef="_DE116BF0-FC7D-4AEC-AAC0-BE2D67EACC41">
<di:waypoint x="600" y="172"/>
<di:waypoint x="428" y="354"/>
</dmndi:DMNEdge>
<dmndi:DMNEdge id="dmnedge-drg-_AEB52860-B199-438A-9A34-C59A08B28ECC" dmnElementRef="_AEB52860-B199-438A-9A34-C59A08B28ECC">
<di:waypoint x="254" y="427"/>
<di:waypoint x="428" y="354"/>
</dmndi:DMNEdge>
</dmndi:DMNDiagram>
<dmndi:DMNDiagram id="_C026D2CA-057A-41BB-B495-BF3503771880" name="new-diagram">
<di:extension>
<kie:ComponentsWidthsExtension/>
</di:extension>
</dmndi:DMNDiagram>
</dmndi:DMNDI>
</dmn:definitions>