Acumatica 从RESTAPI获取组合框值集

Acumatica 从RESTAPI获取组合框值集,acumatica,acumatica-kb,Acumatica,Acumatica Kb,我正在通过RESTAPI处理联系人,并试图在我的应用程序中添加一个输入字段,用于指定联系人的源。问题在于,源字段是一个组合框,这意味着可以通过自动化步骤(SM205000)修改其值。例如,下面是源代码的默认值列表: 对应于该字段的CRMSourcesAttribute // Token: 0x020003D3 RID: 979 public class CRMSourcesAttribute : PXStringListAttribute { // Token: 0x06004052

我正在通过RESTAPI处理联系人,并试图在我的应用程序中添加一个输入字段,用于指定
联系人的
。问题在于,
字段是一个组合框,这意味着可以通过自动化步骤(SM205000)修改其值。例如,下面是源代码的默认值列表:

对应于该字段的
CRMSourcesAttribute

// Token: 0x020003D3 RID: 979
public class CRMSourcesAttribute : PXStringListAttribute
{
    // Token: 0x06004052 RID: 16466 RVA: 0x000FD4A4 File Offset: 0x000FB6A4
    public CRMSourcesAttribute() : base(new string[]
    {
        "W",
        "H",
        "R",
        "L",
        "O"
    }, new string[]
    {
        "Web",
        "Phone Inquiry",
        "Referral",
        "Purchased List",
        "Other"
    })
    {
    }

    // Token: 0x04002158 RID: 8536
    public const string _WEB = "W";

    // Token: 0x04002159 RID: 8537
    public const string _PHONE_INQ = "H";

    // Token: 0x0400215A RID: 8538
    public const string _REFERRAL = "R";

    // Token: 0x0400215B RID: 8539
    public const string _PURCHASED_LIST = "L";

    // Token: 0x0400215C RID: 8540
    public const string _OTHER = "O";
}

我应该通过自动化步骤表来获得组合框的最终值,还是有一种方法可以通过RESTAPI来获得它,例如,指定
DAC.FIELD

对于这样的任务,我建议使用反射。下面是使用示例读取属性的示例:

    protected IEnumerable records()
    {
        //var row = new ClassFilter { ClassName = "PX.Objects.CR.CRMSourcesAttribute" };
        var row = Filter.Current;
        if (row != null && !string.IsNullOrWhiteSpace(row.ClassName))
        {
            var type = Type.GetType(row.ClassName) ??
                        Type.GetType(row.ClassName + ", PX.Objects");

            if (type != null)
                switch (type.BaseType.Name)
                {
                    case "PXIntListAttribute":
                        {
                            int[] values;
                            string[] labels;
                            GetRecords(type, out values, out labels);

                            for (int i = 0; i < values.Length; i++)
                                yield return new KeyValueRecord { Key = values[i].ToString(), UiValue = labels[i] };
                            break;
                        }
                    case "PXStringListAttribute":
                        {
                            string[] values, labels;
                            GetRecords(type, out values, out labels);

                            for (int i = 0; i < values.Length; i++)
                                yield return new KeyValueRecord { Key = values[i], UiValue = labels[i] };
                            break;
                        }
                }
        }
    }

    private void GetRecords<T>(Type type, out T[] values, out string[] labels)
    {
        var obj = Activator.CreateInstance(type);
        var flags = BindingFlags.NonPublic | BindingFlags.Instance;

        values = type.GetField("_AllowedValues", flags).GetValue(obj) as T[];
        labels = type.GetField("_AllowedLabels", flags).GetValue(obj) as string[];
    }
受保护的IEnumerable记录()
{
//var row=new ClassFilter{ClassName=“PX.Objects.CR.CRMSourcesAttribute”};
var row=过滤器。当前;
if(row!=null&&!string.IsNullOrWhiteSpace(row.ClassName))
{
var type=type.GetType(row.ClassName)??
Type.GetType(row.ClassName+“,PX.Objects”);
if(type!=null)
开关(type.BaseType.Name)
{
案例“PXIntListAttribute”:
{
int[]值;
字符串[]标签;
GetRecords(类型、输出值、输出标签);
for(int i=0;i
和图片:

之后,您只需将graph和DAC添加到端点并公开它


完整的带有注释的源代码是可用的

我认为这是一个很好的反馈功能请求。acumatica.com您正在查看所有可能的值,还是特定状态的可能值?@KRichardson我正在查找源查找的所有可能值。我知道附加值存储在AUCombo表中,“Active”复选框存储在AUComboStep表中。但我正在寻找一种获取该值的最佳方法,因为每次请求这些表时都会在外部应用程序端造成延迟。如果要在本地获取/缓存这些表,我会在AUStepCombo表中写入GI,指定ScreenID/FieldName/TableName/StepID并返回列在后面的值application@KRichardson这正是我思考如何获得这些价值观的方式,但是我想看看是否有人遇到过这个问题并找到了解决方案。我刚刚运行了代码,这个方法的问题是它没有返回从自动化步骤中添加的值。在20 R1 Acumatica中添加了一个按钮,显示下拉列表中所有可能的值,该按钮显示的值比此方法更多。