2017-12-31 108 views
0

カスタムテーブルItemBaseDocumentのRevisionDateReceivedの前にUsrDateNotifiedがあるARTranテーブルのUsrDateNotifiedというカスタムフィールドを更新するカスタム処理画面があります。 ARTranのInventoryIDにリンクされているItemBaseDocumentテーブルのUsrDateNotifiedフィールドも更新する必要があります。以下の現在のコードは、ARTranテーブルの更新を検証しますが、選択したARTranレコードの関連するItemBaseDocumentも更新する方法には苦労しています。このシナリオの正しいアプローチは何ですか?Acumatica処理画面ARTranカスタムフィールドを更新するカスタムテーブルフィールドも更新する必要があります

using System; 
using System.Collections; 
using System.Linq; 
using PX.Data; 
using PX.SM; 
using PX.Objects.AR; 
using PX.Objects.CR; 
using PX.Objects.IN; 

namespace DocCenter 
{ 
    public class UpdateLastNotified : PXGraph<UpdateLastNotified> 
    { 
    public PXFilter<UpdateLastNotifiedFilter> MasterView; 
    public PXCancel<UpdateLastNotifiedFilter> Cancel; 


    [PXFilterable] 

    public PXSelect<ARTran> DetailsView; 

public UpdateLastNotified() 
    { 
    Cancel.SetCaption("Clear Filter"); 
    this.DetailsView.Cache.AllowInsert = false; 
    this.DetailsView.Cache.AllowDelete = false; 
    this.DetailsView.Cache.AllowUpdate = true; 
    } 



protected virtual IEnumerable detailsView() 
{ 
UpdateLastNotifiedFilter filter = MasterView.Current as UpdateLastNotifiedFilter; 
PXSelectBase<ARTran> cmd = new PXSelectJoinOrderBy<ARTran, 
    InnerJoin<InventoryItem, On<ARTran.inventoryID, Equal <InventoryItem.inventoryID>>, 
    InnerJoin<ItemBaseDocument, On<InventoryItemExt.usrDocumentNumber, Equal<ItemBaseDocument.baseDocumentCode>>, 
    InnerJoin<Contact, On<ARTranExt.usrContactID, Equal<Contact.contactID>>>>>, 
    OrderBy<Asc<ARTran.tranDate>>>(this);  

cmd.WhereAnd<Where<ContactExt.usrNotificationPriority, 
Equal<Current<UpdateLastNotifiedFilter.notificationPriority>>>>(); 


cmd.WhereAnd<Where<ARTranExt.usrDateNotified, 
Less<ItemBaseDocument.revisionDateReceived>>>();  


if (filter.BaseDocumentCode != null) 
{ 
cmd.WhereAnd<Where<InventoryItemExt.usrDocumentNumber, 
Equal<Current<UpdateLastNotifiedFilter.baseDocumentCode>>>>(); 
} 

    return cmd.Select(); 
} 

public PXAction<UpdateLastNotifiedFilter> Process; 
[PXProcessButton] 
[PXButton(CommitChanges=true)] 
[PXUIField(DisplayName = "Process")] 
protected virtual IEnumerable process(PXAdapter adapter) 
{ 

    PXLongOperation.StartOperation(this, delegate() 
    { 
    foreach(ARTran tran in DetailsView.Select()) 
    { 
    if (tran.Selected==true) 
     { 
     ARTranExt tranExt = tran.GetExtension<ARTranExt>(); 
     ARInvoiceEntry tranEntry = new ARInvoiceEntry(); 
     tranExt.UsrDateNotified = MasterView.Current.DateNotified; 
     tranEntry.Transactions.Update(tran); 
     tranEntry.Save.PressButton(); 



     } 

    } 


    } 

     ); 
return adapter.Get(); 
} 




    [Serializable] 
    public class UpdateLastNotifiedFilter : IBqlTable 
    { 

public static class NotificationPriority 
{ 
    public const string None = "N"; 
    public const string Alert = "A"; 
    public const string Express = "E"; 
    public const string Shipment = "P"; 
    public const string Subscription = "S"; 
} 


     #region NotificationPriority 
     public abstract class notificationPriority : PX.Data.IBqlField 
     { 
     } 

     [PXDBString(1, IsFixed = true)] 
     [PXDefault(NotificationPriority.None)] 
     [PXUIField(DisplayName = "Notification Type")] 
     [PXStringList(
      new string[] 
     { 
     NotificationPriority.None, 
     NotificationPriority.Alert, 
     NotificationPriority.Express, 
     NotificationPriority.Shipment, 
     NotificationPriority.Subscription 
     }, 
     new string[] 
     { 
     "None", 
     "Alert", 
     "Express", 
     "Shipment", 
     "Subscription" 
     })] 


     #endregion  





     #region BaseDocumentID 
     public abstract class baseDocumentCode : PX.Data.IBqlField 
     { 
     } 

[PXString(50)] 
[PXUIField(DisplayName="Document Number")] 
[PXSelector(typeof(DocCenter.ItemBaseDocument.baseDocumentCode))]  

     public virtual String BaseDocumentCode 
     { 
     get; 

     set; 

     } 
     #endregion  



     #region DateNotified 
     public abstract class dateNotified : PX.Data.IBqlField 
     { 
     } 
     [PXDBDate()] 
     [PXDefault(typeof(AccessInfo.businessDate))] 
     [PXUIField(DisplayName = "Date Notified")] 
     public DateTime? DateNotified { get; set; } 
     #endregion 




    } 




    } 
} 

答えて

0

最も適切なのは、ItemBaseDocumentを選択するビューを作成することです。あなたのあなたのアクションボタンのforループで

PXSelect<ItemBaseDocument> ViewName; 

、新しいItemBaseDocumentオブジェクトを作成し、対応するItemBaseDocument行エントリに等しい、それを設定したいと思うでしょう。このオブジェクトの日付を更新することができます。また、Save.PressButton()アクションを実行すると、そのエントリへの更新も保存されます。

foreach(ARTran tran in DetailsView.Select()) 
{ 
if (tran.Selected==true) 
    { 
    ARTranExt tranExt = tran.GetExtension<ARTranExt>(); 
    ARInvoiceEntry tranEntry = new ARInvoiceEntry(); 
    tranExt.UsrDateNotified = MasterView.Current.DateNotified; 
    tranEntry.Transactions.Update(tran); 
    tranEntry.Save.PressButton(); 

    //Target Added Code 
    ItemBaseDocument doc = PXSelect<ItemBaseDocument, Where<ItemBaseDocument.inventoryID, 
    Equal<Required<ARTran.inventoryID>>>>.Select(tran.InventoryID); 
    doc.UsrDateNotified = MasterView.Current.DateNotified; 

    } 

} 

免責事項:上記の追加コードに構文エラーがある可能性があります。もしあれば教えてください。私はそれを修正します。

+0

私が追加したコードを実行した後にSave.PressButton()を実行したいと思うかもしれません。 –

関連する問題