2016-09-07 8 views
0

Ich habe einen Client, der ein zusätzliches Notizfeld zu einem Gitter hinzufügen möchte. Wenn dies nicht möglich ist, gibt es eine Möglichkeit, ein großes Textfeld in einem Raster zu haben, das ein Popup-Fenster zum Bearbeiten der großen Menge an Text in diesem Feld verwendet?Hinzufügen eines zusätzlichen Notizfelds zur Gitterlinie

Priorität: 1.) Fügen Sie nach Möglichkeit ein zusätzliches Notizfeld in das Raster ein. 2.) Failing # 1, gibt es eine Möglichkeit, ein Popup-Fenster zum Bearbeiten eines großen Standard-Benutzer Textfelds hinzuzufügen.

Antwort

0

Ich glaube, die Antwort auf Ihre Frage Nummer 1 ist nein. Wenn das Gitter bereits eine Notiz hat, kann es keine andere haben. Ich hatte diese Frage schon mal kommen.

Für # 2 sollten Sie in der Lage sein, ein intelligentes Panel zu machen, das Ihr Feld anzeigt. Verwenden Sie ein PXTextEdit, und richten Sie eine neue Ansicht für das Panel ein, die basierend auf Ihrer ausgewählten/aktuellen Zeile zeigt.

Um ein Smart-Panel (Popup-Panel) hinzuzufügen, benötigen Sie eine Handvoll Dinge an Ort und Stelle. Ich bevorzuge die Verwendung von AEF mit Graph- und Tabellenerweiterungen. Im T200/T300-Schulungsmaterial finden Sie diese Themen. In meinem Beispiel füge ich der Kundenauftragsseite die Notizfunktion hinzu. Ich habe den Großteil der Logik aus dem vorhandenen "PO Link" -Knopf und -Panel kopiert, bei dem es sich um die POSupplyOK-PXAction und die aktuelle Postindikatorsicht handelt (Seite SO301000).

Zuerst müssen Sie Ihr neues Feld, das wir in der Vertriebslinie als Erweiterung Tabelle/Feld hinzufügen werden:

[PXTable(typeof(SOLine.orderType), typeof(SOLine.orderNbr), typeof(SOLine.lineNbr), IsOptional = true)] 
public class SOLineExtension : PXCacheExtension<SOLine> 
{ 
    #region XXMyNote 
    public abstract class xXMyNote : PX.Data.IBqlField 
    { 
    } 
    protected string _XXMyNote; 
    [PXDBString] 
    [PXUIField(DisplayName = "My Note")] 
    public virtual string XXMyNote 
    { 
     get 
     { 
      return this._XXMyNote; 
     } 
     set 
     { 
      this._XXMyNote = value; 
     } 
    } 
    #endregion 
} 

Dann brauchen wir eine neue Graphen Erweiterung zu erstellen, um die Ansicht für das Panel hinzuzufügen und die PXAction für die Schaltfläche zum Öffnen des Panels.

public class SOOrderEntryExtension : PXGraphExtension<SOOrderEntry> 
{ 

    public PXSelect<SOLine, 
     Where<SOLine.orderType, Equal<Current<SOLine.orderType>>, 
      And<SOLine.orderNbr, Equal<Current<SOLine.orderNbr>>, 
       And<SOLine.lineNbr, Equal<Current<SOLine.lineNbr>>>>>> MyPanelView; 

    public PXAction<SOOrder> myNoteAction; 
    [PXUIField(DisplayName = "Add Note", MapViewRights = PXCacheRights.Select, MapEnableRights = PXCacheRights.Update)] 
    [PXButton(ImageKey = PX.Web.UI.Sprite.Main.DataEntryF)] 
    protected virtual IEnumerable MyNoteAction(PXAdapter adapter) 
    { 
     if (Base.Transactions.Current != null && 
      MyPanelView.AskExt() == WebDialogResult.OK) 
     { 
      //extra stuff here if needed when OK is pushed 
     } 

     return adapter.Get(); 
    } 
} 

