2017-07-11 1 views
0

In der Fußzeile der Kundenauftragsdokumente. Es zeigt die Verfügbarkeit des Produkts an.Wie wird die Produktverfügbarkeit in Opportunity Products Grid footer angezeigt?

enter image description here

wie diese in der Opportunity-Produkte Netz zu tun? Mehr noch, wie erzwingen Sie es in der Fußzeile anstelle einer einfachen Rasterspalte angezeigt werden? Gibt es solche Attribute?

Danke für die Antworten.

enter image description here

+0

Gelegenheit Produkte Gitter? Wo ist dieses Gitter? Welcher Eintrag? –

+0

Organisation> Kundenverwaltung> Arbeitsbereich> Eingabe> Opportunities (Klicken Sie auf vorhanden/neu zu öffnen Seite CR304000)> Produkte Registerkarte – Brendan

Antwort

4

Wenn wir Kundenauftrag, die Auftragsposition erhält seinen Wert von LSSOLine während Availabilty_FieldSelecting vergleichen. Das Kabel auf der Seite befindet sich auf der Registerkarte über StatusField="Availability". Wir können etwas Ähnliches tun, indem wir ein ungebundenes Erweiterungsfeld hinzufügen und dann während eines Felds den Wert ausfüllen. Eine Alternative wäre, eine LSCROpportunityProducts Klasse zu implementieren, die LSSelect ähnlich LSSoLine (eine besser bevorzugte Lösung) erbt. Um dies einfach zu halten und mich darauf zu konzentrieren, nur das Feld zum Anzeigen von Text zu erhalten, verwende ich ein Erweiterungsfeld und ein einfaches Feld, das im Erweiterungsdiagramm für Opportunity auswählt.

(1) In einer dac Erweiterung schaffen ein ungebundenes Feld (MyAvailability ist das Beispiel, Feld): das neue Feld

[PXTable(typeof(CROpportunityProducts.cROpportunityID), typeof(CROpportunityProducts.cROpportunityProductID), IsOptional = true)] 
[Serializable] 
public class CROpportunityProductsMyExtension : PXCacheExtension<CROpportunityProducts> 
{ 
    #region MyAvailability 
    public abstract class myAvailability : PX.Data.IBqlField 
    { 
    } 
    protected string _MyAvailability; 
    [PXString(IsUnicode = true)] 
    [PXUIField(DisplayName = "Product Availability", Enabled = false)] 
    public virtual string MyAvailability 
    { 
     get 
     { 
      return this._MyAvailability; 
     } 
     set 
     { 
      this._MyAvailability = value; 
     } 
    } 
    #endregion 
} 

(2) Auf die Möglichkeit, Produkte Registerkarte Draht auf, als den Gitterstatuswert durch Festlegen der Eigenschaft StatusField. Die Seite Bedürfnisse modifiziert diesen Wert hinzufügen und etwa so aussehen sollte, wenn hinzugefügt (Bildschirmanpassung in Ihrem Projekt erfordert -> Aktionen bearbeiten ASPX und ProductsGrid finden in Ihrem StatusField und Wert einzufügen):

<px:PXGrid ID="ProductsGrid" SkinID="Details" runat="server" Width="100%" 
Height="500px" DataSourceID="ds" ActionsPosition="Top" BorderWidth="0px" 
SyncPosition="true" StatusField="MyAvailability"> 

(3) nun in einer Diagramm Erweiterung füllen Sie das Feld:

bearbeitet: die Verwendung von Current<> immer enthält nicht die richtige aktuell markierte Zeile in der Benutzeroberfläche. Auf Required<> basierend auf der PXFieldSelectingEventArgs.Row und die Ergebnisse sind korrekt für mehrere Zeilen in der Registerkarte Produkte geschaltet.

public class CROpportunityMaintMyExtension : PXGraphExtension<OpportunityMaint> 
{ 
    public virtual void CROpportunityProducts_MyAvailability_FieldSelecting(PXCache sender, PXFieldSelectingEventArgs e) 
    { 
     var row = (CROpportunityProducts) e.Row; 
     if (row == null) 
     { 
      e.ReturnValue = string.Empty; 
      return; 
     } 

     INLocationStatus locationStatus = PXSelectGroupBy<INLocationStatus, 
      Where<INLocationStatus.inventoryID, Equal<Required<CROpportunityProducts.inventoryID>>, 
       And2<Where<INLocationStatus.subItemID, Equal<Required<CROpportunityProducts.subItemID>>, 
         Or<Not<FeatureInstalled<PX.Objects.CS.FeaturesSet.subItem>>>>, 
        And<Where<INLocationStatus.siteID, Equal<Required<CROpportunityProducts.siteID>>, 
         Or<Required<CROpportunityProducts.siteID>, IsNull>>>>>, 
      Aggregate<Sum<INLocationStatus.qtyOnHand, Sum<INLocationStatus.qtyAvail>>> 
     >.Select(sender.Graph, row.InventoryID, row.SubItemID, row.SiteID, row.SiteID); 

     // Need to convert to transaction UOM... (this is always base units) 

     decimal? qtyOnHand = locationStatus?.QtyOnHand; 
     decimal? qtyAvail = locationStatus?.QtyAvail; 

     e.ReturnValue = $"Qty On hand = {qtyOnHand.GetValueOrDefault()} ; Qty Avail = {qtyAvail.GetValueOrDefault()}"; 
    } 
} 

Die Ergebnisse:

enter image description here

+0

Danke für Ihr detailliertes Beispiel Brendan. Ich habe Ihren Code im _FieldSelecting-Ereignis kopiert. Und es zeigt jetzt etwas in der Rasterfußzeile an. Wenn es jedoch mehr als ein Produkt gibt. Der Wert ändert sich nicht. Du denkst es könnte da was in der locationStatus Auswahl sein? – Rick

+0

Ja, es scheint, dass die Verwendung von Current <> in der BQL in FieldSelecting nicht immer korrekt ist. Ich werde die Antwort aktualisieren, wie ich es für mehrere Zeilen arbeiten. – Brendan

Verwandte Themen