Epicor BAQ – BAQ设计与调用

Epicor BAQ – BAQ设计与调用BAQ 筛选条件分为 TableCriteri 和 SubQueryCrit 两类 TableCriteri 只能对 Table 栏位进行筛选 而 SubQueryCrit 既能对 Table 栏位进

大家好,欢迎来到IT知识分享网。


一、BAQ设计常用功能

1.跨公司查询

2.修改作者

3.添加筛选条件

4.使用BAQ参数

5.子查询

子查询可以分为如下几类:

类型 描述
TopLevel 简单查询的默认值;每个BAQ只可以包含一个TopLevel子查询。
Union Union用于合并两个表的数据,两个表所有选定的列数据类型需要相同,并且合并后两个表中重复的数据只保留一行。
UnionAll UnionAll用法与Union一样,但是合并后两个表中重复的数据也会保留。
Intersect Intersect返回两个或多个选择查询的结果。但是,它只返回所有查询都有的行。如果一条记录存在于一个查询中而不存在于另一个查询,则将从结果中忽略该记录。
Except 返回Except操作左侧查询中的所有非重复值,并且这些值也不是从右侧查询中返回的。
CTE 公共表表达式(CTE)可以看作是在单个SELECT的执行范围内定义的临时结果集,也可以用作子查询。
CTE的常见用途是查询分层数据。返回分层数据是递归查询的常见用法,例如:在组织结构图中显示员工,或在物料清单场景中显示数据,在该场景中,父产品有一个或多个组件,而这些组件又可能有子组件或是其他父产品的组件。
InnerSubQuery InnerSubQuery通常作为另一个查询中的嵌套查询,即将当前查询的结果用到另外一个查询中。

子查询返回行可设定为如下几种

类型 描述
All 默认值;指定返回结果为查询到的所有行。
Distinct 指定返回结果去掉其中重复的行。
Top 指定返回的行数或行百分比。
使用With Ties时需要同时指定Order By列,如果在查询数据中有与返回结果最后一行的Order By列的值相同的行,则这些行也会加到返回结果中,这时候返回的行数将超过指定返回的行数或行百分比
DistinctTop 对应于同时使用Distinct和Top子句。

在这里插入图片描述

二、在客制化中调用BAQ取数

这里使用DynamicQueryAdapter来获取BAQ查询到的数据,数据筛选使用BAQ参数。

方法代码如下:

/// <summary>从BAQ获取数据</summary> public DataTable GetBAQData(Ice.Lib.Framework.EpiTransaction otrans, string queryID, Parameter[] queryParameter, bool clearParameter = true) { 
     DataTable result = null; try { 
     using (Ice.Adapters.DynamicQueryAdapter dqa = new Ice.Adapters.DynamicQueryAdapter(otrans)) { 
     dqa.BOConnect(); Ice.BO.QueryExecutionDataSet dsQueryExecution = dqa.GetQueryExecutionParametersByID(queryID); if (clearParameter) dsQueryExecution.ExecutionParameter.Clear();//清除已有的BAQ参数 if (queryParameter != null) { 
     for (int r = 0; r < queryParameter.Length; r++) { 
     //重新添加BAQ参数 dsQueryExecution.ExecutionParameter.AddExecutionParameterRow(queryParameter[r].ParameterID, queryParameter[r].ParameterValue, queryParameter[r].ValueType, queryParameter[r].IsEmpty, Guid.NewGuid(), "A"); } } dqa.ExecuteByID(queryID, dsQueryExecution);//执行BAQ查询 if (dqa.QueryResults.Tables["Errors"].Rows.Count > 0) { 
     throw new Exception(queryID + "," + Convert.ToString(dqa.QueryResults.Tables["Errors"].Rows[0]["ErrorText"])); } result = dqa.QueryResults.Tables["Results"]; } } catch (Exception ex) { 
     throw new Exception(queryID + "," + ex.Message); } return result; } /// <summary>BAQ参数数据类型</summary> public class DataType { 
     public static string Nvarchar = "nvarchar"; public static string Bit = "bit"; public static string Date = "date"; public static string Decimal = "decimal"; public static string Int = "int"; } /// <summary>BAQ参数</summary> public class Parameter { 
     public string ParameterID { 
     get; set; } public string ParameterValue { 
     get; set; } public string ValueType { 
     get; set; } public bool IsEmpty { 
     get; set; } public Parameter(string parameterID, string parameterValue, string dataType, bool isEmpty = false) { 
     ParameterID = parameterID; ParameterValue = parameterValue; ValueType = dataType; IsEmpty = isEmpty; } } 

调用样例:

List<Parameter> parList= new List<Parameter>(); parList.Add(new Parameter("PackNum", Convert.ToInt32(edvShipHead.CurrentDataRow["PackNum"]).ToString(), DataType.Int)); DataTable dt = GetBAQData(oTrans, "BK_GetShipData", parList.ToArray()); 

三、在BPM中调用BAQ取数

在BPM中,可以使用DynamicQuery的BO方法来获取BAQ查询到的数据,数据筛选也使用BAQ参数,相关代码如下:

//实例化DynamicQuery的BO对象 Ice.Contracts.DynamicQuerySvcContract boDynamicQuery = Ice.Assemblies.ServiceRenderer.GetService<Ice.Contracts.DynamicQuerySvcContract>(Db); //实例化BAQ查询需要的数据集 Ice.Tablesets.QueryExecutionTableset dsQueryExecution = new Ice.Tablesets.QueryExecutionTableset(); //在数据集中添加BAQ查询需要的参数 Ice.Tablesets.ExecutionParameterRow drRow = new Ice.Tablesets.ExecutionParameterRow(); drRow.ParameterID = "PackNum"; drRow.ParameterValue = packNum.ToString(); drRow.ValueType = "int"; drRow.IsEmpty = false; drRow.RowMod = "A"; drRow.SysRowID = new Guid(); dsQueryExecution.ExecutionParameter.Add(drRow); //获取BAQ查询到的数据 DataSet dsResults = boDynamicQuery.ExecuteByID("BK_GetShipData", dsQueryExecution); 

四、结束

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/131077.html

(0)
上一篇 2025-08-10 18:10
下一篇 2025-08-10 18:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信