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.




SharePoint Webpart Programmierung

Unbeantwortet Dieser Beitrag hat 12 Antworten

Ohne Rang
7 Beiträge
Anja_S erstellt 20 März 2014 14:45
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

ich versuche mich grade daran einen SharePoint Webpart zu programmieren. Dieser soll mal Daten aus einer Datenbank in einer Liste darstellen und diese auch bearbeiten können...

Ich habe so was aber vorher noch gemacht und weiß momentan gar nicht wie ich anfangen soll..

Wie gestalte ich denn die Oberfläche für den Webpart am besten? Außer der Liste sollen noch eine Infobox mit Text und Buttons auf der Seite eingeführt werden..

Gibt es jemand der hier mir hier helfen kann?

Viele Grüße,

Anja

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 20 März 2014 15:26
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Schwierige Frage, weil man nicht wirklich weiß wo Du stehst ;-)

Grundsätzlich steckt dahinter ASP.NET, d.h. Du brauchst erstmal Kenntnisse darin. Fange am besten mal an die ersten Treffer davon durchzuarbeiten: https://www.google.de/search?q=sharepoint+2010+webpart+development

Falls Du schon weiter bist: die Daten stellst Du am besten mit einem SPGridView dar. Das ist im Grunde ein Standard-ASP.NET-GridView, das um die Styles von SharePoint aufgepeppt wurde.

Aber was anderes: warum möchtest Du dafür ein webpart entwickeln? Externe Daten bringt man am besten per BCS (Business Connectivity Services) nach SharePoint - auch änderbar.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
7 Beiträge
Anja_S Als Antwort am 20 März 2014 15:41
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ok, zum Verständnis einmal von vorne. Bi nämlich durchaus offen für andere Lösungen.

Ich möchte auf einer SharePoint-Seite Inhalte einer Datenbank anzeigen lassen. Der Nutzer soll  Datensätze per Button aus der einen Datenbanktabelle mit Zusatzfeld (Begründung für das verschieben) in eine andere Datenbanktabelle verschieben können.

Diese Googlesuche habe ich natürlich schon gestartet, bin aber bis auf das generelle Erstellen nicht weit gekommen.. Dann sitzt man da und weiß nicht mehr weiter..

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 20 März 2014 16:04
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Anja_S"]Ich möchte auf einer SharePoint-Seite Inhalte einer Datenbank anzeigen lassen. Der Nutzer soll  Datensätze per Button aus der einen Datenbanktabelle mit Zusatzfeld (Begründung für das verschieben) in eine andere Datenbanktabelle verschieben können[/quote]

OK, das ist dann ja schon etwas mehr und man müßte mit BCS auch ziemlich Aufwand treiben. Da ist ein eigenes Webpart wohl schneller. Erst recht, wenn es keine SQL Server Daten sind.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
7 Beiträge
Anja_S Als Antwort am 21 März 2014 08:46
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das dachte ich auch..

Allerdings weiß ich absolut nicht wie ich anfangen soll.. Wie sage ich dem Webpart, was es anzeigen soll sobald die Seite geöffnet wird? Wie erstelle ich die Oberfläche? Denn beim normalen Webpart, kann ich die Oberfläche ja nicht einfach zeichnen...

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 21 März 2014 10:10
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Überschreibe im WebPart die Methode CreateChildControls. Darin erzeugst Du die Controls, aus denen sich das Webpart zusammensetzen soll, also z.B. Buttons, Labels oder ein SPGridView. Fülle die Controls in einer Überschreibung von OnPreRender. D.h. dort rufst Du die Daten aus der Datenbank ab und bindest sie an das GridView.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
7 Beiträge
Anja_S Als Antwort am 21 März 2014 11:51
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hey, erst mal danke für deine Hilfe.. Alleine wäre ich wohl aufgeschmissen.

Könntest du da zu ein Codebeispiel geben? Wenn man das Projekt öffnet, sieht es zur Beginn ja so aus (ohne usings)

Namespace Test.Veto

{

          [ToolboxItemAttribute(false)]

         public class Veto : WebPart

        {

               protected override void CreateCildControls()

              {

               }

         }

}

Neue Klassen kann ich ja nur für das Projekt erstellen.. Also arbeite ich in dem Webpart gar nicht mit verschiedenen Klassen, sondern schreibe alle Controls so runter?

Kommen meine Controls dann "in" die CreateChildControls? 

[quote user="Andi Fandrich"]Fülle die Controls in einer Überschreibung von OnPreRender. D.h. dort rufst Du die Daten aus der Datenbank ab und bindest sie an das GridView.[/quote]

Was bedeutet das?

Ich weiss, diese Unterstützung ist zeitintensiver als eine normale Frage, aber für Hilfe wäre ich wirklich dankbar..

 

      

 

 

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 21 März 2014 12:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Also die Webpart-Klasse ist das zentrale Instrument, über das Du Inhalte darstellst. Ob Du innerhalb des Projekts weitere Klassen verwendest bleibt dabei völlig Dir überlassen.

Lege für die Controls, die auf irgendeine Art wichtig für Dich sind Felder innerhalb der Webpartklasse an:
private Button myButton;
private Label myLabel;

