IBM Doors DXL: Tipps und Tricks (2024)

Zahlen oder andere Datentypen die in einen String gecastet werden sollen müssen mit leerem String abgeschlossen werden:

real zahl = 4.555;print "Die Zahl lautet: " zahl " "; 

Jedes Attribut sollte bei einem String-Vergleich immer mit Doppelanführungszeichen abgeschlossen werden.

Auf Abschnitte aus einem String zugreifen:

string ganzerString = "Hello world";string meinSubstring = ganzerString[0:6];string vonVierBisEnde = ganzerString[4:];print meinSubstring " " vonVierBisEnde; 

Es können auch Funktionen und Variablen in die eckigen Stringklammern geschrieben werden.

int i=2;string einString = "Hello world";print einString[i: (length(einString)-4)];
if("Hallo" > "hallo") print "Hallo ist groesser uppercase first";

string einString = „Hello world“;
if (matches(„Hello“,einString))
{
print „Is drinn!“;
}

string eineZahl= „12.3“
int iType = intOf(eineZahl);
real rType = realOf(eineZahl);
char cType = charOf(iType); // Konvertiert in den Ascii-Wert

Date heute = today();
Date einDatum = „1/1/2000 0:0:0“;
if(heute>einDatum)
{
print „Das Jahr 2000 ist vorbei!“;
}

for i in 0 : 100 do{ print "Hello world! " i "";}for (x=0; x<100; x++){ print "Hello world";}

Folgendes Statement im Kopf der Schleife setzt den Skript-Timeout auf unendlich:

pragma runLim,0 // 0 bedeutet unendlich

halt: Das gesamte DXL Programm wird abgebrochen
continue: Vergiss den Rest der Schleife und beginne mit nächster Iteration
break: Brich die Schleife komplett ab

string leftTrim(string einString){ int dieLetztePosition=-1; for (x=0; x<length(einString); x++) { if( einString[x:x] != " " ) { dieLetztePosition=x; break; } } return einString[dieLetztePosition:];}print leftTrim(" Hello world!");

DXL ist sehr rudimentär was String Manipulationen angeht.

Ich empfehle meine String Bibliothek mit den gängigsten String Functions zu verwenden:

Zum Beitrag über String Functions

a: Call by Value
b: Call by Reference

Bei Call by Reference wird die Zahl nach der Übergabe auch im Context außerhalb des FUnktionsaufrufs geändert.

void myfunction (int a, int<b){ b=a+100; a=b+1; return(a);}
string biers[]={"Becks", "Licher", "Jever", "Heineken"};// sortiere die Biers lexikographischsort(biers);int i=0;for (i=0; i<sizeof(biers); i++){ print biers[i] "\n";}

Dynamische Arrays sind in DXL immer 2-dimensional.

// Eine Spalte, eine Zeile arrayArray einArray = create(1,1);put(einArray, "Huhuhuhu", 0,0);// Das Array passt sich automatisch anput(a,23,10,10);string huhuString = (string get(einString,0,0));real eineZahl = (real get(10,10));// Speicher wieder freigebendelete(einArray);

Anmerkung zu dyn. Arrays:

Es gibt die Möglichkeit ein statisches Array dynamisch zu alloziieren, allerdings nicht zur Laufzeit anzupassen.

int hallo = 10;int i;string test[hallo];for (i=0; i<10; i++){test[i]=i "";}for (i=0; i<10; i++){print test[i] "\n";}

Da ein dynamisches Array allemöglichen Datentypen enthalten kann, gibt es hier keine Standardfunktion um dieses zur sortieren. Die eingetragenen Daten können von beliebigem Typ sein ; z.B. kann auf (1,1) ein String stehen, auf (2,1) ein Object, auf (3,1) eine Attributdefinition etc. Man könnte die Spalte in ein Standard-Array (z.B. string myArray) wie im obigen Beispiel übertragen, darin sortieren und danach zurückkopieren.

Es gibt keine Möglichkeit die Größe eines dynamischen Arrays (Anzahl Zeilen) zu ermitteln.
Da man aber das Array im Verlauf des Programms mit „put“ gefüllt hat, wurden dort zwangsläufig die maximalen Koordinaten verwendet; wenn man die größte Koordinate also nach der Befüllung speichert (typischerweise in globalen Variablen myMaxX, myMaxY), kann man sie apäter wieder nutzen.

