SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




RenderWebPart...

Unbeantwortet Dieser Beitrag hat 15 Antworten

Ohne Rang
8 Beiträge
heiner52 erstellt 19 Juni 2009 16:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo erstmal, liebes Forum!

könnte ne dumme frage sein, ich kenn mich nicht wirklich aus: Ich überschreibe die RenderWebPart()-Methode. Dabei verschwindet der Toolpart, also rechts die Properties, die ich aber brauche. Muss ich in der RenderWebpart-Methode irgendwas besonderes mit angeben, so dass die wieder erscheinen?

Bzw. ist der ToolPart schon da, aber nur die Button "OK", "Abbrechen" und "Übernehmen". Wenn ich die RenderWebPart-Methode auskommentiere, is da alles drin, auch die von mir hinzugefügten Elemente.

Danke!!

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 19 Juni 2009 16:40
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

RenderWebPart solltest Du nicht überschreiben oder wenigstens ein base.RenderWebPart einfügen), weil das für die ganze Infrastruktur (Chrome etc.) notwendig ist. Benutze lieber RenderContents.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
8 Beiträge
heiner52 Als Antwort am 19 Juni 2009 17:00
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

hm... hilft leider überhaupt nich... egal, ob ich Render, RenderWebpart oder RenderContents überschreibe, kommt im Property-Ding rechts (EditorPart oder ToolPart?) nur die Drei-Button-Darstellung.

ein base.RenderWebPart führt nur dazu, dass ein zusätzlicher Button auftaucht :-/

 

Vielleicht hab ich auch einfach nur ganzen großen Mist hier zusammengefriemelt ;)

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 19 Juni 2009 17:23
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das was du da versuchst zu erreichen erreicht man über ein EditorPart!

WebPart:

 public override EditorPartCollection CreateEditorParts()
{
     
List<EditorPart> editorParts = new List<EditorPart>(1);
     
EditorPart part = new EditorPartNum1();
      part.Title =
"DeinName";
      part.ID =
this.ID + "_DeinEditor";
      editorParts.Add(part);
     
EditorPartCollection baseParts = base.CreateEditorParts();
     
return new EditorPartCollection(baseParts, editorParts);
}

Im EditorPart (vom EditorPart abgeleitet) fügst du unter CreateChildControls deine Steuerelement hinzu.
ApplyChanges und SyncChanges überschreiben

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 19 Juni 2009 23:28
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Erscheint denn in der ToolPane gar nichts mehr, also auch nicht die Default-Einstellungen, die jedes Webpart hat? Oder nur Deine eigenen erscheinen nicht?

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
8 Beiträge
heiner52 Als Antwort am 20 Juni 2009 10:53
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

ne... nichts. nur die drei button "OK", "Abbrechen" und "Übernehmen".

 

DAs mit dem EditorPart werde ich mal probieren.

 

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 21 Juni 2009 10:44
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Und wie ist es bei anderen Webparts auf derselben Seite? Das hört sich so an, als ob da irgendwas mit der Webpartinfrastruktur nicht stimmt. Die Default-Einstellungen sollten eigentlich bei jedem Webpart ohne weiteres Zutun vorhanden sein.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
8 Beiträge
heiner52 Als Antwort am 21 Juni 2009 11:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi, danke für eure Hilfe,

ich werde morgen mal schauen, wie es bei den anderen Webparts aussieht.

Ohne Rang
8 Beiträge
heiner52 Als Antwort am 21 Juni 2009 15:31
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Andi, du hast Recht!

Wenn ich andere Webparts einfüge (z.B. Kalender), sind bei dessen Einstellungen ("Freigegebenes Webpart bearbeiten")  nur die 3 Buttons, sonst nix.

Was kann man da machen?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 21 Juni 2009 16:49
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wie ich oben schon sagte, da scheint irgend was grundsätzliches verbogen. Ist das im ganzen Web so oder nur auf einer Seite? Habt Ihr irgend etwas an der Masterpage verbogen? SPWebPartManager?

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
8 Beiträge
heiner52 Als Antwort am 21 Juni 2009 17:31
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

ne, wie gesagt, wenn ich die override-methode RenderWebPart auskommentiere, geht das alles!

Ohne Rang
8 Beiträge
heiner52 Als Antwort am 22 Juni 2009 09:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

