function GNDLink() { /*-------------------------------------------------------------------------------------------------------- Erstellt Verknüpfungen innerhalb der GND in den Relationsfeldern (5XX) Historie: 2010-08-01 Stefan Grund : erstellt, Uebersetzung der VB-Version 2010-11-29 gr: Fehlerkorrektur (bei Schließen des Ergebnisfensters ohne Übernahme wurde immer Ind. c vergeben statt der vorher ausgewählten) 2011-02-22 gr: Anpassung: Mengenbegrenzung bei Affiliationen erhöht, exakte Phrasensuche möglich gemacht 2011-11-22 gr: Anpassung auf GND-Anforderungen, Umbenennung von PNDLink nach GNDLink 2017-05-29 gr: Berücksichtigung von bereits vorhandenem $v (s. Email Hachmann/Diedrichs (GBV) vom 6.12.2016) --------------------------------------------------------------------------------------------------------*/ var tag; var matArt; var inh; //Inhalt des aktuellen Felds var fldtmp; // Kategorie und Inhalt im Pica-Zeichensatz var strtmp; // Feldinhalt im latin1 - Zeichensatz var strlen; // Länge des Feldes var strcmd; // Such-Kommando var waittxt; // Warnungstext für //Weiter// var strstatus; // Status nach Suche var strsize; // Size nach Suche var deskriptor; // Deskriptor für 315 var PPN; // gefundene PPN var winid; // id of edit screen var swinid; // id of search window var tmpid; // id of actual window var exist_a; // true, wenn schon Deskriptor a existiert var trunk = ""; // wird mit "?" gefüllt, falls Suchbegriff defaultmäßig trunkiert werden soll var relCode = ""; //RelCode (entweder bereits vorhanden oder durch Aufruf von relCodeVergabeIntern belegt) var relPos; //Position des RelCodes im String, falls schon vorhanden var bemerkung = ""; //wird belegt, falls eine Bemerkung mit $v an einen bereits vorhandenen RelCode angeschlossen ist var boxtit = "Relationierungsskript"; if (!application.activeWindow.title) { __gndError(boxtit,"Dieses Skript kann nur im Korrektur- oder Erfassungsmodus verwendet werden!"); return false; } winid = application.activeWindow.windowID; tag = application.activeWindow.title.tag; inh = application.activeWindow.title.currentField; //Materialart ermitteln, über 005, weil bei Neuaufnahmen materialCode noch nicht zur Verfügung steht matArt = application.activeWindow.title.findTag("005",0,false,false,false).substr(0,2); if (matArt == "") { __gndError(boxtit,"Die Funktion kann erst nach Erfassen einer Materialart in 005 aufgerufen werden!"); return; } //Test ob Anfuehrungsstriche enthalten - wenn ja, wird Begriff später als Phrase/untrunkiert gesucht if (inh.indexOf('"') > -1) { var exakt = true; } else { var exakt = false; } //Belegung verschiedener Variablen je nach Materialart des Datensatzes und zu bearbeitender Kategorie //Suchanfragen können in Verbünden anders lauten, Unterscheidung zB nach Caption des Fensters: //"if (application.activeWindow.getVariable("system").indexOf("ZENTRALKATALOG") == -1 ){ " //etc. //??? Suchanfragen müssen ggfs. noch angepasst werden, wenn GND-Indexierung steht. Es sollten nur für das jeweilige Relationierungs- //Feld gültige Entitäten zur Auswahl angeboten werden switch (tag) { //Person case "500" : boxtit = "Relationierung Person"; var strcmd1 = "rec n;f per "; var strcmd2 = " and bbg tp#"; var pruef_zwang = "true"; var set_zu_gross = 100; break; //Körperschaft case "510" : boxtit = "Relationierung Körperschaft"; if (exakt) { var strcmd1 = "rec n;f ksk "; } else { var strcmd1 = "rec n;f kor "; } var strcmd2 = " and bbg tb#"; var pruef_zwang = "true"; var set_zu_gross = 1000; break; //Kongress case "511" : boxtit = "Relationierung Kongress"; //Wenn Suchbegriff in Anfuehrungsstrichen -> Phrasensuche, sonst wortweise (default) if (exakt) { var strcmd1 = "rec n;f ksk "; } else { var strcmd1 = "rec n;f kor "; } var strcmd2 = " and bbg tf#"; var pruef_zwang = "true"; var set_zu_gross = 1000; break; //Werk case "530" : boxtit = "Relationierung Werk"; //Wenn Suchbegriff in Anfuehrungsstrichen -> Phrasensuche, sonst wortweise (default) if (exakt) { var strcmd1 = "rec n;f sp "; } else { var strcmd1 = "rec n;f sw "; } if (inh.substr(4,3) == "uwk") { var strcmd1 = "rec n;f "; } var strcmd2 = " and bbg tu#"; var pruef_zwang = "true"; var set_zu_gross = 1000; break; //Sachbegriff case "550" : boxtit = "Relationierung Sachbegriff"; //Wenn Suchbegriff in Anfuehrungsstrichen -> Phrasensuche, sonst wortweise (default) if ((exakt) || (matArt == "Tp")) { var strcmd1 = "rec n;f sp "; } else { var strcmd1 = "rec n;f sw "; } var strcmd2 = " and bbg ts#"; var pruef_zwang = "true"; var set_zu_gross = 1000; break; //Geographica case "551" : boxtit = "Relationierung Geographicum"; //Bei Geographica wird immer als Phrase gesucht, daher braucht "exakt" nicht abgefragt zu werden var strcmd1 = "rec n;f sp \u0022"; if (matArt == "Tp") { var strcmd2 = "?\u0022 not sn [0123456789]? and bbg tg#"; } else { var strcmd2 = "\u0022 and bbg tg#"; } var pruef_zwang = "true"; var set_zu_gross = 1000; break; default: __gndError(boxtit,"Dieses Skript kann nur Relationierungsfelder (5XX) bearbeiten."); return false; } //Ende switch //wenn Feld nur aus Tag ohne Blank besteht if (inh.length < 4) { application.activeWindow.title.startOfField(false); application.activeWindow.title.endOfField(false); application.activeWindow.title.insertText(" "); }; application.activeWindow.title.startOfField(false); application.activeWindow.title.charRight(4,false); application.activeWindow.title.endOfField(true); strtmp = application.activeWindow.title.selection; //ist RelCode schon vorhanden? Wenn ja, aus Suchbegriff strtmp raus und RelCode (ohne $4) einlesen relPos = strtmp.indexOf("$4"); if (relPos > -1) { relCode = strtmp.substr(relPos+2); strtmp = strtmp.substr(0,relPos); //folgt noch ein $v auf den RelCode? bemPos = relCode.indexOf("$v"); if (bemPos > -1) { bemerkung = relCode.substr(bemPos); relCode = relCode.substr(0,bemPos); } } if (strtmp == "") { strtmp = __gndPrompter(boxtit,"Das Feld enthält keinen Suchbegriff! Bitte geben Sie einen zum Feld " + tag + " passenden Suchbegriff ein:",""); if (strtmp == "") { return; } } strcmd = strcmd1 + strtmp + strcmd2; //Abfrage / Prüfung des relCodes relCode = __relCodeVergabeIntern(matArt+tag,relCode); if (!relCode) { __gndError(boxtit,"Die Relationierung wurde abgebrochen!"); return; } application.activeWindow.command(strcmd,true); strstatus = application.activeWindow.status; newid = application.activeWindow.windowID; if (strstatus == "NOHITS"){ application.activeWindow.closeWindow(); __gndError(boxtit,"Keine Treffer! Bitte überprüfen Sie noch einmal den Suchstring\n" + " *** " + strcmd + " ***\n\n" + "Möglicherweise liegt ein Schreibfehler vor."); application.activeWindow.title.insertText(strtmp + "$4" + relCode + bemerkung); return false; } //Notwendig ??? if (strstatus != "OK") { application.activeWindow.closeWindow(); __gndError("Es ist ein unerwarteter Fehler aufgetreten:\n\n" + strstatus); return false; } if (application.activeWindow.getVariable("scr") == "GN") { application.activeWindow.simulateIBWKey("FR"); } setsz = application.activeWindow.getVariable("P3GSZ"); /* Nicht mehr notwendig if (setsz > set_zu_gross) { application.activeWindow.closeWindow(); __gndError(boxtit,"Die Suche ergab insgesamt " + setsz + " Treffer.\n" + "Bitte schränken Sie den Suchbegriff ein, um die Treffermenge " + "zu reduzieren"); return; } */ //Jetzt eigentlich immer Prüfzwang, Bedingung wird aber ersteinmal behalten, da sich das vielleicht doch noch mal wieder ändern wird if (pruef_zwang == "true") { msgtxt1 = "Die Suche \u0022" + strcmd + "\u0022 ergab insgesamt " + setsz + " Treffer.\n"; if (pruef_zwang == "true" && setsz == 1) { msgtxt2 = "Meinten Sie diesen Normdatensatz? \n" + "Wenn Sie ihn zur Verknüpfung verwenden wollen, "; } else { msgtxt2 = "Bitte suchen Sie den entsprechenden Normdatensatz aus,\n" + "den Sie zur Verknüpfung verwenden wollen, und "; } msgtxt3 = "aktivieren Sie dann die Funktion 'GNDLinkCont'.\n\n" + "Sollten Sie keinen entsprechenden Normdatensatz vorfinden,\n" + "so schließen Sie einfach das aktuelle Fenster."; //__gndMsg(boxtit,msgtxt1 + msgtxt2 + msgtxt3); application.activeWindow.appendMessage(msgtxt1, 3); application.activeWindow.appendMessage(msgtxt2, 3); application.activeWindow.appendMessage(msgtxt3, 3); application.activateWindow(winid); application.activeWindow.title.insertText(strtmp + "$4" + relCode + bemerkung); application.activeWindow.title.startOfField(false); application.activeWindow.title.charRight(4,false); application.activateWindow(newid); global.gndLinkkeep.winid = winid; global.gndLinkkeep.newid = newid; global.gndLinkkeep.relCode = "$4" + relCode + bemerkung; return true; } PPN = application.activeWindow.getVariable("P3GPP"); application.activeWindow.closeWindow(); application.activeWindow.title.insertText( "!" + PPN + "!$4" + relCode + bemerkung); return true; }