在库存查找中添加属性字段

xxx*_*xxx 0 acumatica

我想为我的销售订单和采购订单的库存查找添加属性,有人知道怎么做吗?或任何想法?

DCh*_*gar 5

请参考下面的代码示例,以使用开箱即用的方式在选择器和网格控件中包含属性列CRAttributesFieldAttribute

声明一个PXAddAtttributeColumns继承自CRAttributesFieldAttribute.

public class PXAddAtttributeColumns : CRAttributesFieldAttribute
{
    string[] _names;
    bool _IsForSelector;

    public PXAddAtttributeColumns(string[] names, Type entityType, Type entityIDField, Type classIDField, bool IsForSelector = true)
        : base(entityType, entityIDField, classIDField)
    {
        _names = names;
        _IsForSelector = IsForSelector;
    }

    public override void CacheAttached(PXCache sender)
    {
        this._IsActive = true;
        base.CacheAttached(sender);
    }

    protected override void AttributeFieldSelecting(PXCache sender, PXFieldSelectingEventArgs e, PXFieldState state, string attributeName, int idx)
    {
        if (_names.Any(attributeName.Equals))
        {
            //Out-of-box DisplayName is prefixed with "$Attributes$-" - if you need to take that off.
            state.DisplayName = (!String.IsNullOrEmpty(state.DisplayName)) ? (state.DisplayName.Replace("$Attributes$-", "")) : attributeName;
            state.Visible = true;
            //Requires AutoGenerateColumns="AppendDynamic" for PXGrid Control for dynamic Attribute columns creation
            state.Visibility = (_IsForSelector) ? PXUIVisibility.SelectorVisible : PXUIVisibility.Dynamic;
        }
        base.AttributeFieldSelecting(sender, e, state, attributeName, idx);
    }

    public override void CommandPreparing(PXCache sender, PXCommandPreparingEventArgs e)
    {
        base.CommandPreparing(sender, e);

        if (e.BqlTable == null && aggregateAttributes && sender.GetItemType().IsDefined(typeof(PXProjectionAttribute), true))
        {
            e.BqlTable = _BqlTable;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

要将属性作为列包含在 中Inventory Look up,请按如下方式声明 DAC 扩展:

public class InventoryItemPXExt : PXCacheExtension<PX.Objects.IN.InventoryItem>
{
    #region Attributes

    public abstract class attributes : IBqlField { }

    [PXAddAtttributeColumns(new[] { "ASSETID", "HWMODEL" },
            typeof(CSAnswerType.inventoryAnswerType),
            typeof(InventoryItem.inventoryID),
            typeof(InventoryItem.itemClassID))]
    public virtual string[] Attributes { get; set; }

    #endregion
}
Run Code Online (Sandbox Code Playgroud)

字段将显示如下:

在此处输入图片说明

可以通过设置FilterByAllFields为在属性列上启用搜索True

在此处输入图片说明

要将属性作为列包含在 中Sales Order Details Grid,请按如下方式声明 DAC 扩展:

public class SOLineExtension : PXCacheExtension<SOLine>
{
    public abstract class itemAttributes : IBqlField { }

    [PXAddAtttributeColumns(new[] { "ASSETID", "HWMODEL" },
            typeof(CSAnswerType.inventoryAnswerType),
            typeof(SOLine.inventoryID),
            typeof(InventoryItem.itemClassID), false)]
    public virtual string[] ItemAttributes { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

确保AutoGenerateColumns="AppendDynamic"PXGrid控件动态属性列创建指定

在此处输入图片说明

字段将显示如下:

在此处输入图片说明

要将属性作为列包含在Add Stock Item对话框的网格中,请按如下方式声明 DAC 扩展:

public class SOSiteStatusSelectedExtension : PXCacheExtension<SOSiteStatusSelected>
{
    public abstract class itemAttributes : IBqlField { }

    [PXAddAtttributeColumns(new[] { "ASSETID", "HWMODEL" },
            typeof(CSAnswerType.inventoryAnswerType),
            typeof(InventoryItem.inventoryID),
            typeof(InventoryItem.itemClassID), false)]
    public virtual string[] ItemAttributes { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

确保AutoGenerateColumns="AppendDynamic"PXGrid控件动态属性列创建 指定

在此处输入图片说明

字段将显示如下:

在此处输入图片说明

注意:此示例适用于 5.3 系列 – Build 5.30.1367 以后。