IBM Doors DXL: Object Trigger fires on Object enter and block fields / prevent fields from being edited / Objekt Trigger verhindert Editieren von Attributen vor Texteingabe

Problem

Depending on a selected value of a field, other fields should be editable / not be editable.

In this case the requirements are:

  • The object shall be editable, when no other Attribute with the description „Variant Status“ has the text (or the selection in case of enum) „Proposal“
  • The object shall be not ediablte, when one of Attribute with the description „Variant Status“ is set to „Proposal“
  • Exception: The field, that contains a set „Proposal“ Value, shall be editable in each case, otherwise it would not be possible to leave that state

Approach – Ansatz

The following codes installs an Object-Trigger (not attribute), that is fired every time a user double-clicks our is entering an object, but only when the module is in edit mode;

Solution – Lösung

string DXLCode = "
Trigger    trg = current;           
if (null trg) halt(); 
AttrDef ad  = attrdef(trg); 
if (null ad) halt();  // Error?
Object  obj = object(trg);  
if (null obj) halt();  // Error?
string  Name = ad.name;   

Module mod      = module(trg);
if(!isEdit(mod)) halt();

Object oCurr    = current(mod);	
string thisFieldShouldBeEditable = \"n/a\";
bool hasProposal = false;
int i=0;
for ad in mod do
{
  if(ad.object)
  {
    if(ad.description \"\" == \"Variant Status\")
    {
      string BB_Variant_name=ad.name;
      if(obj.BB_Variant_name \"\" == \"Proposal\")
      {
        hasProposal=true;
        thisFieldShouldBeEditable=BB_Variant_name;
      }
    }
  }
}

bool thisIsTheProposalField=false;
if(Name==thisFieldShouldBeEditable)
{
	thisIsTheProposalField=true;
}

// Wenn kein Attribut auf Proposal steht oder das angeklickte Feld 
// das Proposal Feld ist, brauchen wir nix mehr machen
if(!hasProposal||thisIsTheProposalField) halt();
// Wenn ein Attribut auf Proposal steht soll er blockieren

// Der nachfolgende Text text verhindert dass das Edit-Event zu Ende gebracht wird
set(trigPreConFail);


if (isVisible(mod) and obj == oCurr)                       
{
   infoBox(\"The field \" thisFieldShouldBeEditable \" is set to proposal.");
}
else{} 
"      // End definition of string DXLCode
 
Trigger trg;
bool    TrigOK  = true;
string  ErrMess = checkDXL(DXLCode);
 
if (!null ErrMess)
{
   print ErrMess "\n***********\n" DXLCode "**********\n"
   TrigOK       = false
}
 
string  NameTrig = "TriggerResetValidatedOn"
 
string  Prompt = "Delete trigger '" NameTrig "' ??"
if (!TrigOK) Prompt = "Trigger code has errors.\n" Prompt
if (confirm(Prompt))
{
   ErrMess = delete (NameTrig, module->object, pre, open, 6);
}
 
if (TrigOK && confirm("Deploy trigger '" NameTrig "' ??"))
{
   trg     = trigger(NameTrig, module->object, pre, open, 6, DXLCode)
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

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