Ich habe ProductLine und ProductLineItem DACs. Eine Produktlinie enthält eine Sammlung von zugehörigen Inventarartikeln.PXSelector mit Suche BQL verhindert das Löschen von Dateien
public class ProductLine : IBqlTable
{
[PXDBIdentity()]
public virtual int? LineID { get; set; }
public abstract class lineID : IBqlField { }
[PXDBString(50, IsKey = true)]
[PXUIField(DisplayName = "Line ID")]
[PXDefault]
[PXSelector(typeof(ProductLine.lineCD),
typeof(ProductLine.lineCD),
typeof(ProductLine.description))]
public virtual string LineCD { get; set; }
public abstract class lineCD : IBqlField { }
// ...
}
public class ProductLineItem : IBqlTable
{
[PXDBInt(IsKey = true)]
[PXDBDefault(typeof(ProductLine.lineID))]
[PXParent(typeof(Select<ProductLine,
Where<ProductLine.lineID,
Equal<Current<ProductLineItem.lineID>>>>))]
public virtual int? LineID { get; set; }
public abstract class lineID : IBqlField { }
[PXDBInt(IsKey = true)]
[PXUIField(DisplayName = "Inventory ID")]
[PXSelector(
typeof(Search2<InventoryItem.inventoryID,
LeftJoin<ProductLineItem,
On<ProductLineItem.lineID, Equal<Current<ProductLineItem.lineID>>,
And<ProductLineItem.inventoryID, Equal<InventoryItem.inventoryID>>>>,
Where<InventoryItem.itemStatus, Equal<InventoryItemStatus.active>,
And<ProductLineItem.lineID, IsNull>>>),
new Type[] {
typeof(InventoryItem.inventoryCD),
typeof(InventoryItem.descr)
},
SubstituteKey = typeof(InventoryItem.inventoryCD))]
public virtual int? InventoryID { get; set; }
public abstract class inventoryID : IBqlField { }
// ...
}
Diese werden dann in einer sehr einfachen FormDetail-Einstiegsseite implementiert.
public class ProductLineEntry : PXGraph<ProductLineEntry, ProductLine>
{
public PXSelect<ProductLine> ProductLines;
public PXSelect<ProductLineItem,
Where<ProductLineItem.lineID,
Equal<Current<ProductLine.lineID>>>> ProductLineItems;
}
Der PXSelector auf der ProductLineItem.inventoryID bietet aktive Elemente nicht bereits auf die aktuelle Produktlinie hinzugefügt. Wenn der Selector jedoch wie folgt geschrieben wird, wird beim Versuch, ein Element aus dem Raster zu löschen, der rote "x" Indikator angezeigt, aber der record is never actually removed.
Ändern der PXSelector zu einer grundlegen eine ohne das Search2 <> ...
[PXSelector(typeof(InventoryItem.inventoryID),
typeof(InventoryItem.inventoryCD),
typeof(InventoryItem.descr),
SubstituteKey = typeof(InventoryItem.inventoryCD))]
... löschen die Datensätze normal.
Wie kann ich eine Suche <> BQL im Selector verwenden und trotzdem Datensätze aus dem Details Grid löschen?
Danke Ruslan. Sollte jemand anderes auf diese Antwort verweisen, werde ich feststellen, dass der Beispielcode einen kleinen Fehler hat, da der letzte Operator nicht Current <> verwenden sollte und natürlich mit InventoryID anstelle von lineID verglichen wird: 'Or> ' –
@NickolasHook, danke, dass du das herausgibst - Ich habe den Code aktualisiert, um stattdessen' ProductLineItem.inventoryID' zu verwenden. Ich glaube jedoch, dass die Verwendung von Current <> noch erforderlich ist. Außerdem würde ich vorschlagen, ** AutoRefresh ** auf *** True *** für den PXSelector-Eingang in Aspx zu setzen, um sicherzustellen, dass der Inhalt des Suchrasters für den ausgewählten Datensatz angezeigt wird. – RuslanDev