当前位置: 首页 > news >正文

D365 query

文章目录

  • 简单查询
  • 多个表联接


简单查询

Query  query;
QueryBuildDataSource    qbds;
QueryBuildRange qbr,
QueryRun                queryRun;query = new Query(); //新建查询对象
qbds = query.addDataSource(tableNum(SalesTable))
qbr= qbds.addRange(fieldNum(SalesTable, salesId));
qbr.value(queryValue(salesId));queryRun = new queryRun(query);
queryRun.allowCrossCompany(true);if (queryRun .prompt())
{while (queryRun .next()){SalesTable salesTable= queryRun.Get (tableNum(SalesTable)); // 从queryrun中获取记录info(salesTable.salesId);}

多个表联接

A
|-B (1:n, innerJoin)
|–C (1:n, innerJoin)

Query q = new query();
QueryRun qr;
QueryBuildDataSource qbds;
QueryBuildDataSource qbds2;
QueryBuildDataSource qbds3;
QueryBuildRange qbr;qbds = q.addDataSource(tableNum(A));qbds3 = qbds.addDataSource(tableNum(B));
qbds3.relations(false);
qbds3.joinMode(JoinMode::InnerJoin);
qbds3.addLink(fieldnum(A, RecId),fieldnum(B, ARecId));qbds2 = qbds.addDataSource(tableNum(C));
qbds2.relations(false);
qbds2.joinMode(JoinMode::InnerJoin);
qbds2.addLink(fieldnum(B, RecId),fieldnum(C, BRecId));qr = new QueryRun(q);while (qr.next()){//Insert code here}

等价于

Select AJoin B where B.ARecId == A.RecIdJoin C where C.BRecId == B.RecId;

A
|-B (1:n, innerJoin)
|-C (1:n, innerJoin)

Query q = new query();
QueryRun qr;
QueryBuildDataSource qbds;
QueryBuildDataSource qbds2;
QueryBuildDataSource qbds3;
QueryBuildRange qbr;qbds = q.addDataSource(tableNum(A));qbds3 = qbds.addDataSource(tableNum(B));
qbds3.relations(false);
qbds3.joinMode(JoinMode::InnerJoin);
qbds3.addLink(fieldnum(A, RecId),fieldnum(B, ARecId));qbds2 = qbds.addDataSource(tableNum(C));
qbds2.relations(false);
qbds2.joinMode(JoinMode::InnerJoin);
qbds2.addLink(fieldnum(A, RecId),fieldnum(C, BRecId));qr = new QueryRun(q);while (qr.next()){//Insert code here}

等价于

Select A Join B where B.ARecId == A.RecId;
Select A Join C where C.BRecId == A.RecId;

A
|-B (1:n, innerJoin)
|-C (1:n, innerJoin)
两个子表是在同一个level的

Query q = new query();
QueryRun qr;
QueryBuildDataSource qbds;
QueryBuildDataSource qbds2;
QueryBuildDataSource qbds3;
QueryBuildRange qbr;qbds = q.addDataSource(tableNum(A));qbds3 = qbds.addDataSource(tableNum(B));
qbds3.relations(false);
qbds3.joinMode(JoinMode::InnerJoin);
qbds3.addLink(fieldnum(A, RecId),fieldnum(B, ARecId));qbds2 = qbds.addDataSource(tableNum(C));
qbds2.relations(false);
qbds2.joinMode(JoinMode::InnerJoin);
qbds2.addLink(fieldnum(A, RecId),fieldnum(C, BRecId));qr = new QueryRun(q);while (qr.next()){//Insert code here}

等价于

先查询:Select A;
再查询:Select A Join B where B.ARecId == A.RecId;
最后:Select A Join C where C.BRecId == A.RecId;

A
|-B (1:1, innerJoin)
|-C (1:1, innerJoin)
两个子表是在同一个level的

Query q = new query();
QueryRun qr;
QueryBuildDataSource qbds;
QueryBuildDataSource qbds2;
QueryBuildDataSource qbds3;
QueryBuildRange qbr;qbds = q.addDataSource(tableNum(A));qbds3 = qbds.addDataSource(tableNum(B));
qbds3.relations(false);
qbds2.fetchmode(QueryFetchMode::One2One);//fetchmode
qbds3.joinMode(JoinMode::InnerJoin);
qbds3.addLink(fieldnum(A, RecId),fieldnum(B, ARecId));qbds2 = qbds.addDataSource(tableNum(C));
qbds2.relations(false);
qbds2.fetchmode(QueryFetchMode::One2One);//fetchmode
qbds2.joinMode(JoinMode::InnerJoin);
qbds2.addLink(fieldnum(A, RecId),fieldnum(C, BRecId));qr = new QueryRun(q);while (qr.next()){//Insert code here}

等价于

Select AJoin B where B.ARecId == A.RecIdJoin C where C.BRecId == A.RecId;

将FetchMode设置为 “1:1”时,才可以得到这样的查询语句


http://www.mrgr.cn/news/20290.html

相关文章:

  • Linux基础入门 --6 DAY
  • 亚马逊秋季大促:多店铺高效管理和盈利策略
  • 视频监控系统选型:为何EasyCVR视频汇聚平台成为优选方案
  • 常见的 Linux 命令大全(表格形式)
  • Java【数据类型】
  • 【Python基础】这篇文章带你了解Python的基本特点,让学习Python变得事半功倍!!!
  • 如何通过Python SDK描述Collection
  • 企业财税自动化解决方案如何提升财务效率与准确性
  • 自动驾驶坐标转换(代码)
  • 解读:以RTC为基,AI为脑的“超拟人”AI实时互动解决方案
  • 【Qt笔记】QTreeWidget控件详解
  • 基于ECharts的综电商物流云平台可视化
  • 在使用Vue3+Ts封装的微信消息播放组件时怎么停止上一次的声音播放
  • 电子基础绪论
  • Faceware面部动作捕捉系统,为虚拟角色赋予真实可信的面部动画
  • 录屏神器!这四款免费版助你轻松成为剪辑大师
  • 数据结构之抽象数据类型(c语言版)
  • 在 Ubuntu 上安装 Jenkins,并配置 SSH Server 插件
  • 项目实战 ---- 商用落地视频搜索系统(7)---优化(1)--预处理优化
  • 【压力测试】如何确定系统最大并发用户数?