Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 34d5ad3

Browse files
authored
Merge pull request #9 from JBoman32768/Issue#6
Fix for 20 Project Limit (Issue#6)
2 parents ca4dc97 + 3e19e3f commit 34d5ad3

7 files changed

Lines changed: 68 additions & 20 deletions

File tree

365-Project-Online-OM-ProjToolV2/ProjToolV2/Manage/CheckInCheckOut.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -165,10 +165,10 @@ private void LoadProjects()
165165

166166
private void LoadProjectsList()
167167
{
168-
IEnumerable<PublishedProject> projectList =
169-
ProjContext.LoadQuery(ProjContext.Projects.Include(p => p.Name, p => p.Id, p => p.IsCheckedOut,
170-
p => p.Owner.LoginName, p => p.CheckedOutBy.LoginName, p => p.CheckedOutDate));
171-
ProjContext.ExecuteQuery();
168+
IEnumerable<PublishedProject> projectList = CsomHelper.LoadAllProjects(
169+
p => p.Name, p => p.Id, p => p.IsCheckedOut, p => p.Owner.LoginName,
170+
p => p.CheckedOutBy.LoginName, p => p.CheckedOutDate
171+
);
172172

173173
List<ListViewItem> listViewItems = new List<ListViewItem>();
174174
foreach (PublishedProject project in projectList)

365-Project-Online-OM-ProjToolV2/ProjToolV2/Manage/ProjectOwner.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,9 @@ private void LoadProjects()
8282
{
8383
Log.WriteVerbose(new SourceInfo(), "Loading projects");
8484

85-
IEnumerable<PublishedProject> projectList = ProjContext.LoadQuery(ProjContext.Projects.Include(p => p.Name, p => p.Owner, p => p.Id, p => p.Owner.Title, p => p.IsCheckedOut, p => p.CheckedOutBy.Title, p => p.Draft.LastSavedDate, p => p.Draft));
86-
ProjContext.ExecuteQuery();
85+
IEnumerable<PublishedProject> projectList = CsomHelper.LoadAllProjects(
86+
p => p.Name, p => p.Owner, p => p.Id, p => p.Owner.Title, p => p.IsCheckedOut,
87+
p => p.CheckedOutBy.Title, p => p.Draft.LastSavedDate, p => p.Draft);
8788
List<ListViewItem> listViewItems = new List<ListViewItem>();
8889
foreach (PublishedProject project in projectList)
8990
{

365-Project-Online-OM-ProjToolV2/ProjToolV2/Manage/ProjectTeamBuilder.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,8 @@ private void LoadProjectsAndResources()
9090
private void GetDraftProjectsList()
9191
{
9292
LV_Projects.InvokeIfRequired(s => s.Items.Clear());
93-
IEnumerable<PublishedProject> projectList =
94-
ProjContext.LoadQuery(ProjContext.Projects.Include(p => p.Draft.Name, p => p.Draft.Id,
95-
p => p.IsCheckedOut));
96-
ProjContext.ExecuteQuery();
93+
IEnumerable<PublishedProject> projectList = CsomHelper.LoadAllProjects(
94+
p => p.Draft.Name, p => p.Draft.Id, p => p.IsCheckedOut);
9795
PublishedProject[] publishedProjects = projectList.ToArray();
9896
List<ListViewItem> listViewItems = new List<ListViewItem>();
9997
foreach (PublishedProject project in publishedProjects)

365-Project-Online-OM-ProjToolV2/ProjToolV2/Manage/ProjectsPublish.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,9 @@ private void LoadProjectsList()
6767
s.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
6868
});
6969

70-
IEnumerable<PublishedProject> projectList =
71-
ProjContext.LoadQuery(ProjContext.Projects.Include(p => p.Name, p => p.Id, p => p.IsCheckedOut,
72-
p => p.CheckedOutBy.LoginName, p => p.LastPublishedDate, p => p.Owner.LoginName,
73-
p => p.Draft.LastSavedDate));
74-
ProjContext.ExecuteQuery();
70+
IEnumerable<PublishedProject> projectList = CsomHelper.LoadAllProjects(
71+
p => p.Name, p => p.Id, p => p.IsCheckedOut, p => p.CheckedOutBy.LoginName,
72+
p => p.LastPublishedDate, p => p.Owner.LoginName, p => p.Draft.LastSavedDate);
7573

7674
List<ListViewItem> listViewItems = new List<ListViewItem>();
7775
foreach (PublishedProject proj in projectList)

365-Project-Online-OM-ProjToolV2/ProjToolV2/Manage/ServerObjectsDelete.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -447,8 +447,8 @@ private void LoadProjectsList()
447447
s.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
448448
});
449449

450-
IEnumerable<PublishedProject> projectList = ProjContext.LoadQuery(ProjContext.Projects.Include(p => p.Name, p => p.Id, p => p.IsCheckedOut, p => p.Owner.LoginName, p => p.CheckedOutBy.LoginName, p => p.CheckedOutDate));
451-
ProjContext.ExecuteQuery();
450+
IEnumerable<PublishedProject> projectList = CsomHelper.LoadAllProjects(
451+
p => p.Name, p => p.Id, p => p.IsCheckedOut, p => p.Owner.LoginName, p => p.CheckedOutBy.LoginName, p => p.CheckedOutDate);
452452

453453
List<ListViewItem> listViewItems = new List<ListViewItem>();
454454
foreach (PublishedProject project in projectList)

365-Project-Online-OM-ProjToolV2/ProjToolV2/Update/ProjectUpdater.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,8 @@ private void LoadProjects()
6868
s.Items.Clear();
6969
});
7070