So erweckst Du die Controls zum Leben:
protected override void CreateChildControls()  {
myButton = new Button();
this.Controls.Add(myButton);
myLabel = new Label();
this.Controls.Add(myLabel);
 }

Und hier füllst Du die Controls mit Inhalt:
protected override void OnPreRender()  {
myButton.Text = "Klick mich";
myLabel.Text = "Statischer Text";
}

Man macht das in unterschiedlichen Methoden, weil zwischen CreateChildControls und OnPreRender Events stattfinden können (z.B. Button-Klicks) und Du damit die Chance hast darauf zu reagieren.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
7 Beiträge
Anja_S Als Antwort am 21 März 2014 15:14
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wow, danke!

Es funktioniert :)

Jetzt muss ich nur die Datenbankverbindung hinbekommen, die Daten vernünftig ausgeben, sie durch Button Klick verändern können....

Ohne Rang
7 Beiträge
Anja_S Als Antwort am 25 März 2014 10:39
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi!

Jetzt habe ich ein weiteres Problem.. Meine Datenverbindung funktioniert nicht.. Hier der Code dazu:

 

 

 

 

 

 

string connectinfo = " Data Source=degtluv3030; User ID=xxx; Password=xxx;";

 

 

 

OracleConnection connect = new OracleConnection(connectinfo);

connect.Open();

 

 

 

string sql = "SQL-Befehl";

 

 

 

OracleCommand cmd = new OracleCommand (sql, connect);

bei using habe ich oben das ergänzt:

 

using

 

 

Oracle.DataAccess.Client;

using

 

 

Oracle.DataAccess.Types;

auf meiner VM ist ein Oracle Treiber installiert..

Was muss ich noch machen? Kommt das Datenbankconnect in die CreateChild Methode?

Und wie bekomme ich die Daten, die ich mir über den SQL Befehl hole in ein DataGrid?

Über Hilfe würde ich mich wie immer sehr freuen!

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 25 März 2014 10:49
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Anja_S"]OracleConnection [/quote]

Arrgh. Mit dem Sch... habe ich mich auch erst vor Kurzem rumgeärgert.

Mit Oracle.DataAccess.Client hast Du aber schonmal die richtige Bibliothek ausgewählt. Das war bei meinen Versuchen der einzige Client, der tatsächlich funktionierte. ABER: dazu muß das ganze ODP.NET auch auf dem (oder den) SharePoint-Server(n) installiert sein. Und es muß entsprechend konfiguriert sein, damit die Datenbank gefunden wird. Wie das genau geht, kann ich Dir nicht sagen.

Wenn diese Hürde genommen ist, kann man damit aber wie mit jeder anderen Datenbank in .NET arbeiten. Jedenfalls bis auf ein paar SQL-Besonderheiten von Oracle. D.h. mit Hilfe eines DataAdapters füllst Du eine DataTable und die bindest Du an das Grid (grid.dataSource = DataTable; grid.dataBind(); )

PS: würdest Du den Code bitte beim nächsten Mal aus Visual Studio zuerst in einen Texteditor kopieren und erst dann hierher? Dabei gehen zwar alle Formatierungen verloren, aber man kann es besser lesen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
7 Beiträge
Anja_S Als Antwort am 25 März 2014 11:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich habe den Oracle Client 11g installiert . Reicht das nicht? Wo kann ich ODP.NET denn runterladen (hab das mal gegoogelt, da finde ich das nicht wirklich bzw. 10 Varainten auf der Oracle Seite)?

Wie funktioniert denn das Füllen der DataTable mit dem DataAdapter? So als Neuling sagt mir das noch nicht viel..

Und nochmal zu den Methoden. Was tue ich in die CreateChild Methode? Was bekommt eine eigne oder kommt in OnPreRender? Weiss nicht so genau wie man das da aufteilen muss..

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 25 März 2014 11:46
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Anja_S"]Wo kann ich ODP.NET denn runterladen [/quote]

ODP.NET ist der gängige Name für den Oracle Client, den Du ja schon hast. Du brauchst also nichts zusätzliches. Aber man muß das Ding zusätzlich konfigurieren bzw. irgendwas einrichten, damit der Treiber die Datenbanken findet. Das ist aber der Punkt, zu dem ich nichts sagen kann (bin kein Oracle-Spezialist und weigere mich einer zu werden).

[quote user="Anja_S"]Wie funktioniert denn das Füllen der DataTable mit dem DataAdapter?[/quote]

Das sind immer dieselben Funktionen des sog. ADO.NET:
OracleDataAdapter adapter = new OracleDataAdapter(sql, connString); // und andere Überladungen
DataTable dt = new DataTable();
adapter.Fill(dt);

[quote user="Anja_S"]Was tue ich in die CreateChild Methode? Was bekommt eine eigne oder kommt in OnPreRender?[/quote]

In CreateChildControls erzeugst Du die Controls, wie z.B. das Grid:
SPGridView grid = new SPGridView();
this.Controls.Add(grid);

In OnPreRender füllst Du es dann:
DataTable dt = GetData(...) // woher auch immer die Daten kommen
grid.DataSource = dt;
grid.DataBind();

Viele Grüße
Andi
af @ evocom de
Blog