【问题标题】:Access Customer Attributes from Generic Inquiry从通用查询访问客户属性
【发布时间】:2018-10-25 19:46:47
【问题描述】:

我需要在Generic Inquiry 中利用Customer Attributes。我从 Server Management Studio 中的原始 SQL 开始设计我的大多数通用查询。我发现以这种方式定位我需要的数据要容易得多。但是,我很难弄清楚属性如何与客户联系在一起。属性被添加到Customer Class,然后客户与客户类相关联。这允许客户可以修改该客户类可用的任何属性。

使用数据库,我发现了以下内容:

  • 各个属性对象存储在CSAttribute 表中
  • 属性选项(例如组合框)存储在CSAttributeDetail 表中
  • 每个属性的单独实例存储在CSAnswers 表中
  • 还有一个CSAttributeGroup 表,我相信它会将CSAttributeDetail 记录与CSAttribute 记录相关联。

因此,人们会期望CSAnswers 表具有对答案所附客户的引用……但事实并非如此。该表定义为:

  • CompanyID(PK,int,非空)
  • RefNoteID(PK,唯一标识符,非空)
  • AttributeID(PK,nvarchar(10),不为空)
  • 值 (nvarchar(255), null)

为了雪上加霜,数据库中的表名并不总是与通用查询中可用的内容一一对应。例如,GI 中ARInvoice 可用的许多字段实际上存储在数据库的ARRegister 表中。我怀疑属性正在发生非常相似的事情。

谁能指出我在数据库级别和 GI 级别定位属性如何与客户相关联的正确方向?

【问题讨论】:

    标签: sql attributes acumatica customer


    【解决方案1】:

    属性通过 RefNoteID 字段链接到记录;它将与另一条记录的 NoteID 匹配(请注意,在您的情况下,它不会在客户表中,而是在 BAccount 中,这是与客户的 1:1 联接)。如果有的话,您应该很少需要直接引用 CSAnswers 表。在内部,Acumatica 会在主表中生成一组与属性名称匹配的虚拟字段,后缀为_Attributes:

    请注意,您将无法在“条件”选项卡中引用该属性,但是您可以在网格中按此列进行过滤并创建预定义的过滤器。

    【讨论】:

    • 感谢您指出noteIDBAccount 表上。一旦我建立了这种连接,我就能够成功地构建我的 SQL。我反对“你应该很少,如果有的话,需要直接引用 CSAnswers 表。”在 GI 中使用预填充的属性字段时,系统会生成警告并建议将连接添加到表/关系中以提高性能。
    • 该警告只是针对发出子选择的字段的一般警告,但我可以保证属性已经过专门优化和测试,并且可以在具有数十万行和数十个属性的查询中工作。
    【解决方案2】:

    我已经使用客户属性制作了许多 GI,CSAnswers 表中的 RefNoteID 唯一标识符与客户表中的 NoteID 唯一标识符相关,而 AttributeID 是特定的属性。要获取多行上客户的所有属性,只需在 RefNoteID 上加入,如果您想要特定的属性,请为每个 AttributeID 添加额外的加入条件。

    【讨论】:

    • 我假设 refNoteID 是对您可以在整个系统中添加的注释的引用。当尝试在 SQL 中实现这一点时,我很沮丧地发现 Customers 表没有 noteID 列...我将花一些时间搜索与 noteID 一起使用的连接。感谢您的输入。一旦我将其作为 GI 工作,我将标记为答案。
    猜你喜欢
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多