首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Acumatica -复合主键

Acumatica -复合主键
EN

Stack Overflow用户
提问于 2019-12-20 21:54:24
回答 2查看 322关注 0票数 0

存在主子表,并且主记录在OrderNbr和RevisionNbr上具有组合键,在UI上,我们希望根据在UI上选择的订单号,为订单号选择器提供具有最大修订号的字段OrderNbr的选择器。

另外,在UI上,我们有创建新修订的功能,如何通过代码创建修订,当我为这两个字段定义IsKey= true并尝试通过以下方式保存数据时,我收到MUlti部件查询错误

代码语言:javascript
复制
Graph.primaryView.Insert()
ForEach(UIRow){
      Graph.ChildView.Insert
}
Graph.Persist();

注意: MAster表在SQL server中具有Identity列,并且具有键。

更新-父表DAC -

代码语言:javascript
复制
#region TestSuiteID
public abstract class testSuiteID:PX.Data.IBqlField {
}
protected int? _TestSuiteID;
[PXDBIdentity()]
public virtual int? TestSuiteID {
  get {
    return this._TestSuiteID;
  }
  set {
    this._TestSuiteID = value;
  }
}
#endregion
#region TestSuiteCD
public abstract class testSuiteCD:PX.Data.IBqlField {
}
protected string _TestSuiteCD;
[PXDBString(50, IsKey = true, IsUnicode = true, InputMask = ">CCCCCCCCCCCCCCC")]
[PXDefault()]
[PXUIField(DisplayName = "Test Group ID")]
[PXSelector(typeof(EWQCTestSuite.testSuiteCD), typeof(EWQCTestSuite.testSuiteCD), typeof(EWQCTestSuite.revisionNo), typeof(EWQCTestSuite.name))]
public virtual string TestSuiteCD {
  get {
    return this._TestSuiteCD;
  }
  set {
    this._TestSuiteCD = value;
  }
}
#endregion
#region RevisionNo
public abstract class revisionNo:PX.Data.IBqlField {
}
protected int? _RevisionNo;
[PXDBInt(IsKey=true)]
[PXDefault(1)]
[PXUIField(DisplayName = "Revision No")]
public virtual int? RevisionNo {
  get {
    return this._RevisionNo;
  }
  set {
    this._RevisionNo = value;
  }
}
#endregion

子表Dac -

代码语言:javascript
复制
#region TestSuiteVariableID
public abstract class testSuiteVariableID:PX.Data.IBqlField {
}


protected int? _TestSuiteVariableID;
[PXDBIdentity(IsKey = true)]
public virtual int? TestSuiteVariableID {
  get {
    return this._TestSuiteVariableID;
  }
  set {
    this._TestSuiteVariableID = value;
  }
}
#endregion

#region TestSuiteID
public abstract class testSuiteID:PX.Data.IBqlField {
}
protected int? _TestSuiteID;
[PXDBInt()]
[PXDBDefault(typeof(EWQCTestSuite.testSuiteID))]
[PXParent(typeof(Select<EWQCTestSuite, Where<EWQCTestSuite.testSuiteID, Equal<Current<EWQCTestSuite.testSuiteID>>>>))]
public virtual int? TestSuiteID {
  get {
    return this._TestSuiteID;
  }
  set {
    this._TestSuiteID = value;
  }
}
#endregion

注意-子表没有MAster标签CD和修订号列,因为我添加了Identity列以供参考,并有PXParent with Identity列。这两个Dac都有我没有在这里添加的其他字段。

我面临的其他问题是,当我删除记录时,我得到了一些主键引用错误(在主DataView上删除默认的acumatica删除按钮)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-13 18:30:26

对于使用PXGraph的复合键..Instead,使用PXRevisionableGraph。此图是制造模块的一部分,支持组合键。您的所有键都应该用AcctSubAttribute继承的属性进行修饰

票数 0
EN

Stack Overflow用户

发布于 2019-12-28 05:15:34

多部分查询错误通常与执行时解析为多个父项的主-详细(父项-子项)查询有关。子DAC应该有一个PXParent属性,该属性包含所有键字段上的where子句。

代码语言:javascript
复制
[PXParent(typeof(Select<Master,
                 Where<Master.key1, Equal<Current<Child.key1>>,
                 And<Master.key2, Equal<Current<Child.key2>>>>>>))]

您应该确保DAC和Graph中具有这种关系的所有BQL查询在所有键上都包含where筛选器或on join子句。还要确保DAC中的所有关键字段都具有IsKey=true,并且匹配的数据库字段已创建为数据库中的关键字段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59426391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档