C# 如果使用不同的ID文件,所有文档都将显示为未读。由于未读标记由用户跟踪,您是否尝试使用用于复制的ID以外的ID打开这些目标数据库,以查看文档是否显示为未读给其他用户?我已验证如果使用不同的ID文件打开NSF,所有文档都将显示为未读。由于PutInFolde
C# 如果使用不同的ID文件,所有文档都将显示为未读。由于未读标记由用户跟踪,您是否尝试使用用于复制的ID以外的ID打开这些目标数据库,以查看文档是否显示为未读给其他用户?我已验证如果使用不同的ID文件打开NSF,所有文档都将显示为未读。由于PutInFolde,c#,com,lotus-notes,lotus-domino,lotus,C#,Com,Lotus Notes,Lotus Domino,Lotus,如果使用不同的ID文件,所有文档都将显示为未读。由于未读标记由用户跟踪,您是否尝试使用用于复制的ID以外的ID打开这些目标数据库,以查看文档是否显示为未读给其他用户?我已验证如果使用不同的ID文件打开NSF,所有文档都将显示为未读。由于PutInFolder()和MarkUnread()是NotesDocument类的方法,因此从源文件复制后,我必须在目标NSF中的文档上调用它们。如何确定我刚刚复制了哪个文档?或者,如何确定目标NSF中的给定文档与源NSF中的哪个文档相对应?NotesDatab
如果使用不同的ID文件,所有文档都将显示为未读。由于未读标记由用户跟踪,您是否尝试使用用于复制的ID以外的ID打开这些目标数据库,以查看文档是否显示为未读给其他用户?我已验证如果使用不同的ID文件打开NSF,所有文档都将显示为未读。由于PutInFolder()和MarkUnread()是NotesDocument类的方法,因此从源文件复制后,我必须在目标NSF中的文档上调用它们。如何确定我刚刚复制了哪个文档?或者,如何确定目标NSF中的给定文档与源NSF中的哪个文档相对应?NotesDatabase.AllDocuments.GetLastDocument()可以正常工作吗?如果您一次复制一个文档,您可能会在复制文档后立即拥有新数据库中文档的句柄。即,使用doc2=doc1.CopyToDatabase(destDb),然后检查doc1的FolderReferences属性,并使用doc2.PutInFolder()。如果出于某种原因需要先进行所有复制,然后再通过复制的文档设置文件夹和未读标记,如果您的应用程序没有包含每个文档唯一标识符的NotesItem,那么您必须在复制时构建一个noteid对列表,然后在该列表中迭代,以返回并设置文件夹和未读属性。Ken的解决方案不假设folderReferences可用,正在使用UNID而不是noteid。请注意,在一些较旧版本的注释中,UNId由CopytoDebug方法保存,但这不再是真的了。所以请记住,不能使用ND2.GeDiguffTyBunID查找相应的文档。C++有注释,根据这个旧的StackOverflow线程,看起来这是你的选择:Notes C API是另一个选择,但它的级别非常低,因此需要对NSF内部的情况有相当深入的了解。因为PutInFolder()和MarkUnread()是NotesDocument类的方法,在从源文件复制完目标NSF中的文档后,我必须调用它们。如何确定我刚刚复制了哪个文档?或者,如何确定目标NSF中的给定文档与源NSF中的哪个文档相对应?NotesDatabase.AllDocuments.GetLastDocument()可以正常工作吗?如果您一次复制一个文档,您可能会在复制文档后立即拥有新数据库中文档的句柄。即,使用doc2=doc1.CopyToDatabase(destDb),然后检查doc1的FolderReferences属性,并使用doc2.PutInFolder()。如果出于某种原因需要先进行所有复制,然后再通过复制的文档设置文件夹和未读标记,如果您的应用程序没有包含每个文档唯一标识符的NotesItem,那么您必须在复制时构建一个noteid对列表,然后在该列表中迭代,以返回并设置文件夹和未读属性。Ken的解决方案不假设folderReferences可用,正在使用UNID而不是noteid。请注意,在一些较旧版本的注释中,UNId由CopytoDebug方法保存,但这不再是真的了。所以请记住,不能使用ND2.GeDiguffTyBunID查找相应的文档。C++有注释,根据这个旧的StackOverflow线程,看起来这是你的选择:Notes C API是另一个选择,但它的级别非常低,因此需要对NSF内部的情况有相当深入的了解。
//Establish session
NotesSession ns = new Domino.NotesSessionClass();
ns.Initialize("");
//Open source NSF
NotesDatabase nd = ns.GetDatabase("", "test.nsf", false);
//Open destination NSF.
//Assume that all design elements of nd2 are identical to those of nd
NotesDatabase nd2 = ns.GetDatabase("", "test2.nsf", false);
//Create view that returns all documents.
NotesView nView2 = nd.GetView("$All");
nd.CreateView("All-DR", "SELECT @ALL", nView2, false);
NotesView nView = NotesConnectionDatabase.GetView("All-DR");
//Loop through entries in the new view
NotesViewEntry nvec = nView.AllEntries;
nve = nvec.GetFirstEntry();
for (int j = 1; j <= intEntryCount; j++)
{
if (j == 1)
{
nve = nvec.GetFirstEntry();
}
else
{
nve = nvec.GetNextEntry(nve);
}
//Copy document to second database.
NotesDocument ndoc = nd.GetDocumentByUNID(nve.UniversalID);
ndoc.CopyToDatabase(nd2);
}
//End loop.
//All documents are copied.
object oViews = nd.Views;
object[] oarrViews = (object[])oViews;
Dictionary<string, List<string>> folderDict = new Dictionary<string, List<string>>();
for (int x=0; x < oarrViews.Length - 1; x++)
{
NotesView view = viewArray[x];
if (view.IsFolder)
{
NotesDocument doc = view.GetFirstDocument();
while (doc != null)
{
// Populate folderDict Dictionary by setting
// document's UNID as Key, and adding folder name to List
}
}
}
//Copy document to second database.
NotesDocument ndoc = nd.GetDocumentByUNID(nve.UniversalID);
NotesDocument newDoc = ndoc.CopyToDatabase(nd2);
if (folderDict.ContainsKey(nve.UniversalID)) {
foreach (var folderName in folderDict[nve.UniversalID]) {
newDoc.PutInFolder(folderName, true);
}
}