Вот такой запуск:
LookUpCreator http://server/site1 10 10 100
создаст 10 листов "ToList
Хочу отметить что первая лукапная колонка не содержит значении специально. И так же часть значении не заполнены. Этим я имитировал некоторые нужные мне ситуации.
static void Main(string[] args)
{
Console.WriteLine("LookUps creator usage <site url> <to lists count> <to lists items> <lookup items count>");
var siteUrl = args[0];
var toCount = int.Parse(args[1]); // 10;
var toListItemsCount = int.Parse(args[2]); // 10;
var lookUpItemsCount = int.Parse(args[3]); // 7000;
var listToBaseName = "ToList";
var lookUplistName = "LookUpList";
using (var site = new SPSite(siteUrl))
{
using (var web = site.OpenWeb())
{
Console.WriteLine("Creating to {0} lists with {1} items", toCount, toListItemsCount);
var toLists = new List<SPList>(toCount);
for (int iList=0; iList<toCount; iList++)
{
var toListName = listToBaseName + iList.ToString();
Console.WriteLine("Creating to list '{0}'", toListName);
var lstId = web.Lists.Add(toListName, "test to list",SPListTemplateType.GenericList);
var spList = web.Lists.GetList(lstId, true);
toLists.Add(spList);
for (int iItem = 0; iItem < toListItemsCount; iItem++)
{
var item = spList.Items.Add();
item["Title"] = string.Format("List '{0}' item {1}",toListName,iItem );
item.Update();
Console.WriteLine("\tadd item {0}", iItem);
}
}
Console.WriteLine("Creating look up list {0}", lookUplistName);
var lookUplstId = web.Lists.Add(lookUplistName, "test lookup list", SPListTemplateType.GenericList);
var spLookUpList = web.Lists.GetList(lookUplstId, true);
for (int iField = 0; iField<toCount; iField++)
{
var fldName = "LookUpField"+iField.ToString();
var fldIntName = spLookUpList.Fields.AddLookup(fldName, toLists[iField].ID, false);
var fldLookUp = spLookUpList.Fields[fldIntName] as SPFieldLookup;
fldLookUp.ShowInDisplayForm = true;
fldLookUp.LookupField = "Title";
fldLookUp.Update();
Console.WriteLine("\tadd column '{0}'", fldIntName);
}
Console.WriteLine("Creating {0} look up items", lookUpItemsCount);
var Rnd = new Random();
for (int iItem = 0; iItem < lookUpItemsCount; iItem++)
{
var spItem = spLookUpList.Items.Add();
spItem["Title"] = "Item " + iItem.ToString();
for (int iField = 0; iField < toCount; iField++)
{
var fldName = "LookUpField" + iField.ToString();
if (iField == 0)
spItem[fldName] = null;
else
{
var rId = Rnd.Next(0, toListItemsCount);
if (rId == 0)
spItem[fldName] = null;
else
spItem[fldName] = rId;
}
}
spItem.Update();
Console.WriteLine("\t" + spItem.Title);
}
Console.WriteLine("Done!");
}
}
}
{
Console.WriteLine("LookUps creator usage <site url> <to lists count> <to lists items> <lookup items count>");
var siteUrl = args[0];
var toCount = int.Parse(args[1]); // 10;
var toListItemsCount = int.Parse(args[2]); // 10;
var lookUpItemsCount = int.Parse(args[3]); // 7000;
var listToBaseName = "ToList";
var lookUplistName = "LookUpList";
using (var site = new SPSite(siteUrl))
{
using (var web = site.OpenWeb())
{
Console.WriteLine("Creating to {0} lists with {1} items", toCount, toListItemsCount);
var toLists = new List<SPList>(toCount);
for (int iList=0; iList<toCount; iList++)
{
var toListName = listToBaseName + iList.ToString();
Console.WriteLine("Creating to list '{0}'", toListName);
var lstId = web.Lists.Add(toListName, "test to list",SPListTemplateType.GenericList);
var spList = web.Lists.GetList(lstId, true);
toLists.Add(spList);
for (int iItem = 0; iItem < toListItemsCount; iItem++)
{
var item = spList.Items.Add();
item["Title"] = string.Format("List '{0}' item {1}",toListName,iItem );
item.Update();
Console.WriteLine("\tadd item {0}", iItem);
}
}
Console.WriteLine("Creating look up list {0}", lookUplistName);
var lookUplstId = web.Lists.Add(lookUplistName, "test lookup list", SPListTemplateType.GenericList);
var spLookUpList = web.Lists.GetList(lookUplstId, true);
for (int iField = 0; iField<toCount; iField++)
{
var fldName = "LookUpField"+iField.ToString();
var fldIntName = spLookUpList.Fields.AddLookup(fldName, toLists[iField].ID, false);
var fldLookUp = spLookUpList.Fields[fldIntName] as SPFieldLookup;
fldLookUp.ShowInDisplayForm = true;
fldLookUp.LookupField = "Title";
fldLookUp.Update();
Console.WriteLine("\tadd column '{0}'", fldIntName);
}
Console.WriteLine("Creating {0} look up items", lookUpItemsCount);
var Rnd = new Random();
for (int iItem = 0; iItem < lookUpItemsCount; iItem++)
{
var spItem = spLookUpList.Items.Add();
spItem["Title"] = "Item " + iItem.ToString();
for (int iField = 0; iField < toCount; iField++)
{
var fldName = "LookUpField" + iField.ToString();
if (iField == 0)
spItem[fldName] = null;
else
{
var rId = Rnd.Next(0, toListItemsCount);
if (rId == 0)
spItem[fldName] = null;
else
spItem[fldName] = rId;
}
}
spItem.Update();
Console.WriteLine("\t" + spItem.Title);
}
Console.WriteLine("Done!");
}
}
}
Может быть, кому-нибудь пригодится или послужит примером. UPD: Вариант этого же кода, но на PowerShell тут
9 комментариев:
По идее, такие дела надо на PS делать... Я уже начал на нём моделировать всякие действия, а потом на C# переносить ;-)
Только доллар спереди писать задалбывает :-(
Согласен ,но я пока не могу себя заставить писать что либо на PS ,непривычный он уж больно.
Я вот заставляю - очень уж удобно обработчики на списки на нём делать. Там можно прямо как на шарпе делать, только вот доллары...
Попробую на досуге переписать. :)
Вот переписал на PowerShell (см. отдельный пост), писать везде $ достает ,но еще больше достают всякие -lt и -eq вместо человеческих знаков больше, меньше и равно. :)
Да, это тоже ;-) Главное, отладчика нет для Глесснеровских примочек
Сорри, а что такое "Глесснеровские примочки"? Просто в том же PowerGUI вполне себе рабочий отладчик.
На codeplex по слову iLoveSharepoint - эти самые примочки от C.Glessner.
Отправка комментария