Epicor BAQ - BAQ设计与调用

Epicor BAQ - BAQ设计与调用

目录

一、BAQ设计常用功能1.跨公司查询2.修改作者3.添加筛选条件4.使用BAQ参数5.子查询

二、在客制化中调用BAQ取数三、在BPM中调用BAQ取数四、结束

一、BAQ设计常用功能

1.跨公司查询

在BAQ的General页面勾选Cross-company后,BAQ可以跨公司查询数据。

2.修改作者

在BAQ设计中,如果BAQ的作者不是当前账号,系统是不允许进行修改的,这个时候我们可以使用Actions/Change Author功能把BAQ的作者修改为当前账号。

3.添加筛选条件

BAQ筛选条件分为Table Criteria和SubQuery Criteria两类,Table Criteria只能对Table栏位进行筛选,而SubQuery Criteria既能对Table栏位进行筛选,也能对查询结果的Calculated栏位进行筛选。

4.使用BAQ参数

先使用Actions/Define Parameters功能定义BAQ参数,定义好之后,就可以在筛选条件中使用定义的参数作为筛选条件。

5.子查询

BAQ中可以通过下图方式,添加子查询,

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

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

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

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

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

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

方法代码如下:

///

从BAQ获取数据

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;

}

///

BAQ参数数据类型

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";

}

///

BAQ参数

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 parList= new List();

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(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);

四、结束

相关创意

中国地图软件哪个最好-中国地图软件排行榜前十名
MX3新固件的升级与优化(全面提升MX3的性能与功能,让使用更便捷)
魔兽世界地心之战11个专业技能详解之采矿,让你日入百万
魔兽7.0版本中萨满职业的增强效果剖析(深入探究萨满在魔兽世界7.0版本中的强化能力)
胰腺肿瘤能活多久?为什么胰腺癌晚期不主张手术切除
国际攀岩高手齐聚南京展现青春之城风采
hse365平台

国际攀岩高手齐聚南京展现青春之城风采

📅 07-09 👁️ 9334
游戏里说的落地成盒是什么?看完你就懂了!
365bet手机投注网

游戏里说的落地成盒是什么?看完你就懂了!

📅 07-23 👁️ 8761
第17期:男神引导巴西下载
hse365平台

第17期:男神引导巴西下载

📅 09-06 👁️ 5252