Skip to content

Commit e903d77

Browse files
committed
Adding Fields to treeview for Lists and Webs in CSOMSharePointConnector.
1 parent bcac5a1 commit e903d77

File tree

5 files changed

+148
-1
lines changed

5 files changed

+148
-1
lines changed

src/SPCoder.SharePoint.Client/SPCoder.SharePoint.Client.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,8 @@
208208
<Compile Include="Utils\Dummy.cs" />
209209
<Compile Include="Utils\Nodes\ContentTypeContainerNode.cs" />
210210
<Compile Include="Utils\Nodes\ContentTypeNode.cs" />
211+
<Compile Include="Utils\Nodes\FieldContainerNode.cs" />
212+
<Compile Include="Utils\Nodes\FieldNode.cs" />
211213
<Compile Include="Utils\Nodes\FileNode.cs" />
212214
<Compile Include="Utils\Nodes\FolderNode.cs" />
213215
<Compile Include="Utils\Nodes\ListNode.cs" />

src/SPCoder.SharePoint.Client/Utils/CSOMConnector.cs

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,19 @@ public override BaseNode ExpandNode(BaseNode node, bool doIfLoaded = false)
114114
}
115115
}
116116

117+
if (node is FieldContainerNode)
118+
{
119+
if (!doIfLoaded)
120+
{
121+
if (node.Children != null && node.Children.Contains(node))
122+
{
123+
node.Children.Remove(node);
124+
}
125+
126+
DoFields((List<Field>)node.SPObject, node, node.RootNode);
127+
}
128+
}
129+
117130
return node;
118131
}
119132

