IBM Doors DXL: Helpful Trigger Functions for persistent Triggers to block a module

Problem

The modification (Edit Mode / Edit Share) of a module shall be prevented.
Das Editieren eine Doors Modules (Edit Mode / Share Mode) soll verhindert werden.

Approach

Defining a library and using the existence of a trigger as condition for allowed modifications can be used to block the formal Module for edit/share mode.
Durch das definieren eine Triggers und der zugehörigen Trigger_Library kann man die Existenz eines Triggers als Bedingung für das Erlauben des Edit/Share Modes nehmen.

Solution

void listAllTriggerForMod (Module mod) 
{
	Trigger t;
	for t in mod do 
	{
		print name(t) "\n";	
	}
}

bool checkTriggerIfExistForMod (Module mod, string triggername) 
{
	Trigger t;
	for t in mod do 
	{
		if(name(t) "" == triggername)	
		{
			return true;
		}
	}
	
	return false;
}

string getDXLCodeForModWithTrigger (Module mod, string triggername) 
{
	Trigger t;
	for t in mod do 
	{
		if(name(t) "" == triggername)	
		{
			return dxl(t);
		}
	}
	
	return "not found";
}

void removeTriggerForModWithName(Module mod, string triggername) {

	Trigger t;
	string errorMsg;
	
	// first delete _all possible trigger_
	for t in mod do {
		if (name (t) "" == triggername) {
			errorMsg = delete(t);
		   	if(!null(errorMsg)) {
			  errorBox("Error occurred:\n" errorMsg"");
			  break;
		   }
		}
	}
}

void installTriggerForMod (Module mod) 
{
	string dxlCode = "Module cm = current Module;\n" //-
					"if ((isEdit(cm)||isShare(cm))){\n" //-
					"ack(\"During Wings LDT modifications it is not allowed to modify texts in the UIT/ALM Module.\");\n" //-
					"downgrade(cm)\n" //-
					"}\n";
	 
	string errors = checkDXL(dxlCode)
	
	if(null(errors)) 
	{
		string moduleName = name(mod)
		if(!checkTriggerIfExistForMod(mod, "Text_Tool_Block_Trigger"))
		{
			Trigger t = trigger("Text_Tool_Block_Trigger", project->module->moduleName, post, open, 15, dxlCode);
		}
		else ack "Trigger already exist!";
	}
	
	save(mod);
}

Module uitModule = read("/NDS/20 System/DS/UIT-User Interface Texts", false);
print "Vor der Installation...\n";
print "=======================\n";
listAllTriggerForMod(uitModule);
installTriggerForMod(uitModule);
print "\n\nNach der Installation...\n";
print "=======================\n";
listAllTriggerForMod(uitModule);
removeTriggerForModWithName(uitModule, "Text_Tool_Block_Trigger");
print "\n\nNach dem Entfernen...\n";
print "=======================\n";
listAllTriggerForMod(uitModule);

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.