我试图遍历SPListItem.Versions集合以查找最新批准的列表项.
我的列表项有三个版本:前两个是批准的,最后一个是草稿.但我的代码说他们都在选秀中!请帮忙!
// Iterate through all versions
for (int index = 0; index < item.Versions.Count; index++)
{
SPListItem versionedItem = item.Versions[index].ListItem;
// Check if moderation information is set to approved
if (versionedItem.ModerationInformation.Status.Equals(SPModerationStatusType.Approved))
{
// We found an approved version!
itemFound = versionedItem;
}
}
Run Code Online (Sandbox Code Playgroud) 我们的一位客户遇到了无法重现的问题.我们使用SPFile.Properties以编程方式将文档的属性复制到目标文件.但是,由于某种原因,文件的属性与列表中指定的元数据不匹配,文件存储在其中.
现在,我们可以通过复制SPFile.Item.Properties(尚未测试)来解决这个问题,但我只是想知道在什么情况下SPFile.Properties与SPFile.Item.Properties不相等.
更新:我们刚收到客户的最新消息.使用SPFile.Item.Properties始终返回最新信息.但是,我们仍然想了解原始问题.
我试图通过CAML查询获取特定用户创建的最新项目,但它似乎返回所有人创建的所有数据.
请帮忙.
这是我的代码:
string lifestyleQuery = @"<Where><Eq><FieldRef Name='Author' /><Value Type='Text'>" + _id + @"</Value></Eq></Where>";
Run Code Online (Sandbox Code Playgroud) 我有一个自定义列表,可以包含CustomContentType.这是我创建一个新项目的方式:
//Create root folder
SPListItem rootItem = navigation.Items.Add();
SPContentType folderType = navigation.ContentTypes["ListLevel"];
rootItem[SPBuiltInFieldId.Title] = "root";
rootItem["ContentTypeId"] = folderType.Id;
rootItem.Update();
Run Code Online (Sandbox Code Playgroud)
问题是,当我看到我的列表后,我看到:
当我通过webbrowser转到列表并手动创建内容类型时,一切都很好.(这意味着标题是"根"而不是ID).
我试图删除SharePoint列表中的多个项目,其约束是要删除所有项目或不删除任何项目.
简而言之,我希望在SharePoint中创建更多的事务行为.我尝试过使用该ProcessBatchData()
功能,但似乎不符合我的要求.或许,有人知道另一种方法来实现这一目标吗?
我正在制作一份清单,供人们在我们公司的网站上完成任务.我现在正在处理的功能是,一旦他们完成任务并将其标记为已完成,我希望我们的sharepoint webpart向他们发送一封电子邮件,其中包含他们仍需要完成的内容列表.
由于希望能够随意向列表中添加和减去项目的权力,它需要是模块化的,因此检查列表需要是模块化的并且也以模块化术语编写.
我遇到的问题是所有任务都存储在现有代码的SPList中.我不确定如何遍历列表以查明该人是否已完成以下任务.我没有看到任何next,previous,head或tail操作(正如我所期望的那样).由于索引使用字符串,因此其行为更像是关联数据结构(映射)或来自数据库的主键.
请帮助,谢谢大家!
干杯,
-Jeremiah Tantongco
我正在尝试从SharePoint库获取所有文件夹和文件,并执行一个请求。
CamlQuery query = new CamlQuery();
query.ViewXml = "<View Scope='RecursiveAll' />";
var libraryName = "Specific Documents";
ListItemCollection itemsRaw = clientContext.Web.Lists.GetByTitle(libraryName).GetItems(query);
clientContext.Load(itemsRaw);
clientContext.ExecuteQuery();
Run Code Online (Sandbox Code Playgroud)
这段代码运行良好,因此,我在指定的库中列出了所有文件夹和文件。
似乎文件详细信息以惰性方式加载。仅细节层次结构中的第一级。但是我不知道如何,FieldValues集合充满了Data。
我看到ListItem ContentType.Name
尚未初始化。
是否有可能以某种方式更新查询,该方式将在此单个调用中加载ContentType的数据。
还是唯一的办法是遍历所有文件并对特定文件进行ContentType加载?
我以以下方式执行此操作:
foreach(var listItem in listItemCollection)
{
context.Load(listItem, k => k.ContentType);
context.ExecuteQuery();
var contentTypeName = listItem.ContentType.Name;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果可能的话,我将在一次调用中获取此信息,而无需在集合中进行迭代并开始对ClientContext进行多次调用。
PS:我是SharePoint编程的新手。我只想修复一个错误。
谢谢!
当我试图获取id时:
string idValue = item[Lookup].ToString();
Run Code Online (Sandbox Code Playgroud)
我通过示例得到了下一个值:
1#1
我需要这样的价值:
1
实际上这段代码处理了这个要求:
using (SPSite site = new SPSite(context.CurrentWebUrl))
{
using (SPWeb web = site.OpenWeb())
{
//Context list
SPList list = web.Lists[context.ListId];
SPList child = web.Lists[List];
SPListItem currentItem = list.GetItemById(context.ItemId);
string updateItems = "";
int ID = currentItem.ID;
foreach (SPListItem item in child.Items)
{
string idValue = item[Lookup].ToString();
int partial = idValue.LastIndexOf(";");
string idPure = idValue.Substring(0, partial);
if (idPure == ID.ToString())
{
item[Field] = Value;
item.Update();
updateItems += item.ID.ToString();
}
}
//Return Items*/ …
Run Code Online (Sandbox Code Playgroud) 我试图将SPListItem(带文件)从一个网站集复制到另一个网站集.我通过创建这样的文件来做到这一点:
var archiveFile = newsArchive.Lists[listName].RootFolder.Files.Add(originalItem.File.Name, originalItem.File.OpenBinary());
var archiveItem = archiveFile.Item;
Run Code Online (Sandbox Code Playgroud)
通过我编写的实用工具方法,然后将新项目的所有字段值设置为与原始项目相对应,如此
Utilities.PopulateListItemMetadata(....)
Run Code Online (Sandbox Code Playgroud)
问题是,这不会持续作者字段.
我尝试以各种可想象的方式明确地设置Author字段,例如:
string userName = originalItem.GetUser("Created by").LoginName;
SPUser user = newsArchive.SiteUsers[userName];
archiveItem["Author"] = user.ID + ";#" + user.LoginName;
archiveItem.Update();
Run Code Online (Sandbox Code Playgroud)
就像这样
string userName = originalItem.GetUser("Created by").LoginName;
SPUser user = newsArchive.SiteUsers[userName];
archiveItem["Author"] = user;
archiveItem.Update();
Run Code Online (Sandbox Code Playgroud)
但是一旦调用了SPListItem.Update()方法,archiveItem ["Author"]字段就会恢复为sharepoint\system.我在这里有点不知所措,这应该有效..
PS SPListItem.GetUser方法是一种扩展方法
PPS代码正在从计时器作业运行...
编辑:通过向内容类型添加新字段然后设置该字段以反映原始项目的作者,进行了更多挖掘,但也未设置.但是,web.EnsureUser(用户名)确实返回了正确的用户.这很奇怪还是什么!?!
我想要查询的列表中有大约10000多行(Listitems).
我想迭代一个timerJob中的每个项目 - 但我不能一次采取所有这些:对象模型覆盖 - 否,ListView阈值 - 1000 - 在FARM级别,我不能改变它.
我有什么方法可以迭代10000+(像一批)?
splistitem ×10
sharepoint ×8
c# ×5
caml ×1
copy ×1
lookup ×1
object-model ×1
splist ×1
spquery ×1
transactions ×1
versioning ×1