私はINReceiptEntryに拡張グラフを持っています。カスタムDACのビューをセットアップして、キャッシュを生成してオブジェクトを挿入するようにしました。キャッシュに挿入するオブジェクトの1つを生成した後、ViewName.Insert(Object)を使用します。 (同じ結果を持つViewName.Cache.Insert(Object)も使用します)をグラフ拡張のRowPersistingハンドラ内で使用します。これは、通常、データ項目をDACに対応するデータベースデータテーブルに格納するが、DBには何も格納されない。代わりにifステートメントが発生し、オブジェクトが挿入されていないことを示すポップアップが表示されます。ここに私のコード:データベースに保存されていないグラフエクステンションのキャッシュに挿入されたレコード
public class INReceiptEntry_Extension : PXGraphExtension<INReceiptEntry>
{
public PXSelect<EMPWorkOrderINRegister> WorkOrderINRegisters;
#region Event Handlers
protected void INRegister_RowPersisting(PXCache cache, PXRowPersistingEventArgs e)
{
var row = (INRegister)e.Row;
var rowExt = PXCache<INRegister>.GetExtension<INRegisterExt>(row);
//Get Target Objects
foreach (INTranSplit split in PXSelect<INTranSplit, Where<INTranSplit.refNbr,
Equal<Required<INRegister.refNbr>>, And<INTranSplit.tranType, Equal<TranType>>>>
.Select(Base, Base.CurrentDocument.Current.RefNbr))
{
EMPWorkOrderINRegister WOINR = new EMPWorkOrderINRegister();
WOINR.Woid = rowExt.Usrwoid;
WOINR.RefNbr = split.RefNbr;
WOINR.SplitLineNbr = split.SplitLineNbr;
if (WorkOrderINRegisters.Insert(WOINR) == null)
{
Base.CurrentDocument.Ask("Did not insert WOINR:" + WOINR.RefNbr.ToString() + ", " + WOINR.SplitLineNbr.ToString(), MessageButtons.OK);
return;
}
}
}
#endregion
}
これはカスタムキャッシュに挿入されていない何か?グラフ拡張を使用するか、Persisting関数でこのキャッシュ挿入を実行するのは、なぜこれが失敗するのかと関係がありますか?リクエストにより、
、DAC:
using System;
using PX.Data;
using PX.Objects.IN;
namespace Manufacturing
{
[Serializable]
public class EMPWorkOrderINRegister : IBqlTable
{
#region Id
[PXDBIdentity()]
[PXUIField(DisplayName = "Id")]
public int? Id { get; set; }
public class id : IBqlField { }
#endregion
#region Woid
[PXDBInt()]
[PXUIField(DisplayName = "Woid")]
public int? Woid { get; set; }
public class woid : IBqlField { }
#endregion
#region RefNbr
[PXDBString(15, IsUnicode = true, InputMask = "")]
[PXUIField(DisplayName = "Receipt Number")]
public string RefNbr { get; set; }
public class refNbr : IBqlField { }
#endregion
#region SplitLineNbr
[PXDBInt()]
[PXUIField(DisplayName = "Split Line Nbr")]
public int? SplitLineNbr { get; set; }
public class splitLineNbr : IBqlField { }
#endregion
#region AvailableSNs
[PXString()]
[PXUIField(DisplayName = "Available SNs")]
public string AvailableSNs { get; set; }
public class availableSNs : IBqlField { }
#endregion
[PXString()]
[PXDBScalar(typeof(Search<INTranSplit.lotSerialNbr, Where<INTranSplit.refNbr, Equal<EMPWorkOrderINRegister.refNbr>,
And<INTranSplit.splitLineNbr, Equal<EMPWorkOrderINRegister.splitLineNbr>>>>))]
public string SelectedSN { get; set; }
public class selectedSN : IBqlField { }
}
}
DACのキーをチェックしましたか?また、フィールドが 'PXDB'属性で装飾されているかどうか?ここでDACのコードを投稿できますか? – Hybridzz
私はDACコードを追加しました。 –
[PXDBIdentity(IsKey = true)]を@RuslanDevとして設定しようとしました。 – Hybridzz