KingswaySoft Nav源组件如何用XML实现InvoiceLines关联过滤
可以通过XML编码的方式实现该需求,具体操作方案如下:
实现逻辑
NAV的OData/页面服务原生不直接支持IN子查询语法,但可以通过「先拉取有效Header的InvoiceId集合,再构造XML格式的多值过滤条件传入InvoiceLines源组件」的方式,等效实现where InvoiceId in (Select InvoiceId from PostedSalesInvoices)的过滤效果。
具体操作步骤
步骤1:获取所有有效InvoiceId集合
新增一个NAV源组件,选择PostedSalesInvoices作为数据源,仅读取InvoiceId字段的全量值,将输出结果存储为SSIS对象变量,或拼接为待处理的字符串集合。
步骤2:构造XML格式过滤规则
通过SSIS脚本组件或表达式任务,将上一步得到的InvoiceId集合拼接为如下格式的XML字符串,存入字符串类型的SSIS变量:
<Filter> <Field>InvoiceId</Field> <Criteria> <Value>INV_001</Value> <Value>INV_002</Value> <!-- 此处追加所有需要匹配的InvoiceId对应的Value节点 --> </Criteria> </Filter>
注意:如果InvoiceId包含&、<、>等XML特殊字符,需要提前转义为对应XML转义符,避免解析错误
步骤3:配置InvoiceLines源组件的过滤规则
- 打开InvoiceLines对应的NAV源组件编辑器,进入「过滤」配置页
- 找到
InvoiceId字段的过滤项,过滤操作符选择「等于」,过滤值来源选择「自定义表达式/变量」 - 填入第二步构造的XML格式过滤变量,勾选输入为XML编码过滤规则的选项,保存配置即可生效
注意事项
- 如果匹配的InvoiceId数量超过NAV服务单次过滤的阈值(多数场景默认上限为1000个值),可以拆分多批执行过滤,或开启NAV源组件的分页配置规避限制
- 该方案的过滤逻辑是在NAV服务端执行的,比拉取全量InvoiceLines后再在数据流中做关联匹配的性能高很多
内容的提问来源于stack exchange,提问作者AGR
相关产品推荐
相关产品推荐

