2016-08-08 13 views
-2

Ich habe benutzerdefinierte Felder Terms und Ship via in Opportunity hinzugefügt und wenn ich den Wert an den Kundenauftrag übergebe. Sie wird durch die Standardbegriffe & ersetzt.So überschreiben Sie die Aktualisierung der Standardbedingungen aus der Konvertierung von Opportunity in Kundenauftrag

Der folgende Code ich den Pass, den Wert von Opportunity-bin mit auf Kundenauftrag

public virtual IEnumerable CreateSalesOrder(PXAdapter adapter) 
{ 

    PXGraph.InstanceCreated.AddHandler<SOOrderEntry>((graph) => 
    { 
     graph.RowInserted.AddHandler<SOOrder>((cache, args) => 
     { 
      var soOrder = (SOOrder)args.Row; 
      var soOrderExt = PXCache<SOOrder>.GetExtension<SOOrderExtNV>(soOrder); 

      foreach (CROpportunity opportunity in adapter.Get()) 
      { 
       OppertunityExtn extOpprow = PXCache<CROpportunity>.GetExtension<OppertunityExtn>(opportunity); 
       soOrderExt.UsrOpportunityID = opportunity.OpportunityID; 
       soOrderExt.UsrCustomerContact = opportunity.ContactID; 
       soOrderExt.UsrIsEmbroidery = extOpprow.UsrIsEmbroidery; 
       soOrderExt.UsrIsPromo = extOpprow.UsrIsPromo; 
       soOrderExt.UsrIsBlank = extOpprow.UsrIsBlank; 
       soOrderExt.UsrIsService = extOpprow.UsrIsService; 
       soOrderExt.UsrIsDigital = extOpprow.UsrIsDigital; 
       soOrderExt.UsrIsSample = extOpprow.UsrIsSample; 
       soOrderExt.UsrIsScreenPrint = extOpprow.UsrIsScreenPrint; 
       soOrderExt.UsrIsRushJob = extOpprow.UsrIsRushJob; 
       soOrderExt.UsrHardDate = extOpprow.UsrHardDate; 
       soOrderExt.UsrIsInHandsDate = extOpprow.UsrIsInHandsDate; 
       soOrderExt.UsrEventDate = extOpprow.UsrEventDate; 
       soOrderExt.UsrEventDescription = extOpprow.UsrEventDescription; 
       soOrderExt.UsrShipDate = extOpprow.UsrShipDate; 
       soOrderExt.UsrHoldUntil = extOpprow.UsrHoldUntil; 
       soOrderExt.UsrExactQuantityNeeded = extOpprow.UsrExactQuantityNeeded; 
       soOrderExt.UsrIsNewCustomer = extOpprow.UsrIsNewCustomer; 
       soOrderExt.UsrBatchShip = extOpprow.UsrBatchShip; 
       soOrderExt.UsrInternalRef = extOpprow.UsrInternalRef; 
       soOrder.ShipVia = extOpprow.UsrShipVia; 
       soOrder.TermsID = extOpprow.UsrTerms; 
       soOrder.FreightAmt = extOpprow.UsrFreightEstimate; 

      } 
     }); 
     graph.RowPersisting.AddHandler<SOOrder>((cache, args) => 
      { 
       var soOrder = (SOOrder)args.Row; 
       foreach (CROpportunity opportunity in adapter.Get()) 
       { 
        OppertunityExtn extOpprow = PXCache<CROpportunity>.GetExtension<OppertunityExtn>(opportunity); 
        soOrder.TermsID = extOpprow.UsrTerms; 
       } 

      }); 
    }); 
    return Base.createSalesOrder.Press(adapter); 
} 
+0

Ihre Frage ist überhaupt nicht klar. Ihr Problem besteht darin, dass beim Konvertieren einer Verkaufschance in einen Kundenauftrag die benutzerdefinierten Felder (UsrTerms und ShipVia) auf die Standardwerte zurückgesetzt werden, anstatt die Werte aus Opportunity beizubehalten? –

Antwort

2

TermsID wird ersetzt, nachdem SOOrder Zeile eingefügt wird. Sie könnten unter dem Code OpportunityMaint.DoCreateSalesOrder beziehen. Deshalb wird es durch den Wert ersetzt, der auf Kundenebene festgelegt wurde.

enter image description here

Sie sollten wie unten Logik implementieren. Und Sie könnten einen ähnlichen Ansatz auch für Benutzerfelder verwenden.

public class OpportunityMaintPXExt : PXGraphExtension<OpportunityMaint> 
{ 
    public override void Initialize() 
    { 
     PXGraph.InstanceCreated.AddHandler<SOOrderEntry>((graph) => 
     { 
      graph.RowUpdating.AddHandler<SOOrder>((sender, e) => 
      { 
       SOOrder soData = e.NewRow as SOOrder; 
       if (soData != null) 
       { 
        if (sender.GetStatus(soData) == PXEntryStatus.Inserted) 
        { 
         CROpportunity opData = Base.Opportunity.Current; 
         CROpportunityPXExt opDataExt = PXCache<CROpportunity>.GetExtension<CROpportunityPXExt>(opData); 

         soData.TermsID = opDataExt.UsrTermsID; 
         soData.ShipVia = opDataExt.UsrShipVia; 
        } 
       } 
      }); 
     }); 
    } 
} 
+0

Andere Benutzerfelder funktionieren in RowInserted Event einwandfrei und nur Terms & ShipVia hatten ein Problem. Ich dachte, es wird während Rowpersisting Event aktualisiert und es hat nicht funktioniert. –