使用 Acumatica 导出企业帐户属性 API

Exporting Business Account attributes with Acumatica API

我们在 Acumatica 中的商业账户有 13 个自定义属性用于我们的主要商业账户 Class。基于 Acumatica 的示例 "Adding Records to the Business Accounts and Opportunities Forms",我已经能够成功地将值保存到属性中。但我一直无法弄清楚如何通过导出检索值。

首先,我尝试使用类似于保存字段时指定字段的格式。

 Public Function GetCustomerAttributes(ByVal customerID As String) As String()()
    Dim customer As CR303000Content = m_context.CR303000GetSchema()
    m_context.CR303000Clear()

    Dim idFilter As Filter = New Filter()
    idFilter.Field = customer.AccountSummary.BusinessAccount
    idFilter.Condition = FilterCondition.Equals
    idFilter.Value = customerID

    ' SIMILAR TO EXAMPLE FOR SAVING
    Dim awdField As Field = New Field()
    awdField.ObjectName = customer.Attributes.Attribute.ObjectName
    awdField.FieldName = "AWD Number"

    Dim searchfilters() As Filter = {idFilter}
    Dim searchCommands() As Command = {awdField}
    Dim searchResult As String()() = m_context.CR303000Export(searchCommands, searchfilters, 0, False, False)
    Return searchResult
End Function

我认为这会 return 一个结果,我们的属性值为 "AWD Number"。相反,它 return 得到了 13 个结果,每个属性一个,每个属性的值都是空白的。我将 FieldName 更改为 customer.Attributes.Attribute.FieldName,然后它开始 returning 每个属性的名称。所以我想如果我为值添加另一个字段,那么我可能会在单独的结果中获得名称和值,如下所示:

Public Function GetCustomerAttributes(ByVal customerID As String) As String()()
    Dim customer As CR303000Content = m_context.CR303000GetSchema()
    m_context.CR303000Clear()

    Dim idFilter As Filter = New Filter()
    idFilter.Field = customer.AccountSummary.BusinessAccount
    idFilter.Condition = FilterCondition.Equals
    idFilter.Value = customerID

    Dim awdField As Field = New Field()
    awdField.ObjectName = customer.Attributes.Attribute.ObjectName
    awdField.FieldName = customer.Attributes.Attribute.FieldName

    Dim awdValue As Field = New Field()
    awdValue.ObjectName = customer.Attributes.Attribute.ObjectName
    awdValue.FieldName = customer.Attributes.Attribute.Value

    Dim searchfilters() As Filter = {idFilter}
    Dim searchCommands() As Command = {awdField, awdValue}
    Dim searchResult As String()() = m_context.CR303000Export(searchCommands, searchfilters, 0, False, False)
    Return searchResult
End Function

我确实为 13 个结果中的每一个返回了一个 2 项数组,但第二个字段中的值仍然为空。

有谁知道我怎样才能得到这些值?我真的不在乎是否必须一次获取一个,但我更愿意一次获取所有的名称或代码,这样我就不必依赖索引始终保持不变。下面是我在 Acumatica 中的第二个示例和视图中调试器 运行 的图像。谢谢!

您的第一次尝试是正确的,但是您没有使用正确的对象名称和字段名称。系统会动态地向屏幕的主要对象(视图)添加字段,在本例中,对象名称由 customer.AccountSummary.BusinessAccount.ObjectName variable 表示(我建议您使用调试器来查看此值也等于什么 - 很好的学习练习)。

属性字段名称将使用与 中相同的命名约定。命名约定是 _Attributes。属性 ID 是 而不是 属性名称;我没有看到你的配置,但我怀疑你的属性 ID 是 "AWD Number"。总而言之,代码如下所示:

Dim awdField As Field = New Field()
awdField.ObjectName = customer.AccountSummary.BusinessAccount.ObjectName
awdField.FieldName = "AWDNumber_Attributes"

在您的示例中,通过放置 Attributes.Attribute.ObjectName 对象,系统将遍历此 table 中的所有值,然后 return 为您想要的每一行字段。我不确定为什么在这种情况下您没有看到所有属性值,但我认为上面的示例应该没问题。