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:
Gelegenheit Produkte Gitter? Wo ist dieses Gitter? Welcher Eintrag? –
Organisation> Kundenverwaltung> Arbeitsbereich> Eingabe> Opportunities (Klicken Sie auf vorhanden/neu zu öffnen Seite CR304000)> Produkte Registerkarte – Brendan