Jetzt müssen Sie die Bestellseite "bearbeiten". Sie müssen Ihre Änderungen in ein Anpassungsprojekt übernehmen und ich gehe normalerweise direkt in Visual Studio unter Site \ pages \ in diesem Beispiel. Dann kommen Sie zurück und in meinem Code in die Anpassung Projekt einfügen, indem Sie das Projekt öffnen und die folgenden Schritte ausführen:

  1. Klicken Sie auf Bildschirmen und das Zeichen + einen neuen Bildschirm
  2. Geben Sie SO301000 hinzuzufügen und speichern
  3. klicken Sie auf dem SO301000 Hyperlink, um das Layout-Editor für Kundenauftrag zu öffnen
  4. klicken Sie auf Aktionen> Bearbeiten ASPX
  5. Einfügen in Ihren Änderungen (unten erwähnt)

In der SO301000 Seite fügen Sie folgendes:

[1] Fügen Sie Ihre DS Rückruf-Befehl innerhalb des PXDataSource Tag

<px:PXDSCallbackCommand Name="MyNoteAction" Visible="False" 
    CommitChanges="true" DependOnGrid="grid" /> 

[2] In den Button auf der Symbolleiste über der Linie Netzerlöse durch die Zugabe von im Anschluss an die Tags PXGrid> ActionBar> CustomItems des Gitters auf der Registerkarte Dokumentdetails. (Suchen Sie einfach nach "PO Link" auf der Seite, um diesen Ort einfacher zu finden oder eine der aufgelisteten Schaltflächen über dem Raster).

[3] Fügen Sie den Panel-Code hinzu, der darstellt, wie das Panel aussehen wird. Sie können mit der Größe spielen, um Ihren Anforderungen gerecht zu werden. Stellen Sie sicher, dass Sie PXTextEdit so eingerichtet haben, dass MultiLine mit dem folgenden Beispielcode verwendet wird.Schauen Sie sich die aktuellen Kundenauftrag Seite zu wissen, wo es in die Seite Syntax passt:

<px:PXSmartPanel ID="PXSmartPanelNote" runat="server" Caption="My Note Panel Caption" 
    CaptionVisible="true" DesignView="Hidden" LoadOnDemand="true" Key="MyPanelView" CreateOnDemand="false" AutoCallBack-Enabled="true" 
    AutoCallBack-Target="formMyNote" AutoCallBack-Command="Refresh" CallBackMode-CommitChanges="True" CallBackMode-PostData="Page" 
    AcceptButtonID="btnMyNoteOk"> 
    <px:PXFormView ID="formMyNote" runat="server" DataSourceID="ds" Style="z-index: 100" Width="100%" CaptionVisible="False" 
     DataMember="MyPanelView"> 
     <ContentStyle BackColor="Transparent" BorderStyle="None" /> 
     <Template> 
      <px:PXLayoutRule ID="PXLayoutRule44" runat="server" StartColumn="True" LabelsWidth="S" ControlSize="XM" /> 
      <px:PXTextEdit ID="cstXXMyNote" runat="server" DataField="XXMyNote" TextMode="MultiLine"/> 
     </Template> 
    </px:PXFormView> 
    <px:PXPanel ID="PXPanel10" runat="server" SkinID="Buttons"> 
     <px:PXButton ID="btnMyNoteOk" runat="server" DialogResult="OK" Text="OK"/> 
    </px:PXPanel> 
</px:PXSmartPanel> 

Ich habe nicht vollständig die oben getestet, aber einen schnellen Schlag zusammen, um die Platte ohne Fehler gebracht. Ich habe Version 6.00.0955 verwendet, aber die gleichen Schritte sollten in allen 5.X-Versionen funktionieren. Hoffe das hilft.

+0

Gibt es eine Dokumentation zu einem "Smartpanel"? Wo würde ich das finden? – pmfith

+0

Nur beiseite, ich kann ZERO Dokumentation auf Smart Panels finden, oder wie ich das oben erwähnte Szenario implementieren würde. Der Kontext ist wichtig und "Smart Panel" ist eine schwebende Abstraktion für mich. – pmfith

+0

Lassen Sie mich versuchen, meine Antwort mit einem schnellen Beispiel zu aktualisieren. Bis dahin versuchen Sie einige Seiten nach PXSmartPanel zu durchsuchen. Das Smart Panel ist ein Popup-Fenster, das in einer vorhandenen aspx-Auslagerungsdatei enthalten ist. – Brendan

Verwandte Themen