2017-12-31 274 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를 선택하는보기를 만드는 것입니다. 에서

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()을 실행하려고 할 수도 있습니다. –