私はProductLineおよびProductLineItem DACを持っています。製品ラインには、関連するインベントリアイテムのコレクションが含まれています。PXSelectorで検索BQLを使用すると、レコードの削除が防止されます
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 { }
// ...
}
これらは、非常に単純なFormDetailエントリページで実装されます。
public class ProductLineEntry : PXGraph<ProductLineEntry, ProductLine>
{
public PXSelect<ProductLine> ProductLines;
public PXSelect<ProductLineItem,
Where<ProductLineItem.lineID,
Equal<Current<ProductLine.lineID>>>> ProductLineItems;
}
ProductLineItem.inventoryIDのPXSelectorは、現在の製品ラインにまだ追加されていないアクティブなアイテムを提供します。しかし、セレクタがこのように書かれている場合、グリッドからアイテムを削除しようとすると、赤い "x"インジケータが表示されますが、record is never actually removedになります。 Search2 <ことなく、より基本的なものにPXSelectorを変更
> ...
[PXSelector(typeof(InventoryItem.inventoryID),
typeof(InventoryItem.inventoryCD),
typeof(InventoryItem.descr),
SubstituteKey = typeof(InventoryItem.inventoryCD))]
...レコードが正常に削除します。
セレクタでSearch <> BQLを使用しても、詳細グリッドからレコードを削除するにはどうすればよいですか?
はあなたにルスランありがとうございます。他の誰かがこの回答を参照する必要がありますが、提供されたサンプルコードには、最後の演算子がCurrent <>を使用すべきではなく、もちろんlineIDの代わりにinventoryIDと比較されるという小さな誤差があります。 'Or> >> –
@NickolasHook、これを指摘していただきありがとうございます。代わりに 'ProductLineItem.inventoryID'を使用するようにコードを更新しました。しかし、私は現在の<>演算子の使用がまだ必要であると信じています。また、** AutoRefresh **を*** True ***に設定して、AspxのPXSelector入力で、検索グリッドの内容が選択したレコードに表示されるようにすることをお勧めします。 – RuslanDev