71-
IEnumerable<PublishedProject> projectList =
72-
ProjContext.LoadQuery(ProjContext.Projects.Include(p => p.Draft.Name, p => p.Draft, p => p.IsCheckedOut));
73-
ProjContext.ExecuteQuery();
71+
IEnumerable<PublishedProject> projectList = CsomHelper.LoadAllProjects(
72+
p => p.Draft.Name, p => p.Draft, p => p.IsCheckedOut);
7473
Dictionary<string, PublishedProject> projList = new Dictionary<string, PublishedProject>
7574
{
7675
{"Select a Project", null}

365-Project-Online-OM-ProjToolV2/ProjToolV2/Utilities/CsomHelper.cs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using System.Collections.Generic;
1111
using System.DirectoryServices.AccountManagement;
1212
using System.Linq;
13+
using System.Linq.Expressions;
1314
using System.Windows.Forms;
1415

1516
namespace ProjToolV2
@@ -35,6 +36,57 @@ public static bool CheckCurrentResourceIsAssignable()
3536
return CsomBase.CurrentResource.ResourceType == EnterpriseResourceType.Work;
3637
}
3738

39+
const int PROJECT_BLOCK_SIZE = 20;
40+
41+
public static IEnumerable<PublishedProject> LoadAllProjects(params Expression<Func<PublishedProject, object>>[] retrievals)
42+
{
43+
// Due to limitaitons in the CSOM - only 20 projects can be loaded at a time.
44+
45+
// Based on code from Nadin Mirali in the Project Product Group at Microsoft
46+
// https://www.yammer.com/itpronetwork/#/Threads/show?threadId=673325901
47+
48+
//Query for all the projects first
49+
ProjContext.Load(ProjContext.Projects, proj => proj.Include(p => p.Id));
50+
ProjContext.ExecuteQuery();
51+
var allIds = ProjContext.Projects.Select(p => p.Id).ToArray();
52+
53+
IEnumerable<PublishedProject> result = null;
54+
55+
//get the number of blocks we will have
56+
int numBlocks = allIds.Length / PROJECT_BLOCK_SIZE + 1;
57+
//Query all the child objects in blocks of 20
58+
for (int i = 0; i < numBlocks; i++)
59+
{
60+
var idBlock = allIds.Skip(i * PROJECT_BLOCK_SIZE).Take(PROJECT_BLOCK_SIZE);
61+
Guid[] block = new Guid[PROJECT_BLOCK_SIZE]; //Zero'd Guid Array
62+
Array.Copy(idBlock.ToArray(), block, idBlock.Count());
63+
64+
//some elements will be Zero'd guids at the end
65+
var projectQuery = ProjContext.Projects.Where(p =>
66+
p.Id == block[0] || p.Id == block[1] ||
67+
p.Id == block[2] || p.Id == block[3] ||
68+
p.Id == block[4] || p.Id == block[5] ||
69+
p.Id == block[6] || p.Id == block[7] ||
70+
p.Id == block[8] || p.Id == block[9] ||
71+
p.Id == block[10] || p.Id == block[11] ||
72+
p.Id == block[12] || p.Id == block[13] ||
73+
p.Id == block[14] || p.Id == block[15] ||
74+
p.Id == block[16] || p.Id == block[17] ||
75+
p.Id == block[18] || p.Id == block[19]
76+
).Include(retrievals);
77+
78+
var blockResult = ProjContext.LoadQuery(projectQuery);
79+
ProjContext.ExecuteQuery();
80+
81+
if (result != null)
82+
result = result.Concat(blockResult);
83+
else
84+
result = blockResult;
85+
}
86+
87+
return result;
88+
}
89+
3890
public static void ExecuteAndWait(QueueJob queueJob, TextBox textbox)
3991
{
4092
ExecuteAndWait(new List<QueueJob> { queueJob }, textbox);

0 commit comments

Comments
 (0)