auch der Vorschlag von Thomas bringt nichts :(

Ohne Rang
8 Beiträge
heiner52 Als Antwort am 22 Juni 2009 09:14
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Jetz reichts mir: vielleicht hilft euch ja der code...

 

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls.WebParts;
using TestSAPConnection;
using System.Web.UI.WebControls;
using System.Data;
using System.Text;
using System.Security;
using Microsoft.SharePoint.WebPartPages;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.Portal.SingleSignon;
using System.IO;
using System.Web;


namespace SAPLogon
{

    [Guid("837f9021-1e44-402c-b82e-df94570961c7")]

    public class WebPartFeature1 : Microsoft.SharePoint.WebPartPages.WebPart
    {
        const string sapgui = @"\_layouts\images\sapgui_16x16.gif";
        const string ordner = @"\_layouts\images\dir-closed-b.gif";
        const string b_end = @"\_layouts\images\branch-end-b.gif";
        const string branch = @"\_layouts\images\branch-close-b.gif";
        const string trunkb = @"\_layouts\images\trunk-b.gif";



        //private Table TB_table;
        private BAPIRETURNTable rtable1 = new BAPIRETURNTable();
        private ZSSUSRMANDTable ztable1 = new ZSSUSRMANDTable();
        private DataTable dt = new DataTable();
        private String systemList = "SAPSysteme";





        //  private ZE_T_SMEN_BUFFC smen_buffc = new ZE_T_SMEN_BUFFC();
        //private string _myProperty = null;
        //[Personalizable(PersonalizationScope.Shared)]
        //[WebBrowsable(true)]
        //[System.ComponentModel.Category("My Property Group")]
        //[WebDisplayName("MyProperty")]
        //[WebDescription("Meaningless Property")]
        //public string MyProperty
        //{
        //    get
        //    {
        //        return _myProperty;
        //    }
        //    set { _myProperty = value; }
        //}


        public WebPartFeature1()
        {
            this.ExportMode = WebPartExportMode.All;
        }

        ///// <summary>
        ///// Create all your controls here for rendering.
        ///// Try to avoid using the RenderWebPart() method.
        ///// </summary>
        //protected override void CreateChildControls()
        //{

        //    try
        //    {



        //        SPSite site = SPContext.Current.Site;
        //        SPWeb web = site.OpenWeb();


        //        base.CreateChildControls();



        //    }
        //    catch (Exception ex)
        //    {
        //        HandleException(ex);
        //    }

        //}

        /// <summary>
        /// Ensures that the CreateChildControls() is called before events.
        /// Use CreateChildControls() to create your controls.
        /// </summary>
        /// <param name="e"></param>
        protected override void OnLoad(EventArgs e)
        {

            try
            {
                base.OnLoad(e);
                this.EnsureChildControls();



                // Your code here...
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }

        }

        /// <summary>
        /// Clear all child controls and add an error message for display.
        /// </summary>
        /// <param name="ex"></param>
        private void HandleException(Exception ex)
        {

            this.Controls.Clear();
            this.Controls.Add(new LiteralControl(ex.ToString()));
        }





        protected override void RenderWebPart(HtmlTextWriter output)
        {
//            CreateChildControls();
            EnsureChildControls();


            localhost.Service1 s1 = new SAPLogon.localhost.Service1();
            SPSite site = SPContext.Current.Site;
            SPWeb web = site.OpenWeb();
            SPList systemListe = web.Lists[systemList];
           
            string user = web.CurrentUser.LoginName;

            foreach (SPListItem item in systemListe.Items)
            {

                output.AddAttribute(HtmlTextWriterAttribute.Src, branch);
                output.AddAttribute(HtmlTextWriterAttribute.Border, "0");
                output.RenderBeginTag(HtmlTextWriterTag.Img);
                output.RenderEndTag();

                output.AddAttribute(HtmlTextWriterAttribute.Src, ordner);
                output.AddAttribute(HtmlTextWriterAttribute.Border, "0");
                output.RenderBeginTag(HtmlTextWriterTag.Img);
                output.RenderEndTag();

                output.RenderBeginTag(HtmlTextWriterTag.B);
                output.Write("  " + item["R/3-Name"] + " [" + item["Beschreibung"] + "]");
                output.RenderEndTag();

                output.RenderBeginTag(HtmlTextWriterTag.Br);

                output.AddAttribute(HtmlTextWriterAttribute.Src, trunkb);
                output.AddAttribute(HtmlTextWriterAttribute.Border, "0");
                output.RenderBeginTag(HtmlTextWriterTag.Img);
                output.RenderEndTag();

                output.AddAttribute(HtmlTextWriterAttribute.Src, b_end);
                output.AddAttribute(HtmlTextWriterAttribute.Border, "0");
                output.RenderBeginTag(HtmlTextWriterTag.Img);
                output.RenderEndTag();


                output.AddAttribute(HtmlTextWriterAttribute.Src, sapgui);
                output.AddAttribute(HtmlTextWriterAttribute.Border, "0");
                output.RenderBeginTag(HtmlTextWriterTag.Img);

                output.RenderEndTag();

                output.AddAttribute(HtmlTextWriterAttribute.Href, s1.Url + "/DownloadFile?name=" + item["Host oder IP"] + "&client=" + item["Mandant"] + "&transaction=n" + "&user=" + user);

                output.RenderBeginTag(HtmlTextWriterTag.A);
                output.Write("Mandant " + item["Mandant"]);
                output.RenderEndTag();

                output.RenderBeginTag(HtmlTextWriterTag.Br);

            }

            output.AddAttribute(HtmlTextWriterAttribute.Src, b_end);
            output.AddAttribute(HtmlTextWriterAttribute.Border, "0");
            output.RenderBeginTag(HtmlTextWriterTag.Img);
            output.RenderEndTag();


            output.AddAttribute(HtmlTextWriterAttribute.Src, sapgui);
            output.AddAttribute(HtmlTextWriterAttribute.Border, "0");
            output.RenderBeginTag(HtmlTextWriterTag.Img);

            output.RenderEndTag();


            output.AddAttribute(HtmlTextWriterAttribute.Href, s1.Url + "/DownloadFile?name=Olda8006&client=800&transaction=n");

            output.RenderBeginTag(HtmlTextWriterTag.A);
            output.Write("SAP Logon unter anderem Namen");
            output.RenderEndTag();

            base.RenderWebPart(output);
           // base.CreateEditorParts();

        }


        public enum transMode
        {
            Aktuell,
            Neu

        }

        private transMode tMode = transMode.Aktuell;
        [Personalizable(PersonalizationScope.User),
        WebBrowsable(true),
        WebDisplayName("Start der Transaktionen im Modus"),
        WebDescription("Wie sollen Transaktionen gestartet werden?"),
        System.ComponentModel.Category("Personalisierung")]
        public transMode TMode
        {
            get { return tMode; }
            set { tMode = value; }
        }

        //public override EditorPartCollection CreateEditorParts()
        //{
        //    List<EditorPart> editorParts = new List<EditorPart>(1);
        //    EditorPart part = new Personalisierung();
        //    part.Title = "DeinName";
        //    part.ID = this.ID + "_DeinEditor";
        //    editorParts.Add(part);
        //    EditorPartCollection baseParts = base.CreateEditorParts();
        //    return new EditorPartCollection(baseParts, editorParts);
        //}

       


    }


}

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 22 Juni 2009 09:43
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Iiiiiiihhhhhh SAP ;-)

