Hallo,
ich fände es super, wenn die Literaturverweise im Reiter Zusammenhang grafisch darstellbar wären oder zumindest so exportierbar o.ä.--> Ziel: Mindmap/Übersicht zu den Zusammenhängen/Genese der Paper.
using System;
using System.Linq;
using System.ComponentModel;
using System.Collections.Generic;
using System.Windows.Forms;
using SwissAcademic.Citavi;
using SwissAcademic.Citavi.Metadata;
using SwissAcademic.Citavi.Shell;
using SwissAcademic.Collections;
// Implementation of macro editor is preliminary and experimental.
// The Citavi object model is subject to change in future version.
public static class CitaviMacro
{
public static void Main()
{
//ProjectReferenceCollection references = Program.ActiveProjectShell.Project.References;
List<Reference> references = Program.ActiveProjectShell.PrimaryMainForm.GetSelectedReferences();
List<Reference> webOfKnowlege = new List<Reference>();
//if we need a ref to the active project
SwissAcademic.Citavi.Project activeProject = Program.ActiveProjectShell.Project;
List<string> titleList = new List<string>();
foreach (Reference reference in references)
{
webOfKnowlege.Add(reference);
titleList.Add(reference.ShortTitle);
int depthLevel = 0;
webOfKnowlege = CastWeb(reference, webOfKnowlege, depthLevel);
}
if(webOfKnowlege.Count > 0)
{
string titleString = string.Join(", ", titleList);
ReferenceFilter filter = new ReferenceFilter(webOfKnowlege, titleString, false);
Program.ActiveProjectShell.PrimaryMainForm.ReferenceEditorFilterSet.Filters.ReplaceBy(new List<ReferenceFilter> { filter });
}
}
static List<Reference> CastWeb(Reference reference, List<Reference> webOfKnowlege, int depthLevel)
{
List<Reference> linkedReferences = new List<Reference>();
foreach (EntityLink entityLink in reference.EntityLinks)
{
if (entityLink.Source == reference && entityLink.Indication == EntityLink.ReferenceLinkIndication)
{
Reference target = (Reference)entityLink.Target;
if (target.SequenceNumber != reference.SequenceNumber)
{
if (!webOfKnowlege.Any(item => item.SequenceNumber == target.SequenceNumber)) linkedReferences.Add(target);
if (!webOfKnowlege.Any(item => item.SequenceNumber == target.SequenceNumber)) webOfKnowlege.Add(target);
}
}
if (entityLink.Target == reference && entityLink.Indication == EntityLink.ReferenceLinkIndication)
{
Reference source = (Reference)entityLink.Source;
if (source.SequenceNumber != reference.SequenceNumber)
{
if (!webOfKnowlege.Any(item => item.SequenceNumber == source.SequenceNumber)) linkedReferences.Add(source);
if (!webOfKnowlege.Any(item => item.SequenceNumber == source.SequenceNumber)) webOfKnowlege.Add(source);
}
}
}
foreach (Reference linkedReference in linkedReferences)
{
if (reference == linkedReference) break;
CastWeb(linkedReference, webOfKnowlege, depthLevel+1);
}
//List<string> output = new List<string>();
//foreach (Reference linkedReference in linkedReferences) output.Add(linkedReference.Title);
//MessageBox.Show(string.Join("\n", output));
return webOfKnowlege;
}
}