Acumatica ERP 2018R1-内部版本18.107.0022
目标很简单。在Acumatica ERP库存项目屏幕中添加一个新选项卡,以显示与该项目相关的自定义数据的一对多关系。
在获得有关如何将新PXSearchable数据获取到“重建全文索引”屏幕中的帮助之后,SearchIndex表填充了我的数据,在内容字段中显示了标题行数据和可搜索字段。但是,显示的搜索结果只是一个冒号...由于标题格式为“ {0}:{1}”,因此冒号应该分隔标题行中显示的我的2个数据元素。
数据在数据库表的内容字段中,但不显示在搜索结果中。仅出现带有my的空白行,这确实将我带到通过搜索找到的我的物品的“库存项目”屏幕。
图形扩展:
public class InventoryItemMaint_Extension : PXGraphExtension<InventoryItemMaint>
{
#region Customized Data Views
public PXSelect<MyDataTable, Where<MyDataTable.inventoryID, Equal<Current<InventoryItem.inventoryID>>>> myviewname;
#endregion
}
DAC定义
[Serializable]
[PXPrimaryGraph(
new Type[] { typeof(InventoryItemMaint) },
new Type[] { typeof(Where<InventoryItem.stkItem, Equal<True>>) }
)]
[PXCacheName("My Data Description")]
[PXBreakInheritance]
public class MyDataTable: IBqlTable
{
#region BranchID
[PXDBInt(IsKey = true)]
[PXDefault(typeof(Current<AccessInfo.branchID>))]
public virtual Int32? BranchID { get; set; }
public abstract class branchID : PX.Data.IBqlField { }
#endregion
#region InventoryID
[PXDBInt]
[PXDBDefault(typeof(InventoryItem.inventoryID))]
[PXParent(typeof(Select<InventoryItem, Where<InventoryItem.inventoryID, Equal<Current<MyDataTable.inventoryID>>>>))]
public virtual int? InventoryID { get; set; }
public abstract class inventoryID : IBqlField { }
#endregion
#region MyFieldsHere
#endregion
#region NoteID
public abstract class noteID : PX.Data.IBqlField
{
}
protected Guid? _NoteID;
[PXSearchable(PX.Objects.SM.SearchCategory.All, "{0}: {1}",
new Type[] { typeof(MyDataTable.MasterDataID), typeof(MyDataTable.MySearchableDataField) },
new Type[] { typeof(MyDataTable.MySearchableDataField) },
NumberFields = new Type[] { typeof(MyDataTable.MySearchableDataField) },
Line1Format = "{0} - {1}", Line1Fields = new Type[] { typeof(MyDataTable.MasterDataID), typeof(MyDataTable.MySearchableDataField) },
Line2Format = "{0}", Line2Fields = new Type[] { typeof(MyDataTable.MySearchableDataField) },
WhereConstraint = typeof(Where<Current<MyDataTable.active>, NotEqual<False>>)
)]
[PXNote]
public virtual Guid? NoteID { get; set; }
#endregion
我以InventoryItem和POOrder的DAC为例,并在互联网上搜索了各种搜索结果。我找不到任何内容告诉我定义PXCacheName,以使其在“重建全文本索引”屏幕上的“名称”列中显示一个值,因此,以类似的方式看来,我必须缺少其他所有人都认为理所当然的其他东西
如何使搜索结果正确显示在搜索结果屏幕上?
答案 0 :(得分:1)
缺少的链接似乎是Searchable对象需要具有自己的图形/屏幕才能连接表示层。我已将自定义数据添加为一个新标签,挂在库存物料之外。运行“重建全文索引”时,它指向“库存项目”屏幕的图形,并最终指向“库存项目”记录。
通过创建用于显示我的自定义数据的专用图形/屏幕,PXSearchable能够链接到自定义数据的图形(通过[PrimaryGraph(typeof(MyGraph))注意)。
正在使用预期的数据重建索引,因为重建索引似乎并不依赖于表示层的图形定义。但是,实时搜索结果的显示确实会经过表示层,以提供可见的屏幕结果以及随后指向主图的链接。
要在以后再次执行此操作,这些似乎是必需的代码元素:
---DAC---
[PXPrimaryGraph(typeof(MyCustomDataDedicatedGraph))]
[PXCacheName("User Friendly Cache Name Displayed In Rebuild Index Screen")]
#region NoteID
[PXSearchable(PX.Objects.SM.SearchCategory.IN, "{0}",
new Type[] { typeof(MyDataTable.myTitleField1) },
new Type[] { typeof(MyDataTable.myIndexedField1) },
NumberFields = new Type[] { typeof(MyDataTable.myIndexField1) },
Line1Format = "{0}", Line1Fields = new Type[] { typeof(MyDataTable.myDescriptionLine1Field1) },
Line2Format = "{0}", Line2Fields = new Type[] { typeof(MyDataTable.myDescriptionLine2Field1) },
WhereConstraint = typeof(Where<Current<MyDataTable.myActiveFlagField>, NotEqual<False>>)
)]
[PXNote]
public virtual Guid? NoteID { get; set; }
public abstract class noteID : IBqlField { }
#endregion
---Graph MyCustomDataDedicatedGraph---
PXSelect or PXSelectJoin the data view needed to fully
represent the data in the PXSearchable of the NoteID of the DAC
注意:如果要联接表,请记住在PXSearchable部分中使用MatchWithJoin和SelectForFastIndexing参数。好的示例在IN / DLC / InventoryItem.cs和PO / DLC / POOrder.cs的CodeRepository文件夹中。
答案 1 :(得分:0)
这很想发表评论,所以这些只是更多的问题/尝试...
如果您想给dac一个缓存名称,可以使用DAC上的PXCacheName属性,就像这样...
[Serializable]
[PXCacheName("My Cache Name")]
public class MyDataTable: IBqlTable
{
//...
}
示例new Type [] {typeof(MyDataTable.MasterDataID),typeof(MyDataTable.MySearchableDataField)}中的第一组值将是显示在“:”值中的值。我假设它们在表中具有值,并假设它们使用例如MyDataTable.masterDataID的小写字段名称指向字段名称的抽象类。
我已经设置了可搜索的自定义DAC,并且确实需要反复试验才能看到显示的内容和有意义的内容。
不确定是否重要,但是那些字段(MasterDataID和MySearchableDataField)是字符串字段吗? 尝试其他字段(字符串字段)进行确认?我确实使用了日期字段并且可以使用,但是对于您看到的空白的搜索字段却没有。
我认为对searchable属性的更改也需要重建索引。我将从尝试不同的字符串字段开始,以首先确认这一点。
没有什么不同,但我使用PX.Objects.SM.SearchCategory.IN代替了所有