Florian @ SharePoint UserGroup



SharxXForm oder so macht Programmieren Spass :) 

Tags:

Wir sind ja im SharePoint Bereich seit der ersten Stunde tätig und haben mittlerweile schon unzählige Projekte angefangen von SharePoint 2001 bis 2007 realisiert. Wenn man ein wenig tiefer in die ganze Materie eindringt und komplexere Prozesse mit SharePoint abbilden will, stößt man oft unmittelbar an die reinen Konfigurationsgrenzen. Es seien an dieser Stelle ein paar Beispiele genannt mit denen sicherlich schon viele einmal konfrontiert waren:

-) komplexe Formulare – der Kopfzerbrecher:

(ist schon ein wenig älter, aber als Beispiel allemal gut -> Darstellung eines Lieferanten, deren Ansprechpartner, Kommentare, Filialen, … -> dahinter liegen SharePoint Listen und der Webpart für die Dateneingabe und Darstellung ist komplett in .net programmiert)

-) Kaskadierte Drop-Downlisten – der Klassiker

(Screenshot von mobile.de -> wenn ich eine Marke auswähle, dann will ich dementsprechend nur mehr die Modelle von dieser Marke haben)

-) Prozesse – Workflow / Eventhandler oder doch einen eigenen Webpart schreiben?

Beispiel aus der Baubranche: Anforderung wenn ein Dokument hochgeladen wird soll ein Ersteller (Sekräterin kriegt Pläne zugeschickt und soll diese in das Projektportal laden) ausgewählt werden -> zusätzlich soll zu dem Dokument auch noch die Firma (des Erstellers) abgespeichert werden, damit das Dokument bei der Suche sowohl über den Erstellername als auch über die Firma gefunden wird.

Bei all diesen Beispielen kann man nicht mehr wirklich viel mit Konfiguration ausrichten und nachdem wir schon tausend Mal mit solchen Thematiken konfrontiert waren (und auch sehr oft immer wieder das gleiche programmiert haben – und sowas mögen Programmierer ja überhaupt nicht -> WIR BRAUCHEN DIE HERAUSFORDERUNG ;-)) -> haben wir uns Gedanken darüber gemacht und das Ganze abstrahiert und dabei ist SharxXForm herausgekommen.

Oder Freigabe von Rechnungen: Die Sekräterin ladet eine Rechnung in eine Bibliothek, wo das Attribut "Freigegeben" Ja/Nein existiert und die Sekräterin darf beim Hochladen das Feld Freigegeben nicht ausfüllen, sondern das darf nur der BigBoss.

Das Konzept

Wir kapseln das SharePoint Objektmodell mittels unserem SharxX OM und bieten unsere Funktionalitäten über die SharxX Webservices an. Dazu gibt es ein asp.net Control, das eben mit diesen Webservices kommuniziert und … (nachdem ich mich hier nicht in den technischen Details verlieren will -> werde ich das ganze jetzt an einem praktischen Beispiel darstellen :))

Das Beispiel – kaskadierte Dropdown-Listen (innerhalb von 2 Minuten)

Prerequisits:

-) Liste Automarken (nur Titel Feld)

-) Liste Automodelle (Lookup auf Marke)

-) Dokumentenbibliothek Bedienungsanleitungen (Lookup auf Marke und Modell)

  • Standard SharePoint Problem: wenn man ein Dokument hochladet und bei Marke Audi auswählt -> bekommt man auch Modelle von BMW zur Auswahl..

  1. Man erstellt ein neues ASCX und fügt das SharxXForm Control ein

  1. Man kann einige Eigenschaften definieren, wie z.B. ListID, WebUrl (diese können aber auch mittels Übergabeparameter ausgelesen werden)
  2. Dann kann man sich in diverse Events, wie z.B. AfterLoad, BeforeSave, BeforeCancel, usw. usf. anhängen und CustomCode ausführen

  3. Und dann müsste man nur mehr folgenden Code schreiben:

protected void SharxXForm1_AfterLoad(object sender, EventArgs e)

{

DropDownList marke = SharxXForm1.findControl<DropDownList>("Marke") as DropDownList;

marke.SelectedIndexChanged += new EventHandler(marke_SelectedIndexChanged);

marke.AutoPostBack = true;

}

 

void marke_SelectedIndexChanged(object sender, EventArgs e)

{

DropDownList modelle = SharxXForm1.findControl<DropDownList>("Modell") as DropDownList;

modelle.Items.Clear();

 

DropDownList marke = (DropDownList)sender;

SPQuery query = new SPQuery();

query.Query = "<Where><Eq><FieldRef Name=\"Marke\"/><Value Type=\"Text\">" + marke.SelectedItem.Text + "</Value></Eq></Where>";

 

foreach (SPListItem item in web.Lists["Modelle"].GetItems(query))

{

modelle.Items.Add(new ListItem(item.Title, item.ID.ToString()));

}

}

  • Und das wars dann auch schon :) und so schaut das Ganze dann aus:

 

Zusammenfassung

Das SharxXForm soll uns Programmieren das tägliche Arbeiten wesentlich erleichtern (Kann sich noch wer an die VS 2005 Werbungen erinnern – an die denke ich nämlich gerade :-D).

Wir entwickeln alle unsere Projekte nur mehr mittels SharxXForm und unsere Effizienz ist mittlerweile so perfekt, dass ich sogar Zeit finde solche langen Artikel zu schreiben ;-).

Grundsätzlich lassen sich alle oben angesprochenen Problemstellungen sehr einfach über SharxXForm lösen und wer sich jetzt darüber Gedanken macht, ob das evt. einem selbst auch zusätzliche Freizeit verschaffen könnte -> dann meldet euch einfach bei mir -> ich werde es euch beweisen!!!

Bei Fragen, Wünsche, Anregungen könnt ihr mir jederzeit einen Kommentar oder eine Mail an f.grasel[at]sharxx.com schreiben.

 

P.s.: zusätzlich enthält SharxXForm noch folgende Funktionalitäten:

-) Multi-Upload im Web eben über das gleiche Prinzip (Ja richtig man kann auch beim Multi-Upload dann gleich beim Upload die Eigenschaften setzen)

-) UseFileSize -> wenn ein oder mehrere Dokumente ausgewählt werden, kann man eine Prüflogik hinterlegen, ob der Benutzer soviel MB überhaupt hinaufladen darf (evt. Hattet ihr schon mal den Anruf eines entnervten User der mit der UMTS Karte ein 51MB großes File übertragen hat und Stunden später die SharePoint Fehlermeldung gekommen ist "Ätsch, du darfst nur 50 MB hochladen)

-) auf jegliche Liste - also nicht nur bei Dokumentenbibliotheken - anwendbar

 
Posted by f.grasel on 29-May-08
1 Comments  |  Trackback Url  |  Link to this post | Bookmark this post with:        
 

Comments


greatlake commented on Wednesday, 1-Apr-2009
I am very interested your article. It is just what I need. Would you please tell me how you abstracted your SharxXForm. I would really appreciate if you send me a copy of your source code. Thank you very much!!

Name

Url

Email

Comments

CAPTCHA Image Validation