清单CD段掩码和选择器

时间:2017-03-29 18:34:33

标签: c# acumatica

我们正在努力实施" InventoryCD"自定义页面中的(字符串)字段(不是库存ID Int字段)。我们需要此InventoryCD字段才能像Stock Item InventoryCD字段一样工作(段显示的字段掩码和现有项的选择器)。目前问题是相同的aspx PXSegmentMask和DAC属性不一样。我们在字段上使用InventoryRawAttribute与InventoryItem.InventoryCD附带的InventoryItemMaint缓存上的方法完全相同。唯一的例外是库存CD字段不是我们自定义页面中的键。

我们的问题是,只有当我们没有进入或关注该字段时,才会显示我们的清单CD字段以显示分段掩码(用户必须单击移动到另一个字段)。这使得用户难以跟踪他们输入值的段。所以我的问题是我们缺少什么?

以下是我们迄今为止所做的工作:

(1) DAC - InventoryCD (与附加的InventoryItemMaint缓存中的InventoryItem.InventoryCD相同 - 除了IsKey = false)

public abstract class inventoryCD : PX.Data.IBqlField
{}

protected String _InventoryCD;

[PXDefault()]
[InventoryRaw(typeof(Where<InventoryItem.stkItem, Equal<True>>), DisplayName = "Inventory ID", Filterable = true)]
public virtual String InventoryCD
{
    get
    {
        return this._InventoryCD;
    }
    set
    {
        this._InventoryCD = value;
    }
}

(2)页面 - InventoryCD (从库存项目IN202500复制)

<px:PXSegmentMask ID="edInventoryCD" runat="server" DataField="InventoryCD" 
    DataSourceID="ds" AutoRefresh="true" > 
    <GridProperties FastFilterFields="InventoryCD,Descr" />
</px:PXSegmentMask>

以下是我看到的结果示例(请参阅下图)。请注意输入值或仅单击字段时字段的外观。在我们的自定义页面上,单击“清单CD”字段显示没有分段分隔。在Stock Item页面上执行相同操作将显示分段分隔,以便用户可以跟踪分段。我们如何让分段显示在我们的自定义页面中起作用?

Input fields image

编辑:如果在InventoryRawAttribute中设置ValidComboRequired = true,则掩码显示与库存项目相同,但是您松开所有项目的选择器,然后选择器成为每个项目段值的选择器(使问题更严重)。只是一个FYI,以防任何人都可以看到我需要的某种类型的组合,因为它可能与ValidComboRequired有关(当为true时为掩码,在为false时为选择器)。

EDIT2:尝试将字段设为关键字(但不是DAC中唯一的关键字)并且没有区别

3 个答案:

答案 0 :(得分:3)

要获取输入掩码,您可以在aspx中将AutoComplete设置为false,而无需自定义现成的InventoryRaw属性。

示例:

using PX.Data;
using PX.Objects.IN;

namespace PXDemoPkg
{
    public class INSetupDemoExt : PXCacheExtension<INSetup>
    {
        public abstract class usrInventoryID : IBqlField { }

        #region UsrInventoryID
        [PXDefault]
        [PXUIField(DisplayName = "InventoryID")]
        [InventoryRaw(typeof(Where<InventoryItem.stkItem, Equal<True>>), 
                        DisplayName = "Inventory ID", Filterable = true)]
        public virtual string UsrInventoryID { get; set; }

        #endregion
    }
}

enter image description here

enter image description here

答案 1 :(得分:1)

如果仅限于使用标准框架属性,Ruslan的帖子是一个答案,没有办法触发我需要的显示。

但是,由于与我的问题无关的其他原因,我不得不创建自己的InventoryRawAttribute。在这样做的过程中,我将PXDimensionSelectorAttrbiute.SelectorMode设置为MaskAutocomplete,这使得字段功能完全按照我需要的方式运行。

他是完成这项工作的精简基础知识。这是InventoryRawAttribute的副本,并添加了attr.SelectorMode = PXSelectorMode.MaskAutocomplete。

/// <summary>
/// Copy of InventoryRawAttribute (sealed class)
/// </summary>
[PXDBString(InputMask = "", IsUnicode = true)]
[PXUIField(DisplayName = "Inventory ID", Visibility = PXUIVisibility.SelectorVisible)]
public sealed class TestInventoryRawAttribute : AcctSubAttribute
{
    public const string DimensionName = "INVENTORY";

    public TestInventoryRawAttribute()
        : base()
    {
        Type SearchType = typeof(Search<InventoryItem.inventoryCD, Where<Match<Current<AccessInfo.userName>>>>);
        PXDimensionSelectorAttribute attr = new PXDimensionSelectorAttribute(DimensionName, SearchType, typeof(InventoryItem.inventoryCD));
        attr.CacheGlobal = true;
        // This is the secret sauce - MaskAutocomplete
        attr.SelectorMode = PXSelectorMode.MaskAutocomplete;
        _Attributes.Add(attr);
        _SelAttrIndex = _Attributes.Count - 1;
    }
}

行动中的秘诀...

Screen shot of working UI for Inventory CD field

答案 2 :(得分:0)

PXSegmentMask报告的行为是设计的。如果您稍微使用商业帐户并为BIZACCT细分键定义至少2个细分,则在“销售订单”屏幕上,在客户ID查找失去焦点之前,也不会出现细分分离:

enter image description here

enter image description here

在InventoryRawAttribute上使用 ValidComboRequired 属性设置 True ,您告诉PXSegmentMask在&#34; per-segment&#34;模式,禁用所有项目的选择器,并强制它成为每个项目段值的选择器。

库存ID是库存项目屏幕上的关键字段,客户ID是客户屏幕上的关键字,因此在这两个屏幕上,所有项目的选择器都存在段分隔。我在销售订单屏幕上提到客户查询的原因是因为CustomerID不是SOOrder DAC的关键字段,这是销售订单的客户ID查找中缺少分段分离的主要原因,直到它丢失为止对焦。