Ich kann zwar nicht erkennen, was das Problem verursachen könnte, aber ein paar Tips:
- Für SharePoint 2007 Webparts solltest Du nicht mehr von Microsoft.SharePoint.WebPartPages.Webpart erben sondern von System.Web.UI.WebControls.WebParts.WebPart. Das könnte schonmal was ändern.
- Anstatt in RenderWebPart HTML zu erzeugen, solltest Du in CreateChildControls HtmlControls oder WebControls erzeugen (Table, DataGridView, Buttons, ...). Ist viel einfacher und sie werden automatisch gerendert. In OnPreRender füllst Du dann diese Controls mit Daten und RenderWebPart überschreibst Du einfach gar nicht.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 22 Juni 2009 09:55
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Mal ein paar Anmerkungen zu deinem Code:

Wer ein SPWeb mit Open öffent muss es auch mit Dispose wieder freigeben bzw inerhalb des using nutzen. Da du sogar SPContext.Current.Site nutzt warum dann auch nicht SPContext.Current.Web?

Man solte bei WSS 3 / MOSS von System.Web.UI.WebControls.WebPartPages.WebPart ableiten. Sonst kann ich keine Fehler festellen.

Hast du dein WebPart auch zu den SafeControls hinzugefügt?
http://msdn.microsoft.com/en-us/library/ms452873.aspx

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 22 Juni 2009 10:13
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Mal wieder ein Nachtrag ;-)

die SPSite und SPWeb, die man von SPContext.Current erhält, sollte man nicht disposen, alle anderen natürlich schon.

[quote user="Thomas Östreich"]Hast du dein WebPart auch zu den SafeControls hinzugefügt?[/quote]

Das ist natürlich entscheidend. Habe ich völlig vergessen...

Viele Grüße
Andi
af @ evocom de
Blog