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.




Client Object Model - LookUp Wert zuweisen

Unbeantwortet Dieser Beitrag hat 4 Antworten

Ohne Rang
31 Beiträge
AHO erstellt 25 Nov. 2011 15:13
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

(Hatte diesen Beitrag bereits schon einmal verfasst - allerdings im flaschen Unterforum (bei 2007). Vielleicht mag ein MOD diesen Beitrag im 2007 Forum löschen)

Hi @ll,

 

wenn ich ein Listen Item erstelle und diesem einen Wert für ein Lookup-Feld (Lookup With Picker) hinzufüge, wird dies (als das Lookup-Feld Value) meistens nicht übernommen (meistens, da bei erstellen von über 40 Listen-Items per Skript - eins einen Wert im Lookup Feld hat).

Mein Script sieht in etwa so aus:

 

ListItemCreationInformation listItemInfo = new ListItemCreationInformation();
                ListItem tempListItem = list.AddItem(listItemInfo);
               
                foreach (XmlNode field in node.ChildNodes)
                {


                    if(string.IsNullOrEmpty(field.InnerText.Trim()))
                        continue;

                    if ("title".Equals(field.Name))
                    {
                        tempListItem["Title"] = field.InnerText.Trim();
                        tempListItem.Update();
                    }

                    if ("online_date".Equals(field.Name))
                    {
                       
                        tempListItem["online_date"] = DateTime.Parse(field.InnerText.Trim());
                        tempListItem.Update();
                    }

                    if ("offline_date".Equals(field.Name))
                    {
                        tempListItem["offline_date"] = DateTime.Parse(field.InnerText.Trim());
                        tempListItem.Update();
                    }

                    if ("field".Equals(field.Name))
                    {
                    
                        if ("text_plain".Equals(field.Attributes["type"].Value))
                        {
                            tempListItem[field.Attributes["name"].Value] = field.InnerText.Trim();
                            tempListItem.Update();
                        }

                        if ("text_html".Equals(field.Attributes["type"].Value))
                        {
                            tempListItem[field.Attributes["name"].Value] = field.InnerText.Trim();
                            tempListItem.Update();
                        }

                        if ("datetime".Equals(field.Attributes["type"].Value))
                        {
                            tempListItem[field.Attributes["name"].Value] = DateTime.Parse(field.InnerText.Trim());
                            tempListItem.Update();
                        }

                      
                        if ("upload".Equals(field.Attributes["type"].Value))
                        {


                            string fileName = field.InnerText.Trim().Split('/')[1];

                            ListItem item = GetPictureListId( fileName); //such nach dem Item in der Picture-Library
                            if (item == null)
                                throw new Exception("item == null");
                            FieldLookupValue value = new FieldLookupValue();
                            value.LookupId = item.Id;
                            tempListItem[field.Attributes["name"].Value] = value;

                            tempListItem.Update();
                           
                           
                           
                        }


                        if ("thumbnail".Equals(field.Attributes["type"].Value))
                        {

                            string fileName = field.InnerText.Trim().Split('/')[1];

                            ListItem item = GetPictureListId( fileName);
                            if (item == null)
                                throw new Exception("item == null");
                            FieldLookupValue value = new FieldLookupValue();
                            value.LookupId = item.Id;
                            tempListItem[field.Attributes["name"].Value] = value;

                            tempListItem.Update();
                           
                        }
                    }
                }

               
                remoteCtx.ExecuteQuery();

 

Das XML aus dem die Daten importiert wird sieht in etwa so aus:

<article>
    <title><![CDATA[Lupe - 64 Pixel]]></title>
    <online_date><![CDATA[2010-05-05 00:00:00]]></online_date>
    <offline_date></offline_date>
    <field name="short_description" type="text_plain"><![CDATA[Lupe - 64 Pixel]]></field>
    <field name="long_description" type="text_plain"></field>
    <field name="keyword" type="text_plain"><![CDATA[Lupe  64 Pixel]]></field>
    <field name="upload" type="upload" filename="magnifying_glass_64.png" filesize="6238" mimetype="image/png"><![CDATA[329/magnifying_glass_64.png]]></field>

    <field name="thumbnail" type="thumbnail" filename="magnifying_glass_64.png.8331.png" filesize="8862" mimetype="image/png"><![CDATA[329/magnifying_glass_64.png.8331.png]]></field>