Skip Listen sind assoziative Arrays (PHP), HashMaps (Java) oder Dictionaries (C#) . Laut IBM sind dies sehr effiziente Datenstrukturen.

Skip idStringList = createString; // Für String DatentypenSkip idList = create; // Für nicht-String Datentypen// put Paramater: skip-list, key, valueput (idList, "234-22-2345", "Hallo");// PUT liefert falls zurück falls der Wert schon vorhanden istput (idList, "123-45-6789", "Welt");string gleichZuweisen;// find nutzen um zu testen ob in Skip List vorhandenif( find(idList, "234-22.2345", gleichZuweisen) ){ print gleichZuweisen; delete (idList, "234-22.2345");}put(idList "234-222-2222", "world");

Beispiel um Dubletten mit Skip-Listen rauzufiltern:

Skip myList = create;int numList[] = {1,6,2,3,1,2,1,4,2,5,6,7,2,1,3,4,8};int i;for (i=0; i<sizeof(numList); i++){ put (myList, numList[i], numList[i]);}// Iteration durch SkipListfor i in myList do { print i;}

Iteration durch SkipList mit DxlObject.

Anmerkung: DxlObject eignet sich prima als Ersatz für ein Model/Value-Object. Hierzu folgendermaßen d


Skip result = create;
DxlObject obj = new();
obj->“alarm_id“ = „Bla!“; ….
put(result, alarm_id, obj);
….

// Iteration durch SkipListfor myIterator in result do { string keyValue = (string key(result)); DxlObject currentObject = null; if(find(result, keyValue, currentObject)) { // Just put the column names here.. it will work print (string currentObject->"alarm_id") " "; print (string currentObject->"subsystem") " "; print (string currentObject->"bitnumber") " "; print (string currentObject->"eqwinid") " "; print (string currentObject->"eqwintextid") " "; print (string currentObject->"eqwinhandling ") "\n"; }}

Current ist eine Referenz auf das momentan selektierte / markierte Element und kann ein Project, Folder, Module oder Object sein.

Wenn man über mehrere Objekte eines Moduls iterierts muss es oft explizit das current gesetzt werden.

Project p = current;
Folder f = current;
Module m = current;
Object o = current;

current = f;

Project p = create("/Project1","");for name in p do { print name;}current = folder "/" for itemRef in current do { print name(itemRef) " " type(itemRef) " \n";}

Eine Baseline ist ein eingefrorener Stand für ein Modul. Ein Baseline Set ist ein eingefrorener Stand für die gesamte Maschine / das Projekt / alle Module des Projekts.

Module m = null;m=read("/Projekt/Modul", true);string modulName = m."Name";string attributName = "Created On";Date createdOn = m.attributeName;
current = folder("/New Family Car Project/Requirements");Module m = edit("System Requirements", true);m."Description" = "Capri Soft- System requirements";save(m);close(m);refreshDBExplorer();

ManyToMany beliebig viele Inlinks beliebig viele Outlinks
OneToMany beliebig viele Inlinks maximal ein Outlink
manyToOne beliebig viele Outlinks maximal ein Inlink
OneToOne maximal ein Outlink maximal ein Inlink

identifier(o): Die Doors-Containernummer (z.B. UR12)
number(o): Sagt was aus über die Stellung in der Hierarchie
level(o): Gibt die Tiefe der Schachtelung zurück
leaf(o): Gibt true zurück, wenn das Objekt keine Unterobjekte hat.

// Modul manuell öffnen und im Modul-Menü Tools -> "Edit DXL" Module m = current;Object o;for o in m do { print number(o) " \t\t"identifier(o) " "; print o."Object Heading" " "; print o."Object Text" "\n"}

Object erstesKind = first(o);
Object letztesKind = last(o);
Object vorherige = previous(o);
… next(o)
… first sibling(o)
… last sibling(o)
… next sibling(o)

Bsp.: Zähle alle Kinder eines Kapitels:

Module m = current;Object oChild, o = current;int count = 0;for oChild in o do { count++;}print count " ";

Folgendes Beispiel iteriert über die Outgoing links (->) jedes Linkmoduls („*“)

// Modul öffnen und auf Tools -> Edit DXL Module m = current;Link derLink;Object objekt ;int linkAnzahl = 0;Skip eindeutigeZielModule;for objekt in m do{ for derLink in objekt->"*" do { linkAnzahl++; // Der Name des Ziel Moduls; print fullName target(derLink) " \n"; }}print "Es gibt " linkAnzahl " Outgoing Links!";

Mit diesem Beispiel kann man sich die Outgoing Links in einem Layout DXL ausgeben lassen

Link lnk;string textToShow = "";bool isFirst = true;for lnk in obj->"*" do{string tmn=fullName target(lnk);if(!open module tmn){read(tmn,false);}Object tgt = target(lnk);if(isFirst){textToShow = identifier(tgt) "" textToShow ;}else{textToShow = identifier(tgt) "\n" textToShow;}isFirst = false;}displayRich (textToShow "");

Bei Incoming Links muss das SourceModul immer geöffnet werden:

// Modul öffnen und auf Tools -> Edit DXL void handleInLinks(Object einObjekt){ LinkRef eineLinkReferenz; string modulWoDerIncomingLinkHerkommt; print identifier(einObjekt) " \n"; for eineLinkReferenz in einObjekt<-"*" do { modulWoDerIncomingLinkHerkommt= fullName source (eineLinkReferenz); print modulWoDerIncomingLinkHerkommt; }}Module m = current;Link lnk;LinkRef lref;Object o;int numLinks = 0;string srcModuleName;for o in current Module do { for lref in o<-"*" do { srcModuleName = fullName source (lref); if (!open module srcModuleName) { read(srcModuleName, false); } }}for o in m do{ handleInLinks(o);}

Eine weitere Möglichkeit bietet das Iterieren über die Module der Inlinks. Man kann sie z.B. in einer Schleife öffnen.

string srcModName;for srcModName in o<-"*" do{ print srcModName "\n";}// Voller Pfad der Module zu den IncomingLinksModName_ srcModReffor srcModRef in o<-"*" do{ print fullName(srcModRef) "\n";}

Hier ein Beispiel für ein Layout DXL, das alle Incoming Link Objekte ausgibt

LinkRef lRef;Link aLink;ModName_ srcModRef;int inCount = 0;Object anObj = obj;for lRef in anObj <- "*" do { string smn = fullName(source(lRef)) if (! open(module(smn))) { oMod = read(smn, false) } } for aLink in anObj <- "*" do { Object src = source aLink; displayRich( identifier(src) "");} 
Module m=read("System Requirements", false);AttrDef adRec;for adRec in m do { if(!adRec.system) { print adRec.typeName " attribute: " adRec.name " \n"; }}

Wenn man auf einer Spaltenüberschrift in einem Doors Modul rechte Maustaste -> Properties -> Layout DXL -> Browse öffnet, kann man in eine Spalte hinzufügen um z.B. zu rechnen.

Die Variable obj ist die aktuelle Zeile.

real cost, result;int noPerDay;cost = obj."Cost";noPerDay = obj."No per day";result = cost * realOf(noPerDay);display result "";

Filter und Sortierungen können miteinander verknüpft werden

Module m=read("Stakeholder Requirements", false);Filter f, f1, f2;Sort s1,s2,s;s1 = descending("Cost");s2 = ascending("Priority");f1 = attribute "Cost" > "1000.0"f2 = attribute "Cost" < "2000.0"f3 = contains (attribute "Object Text", "shall", false);// Filter verknüpfenf = f1 << f2 << f3;// Sortierungen verknüpfens = s1 << s2;set(m,f);set(m,s);filtering on;
Stream output = write("c:\\datafile.txt");Object o;real cost;for o in current Module do{ cost = o."Cost"; output << cost "\n";}

Lesen…

print fileExists("C:\\meinedate.txt") " ";Stream eingabe = read "C:\\meinedate.txt";string costLine;while(!end(eingabe)){ input >> costLine; print costLine "\n";}close(eingabe);

DB: Dialog Box
DBE: Dialog Box Element

OnChange-Ereignisse über callback()-Funktion, die mit Set auf das DBE gesetzt wird. set(DBE dbe, callbackfkt)

DB bierDialogBox = create ("Bier Type", styleStandard);string meineRadioButtonListe[] = {"Heineken", "Becks", "Krombacher", "Licher"};DBE bierName=field(bierDialogBox, "Biername:", "Schnaps", 20,false);DBE radioButton = radioBox (bierDialogBox, "Biersche:", meineRadioButtonListe, 0);DBE datumFeld = date (bierDialogBox, 30, today, true);DBE slider = slider (bierDialogBox, "", 5,0,10);void printOrder(DB win){ string customer = get bierName; int radioButtonNummer = get radioButton; string radioButtonStyle=meineRadioButtonListe[radioButtonNummer]; print "Ein " radioButtonStyle " bier vom " customer "";}apply (bierDialogBox, "Print", printOrder);show bierDialogBox;

Die History wird mit einer Baseline abgespeichert und beginnt von vorne. D.h. das History-Objekt ist auf einem gerade gebaselintem Modul leer.

Bsp.-Anwendungsfälle

  • Änderungsreports
  • Recherche über Änderungen

Eine Chatähnliche Option sind Discussions. Sie werden in der Baseline abgelegt aber nicht ins Archiv eingepackt. Discussions setzen nur Leserechte voraus. Derjenige der die Discussion ausgelöst hat ist der einzige, der sie schließen kann.

Wenn man keine Zugriffsrechte auf ein Objekt hat kann mit

inherited(o);

Das Objekt auf die Rechte des parents gesetzt werden.

bool isNumeric(string einString){ int x; for (x=0; x<length(einString); x++) { if( (!isdigit(einString[x]) ) << (einString[x]!='.' ) << (einString[x]!='-' ) ) {return false; } } return true;}string eineZahl = "12.345";print isNumeric(eineZahl) "";
int d;int installed=0;int supported=0;print "INSTALLED:\n";for d in installedCodepages do{print d "\n";installed++;}print "\n\n\nSUPPORTED:\n";for d in supportedCodepages do{print d "\n";supported++;}print "Installed: " installed "\n";print "Supported: " supported "\n";

Ähnliche Beiträge

IBM Doors DXL: Tipps und Tricks (2024)

FAQs

What are the disadvantages of IBM doors? ›

Difficulty in Integrating with Other Tools: IBM DOORS can be difficult to integrate with other tools, such as test management and project management tools. This can make it difficult to manage all requirements-related data in one place, leading to duplicated data and slow processes.

How do you run DXL in doors? ›

To execute the program, you need to open your DOORS and navigate to: Tools -> Edit DXL. You will find the DXL Interaction window as shown below. You can type your script in the “DXL Input” pane (the upper half of the DXL Interaction Window) and then click on the “Run” button to execute the script.

What is the acronym doors in IBM? ›

DOORS is an acronym for Dynamic Object-Oriented Requirements System. Using the DOORS family of products, you can optimize requirements communication, collaboration, and verification throughout your organization and across your supply chain.

What is the default password for IBM doors? ›

When the IBM® Engineering Requirements Management DOORS® (DOORS) database server is installed, it does not have a password, so anyone can manage the server. To control who manages your database server, you can set a password by using the database server administration tool.

What are the weaknesses of IBM? ›

IBM's strength lies in its technological know-how and its long history of innovation. Its commitment to research and development is also a major advantage, as is its global presence, which allows it to access resources worldwide. However, IBM lacks agility and has been slow to react to market changes.

Is IBM DOORS still supported? ›

The DOORS server and the Rational Directory Server are now supported on SUSE Linux Enterprise Server 15 and Red Hat Enterprise Linux Server 8.10. IBM has announced end of life for Rational Change effective September 2024. See 921-121. DOORS integration with Rational Change is now deprecated.

What is DXL in doors? ›

DOORS Extension Language (DXL) is a scripting language used to extend the functionality of IBM's Rational DOORS.

How do you Barr a door? ›

If the door only has a knob or handle, secure it with an extension cord, necktie, or belt, and tie it to a nearby heavy object. A door with a hinge at the top should have the hinge wrapped with a belt so it can't open. A set of double doors can be tied with an extension cord or belt around the handles.

How do you use dimensional doors? ›

To use any Dimensional Door, it must be walked through the right way, while facing the door. Walking through the non-portal side of a Dimensional Door will do nothing.

Who uses IBM DOORS? ›

Companies Currently Using IBM Rational DOORS
Company NameWebsiteRevenue (USD)
General Motorsgm.comOver $1,000,000,000
Northrop Grummannorthropgrumman.comOver $1,000,000,000
BAE Systemsbaesystems.comOver $1,000,000,000
Boeingboeing.comOver $1,000,000,000
2 more rows

Is DOORS a MBSE tool? ›

IBM DOORS® is a requirement management tool that is primarily used for capturing, organizing, and tracking requirements for software and hardware systems. It is not necessarily designed for Model-Based Systems Engineering (MBSE), which involves using a model-based approach to systems engineering.

What is the current version of IBM DOORS? ›

2.7 has been updated and re-released on 10 July 2023 to include an urgent defect fix for APAR PH54171 as build number 97849, build date 27 June 2023.

What is IBM default password? ›

Default user accounts
AccountDefault password
adminadmin
audituserPassw0rd!
builderNone. Password is set during initial configuration.
reportuserSt0red1q
2 more rows

What is IBM password? ›

The default password when creating a user profile is the same as the user profile name. Setting the password to the default value is not recommended for security reasons. If you use a trivial or default password when creating a new user profile, make sure the user intends to sign on immediately.

What is the default port of IBM doors? ›

36677 is the default input port, 36678 is the default return port.

What are the disadvantages of smart doors? ›

One drawback of smart door locks is their reliance on power. Unlike traditional locks that do not require any electricity, smart door locks need a power source to function. In the event of a power outage or if the lock's batteries die, you may find yourself locked out of your own home.

What are the disadvantages of screen doors? ›

Disadvantages of a Screen Door
  • Less Energy Efficient: Lets out heat compared to storm doors.
  • Durability Concerns: Mesh screens can be easily pierced through or become damaged over time, requiring replacement.
  • Seasonal Limitations: Screen doors offer minimal protection against heat loss in winter and heat gain in summer.
Mar 7, 2024

What is the disadvantage of security door? ›

Security Door Cons:

Requires the help of a professional. Can be visually unappealing. Many are susceptible to rust and corrosion.

What are the disadvantages of panel doors? ›

Cons of Panel Doors

The biggest disadvantage of paneled doors is that cleaning them requires time, patience, and dedication. It's not as easy to give the surface of a paneled door a quick wipe-down—you must spend extra time cleaning all the grooves of the raised or recessed panels.

Top Articles
Present content in Microsoft Teams meetings
South Africa load-shedding: How Eskom has kept the lights on
No Hard Feelings (2023) Tickets & Showtimes
Dlnet Retiree Login
Access-A-Ride – ACCESS NYC
Obor Guide Osrs
Big Spring Skip The Games
Jennette Mccurdy And Joe Tmz Photos
GAY (and stinky) DOGS [scat] by Entomb
Pollen Count Los Altos
4156303136
Qhc Learning
Persona 4 Golden Taotie Fusion Calculator
Cooking Fever Wiki
All Buttons In Blox Fruits
Insidekp.kp.org Hrconnect
A rough Sunday for some of the NFL's best teams in 2023 led to the three biggest upsets: Analysis - NFL
Keck Healthstream
Is The Yankees Game Postponed Tonight
Days Until Oct 8
Lakers Game Summary
Aerocareusa Hmebillpay Com
Jermiyah Pryear
Hellraiser 3 Parents Guide
Churchill Downs Racing Entries
Jailfunds Send Message
Chelsea Hardie Leaked
Pioneer Library Overdrive
Jt Closeout World Rushville Indiana
Publix Daily Soup Menu
Wega Kit Filtros Fiat Cronos Argo 1.8 E-torq + Aceite 5w30 5l
Exploring The Whimsical World Of JellybeansBrains Only
Synchrony Manage Account
Andhra Jyothi Telugu News Paper
Edict Of Force Poe
Hisense Ht5021Kp Manual
Whitehall Preparatory And Fitness Academy Calendar
Maxpreps Field Hockey
Vision Source: Premier Network of Independent Optometrists
Temu Y2K
Cygenoth
Appraisalport Com Dashboard Orders
Ezpawn Online Payment
Janaki Kalaganaledu Serial Today Episode Written Update
Avatar: The Way Of Water Showtimes Near Jasper 8 Theatres
Tommy Bahama Restaurant Bar & Store The Woodlands Menu
Headlining Hip Hopper Crossword Clue
Big Brother 23: Wiki, Vote, Cast, Release Date, Contestants, Winner, Elimination
Grand Park Baseball Tournaments
Oak Hill, Blue Owl Lead Record Finastra Private Credit Loan
Read Love in Orbit - Chapter 2 - Page 974 | MangaBuddy
Latest Posts
Article information

Author: Msgr. Benton Quitzon

Last Updated:

Views: 6078

Rating: 4.2 / 5 (43 voted)

Reviews: 82% of readers found this page helpful

Author information

Name: Msgr. Benton Quitzon

Birthday: 2001-08-13

Address: 96487 Kris Cliff, Teresiafurt, WI 95201

Phone: +9418513585781

Job: Senior Designer

Hobby: Calligraphy, Rowing, Vacation, Geocaching, Web surfing, Electronics, Electronics

Introduction: My name is Msgr. Benton Quitzon, I am a comfortable, charming, thankful, happy, adventurous, handsome, precious person who loves writing and wants to share my knowledge and understanding with you.