Per Makro von einer reference auf andere reference verlinken

SirPounce hinzugefügt 2 Jahren her
beantwortet

Liebes Citavi-Team, liebe Mitnutzer,


Manchmal stößt mein unbefangenes Spielen mit dem Makro-Editor doch an meine Grenzen, und so würde ich gerne eine Frage wiederaufgreifen, welche ich vor einem Jahr schonmal hatte, wenngleich im anderen Kontext. Ich würde gerne automatisch Parallelfundstellen miteinander verknüpfen, also Gerichtsentscheidungen gleichen Datums vom gleichen Gericht mit gleichem Aktenzeichen oder Titel. Das Identifizieren der solchen ist kein Problem. Aber wie kann ich einem Titel einen Querverweis auf einen anderen Titel hinzufügen. Ich kann einen neuen EntityLink erzeugen, aber diesem nicht der reference zuweisen. In concreto:


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;

public static class CitaviMacro
{
	public static void Main()
	{
		ProjectReferenceCollection allReferences = Program.ActiveProjectShell.Project.References;		
		List<Reference> selectedReferences = Program.ActiveProjectShell.PrimaryMainForm.GetSelectedReferences();
		List<Reference> parallelReferences = new List<Reference>();
		
		SwissAcademic.Citavi.Project activeProject = Program.ActiveProjectShell.Project;		

		foreach (Reference reference in selectedReferences)
		{
			ReferenceType referenceType = reference.ReferenceType;
			
			parallelReferences = new List<Reference>();
			
			if (referenceType == ReferenceType.CourtDecision)				
			{
				foreach (Reference otherReference in allReferences)
				{
					if ((otherReference.AuthorsOrEditorsOrOrganizations.ToString() == reference.AuthorsOrEditorsOrOrganizations.ToString() && otherReference.ReferenceType == ReferenceType.CourtDecision) &&
						(otherReference.Title == reference.Title || (string.IsNullOrEmpty(reference.Title) && (otherReference.Date == reference.Date))))
					{
						parallelReferences.Add(otherReference);
					}
				}
				foreach (EntityLink entityLink in reference.EntityLinks)
				{
					Reference targetReference = entityLink.Target as Reference;
					if (targetReference == null) continue;
					if (parallelReferences.Contains(targetReference)) parallelReferences.Remove(targetReference);
				}
				foreach (Reference parallelReference in parallelReferences)
				{
					EntityLink newEntityLink = new EntityLink(activeProject);
					newEntityLink.Source = reference as ICitaviEntity;
					newEntityLink.Target = parallelReference as ICitaviEntity;
					newEntityLink.Notes = "parallel";
					reference.EntityLinks.Append(newEntityLink);
				}
				
			}	
		}
	}
}
Zeile 50 klappt nicht (scheitert sogar spektakulärer als das früher noch der Fall war, weil aufeinmal nicht mehr klar ist, aus welchem Namespace das append kommt). Das meiste davor ist relativ irrelevant, da geht es ja nur darum, die Parallelfundstellen zu sammeln, und das klappt alles problemlos.


Beste Grüße

Jan Jakob

Kommentare (2)

Foto
1

Hallo, Jan Jakob

lang hat es gedauert. So müsste es gehen:

EntityLink newEntityLink = new EntityLink(activeProject);
newEntityLink.Source = reference;
newEntityLink.Target = parallelReference;
newEntityLink.Notes = "parallel";
newEntityLink.Indication = EntityLink.ReferenceLinkIndication;
activeProject.EntityLinks.Add(newEntityLink);
Viele Grüße

Sebastian

Foto
1

Lieber Sebastian,


Vielen Dank. Ich kann das im Moment nicht ausprobieren, weil das eine Art von Änderung ist, die mir das Projekt zum Stillstand bringt, aber das sieht logisch aus, und wie man an meiner Nachfolgefrage sieht,habe ich mein neues Wissen über EntityLinks bereits anderweitig zum Einsatz gebracht.


Herzliche Grüße

Jan Jakob