IBM DOORS DXL: Zurücksetzen mehrere Werte auf ihre gebaselinte Version

Problem

Mehrere Werte in einem Current Modul sollen auf ihre Werte in der letzten Baseline zurückgesetze werden.

Ansatz

* Einlesen der letzen Baseline.
* Filterung der betroffenen Objekte
** Hier Bsp. h.newValue==“Internal“ && h.attrName == „BB_Type“ && h.author==“karpbjde“ && h.date „“==“03/27/15 11:33:58“

Lösung

History h;
Module m = current;
Object o, baselineObject;

// Anstelle von getMostRecentBaseline(m) kann die Baseline auch definiert werden 
Baseline b = getMostRecentBaseline(m) 
Module mostRecentBaseline = load(m, b, false)

for baselineObject in mostRecentBaseline  do
{
  for h in baselineObject do
  {
    HistoryType hisType = h.type;

    if(hisType==modifyObject)
    {
	if(h.newValue=="Internal" && h.attrName == "BB_Type" && h.author=="karpbjde" && h.date ""=="03/27/15 11:33:58")
	{
           for o in m do
           {
             if(identifier(baselineObject) "" == identifier(o) "")
             {
                 print "Set " identifier(baselineObject) "\t" h.author "\t" h.date " to " h.oldValue "\n";
                 o."BB_Type" = h.oldValue;
                 break;
	      }
	    }
	}
      }
   }
}

IBM Doors DXL: Anzahl der OLE Objekte in einem Modul

Problem

Die Anzahl der OLE Objekte in einem Modul soll ermittelt werden. Außerdem ermittelt das Skript noch welche Typen einer Enumeration „BB_TYPE“ auftreten.

Ansatz

* Verwendung der Funktion oleCount (Ein Objekt kann im Objekt Text mehrere OLE Objekte haben).
* Verwendung einer Skip Liste (HashMap) um die Types zu ermitteln, die auftreten können (ein Type ist eine Attribut-Enumeration)

Lösung – Solution

int oleCountInModule=0;
int internalCount=0;
Skip typeCollection = create;


void checkOLEcount(Object o, string attributeName) 
{ 
    int n = oleCount(o.attributeName);
    oleCountInModule=oleCountInModule+n;
    

    if(n>0 && o."BB_Type" "" != "Internal" && o."BB_Type" "" != "ChangeHistory")
    {
       put(typeCollection , o."BB_Type" "", o."BB_Type" "")
    }

} 

Module m = current;
Object o;

for o in m do
{
	checkOLEcount(o, "Object Text") 
}

print "OLE Count in Module: " oleCountInModule " / davon " internalCount " internal\n";

for myIterator in typeCollection do 
{
   string keyValue = (string key(typeCollection ));
   string currentObject = "";

   if(find(typeCollection , keyValue, currentObject))
   {
       // Just put the column names here.. it will work
       print currentObject "\n"
   }
}

IBM DOORS DXL: List all Files in File System Directory from folder / Dateien in Verzeichnis auflisten

Problem

In iteration through all files in a file system directory shall be performed.
Alle Dateien in einem Verzeichnis sollen aufgelistet werden

Ansatz – Approach

Iterate all files of a file System Directory.
Verwenden des directory Schlüsselwortes

Lösung – Solution

string x = "c:\\" 
string file 
for file in directory x do { 
   print file "\n" 
} 

IBM Doors DXL: OLE Objekte als Bild exportieren

Problem

Alle OLE Objekte eines Moduls sollen als Bild exportiert werden

Ansatz

Verwenden der exportPicture Funktion

Lösung

Module m = current;
Object o;
string attributeName="Object Text";
string baseFileName ="";

EmbeddedOleObject ole

for o in m do
{
    int i = 1 
    string errmess = null
    RichText rtf
    string s = richTextWithOle o.attributeName    
    i = 1
    for rtf in s do
    {
       if (rtf.isOle)
       {
	     baseFileName = identifier(o) "";
           ole = rtf.getEmbeddedOle
           string filename = baseFileName "-rtfloop-" i ".png"
           print "Exporting " filename "\n" 
           errmess = exportPicture(ole,filename  , formatPNG)  
           if (!null errmess)
           {
               print "ERROR: " errmess "\n"   
           }  
        i++
       }   
    }
}

Bei Verwendung dieses Patterns können die Objekte auch wieder so importiert werden:

#include "\\\\bbmag2k\\exchange\\doors\\dxl\\strings.inc";       

Module m = current;
Object o;

string x = "h:\\pics" 
string file 
for file in directory x do { 
   if(matches("IDS-", file))
   {
      string objectIdentifier=file[0:indexOfFrom(file,"-",2)-1] "";
      string aufkommen=replace(file[lastIndexOf(file,"-")+1:length(file)], ".png", "") "";
      print objectIdentifier " " aufkommen "\n";
      // oleInsert
   }
} 

IBM Doors DXL: Automatisch Links erstellen / erzeugen

Problem

Ein Kollege hat die Links in ein Kommentarfeld geschrieben. Diese Links sollen nun automatisiert ausgelesen und erstellt werden.

Ansatz

Zwei verschachtelte Schleifen
– Schleife 1: Sucht nacht Kommentaren und nutzt sie als Object Identifier
– Schleife 2: Sucht das Objekt im zu verlinkendem Modul

Lösung

// trim() used... 
// String Functions: https://www.capri-soft.de/blog/?p=832
#include "\\\\bbmag2k\\exchange\\doors\\dxl\\strings.inc";       		

Module m = current;
Module crs = read("/MultiProductData/30 Component/COMP-LA/CRS-LA",true);
current = m;

Object o,o2;
Link newLink;

for o in m do
{
 string toObject = o."BB_Comments" "";

 if (trim(toObject)!="")
 {
  for o2 in crs do 
  {
    if(identifier(o2) "" == toObject)
    {
      print identifier(o) " -> " toObject "\n";
      newLink = o -> "/MultiProductData/90 Administration/Specifies" -> o2;
    }
  }
 }
}