</article>

 

Mache ich etwas falsch in meinem Code?

 

Viele Dank im vorraus,

Andreas

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 25 Nov. 2011 15:46
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich hatte Deinen Beitrag damals schon gesehen, aber keine Lust, den ganzen Text durchzusehen. Habe ich immer noch nicht...

Wenn Du ein Problem hast, solltest Du immer zuerst versuchen, das Problem einzugrenzen und die Aufgabe auf wenige Zeilen Code zu beschränken. Einfach um den ganzen unnötigen Ballasr loszuwerden, der nur zur Verwirrung beiträgt. Zur Not macht man das durch einige Zeilen mit festcodierten Werten.

Bei Dir wäre das in etwa:
ListItem item = list.AddItem(new ListItemCreationInformation());
item["Fieldname"] = irgendEinWert;
item.Update();

Erst wenn das mit dem problematischen Feld funktioniert, baust Du den ganzen Rest drumrum.

PS: was ist das eigentlich für ein Feldtyp? "Lookup With Picker" ist jedenfalls kein Standardfeld und alleine schon deshalb weiß niemand, wie man das per Client OM setzt.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
31 Beiträge
AHO Als Antwort am 25 Nov. 2011 17:01
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andi Fandrich"]

Erst wenn das mit dem problematischen Feld funktioniert, baust Du den ganzen Rest drumrum.

[/quote]

Alle anderen Felder (wie Title) funktionieren. Es sind nur die LookUp Felder.

 

[quote user="Andi Fandrich"]

PS: was ist das eigentlich für ein Feldtyp? "Lookup With Picker" ist jedenfalls kein Standardfeld und alleine schon deshalb weiß niemand, wie man das per Client OM setzt.

[/quote]

http://ilovesharepoint.codeplex.com/releases/view/44989

Damit kann man die Lookup Felder auch endlich mal nutzbar machen. Sonst muss man ja bei einem normalen Lookup-Feld, dass auf eine Liste mit mehr als 300 Items zeig, sich ja mühsam durchwühlen!

Viele Grüße,

Andreas

 

P.S.:

[quote user="Andi Fandrich"]

Ich hatte Deinen Beitrag damals schon gesehen, aber keine Lust, den ganzen Text durchzusehen. Habe ich immer noch nicht...

[/quote]

Über 8k Antworten in diesem Forum und dann trotzdem sowas... Sry will nun keinen Streit vom Zaun brechen, da ich neu in der Sharepoint Welt bin aber sehr wertschätzend ist das nicht. Außerdem ist es nicht viel mehr Text (das meiste ist ja Quellcode) als dein Post.

 

 

Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 25 Nov. 2011 17:28
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich würde an Deiner Stelle mal schauen ob Du bei Codeplex an den Quellcode drankommst und dort nachvollziehen kannst, wie dort die Werte gesetzt werden. Ich nehme mal an, dass es nicht reicht die ID alleine zu setzen sondern das Ganze irgendwie so aussehen muss "ID#;Title" .

[quote user="AHO"]

Über 8k Antworten in diesem Forum und dann trotzdem sowas... Sry will nun keinen Streit vom Zaun brechen, da ich neu in der Sharepoint Welt bin aber sehr wertschätzend ist das nicht. Außerdem ist es nicht viel mehr Text (das meiste ist ja Quellcode) als dein Post.

 [/quote]

Hier muss ich mal was zu sagen... Sonderlich wertschätzend verhälst Du dich gerade auch nicht. ;-)
Jeder der hier antwortet macht das "nebenher" (sprich neben seinem eigentlichen Beruf) und da können wir nunmal keine 50 - 100 Zeilen Quellcode, welche wir nicht selbst geschrieben haben, analysieren - zumal noch nichtmals hevorgehoben war, wo das Problem genau lag, sprich wo Du auf das Lookup-Feld zugreifst / Werte setzt.

Beste Grüße,
Christian

http://www.sharepoint-rhein-ruhr.de

Ohne Rang
31 Beiträge
AHO Als Antwort am 28 Nov. 2011 15:30
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ist zwar fast OT nun ;-) aber das Problem lag wo ganz anders. Die Items auf die meine Relationen zeigten hatte zum Teil keinen Title. Daher wurde nix angezeigt im Lookup-Field...