@@ -304,7 +317,7 @@ private BaseNode DoSPFolder(Microsoft.SharePoint.Client.Folder folder, BaseNode
304317

305318
private BaseNode DoSPList(Microsoft.SharePoint.Client.List list, BaseNode parentNode, BaseNode rootNode)
306319
{
307-
list.EnsureProperties(l => l.RootFolder, l => l.BaseType, l => l.ContentTypes);
320+
list.EnsureProperties(l => l.RootFolder, l => l.BaseType, l => l.ContentTypes, l => l.Fields);
308321

309322
ListNode listNode = parentNode as ListNode;
310323

@@ -316,6 +329,13 @@ private BaseNode DoSPList(Microsoft.SharePoint.Client.List list, BaseNode parent
316329
listContentTypeContainerNode.RootNode = rootNode;
317330
listContentTypeContainerNode.NodeConnector = this;
318331

332+
// Add Field Container node
333+
BaseNode fieldContainerNode = new FieldContainerNode(list.Fields);
334+
listNode.Children.Add(fieldContainerNode);
335+
fieldContainerNode.ParentNode = listNode;
336+
fieldContainerNode.RootNode = rootNode;
337+
fieldContainerNode.NodeConnector = this;
338+
319339
// Add immediate children of the root folder
320340
BaseNode rootFolder = this.DoSPFolder(list.RootFolder, listNode, rootNode, true);
321341
foreach (var subFolder in rootFolder.Children)
@@ -367,6 +387,13 @@ private BaseNode DoSPWeb(Web web, BaseNode parentNode, BaseNode rootNode)
367387
contentTypeContainerNode.RootNode = rootNode;
368388
contentTypeContainerNode.NodeConnector = this;
369389

390+
// Add Field Container node
391+
BaseNode fieldContainerNode = new FieldContainerNode(web.Fields);
392+
myNode.Children.Add(fieldContainerNode);
393+
fieldContainerNode.ParentNode = myNode;
394+
fieldContainerNode.RootNode = rootNode;
395+
fieldContainerNode.NodeConnector = this;
396+
370397
foreach (Microsoft.SharePoint.Client.List list in web.Lists)
371398
{
372399
BaseNode myListNode = new ListNode(list);
@@ -404,6 +431,26 @@ private void DoContentTypes(ContentTypeCollection contentTypes, BaseNode parentN
404431
}
405432
}
406433

434+
private void DoFields(List<Field> fields, BaseNode parentNode, BaseNode rootNode)
435+
{
436+
try
437+
{
438+
foreach (var contentType in fields.OrderBy(c => c.InternalName))
439+
{
440+
FieldNode fieldNode = new FieldNode(contentType);
441+
442+
parentNode.Children.Add(fieldNode);
443+
fieldNode.ParentNode = parentNode;
444+
fieldNode.RootNode = rootNode;
445+
fieldNode.NodeConnector = this;
446+
}
447+
}
448+
catch (Exception ex)
449+
{
450+
// log
451+
}
452+
}
453+
407454
private void DoTenant(Tenant tenant, BaseNode tenantNode, BaseNode rootNode)
408455
{
409456
try
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using Microsoft.SharePoint.Client;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
5+
namespace SPCoder.Utils.Nodes
6+
{
7+
public class FieldContainerNode : BaseNode
8+
{
9+
public FieldContainerNode(FieldCollection fieldsCollection)
10+
{
11+
base.Title = "Fields";
12+
base.SPObjectType = fieldsCollection.GetType().Name;
13+
}
14+
15+
private List<Field> realObject;
16+
public override object GetRealSPObject()
17+
{
18+
if (realObject != null)
19+
return realObject;
20+
21+
object objWeb = base.ParentNode.SPObject;
22+
if (objWeb != null)
23+
{
24+
if (objWeb is Web)
25+
{
26+
Web web = objWeb as Web;
27+
web.EnsureProperties(w => w.Fields);
28+
29+
//FieldCollection fields = web.Fields;
30+
var fields = web.Fields.ToList();
31+
32+
realObject = fields;
33+
return fields;
34+
}
35+
36+
if (objWeb is List)
37+
{
38+
List list = objWeb as List;
39+
list.EnsureProperties(w => w.Fields);
40+
41+
//For lists show only the "useful" fields
42+
var fieldsNotFromBaseType = list.Fields.Where(m => m.FromBaseType == false).ToList();
43+
44+
realObject = fieldsNotFromBaseType;
45+
return fieldsNotFromBaseType;
46+
}
47+
}
48+
49+
return null;
50+
}
51+
}
52+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using Microsoft.SharePoint.Client;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
5+
namespace SPCoder.Utils.Nodes
6+
{
7+
public class FieldNode : BaseNode, LeafNode
8+
{
9+
public FieldNode(Field field)
10+
{
11+
base.Title = field.InternalName;
12+
base.SPObjectType = field.GetType().Name;
13+
base.Url = field.InternalName;
14+
base.IconPath = "DETAIL.GIF";
15+
}
16+
17+
private Field realObject;
18+
public override object GetRealSPObject()
19+
{
20+
if (realObject != null)
21+
return realObject;
22+
23+
object parentObj = base.ParentNode.SPObject;
24+
if (parentObj != null)
25+
{
26+
if (parentObj is List<Field>)
27+
{
28+
List<Field> fields = parentObj as List<Field>;
29+
30+
if (fields.Any(c => c.InternalName == this.Title))
31+
{
32+
realObject = fields.FirstOrDefault(c => c.InternalName == this.Title);
33+
return realObject;
34+
}
35+
}
36+
}
37+
38+
return null;
39+
}
40+
}
41+
}

src/SPCoder.WinApp/Context/ContextItemNameGenerator.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ public ContextItemNameGenerator()
3131
typeNameMappings.Add("ClientContext", "context");
3232

3333
typeNameMappings.Add("String", "str");
34+
35+
typeNameMappings.Add("List", "list");
36+
typeNameMappings.Add("Field", "fld");
3437
}
3538
#endregion
3639

@@ -45,6 +48,8 @@ public string GenerateName(ContextItem item)
4548
}
4649
string name = null;
4750
string prefferefName = type.ToLower();
51+
if (prefferefName.EndsWith("]"))
52+
prefferefName = prefferefName.TrimEnd(']');
4853
if (typeNameMappings.ContainsKey(type))
4954
{
5055
prefferefName = typeNameMappings[type];

0 commit comments

Comments
 (0)