2017-02-18 2 views
0

Wir suchen eine Anpassung SalesLineType_Sales, wo wir Validierung für "SalesQty" in "pdsMRCCheckRestricted" Methode unten hinzufügen müssen.SalesLineType_Verkaufserweiterung möglich?

Jetzt wissen wir, dass Anpassungen nicht favorisiert werden, also suchen Sie nach einem Vorschlag oder einer Best Practice, um es richtig zu machen.

1- Wir können die "SalesLineType_Sales" anpassen - aber ist diese Best Practice für Dynamics 365 für Operationen? 2- Weitere mögliche Optionen?

Alle Kommentare werden sehr geschätzt!

public boolean pdsMRCCheckRestricted() 
{ 
    boolean     isRestricted = false; 
    AddressCountryRegionId deliveryCountryId; 
    AddressStateId   deliveryStateId; 

    deliveryCountryId = salesLine.deliveryAddress().CountryRegionId ? 
     salesLine.deliveryAddress().CountryRegionId : salesTable.deliveryAddress().CountryRegionId; 

    deliveryStateId = salesLine.deliveryAddress().State ? 
     salesLine.deliveryAddress().State : salesTable.deliveryAddress().State; 

    if (salesLine.SalesQty > 0) 
    { 

     isRestricted = PdsMRCRestrictedListByItem::checkItemRestrictedForState(
             deliveryCountryId, 
             deliveryStateId, 
             salesLine.ItemId); 
     if (!isRestricted) 
     { 
      isRestricted = 
       PdsMRCRestrictedListByItem::checkItemRestrictedForCountry(
              deliveryCountryId, 
              salesLine.ItemId); 
     } 

     if (isRestricted) 
     { 
      error(strFmt("@PDS908", salesLine.ItemId)); 
     } 
    } 

    return isRestricted; 
} 

Antwort

0

In Dynamics 365 für Operationen der bevorzugte Mechanismus für Anpassungen an bestehenden Objekten ist Event-Handler zu verwenden, sondern auf verschiedene Ereignisse zu reagieren als zwingende Methoden auf Tabellen, Formulare und Klassen.

[PostHandlerFor(classStr(SalesLineType_Sales), methodstr(SalesLineType_Sales, pdsMRCCheckRestricted))] 
public static void PostPdsMRCCheckRestricted(XppPrePostArgs args) 
{ 
    boolean  returnValue = args.getReturnValue(); 
    int   infologLine; 
    ; 

    //Suppress error message 
    if (returnValue) 
    { 
     infologLine = Global::infologLine(); 
     infolog.clear(infologLine - 1); 
    } 

    //Add your validation here 

    args.setReturnValue(returnValue);   
} 
+0

Danke alacsandr für die Antwort. Was würde mit Infolog passieren? Wenn das Ergebnis wahr ist, wird der Fehler protokolliert. if (isRestricted) { Fehler (strFmt ("@ PDS908", salesLine.ItemId)); } –

+0

Ich habe die Antwort aktualisiert, bitte werfen Sie einen Blick. –