2017-07-11 22 views
0

受注伝票でグリッドフッターを文書化します。製品の可用性を表示します。オポチュニティ製品グリッドで同じことを行うにはどのようにオポチュニティ製品のグリッドフッターに製品の可用性を表示する方法は?

enter image description here

? さらに、簡単なグリッド列の代わりにフッター に表示するように強制しますか?そのような属性はありますか?

返信いただきありがとうございます。

enter image description here

+0

機会製品グリッド?このグリッドはどこですか?どのエントリ? –

+0

組織>顧客管理>作業領域>入力>機会(既存のCR304000を開くには新規/新規開始)>製品タブ – Brendan

答えて

4

我々は受注に比べると、販売注文ラインがAvailabilty_FieldSelecting中にLSSOLineからその値を取得します。ページ上のワイヤーアップはStatusField="Availability"でタブに表示されます。バインドされていない拡張フィールドを追加し、フィールド内で値の塗りつぶしを選択することで同様のことを行うことができます。別の方法としてはを継承するLSCROpportunityProductsクラスを実装することがあります。これはLSSoLine(より良い解決策です)に似ています。これを単純にして、フィールドにテキストを表示することに重点を置くために、私は拡張フィールドと機会のために拡張グラフで選択する単純なフィールドを使用します。

(1) DAC拡張において、(MyAvailabilityは、例えばフィールドである)結合していないフィールドを作成する:

[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)機会製品タブ、ワイヤアップ新しいフィールドとしてグリッドステータス値は、プロパティStatusFieldを設定します。この値を追加するとを追加したときに次のようになります変更されたページのニーズ(プロジェクトの画面のカスタマイズが必要です - >アクション編集ASPXとあなたのSTATUSFIELDと価値に貼り付けるProductsGridを探します)

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

(3)今グラフ拡張フィールドを移入:

編集Current<>の使用は、常にUIに正しい現在強調表示された行が含まれていません。 PXFieldSelectingEventArgs.Rowに基づいてRequired<>に切り替えられ、結果は[商品]タブの複数の行に対して正しく表示されます。

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()}"; 
    } 
} 

結果:

enter image description here

+0

詳細な例Brendanありがとうございます。 _FieldSelectingイベントでコードをコピーしました。そして今、グリッドのフッターに何かを表示しています。しかし、複数の製品がある場合。値は変化していません。 locationStatusの選択肢に何かがあるかもしれないと思いますか? – Rick

+0

はい、FieldSelectingのBQLでCurrent <>を使用すると常に正しいとは思われません。私は複数の行のために働いているように私は答えを更新します。 – Brendan

関連する問題