Die Funktion sucht nach Eingabe eines Textes in einer der PND-Felder 310, 315 oder 450 in der GKD oder SWD und erstellt bei nur einem gefundenen Treffer die entsprechende Verknüpfungen z.B. zur Berufsbezeichnung in der SWD. Werden mehrere Treffer in der SWD gefunden, so muss nach Auswahl des relevanten SWD-Satzes die Funktion PNDLinkCont ausgeführt werden.

Datum

geändert von

Beschreibung

2010-08-01

Grund

neu erstellt in Zusammenarbeit mit Herrn Schneider, HeBIS

dnb_authorities.js

function __pndLink (){
/*--------------------------------------------------------------------------------------------------------
__pndLink ()

Die interne Funktion prüft, ob ein Editfenster geöffnet ist. (Wird vor der Funktion pndLink ausgeführt!)

Verwendete Unterfunktionen: 

Historie:
2010-08-01 Stefan Grund		: erstellt
--------------------------------------------------------------------------------------------------------*/

    return (application.activeWindow.title != null);
}

function PNDLink() {
/*--------------------------------------------------------------------------------------------------------
pndLink ()

Erstellt Verknüpfungen von der PND zur SWD in unterschiedlichen Feldern (z.B. 315)

Verwendete Unterfunktionen: diverse HeBIS-Funktionen, __prompterPruef

Historie:
2010-08-01 Stefan Grund		: erstellt
--------------------------------------------------------------------------------------------------------*/

	var	tag;
	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	trunkiert;		// "?" falls Suchbegriff trunkiert, sonst ""

	
	if (!application.activeWindow.title) {
	__hebisError("Dieses Skript kann nur im Korrektur- oder Erfassungsmodus verwendet werden!");
	return false;
	}
	
     snapshot = application.windows.getWindowSnapshot;
     winid = application.activeWindow.windowID;
	messageBoxHeader = "PND-Link";
	tag = application.activeWindow.title.tag;
	
	//Belegung verschiedener Variablen je nach 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.
	switch (tag) {
        case "310" : 
        messageBoxHeader = "PND Ort";
        var strcmd1 = "rec n;f an \"";
        var strcmd2 = "?\" and nad g not sn [0123456789]?";
        // Wenn nur ein Ort gefunden wird, nicht automatisch übernehmen -> muss geprüft werden,
        // da es sich trotzdem um einen anderen, zufällig gleichnamigen Ort handeln kann 
        var pruef_zwang = "true";
        //Bis zu dieser Anzahl werden Datensätze angezeigt, sonst Aufforderung für genauere Suche
        var set_zu_gross = 1000;
        break;
        case "315" : 
        messageBoxHeader = "PND Berufsbezeichnung";
        var strcmd1 = "rec n;f sp \"";
        var strcmd2 = "\" and sn 9.4ab";
        exist_a = application.activeWindow.title.findTag(tag + " |a|", 0,false, false,false);
        var pruef_zwang = "false";
        var set_zu_gross = 15;
        break;
        case "450" : 
        messageBoxHeader = "PND Affiliation";
        var strcmd1 = "rec n;f kor ";
        var strcmd2 = "";
        var pruef_zwang = "false";
        var set_zu_gross = 200;
        break;
        default:
        __hebisError("Dieses Skript kann nur Kategorien vom Typ 310, 315 oder 450 "
	  + "bearbeiten");
	return false;
        }
	
	application.activeWindow.title.startOfField(false);
	application.activeWindow.title.wordRight(1,false);
	if (tag != application.activeWindow.title.tag) {
		__hebisError("Die Kategorie " + tag + " ist leer; das Skript erwartet als "
					+ "Inhalt einen Suchbegriff.");
		return false;
	}
	application.activeWindow.title.endOfField(true);

	strtmp = application.activeWindow.title.selection;
	if (strtmp.charAt(0) == "|") {
		__hebisError("Der Feldinhalt in Kategorie " + tag + " beginnt mit einem "
					+ "in diesem Skript nicht erlaubten Zeichen: '|'.");
		return false;
	}

	//Ist dieser Teil noch relevant?
	trunkiert = "";
	if (strtmp.lastIndexOf("?") == strtmp.length-1) {
		// Trunkierung zur Zeit immer erlaubt!!
		// trunkiert = application.getProfileInt("PND315","allow_wild",0)
		// if trunkiert = 0 then
			// msgbox "Das Skript erlaubt keine trunkierte Suche." &vbLf & _
				// "Bitte suchen Sie nach vollständigen Berufsbezeichnungen", _
				// vbCritical
			// exit sub
		// end if
		if (strtmp.length == 1) {
			__hebisError("Kategorie " + tag + " enthält keinen sinnvollen Inhalt.");
			return false;
		}
		trunkiert = "?";
		//strtmp = strtmp.substr(0,strtmp.length-1);
	}


	
	//Gehe zur zu bearbeitenden Kategorie und markiere den Inhalt (wird später mit PPN überschrieben)
	application.activeWindow.title.startOfBuffer(false);
	application.activeWindow.title.find(tag + " "+ strtmp, true ,false ,false);
	application.activeWindow.title.startOfField(false);
	application.activeWindow.title.wordRight(1,false);
	application.activeWindow.title.endOfField(true);

	strcmd = strcmd1 + strtmp + strcmd2
	//	strcmd = "rec n;f ans \"" + strtmp + "\"" //GBV-Recherche (Festlegung müsste oben bei switch/case erfolgen)
	
	//Festlegung der Indikatoren
	if (tag == "315") {
	  if (!exist_a) {
	  deskriptor = "|a|";
	  } else {
	  deskriptor = "|b|";
	  }
	} else if (tag == "310") {
	boxTxt = "Um welche Art von Ort handelt es sich? Geben Sie ein:\n\n" +
	  "\"c\" \t\t --> Geburtsort\n\n" +
	  "\"d\" \t\t --> Sterbeort\n\n" +	
	  "\"e\" \t\t --> Wirkungsort";
	deskriptor = "|" + __prompterPruef(messageBoxHeader,boxTxt,"c,d,e","") + "|";
	  //User klickt Abbruch oder gibt nichts ein
	  if (deskriptor == "||" || deskriptor.indexOf("null") > -1) {
	  __hebisError("Abbruch der Funktion!");
	  return false;
	  }
	//gilt für 450
	} else {
	deskriptor = "";
	}
	
	application.activeWindow.command(strcmd,true);
	strstatus = application.activeWindow.status;
	newid = application.activeWindow.windowID;
	if (strstatus == "NOHITS"){
	  if (tag == "315") {
	  deskriptor = "|c|";
	  }
	  	application.activeWindow.closeWindow();
		__hebisError(
			"Bitte überprüfen Sie noch einmal den Suchstring\n"
			+ "    *** " + strcmd + " ***\n\n"
			+ "Möglicherweise liegt ein Schreibfehler vor.");
		application.activeWindow.title.startOfField(false);
		application.activeWindow.title.wordRight(1,false);
		application.activeWindow.title.insertText(deskriptor);
		application.activeWindow.title.endOfField(true);
		return false;
	}
	
	if (strstatus != "OK") {
		application.activeWindow.closeWindow();
		__hebisError("Es ist ein unerwarteter Fehler aufgetreten.");
		return false;
	}


	if (application.activeWindow.getVariable("scr") == "GN")
		application.activeWindow.simulateIBWKey("FR");

	setsz = application.activeWindow.getVariable("P3GSZ");
	if (setsz > set_zu_gross) {
		application.activeWindow.closeWindow();
		__hebisError(
		  "Die Suche ergab insgesamt " + setsz + " Treffer.\n"
		  + "Bitte schränken Sie den Suchbegriff ein, um die Treffermenge "
		  + "zu reduzieren");
		return false;
	}

	if (setsz > 1 || pruef_zwang == "true")  {
	msgtxt1 =  "Die Suche 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 'PNDLinkCont'.\n\n"
		  + "Sollten Sie keinen entsprechenden Normdatensatz vorfinden,\n"
		  + "so schließen Sie einfach das aktuelle Fenster.";    
		__hebisMsg(msgtxt1 + msgtxt2 + msgtxt3);

		application.activateWindow(winid);
		application.activeWindow.title.startOfField(false);
		application.activeWindow.title.wordRight(1,false);
		application.activeWindow.title.insertText("|c|");
		application.activeWindow.title.startOfField(false);
		application.activeWindow.title.wordRight(1,false);
		application.activeWindow.title.endOfField(true);
		application.activateWindow(newid);

		global.pnd315keep.winid = winid;
		global.pnd315keep.newid = newid;
		global.pnd315keep.fldtmp = "315 |c|"+strtmp;
		global.pnd315keep.deskriptor = deskriptor;
		return true;
	}

	PPN = application.activeWindow.getVariable("P3GPP");
	application.activeWindow.closeWindow();

	application.activeWindow.title.insertText(deskriptor + "!" + PPN + "!");

     return true;

}

Seitenanfang

  • Keine Stichwörter