我的Visual Studio 2012解决方案中有一个SharePoint文档库模板,它只是一个带有
的普通文档库类型= “24442”
将其区分为事件接收者。 eventreceiver对ItemAdded和ItemUpdated做出反应
ListTemplateId = “24442”
只要我通过SharePoint WebInterface使用库,eventreceiver就会按预期响应并触发。我尝试使用c#程序将文件放入库中
的那一刻list.RootFolder.Files.Add(...)
事件接收者不会开火。该文件仍保留在库中,不会被处理。 这种行为有原因吗?即使以下代码也不会触发eventreceiver:
var file = list.RootFolder.Files.Add(...);
file.Update();
我已经尝试在这些调用之后放置一个Thread.Sleep但对提升事件没有影响。 (这是在一个关于类似问题的网站上提出的)
---更新---
以下是我用来上传到文档库的代码:
using (SPSite site = new SPSite(Properties.Settings.Default.TargetLocation))
using (SPWeb web = site.OpenWeb())
{
SPList list = web.GetListFromUrl(Properties.Settings.Default.TargetLocation);
if (list != null)
{
Console.WriteLine("Opening folder({0}) and copy files...", Properties.Settings.Default.SourceFolder);
foreach (var file in Directory.GetFiles(Properties.Settings.Default.SourceFolder))
{
try
{
Console.WriteLine("Processing file({0})...", file);
var spfile = list.RootFolder.Files.Add(Path.GetFileName(file), File.ReadAllBytes(file), true);
//spfile.Update();
spfile.Item.Update();
Console.WriteLine("Upload succeeded!");
//File.Delete(file);
Console.WriteLine("Moving file to target location ({0})...", Properties.Settings.Default.TargetFileLocation);
File.Move(file, Path.Combine(Properties.Settings.Default.TargetFileLocation, Path.GetFileNameWithoutExtension(file) + DateTime.Now.ToString("yyyyMMdd_HHmm") + Path.GetExtension(file)));
}
catch (Exception ex)
{
Console.WriteLine("Copy failed\n{0}", ex.ToString());
}
}
}
}