<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ansgar Hinerasky</title>
	<atom:link href="http://ansgar.hinerasky.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ansgar.hinerasky.com</link>
	<description>SharePoint Design und Programmierung in der Anwendung</description>
	<lastBuildDate>Mon, 10 May 2010 11:56:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Lookup Felder</title>
		<link>http://ansgar.hinerasky.com/lookup-felder/</link>
		<comments>http://ansgar.hinerasky.com/lookup-felder/#comments</comments>
		<pubDate>Mon, 10 May 2010 09:51:17 +0000</pubDate>
		<dc:creator>Ansgar Hinerasky</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Listen]]></category>
		<category><![CDATA[Webpart]]></category>

		<guid isPermaLink="false">http://ansgar.hinerasky.com/?p=254</guid>
		<description><![CDATA[In einem Lookup-Feld werden die Werte mit
ID;#Value
 gespeichert. Natürlich lässt sich eine Funktion bauen, die das ID- und Value-Feld voneinander trennt. Einfacher und sauberer geht es aber mit der Funktion &#8220;SPFieldLookupValue&#8221;. Dabei wird der Spalteneintrag einfach der SPFieldLookupValue Variable zugeordnet. Diese stellt anschließend zwei Variablen zum Auslesen &#8211; und natürlich zum Speichern &#8211; zur Verfügung. [...]]]></description>
			<content:encoded><![CDATA[<p>In einem Lookup-Feld werden die Werte mit<br />
<blockquote>ID;#Value</p></blockquote>
<p> gespeichert. Natürlich lässt sich eine Funktion bauen, die das ID- und Value-Feld voneinander trennt. Einfacher und sauberer geht es aber mit der Funktion &#8220;SPFieldLookupValue&#8221;. Dabei wird der Spalteneintrag einfach der SPFieldLookupValue Variable zugeordnet. Diese stellt anschließend zwei Variablen zum Auslesen &#8211; und natürlich zum Speichern &#8211; zur Verfügung. Beispiel: <span id="more-254"></span></p>
<pre class="brush: csharp;">

// Lesen
SPFieldLookupValue lookupField = new SPFieldLookupValue(item[&quot;spaltenname&quot;].ToString());
string lookUpValue = lookupField.LookupValue;
int lookUpID = lookupField.LookupId;

// Speichern
SPListItem listItem = ... &lt;= z.B. new SPListItem()
listItem[&quot;Skill Name&quot;] = new SPFieldLookupValue(1, &quot;Europa&quot;); // Europa hat den Wert (ID) 1
listItem.Update();
</pre>
]]></content:encoded>
			<wfw:commentRss>http://ansgar.hinerasky.com/lookup-felder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Datei Upload</title>
		<link>http://ansgar.hinerasky.com/datei-upload/</link>
		<comments>http://ansgar.hinerasky.com/datei-upload/#comments</comments>
		<pubDate>Mon, 10 May 2010 09:33:57 +0000</pubDate>
		<dc:creator>Ansgar Hinerasky</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Dateien]]></category>
		<category><![CDATA[Listen]]></category>
		<category><![CDATA[Upload]]></category>

		<guid isPermaLink="false">http://ansgar.hinerasky.com/?p=251</guid>
		<description><![CDATA[Eine Datei einer Liste anzufügen (File upload) ist mit wenigen Handgriffen erledigt, da es sich bei einer Dateiliste auch wieder um ein List-Objekt handelt und somit die gleichen Funktionen zur Verfügung stehen. 
Im ersten Schritt muss eine Datei ausgewählt oder erzeugt werden. In unserem Bespiel erzeugen wir einen neue leere temporäre Datei und laden diese [...]]]></description>
			<content:encoded><![CDATA[<p>Eine Datei einer Liste anzufügen (File upload) ist mit wenigen Handgriffen erledigt, da es sich bei einer Dateiliste auch wieder um ein List-Objekt handelt und somit die gleichen Funktionen zur Verfügung stehen. </p>
<p>Im ersten Schritt muss eine Datei ausgewählt oder erzeugt werden. In unserem Bespiel erzeugen wir einen neue leere temporäre Datei und laden diese anschließend hoch. <span id="more-251"></span></p>
<pre class="brush: csharp;">
// Zufällige Datei im Temp-Ordner erzeugen
string dateiname = Path.GetTempFileName;
StreamWriter wr = File.CreateText(dateiname);

// Daten schreiben
// Dieser Bereich kann selbstverständlich erweitert werden.
wr.WriteLine(&quot;Hier steht ein Text...&quot;);
wr.Close();

// Entsprechendes SPListItem auswählen
SPListItem pPlan = ... &lt;= z.B. über eine CAML-Anfrage gefunden

// Datei hochladen
byte[] groesse = File.ReadAllBytes(dateiname);
pPlan.Attachments.Add(dateiname, groesse);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://ansgar.hinerasky.com/datei-upload/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CAML &#8211; Number/Integer</title>
		<link>http://ansgar.hinerasky.com/caml-number-intege/</link>
		<comments>http://ansgar.hinerasky.com/caml-number-intege/#comments</comments>
		<pubDate>Mon, 10 May 2010 09:25:20 +0000</pubDate>
		<dc:creator>Ansgar Hinerasky</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Listen]]></category>
		<category><![CDATA[Suche]]></category>

		<guid isPermaLink="false">http://ansgar.hinerasky.com/?p=247</guid>
		<description><![CDATA[Die CAML-Syntax kennt beim Value-Typ kein &#8220;Integer&#8221; (int). Stattdessen sollte der Typ &#8220;Number&#8221; für eine Zahl verwendet werden. Beispiel:

// Falsch
SPQuery qry = new SPQuery();
qry.Query = &#34;&#60;Where&#62;&#60;Eq&#62;&#60;FieldRef Name='Spaltenname' /&#62;&#60;Value Type='Integer'&#62;12&#60;/Value&#62;&#60;/Eq&#62;&#60;/Where&#62;&#34;;
SPListItemCollection Lst = web.Lists[&#34;listenname&#34;].GetItems(qry);

// Richtig
// Type Integer =&#62; Number
SPQuery qry = new SPQuery();
qry.Query = &#34;&#60;Where&#62;&#60;Eq&#62;&#60;FieldRef Name='Spaltenname' /&#62;&#60;Value Type='Number'&#62;12&#60;/Value&#62;&#60;/Eq&#62;&#60;/Where&#62;&#34;;
SPListItemCollection Lst = web.Lists[&#34;listenname&#34;].GetItems(qry);

]]></description>
			<content:encoded><![CDATA[<p>Die CAML-Syntax kennt beim Value-Typ kein &#8220;Integer&#8221; (int). Stattdessen sollte der Typ &#8220;Number&#8221; für eine Zahl verwendet werden. Beispiel:<span id="more-247"></span></p>
<pre class="brush: csharp;">
// Falsch
SPQuery qry = new SPQuery();
qry.Query = &quot;&lt;Where&gt;&lt;Eq&gt;&lt;FieldRef Name='Spaltenname' /&gt;&lt;Value Type='Integer'&gt;12&lt;/Value&gt;&lt;/Eq&gt;&lt;/Where&gt;&quot;;
SPListItemCollection Lst = web.Lists[&quot;listenname&quot;].GetItems(qry);

// Richtig
// Type Integer =&gt; Number
SPQuery qry = new SPQuery();
qry.Query = &quot;&lt;Where&gt;&lt;Eq&gt;&lt;FieldRef Name='Spaltenname' /&gt;&lt;Value Type='Number'&gt;12&lt;/Value&gt;&lt;/Eq&gt;&lt;/Where&gt;&quot;;
SPListItemCollection Lst = web.Lists[&quot;listenname&quot;].GetItems(qry);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://ansgar.hinerasky.com/caml-number-intege/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LookupId richtig verwenden</title>
		<link>http://ansgar.hinerasky.com/lookupid-richtig-verwenden/</link>
		<comments>http://ansgar.hinerasky.com/lookupid-richtig-verwenden/#comments</comments>
		<pubDate>Mon, 10 May 2010 09:18:00 +0000</pubDate>
		<dc:creator>Ansgar Hinerasky</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Listen]]></category>
		<category><![CDATA[Suche]]></category>
		<category><![CDATA[Webpart]]></category>

		<guid isPermaLink="false">http://ansgar.hinerasky.com/?p=242</guid>
		<description><![CDATA[Ein ärgerlicher Flüchtigkeitsfehler passiert, wenn bei einem Lookup das falsche Feld angegeben wird und die CAML-Abfrage alle Werte liefert, statt nur die gefilterten. Verwenden Sie &#8220;LookupId=&#8217;TRUE&#8217;&#8221; bei dem Feldnamen, der abgefragt werden soll. Beispiel: 

using (SPWeb web = new SPSite(&#34;serverURL&#34;).OpenWeb(&#34;sitename&#34;)
{
// Query erstellen
  SPQuery qry = new SPQuery();

  // Alle Einträge mit der Referenz-ID [...]]]></description>
			<content:encoded><![CDATA[<p>Ein ärgerlicher Flüchtigkeitsfehler passiert, wenn bei einem Lookup das falsche Feld angegeben wird und die CAML-Abfrage alle Werte liefert, statt nur die gefilterten. Verwenden Sie &#8220;LookupId=&#8217;TRUE&#8217;&#8221; bei dem Feldnamen, der abgefragt werden soll. Beispiel: <span id="more-242"></span></p>
<pre class="brush: csharp;">
using (SPWeb web = new SPSite(&quot;serverURL&quot;).OpenWeb(&quot;sitename&quot;)
{
// Query erstellen
  SPQuery qry = new SPQuery();

  // Alle Einträge mit der Referenz-ID &quot;12&quot; in der Spalte RefSpalte zurück geben
  string strID = &quot;12&quot;
  qry.Query = &quot;&lt;Where&gt;&lt;Eq&gt;&lt;FieldRef Name='RefSpalte'  LookupId='TRUE' /&gt;&lt;Value Type='Lookup'&gt;&quot; + str.toString() + &quot;&lt;/Value&gt;&lt;/Eq&gt;&lt;/Where&gt;&quot;;

  // Abfrage durchführen
  SPListItemCollection Lst = web.Lists[&quot;listenname&quot;].GetItems(qry);

  // und mit foreach die Elemente der Liste &quot;Lst&quot; abfragen
  // ...
}
</pre>
<p>Achten Sie bitte immer darauf, nur die <a href="http://ansgar.hinerasky.com/feld-nicht-richtig-installiert/">internen Feldnamen</a> zu verwenden.</p>
]]></content:encoded>
			<wfw:commentRss>http://ansgar.hinerasky.com/lookupid-richtig-verwenden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Feld nicht richtig installiert</title>
		<link>http://ansgar.hinerasky.com/feld-nicht-richtig-installiert/</link>
		<comments>http://ansgar.hinerasky.com/feld-nicht-richtig-installiert/#comments</comments>
		<pubDate>Mon, 10 May 2010 09:02:41 +0000</pubDate>
		<dc:creator>Ansgar Hinerasky</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Entwicklungsumgebung]]></category>
		<category><![CDATA[Listen]]></category>

		<guid isPermaLink="false">http://ansgar.hinerasky.com/?p=235</guid>
		<description><![CDATA[Bei der Programmierung einer Abfrage einer SharePoint-Liste erscheint die Fehlermeldung:
Mindestens ein Feld ist nicht richtig installiert. Wechseln Sie zur Listeinestellungsseite, um diese Felder zu löschen.
Die Fehlermeldung kann zwei Ursachen haben, die sich mit relativ einfachen Mitteln lösen lassen:

1. Möglichkeit: Feldname ist nicht vorhanden
Gerade bei Umlauten im Feldnamen (zum Beispiel ein &#8220;ü&#8221;) wandelt SharePoint den Umlaut [...]]]></description>
			<content:encoded><![CDATA[<p>Bei der Programmierung einer Abfrage einer SharePoint-Liste erscheint die Fehlermeldung:</p>
<blockquote><p>Mindestens ein Feld ist nicht richtig installiert. Wechseln Sie zur Listeinestellungsseite, um diese Felder zu löschen.</p></blockquote>
<p>Die Fehlermeldung kann zwei Ursachen haben, die sich mit relativ einfachen Mitteln lösen lassen:<br />
<span id="more-235"></span></p>
<p><strong>1. Möglichkeit: Feldname ist nicht vorhanden</strong><br />
Gerade bei Umlauten im Feldnamen (zum Beispiel ein &#8220;ü&#8221;) wandelt SharePoint den Umlaut in eine andere Zeichenkette um. Bei einer Abfrage findet SharePoint den Feldnamen nicht und gibt den o.g. Fehler zurück. Dies Lösung: Verwenden Sie immer den internen Feldnamen des Feld. Dieser wird in jedem Fall gefunden. Sehr hilfreich ist dabei das Programm <a href="http://ansgar.hinerasky.com/wp-content/uploads/Stramit.CamlViewer2007.v2.0.0.0.zip">CAML-Viewer</a>, dass die drei Namen eines Feldes direkt anzeigt.</p>
<p><strong>2. Möglichkeit: Das Lookup-Feld ist beschädigt</strong><br />
In diesem Fall hilt es, sich die schema.xml-Datei anzuschauen und ggf. die fehlerhaften Werte zu korrigieren. Persönlich kann ich aber guten Gewissens dazu raten, dass Feld zu löschen und neu zu erstellen (solange noch keine relevanten Daten gespeichert sind).</p>
]]></content:encoded>
			<wfw:commentRss>http://ansgar.hinerasky.com/feld-nicht-richtig-installiert/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Unbekannter Fehler&#8221; bei der SharePoint Entwicklung</title>
		<link>http://ansgar.hinerasky.com/unbekannter-fehler-bei-der-sharepoint-entwicklung/</link>
		<comments>http://ansgar.hinerasky.com/unbekannter-fehler-bei-der-sharepoint-entwicklung/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 13:24:45 +0000</pubDate>
		<dc:creator>Ansgar Hinerasky</dc:creator>
				<category><![CDATA[Einrichtung]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Debuggen]]></category>

		<guid isPermaLink="false">http://ansgar.hinerasky.com/?p=227</guid>
		<description><![CDATA[Gerade bei der Entwicklung und beim Testen von Webpart kommt der schöne Fehler:  
Es ist ein unerwarteter Fehler aufgetreten.
Webpart-Wartungsseite: Falls Sie über die entsprechende Berechtigung verfügen, können Sie diese Webseite verwenden, um vorübergehend Webparts zu schließen oder die Personalisierung zu entfernen. Wenden Sie sich an Ihren Websiteadministrator, um weitere Informationen zu erhalten.
Viel mehr steht [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ansgar.hinerasky.com/wp-content/uploads/fehler.png"><img src="http://ansgar.hinerasky.com/wp-content/uploads/fehler-300x82.png" alt="" title="Fehlermeldung" width="300" height="82" class="alignright size-medium wp-image-228" /></a>Gerade bei der Entwicklung und beim Testen von Webpart kommt der schöne Fehler:  </p>
<blockquote><p>Es ist ein unerwarteter Fehler aufgetreten.</p>
<p>Webpart-Wartungsseite: Falls Sie über die entsprechende Berechtigung verfügen, können Sie diese Webseite verwenden, um vorübergehend Webparts zu schließen oder die Personalisierung zu entfernen. Wenden Sie sich an Ihren Websiteadministrator, um weitere Informationen zu erhalten.</p></blockquote>
<p>Viel mehr steht auf der Seite auch schon gar nicht mehr. Eine aussagekräftige Fehlermeldung Fehlanzeige. Dafür muss man zuerst zwei kleine Einstellungen vornehmen.</p>
<p><strong>Die Lösung:</strong><br />
<span id="more-227"></span><br />
Öffnen Sie die <em>web.config</em> Datei der SharePoint-Anwendung und suchen / ersetzen Sie folgende Zeilen:</p>
<pre class="brush: xml;">
// Auf &quot;off&quot; setzen
&lt;CustomErrors mode=&quot;Off&quot; /&gt;

// Auf &quot;true&quot; setzen
&lt;SafeMode ... CallStack=&quot;true&quot; ...&gt;
</pre>
<p>Bedenken Sie bitte, die Web-Anwendung neu zu starten, damit die web.config Datei neu eingelesen werden kann.</p>
]]></content:encoded>
			<wfw:commentRss>http://ansgar.hinerasky.com/unbekannter-fehler-bei-der-sharepoint-entwicklung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint Server Controls</title>
		<link>http://ansgar.hinerasky.com/sharepoint-server-controls/</link>
		<comments>http://ansgar.hinerasky.com/sharepoint-server-controls/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 13:11:20 +0000</pubDate>
		<dc:creator>Ansgar Hinerasky</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Controls]]></category>
		<category><![CDATA[Webpart]]></category>

		<guid isPermaLink="false">http://ansgar.hinerasky.com/?p=222</guid>
		<description><![CDATA[Neben den normalen Windows-Forms-Controls, stellt SharePoint auch eigene Controls zur Verfügung, die bei der Webpart-Entwicklung sehr gut verwendet werden können. Eine Auswahl aus dem Namespace Microsoft.SharePoint.WebControls: 
Eingabe:

DateTimeControl 
InputFormTextBox
InputFormCheckBox
InputFormCheckBoxList
InputFormCheckBoxListValidator 
InputFormRadioButton 
PeopleEditor 
ListFieldIterator 
ListViewByQuery
WebApplicationSelector 

Validation / Überprüfung:

InputFormRequiredFieldValidator
InputFormRangeValidator
InputFormCompareValidator
InputFormRegularExpressionValidator
InputFormCheckBoxListValidator
InputFormCustomValidator

Quelle.
]]></description>
			<content:encoded><![CDATA[<p>Neben den normalen Windows-Forms-Controls, stellt SharePoint auch eigene Controls zur Verfügung, die bei der Webpart-Entwicklung sehr gut verwendet werden können. Eine Auswahl aus dem Namespace Microsoft.SharePoint.WebControls: <span id="more-222"></span></p>
<p><strong>Eingabe:</strong></p>
<ul>
<li>DateTimeControl </li>
<li>InputFormTextBox</li>
<li>InputFormCheckBox</li>
<li>InputFormCheckBoxList</li>
<li>InputFormCheckBoxListValidator </li>
<li>InputFormRadioButton </li>
<li>PeopleEditor </li>
<li>ListFieldIterator </li>
<li>ListViewByQuery</li>
<li>WebApplicationSelector </li>
</ul>
<p><strong>Validation / Überprüfung:</strong></p>
<ul>
<li>InputFormRequiredFieldValidator</li>
<li>InputFormRangeValidator</li>
<li>InputFormCompareValidator</li>
<li>InputFormRegularExpressionValidator</li>
<li>InputFormCheckBoxListValidator</li>
<li>InputFormCustomValidator</li>
</ul>
<p><a href="http://karinebosch.wordpress.com/sharepoint-controls/">Quelle</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ansgar.hinerasky.com/sharepoint-server-controls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DateTimeControl</title>
		<link>http://ansgar.hinerasky.com/datetimecontrol/</link>
		<comments>http://ansgar.hinerasky.com/datetimecontrol/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 13:00:28 +0000</pubDate>
		<dc:creator>Ansgar Hinerasky</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Controls]]></category>
		<category><![CDATA[Webpart]]></category>

		<guid isPermaLink="false">http://ansgar.hinerasky.com/?p=209</guid>
		<description><![CDATA[Für die Eingabe von Datumswerten, muss nicht zwingend eine Textbox benutzt werden. Wie bei der normalen Windows-Programmierung auch, bietet SharePoint das Control DateTimeControl an. Die Einbindung erfolgt ganz normal (also per .RenderControl). Beim Instantiieren lassen sich noch weitere nette Einstellungen vornehmen.
Einbindung:

protected override void CreateChildControls() {
  base.CreateChildControls();
  datumsauswahl = new DateTimeControl();
  datumsauswahl.ID = [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://ansgar.hinerasky.com/wp-content/uploads/datum-150x150.png" alt="" title="datum" width="150" height="150" class="alignright size-thumbnail wp-image-210" />Für die Eingabe von Datumswerten, muss nicht zwingend eine Textbox benutzt werden. Wie bei der normalen Windows-Programmierung auch, bietet SharePoint das Control <em>DateTimeControl</em> an. Die Einbindung erfolgt ganz normal (also per .RenderControl). Beim Instantiieren lassen sich noch weitere nette Einstellungen vornehmen.<span id="more-209"></span></p>
<p><strong>Einbindung:</strong></p>
<pre class="brush: csharp;">
protected override void CreateChildControls() {
  base.CreateChildControls();
  datumsauswahl = new DateTimeControl();
  datumsauswahl.ID = &quot;datumsauswahl &quot; + UniqueID;
  this.Controls.Add(birthdayDateTimeControl);
  // Weitere Anweisungen
}  

// Ausgabe
protected override void RenderContents(HtmlTextWriter writer) {
  datumsauswahl.RenderControl(writer);
}
</pre>
<p>Mögliche weitere Einstellungen:</p>
<ul>
<li><strong>DateOnly</strong>: Zeigt nur die Eingabe-Form für das Datum an.</li>
<li><strong>ShowWeekNumber</strong>: Zeigt die Kalenderwochen bei der Datumsauswahl an.</li>
<li><strong>IsRequiredField</strong>: Legt fest, ob das Feld ausgefüllt sein muss.</li>
<li><strong>AutoPostPack</strong>: Werte werden direkt zurückgegeben und lassen so bspw. mit dem Event <em>DateChanged</em> abfangen.</li>
<li><strong>MaxDate</strong>: Das höchst mögliche Datum, das eingegeben werden kann. Sinnvoll bspw. bei Geburtstagangaben. In der Zukunft wird keiner sein Geburtsdatum liegen haben.</li>
<li><strong>MinDate</strong>: Ähnlich wie MaxDate &#8211; nur eben in die andere Richtung.</li>
<li><strong>HoursMode24</strong>: 24 Stunden Modus.</li>
</ul>
<pre class="brush: csharp;">
protected override void CreateChildControls() {
  base.CreateChildControls();
  datumsauswahl = new DateTimeControl();
  datumsauswahl.ID = &quot;datumsauswahl &quot; + UniqueID;  

// Weitere Einstellungen
  datumsauswahl.ShowWeekNumber = true;

  this.Controls.Add(birthdayDateTimeControl);
  // Weitere Anweisungen
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://ansgar.hinerasky.com/datetimecontrol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Schnelles Listen-Update</title>
		<link>http://ansgar.hinerasky.com/schnelles-listen-update/</link>
		<comments>http://ansgar.hinerasky.com/schnelles-listen-update/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 06:00:58 +0000</pubDate>
		<dc:creator>Ansgar Hinerasky</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Best Practies]]></category>
		<category><![CDATA[Listen]]></category>
		<category><![CDATA[Webpart]]></category>

		<guid isPermaLink="false">http://ansgar.hinerasky.com/?p=187</guid>
		<description><![CDATA[Die Bearbeitung von Listeneinträge ist keine triviale Sache. Insbesondere wenn es sich um einige hundert Einträge handelt, sollte man sich überlegen, wie dieser Vorgang schneller ausgeführt werden kann, so dass der Benutzer nicht warten muss. Die Update()-Methoden jedes Mal neu aufzurufen, macht den Vorgang unnötig länger. Eine schnellere Methoden ist die Funktion ProcessBatchData.
Die ProcessBatchData-Methoden bekommt [...]]]></description>
			<content:encoded><![CDATA[<p>Die Bearbeitung von Listeneinträge ist keine triviale Sache. Insbesondere wenn es sich um einige hundert Einträge handelt, sollte man sich überlegen, wie dieser Vorgang schneller ausgeführt werden kann, so dass der Benutzer nicht warten muss. Die Update()-Methoden jedes Mal neu aufzurufen, macht den Vorgang unnötig länger. Eine schnellere Methoden ist die Funktion ProcessBatchData.<span id="more-187"></span></p>
<p>Die ProcessBatchData-Methoden bekommt einfach ein String (StringBuilder) Objekt mit den geänderten Daten. Bei 100 Einträgen macht das ein Geschwindigkeitvorteil von ca. 2 Sekunden aus (vgl. Quelle).</p>
<h1>Beispiel mittels CAML Update Query</h2>
<pre class="brush: csharp;">
// listGuid muss vorher natürlich ermittelt sein.
// someValue ist der entsprechende Wert, der neu eingefügt wird.

StringBuilder query = new StringBuilder();
for (int i=0;i&lt;newItems;i++) {
  query.AppendFormat(&quot;&lt;Method ID=\”{0}\”&gt;&quot; +
                     &quot;&lt;SetList&gt;{1}&lt;/SetList&gt;&quot; +
                     &quot;&lt;SetVar Name=\“ID\”&gt;New&lt;/SetVar&gt;&quot; +
                     &quot;&lt;SetVar Name=\”Cmd\”&gt;Save&lt;/SetVar&gt;&quot; +
                     &quot;&lt;SetVar Name=\”{3}Title\”&gt;{2}&lt;/SetVar&gt;&quot; +
                     &quot;&lt;/Method&gt;“, i, listGuid, someValue, &quot;urn:schemas-microsoft-com:office:office#&quot;);
}

// Anschließend wird die Query nur noch übergeben
SPContext.Current.Web.ProcessBatchData(&quot;&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;UTF-8\&quot;?&gt;&quot; +
&quot;&lt;ows:Batch OnError=\&quot;Return\&quot;&gt;{0}&lt;/ows:Batch&gt;&quot;, query.ToString())
</pre>
<p>Gefunden in <a href="http://www.hlmc.de/sharepoint/downloads/dynatraceixdaysharepointjuly09stuttgart.pdf">Quelle</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ansgar.hinerasky.com/schnelles-listen-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zugriff auf Listen &#8211; Abfragen</title>
		<link>http://ansgar.hinerasky.com/zugriff-auf-listen-abfragen/</link>
		<comments>http://ansgar.hinerasky.com/zugriff-auf-listen-abfragen/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 06:48:32 +0000</pubDate>
		<dc:creator>Ansgar Hinerasky</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Best Practies]]></category>
		<category><![CDATA[Listen]]></category>
		<category><![CDATA[Webpart]]></category>

		<guid isPermaLink="false">http://ansgar.hinerasky.com/?p=184</guid>
		<description><![CDATA[Gerade bei der sehr langen und ausführlichen Listen, sollte man sich überlegen, wie die Abfragen gestaltet werden. Prinzipiell sollte immer nur so viel abgefragt werden, wie gerade benötigt wird. Und mehr auch nicht. Ein guter Weg geht über SPQuery. Hier wird festgelegt, welche Daten abgefragt werden, so dass eben nicht alle verfügbaren Daten geladen werden [...]]]></description>
			<content:encoded><![CDATA[<p>Gerade bei der sehr langen und ausführlichen Listen, sollte man sich überlegen, wie die Abfragen gestaltet werden. Prinzipiell sollte immer nur so viel abgefragt werden, wie gerade benötigt wird. Und mehr auch nicht. Ein guter Weg geht über SPQuery. Hier wird festgelegt, welche Daten abgefragt werden, so dass eben nicht <em>alle</em> verfügbaren Daten geladen werden müssen. Dies bringt nicht nur Geschwindigkeitsvorteile, sondern steigert zudem die Übersichtlichtkeit.<span id="more-184"></span></p>
<h2>Nur bestimmte Zeilen abrufen</h2>
<p>Nur die ersten 100 Einträge abrufen:</p>
<pre class="brush: csharp;">
SPQuery query = new SPQuery();
query.RowLimit = 100;
SPListItemCollection items = SPContext.Current.List.GetItems(query);
foreach (SPListItem listItem in items)
{
  // Bearbeitung mit listItem fortsetzen...
}
</pre>
<h2>Abfrage bestimmter Spalten</h2>
<p>Sinnvoll ist es, nur die Spalten abzufragen, die auch wirklich benötigt werden.</p>
<pre class="brush: csharp;">
SPQuery query = new SPQuery();
query.ViewFields = &quot;&lt;FieldRef Name='ID'/&gt;&lt;FieldRef Name=‘Titel'/&gt;&lt;FieldRef Name=‘XYZ'/&gt;&quot;;

// Anschließend mit wie oben die Abfrage durchführen:
SPListItemCollection items = SPContext.Current.List.GetItems(query);
foreach (SPListItem listItem in items)
{
  // Bearbeitung mit listItem fortsetzen...
}
</pre>
<h2>n Zeilen abfragen</h2>
<p>Es kann aber auch von Bedeutung sein, immer eine gewisse Anzahl von Zeilen einzulesen, um beispielsweise eine Batch-Abfrage einzubauen.</p>
<pre class="brush: csharp;">
SPQuery query = new SPQuery();
query.RowLimit = 10;
do
{
SPListItemCollection items = SPContext.Current.List.GetItems(query);

// Hier kann gut eine Batch-Verarbeitung (z.B. ein Update-Prozess) eingebaut werden.

query.ListItemCollectionPosition = items.ListItemCollectionPosition;
} while (query.ListItemCollectionPosition != null)
</pre>
<p>Gefunden in <a href="http://www.hlmc.de/sharepoint/downloads/dynatraceixdaysharepointjuly09stuttgart.pdf">Quelle</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ansgar.hinerasky.com/zugriff-auf-listen-abfragen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
