我们正在努力实施" 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页面上执行相同操作将显示分段分隔,以便用户可以跟踪分段。我们如何让分段显示在我们的自定义页面中起作用?
编辑:如果在InventoryRawAttribute中设置ValidComboRequired = true,则掩码显示与库存项目相同,但是您松开所有项目的选择器,然后选择器成为每个项目段值的选择器(使问题更严重)。只是一个FYI,以防任何人都可以看到我需要的某种类型的组合,因为它可能与ValidComboRequired有关(当为true时为掩码,在为false时为选择器)。
EDIT2:尝试将字段设为关键字(但不是DAC中唯一的关键字)并且没有区别
答案 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
}
}
答案 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;
}
}
行动中的秘诀...
答案 2 :(得分:0)
PXSegmentMask报告的行为是设计的。如果您稍微使用商业帐户并为BIZACCT细分键定义至少2个细分,则在“销售订单”屏幕上,在客户ID查找失去焦点之前,也不会出现细分分离:
在InventoryRawAttribute上使用 ValidComboRequired 属性设置 True ,您告诉PXSegmentMask在&#34; per-segment&#34;模式,禁用所有项目的选择器,并强制它成为每个项目段值的选择器。
库存ID是库存项目屏幕上的关键字段,客户ID是客户屏幕上的关键字,因此在这两个屏幕上,所有项目的选择器都存在段分隔。我在销售订单屏幕上提到客户查询的原因是因为CustomerID不是SOOrder DAC的关键字段,这是销售订单的客户ID查找中缺少分段分离的主要原因,直到它丢失为止对焦。