Projekt Fahrgemeinschaftsbörse

Ausgangssituation

Der Zusammenschluss mehrerer Personen zu einer Fahrgemeinschaft mit gemeinsamen Zielort wirft jeden Morgen die Frage nach der gerechten Fahrten-Verteilung unter den Teilnehmern auf.

  • Wer nimmt heute an der Fahrt teil?
  • Ist die Teilnehmerzahl für eine Autofahrt zu hoch ( >5 Personen) ?
  • Wer ist heute mit dem Fahren dran?
  • Benötigt heute jemand ein Auto und muss deswegen ungeachtet einer vorbestimmten Reihenfolge fahren?
  • Wie behält man bei Ausfällen (z.B. Urlaub, Dienstreisen, Krankheit) von Personen eine gerechte Reihenfolge unter Berücksichtigung der vorherigen Fahrten bei?
  • Wie geht man fair mit der Situation um, dass aufgrund schwankender Teilnehmerzahlen bestimmte Mitglieder schlechter besetzte Fahrten durchführen müssen?

Definition der Projektziele

  • Minimierung des Koordinationsaufwands zwischen den Teilnehmern der Fahrgemeinschaft.
  • Definition eines fairen Rechenmodells für die Punkteverteilung an die Fahrgemeinschaftsmitglieder
    • nicht kostenorientiertes, geldloses Rechenmodell
    • rein auf den Personentransport bezogen

Zielgruppe

Die angestrebten Nutznießer des Projektes sind vorwiegend Berufspendler und weitere Personen, die an der häufigen Inanspruchnahme einer Fahrgemeinschaft zu einem bestimmten Zielort, oder einer Teilstrecke interessiert sind.

Intention

Die Teilnehmer haben als Ziel die Minimierung ihrer Kraftstoff- und Kraftfahrzeugkosten und/oder ein Interesse den Schadstoffausstoß nachhaltig zu reduzieren.

Voraussetzungen und Prämissen

Die Teilnehmer…

  • gehen den Kompromiss geregelter Abfahrtszeiten ein
  • können sich arrangieren und gemeinsame Treffpunkte/Parkplätze finden
  • haben ähnliche/gleiche Arbeitszeiten und/oder ein Arbeitszeitmodell (Gleitzeit), dass eine flexible Arbeitszeitgestaltung im Sinne der Fahrgemeinschaftsteilnehmer erlaubt.

Systemidee

Es wird ein mobilfähiges, webbasiertes Fahrgemeinschaftsportal geschaffen, dass das Gründen, Finden und Verwalten von Fahrgemeinschaften ermöglicht.

Das Herzstück der Anwendung ist ein punktebasiertes Rechenmodell, welches die Fahrerreihenfolge anhand der individuell erbrachten Vorleistungen/Fahrten der Fahrgemeinschaftsmitglieder bestimmt.

Feature Liste / Anwendungsfälle

Das System muss dem Benutzer die Möglichkeit bieten …

  • Benutzer registrieren
  • Benutzer per eMail freischalten
  • Benutzerlogin
  • Fahrgemeinschaft gründen
  • Fahrgemeinschaft suchen
  • Fahrgemeinschaft beitreten (evtl. über Freundschaftsanfrage)
  • Teilnehmer anlegen
  • Teilnehmer suchen
  • Teilnehmer löschen
  • Strecke suchen
  • Strecke anlegen
  • Strecke löschen
  • Treffpunkt suchen
  • Treffpunkt anlegen
  • Treffpunkt löschen
  • Fahrt anlegen
  • Fahrt nachtragen (für ein Datum)
  • Fahrt editieren (für ein Datum)
  • Fairnessausgleich, wenn ein Benutzer öfter die Fahrten mit wenigen Teilnehmern erwischt.

Anforderungen

Ein Benutzer registriert sich bei der Fahrgemeinschaftsanwendung. Nachdem er seine Login-Daten per eMail erhalten hat, kann er sich im System einloggen.

Der Benutzer sucht nach Fahrgemeinschaften und kann diesen eine Freundschaftsanfrage senden, die durch den Fahrgemeinschaftsadministrator freigegeben wird.

Wenn die Freundschaftsanfrage vom Fahrgemeinschaftsadministrator genehmigt wurde, hat der Benutzer Zugriff auf die Strecke / die Strecken, die von der Fahrgemeinschaft angelegt wurden, und kann auf diesen Strecken teilnehmen.

Der Benutzer hat die Möglichkeit eine eigene Fahrgemeinschaft zu gründen, wenn für seine Strecken noch kein passender Eintrag existiert.

Eine Fahrgemeinschaft hat mindestens eine Strecke, die von einem Starttreffpunkt zu einem Zieltreffpunkt definiert ist.

Der Starttreffpunkt hat eine festgelegte Abfahrtszeit, der Zieltreffpunkt eine festgelegte Ankunftszeit.

Eine Fahrt findet zu einem Datum auf einer Strecke statt. Eine Fahrt besteht aus mindestens 2 Teilnehmern.

Ein Teilnehmer besitzt ein Punktekonto an einer Strecke, welches bei der Teilnahme als Nicht-Fahrer um einen Punkt (Streckenkonto = Streckenkonto – 1) reduziert wird.

Wenn der Teilnehmer als Fahrer ausgewählt wurde oder sich selbst anbietet, wird sein Punktekonto um die Anzahl der Mitfahrer erhöht (Streckenkonto = Streckenkonto + Anzahl d. Mitfahrer).

Wenn die Teilnehmerzahl die Transportkapazität einer Fahrt übersteigt, können mehrere Teilnehmer als Fahrer fungieren, die jeweils die Punkte gutgeschrieben bekommen, die der mitgenommenen Teilnehmerzahl entsprechen. Die Teilnehmer teilen die Fahrten dann selbständig auf.

Ein Punktekonto an einer Strecke kann unter Berücksichtigung der Plausibilität korrigiert werden, allerdings wird die Historie von Korrekturen namentlich und chronologisch vermerkt. Alte Einträge zu einem Datum werden also lediglich auf obsolet gesetzt, so dass die vollständige Historie erhalten bleibt.

Ein neuer Teilnehmer steigt in eine Strecke mit einem Punktestand von 0 Punkten ein, so dass die Summe aller Fahrten auf einer Strecke immer 0 ergibt.

Wenn ein Teilnehmer von einer Strecke entfernt wird, werden seine Fahrten durch die Anzahl der Teilnehmer geteilt und den übrigen Teilnehmern zugeordnet, so dass die Summe aller Fahrten auf einer Strecke wieder 0 ergibt.

Maskenentwürfe

tbd

Datenbankmodellierung als EER Diagramm

ER_Fahrgemeinschaft

Download: MySQL Workbench 2.6: Fahrgemeinschaftsmodell
Download: SQL_Skript

Anwendungsarchitektur als UML Klassendiagramm

UML_Fahrgemeinschaftstool

 

Diagramm StarUML2 Download: Fahrgemeinschaft_2014_12_25

Ergebnis

Screenshots

wpid-screenshot_2015-01-25-19-08-54.png wpid-screenshot_2015-01-25-19-09-17.png wpid-screenshot_2015-01-25-19-09-56.pngwpid-screenshot_2015-01-25-19-09-36.pngwpid-screenshot_2015-01-25-19-10-24.png   wpid-screenshot_2015-01-25-19-10-11.png

Live Demo

Benutzer: test
Passwort: test

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Gängige Mobilfunkstandards, Modulationsarten und Komprimierungsverfahren.

Was ist GSM?

Ist der 2G-Mobilfunkstandard, der hauptsächlich für Telefonie, aber auch für leitungsvermittelte und paketvermittelte Datenübertragung sowie Kurzmitteilungen (Short Messages) genutzt wird. Es ist der erste Standard der sogenannten zweiten Generation (2G) als Nachfolger der analogen Systeme der ersten Generation (in Deutschland: A-Netz, B-Netz und C-Netz) und ist der weltweit am meisten verbreitete Mobilfunk-Standard.

Was ist GPRS?

General Packet Radio Service (GPRS) (deutsch: „Allgemeiner paketorientierter Funkdienst“) ist die Bezeichnung für den paketorientierten Dienst zur Datenübertragung in GSM-Netzen.

Was ist UMTS?

Das Universal Mobile Telecommunications System (UMTS) ist der 3G-Mobilfunkstandard der dritten Generation (3G)

Was ist HSDPA?

High Speed Downlink Packet Access (HSDPA, 3.5G, 3G+ oder UMTS-Broadband) ist ein Datenübertragungsverfahren des Mobilfunkstandards UMTS.

Was ist LTE?

Warum ist LTE schneller als seine Vorgänger?

Laut http://www.elektronik-kompendium.de/sites/kom/1301051.htm

bessere Modulationsverfahren, flexiblere Frequenznutzung und größere Kanalbandbreiten

Resultiert eine flexiblere Frequenzausnutzung nicht in größeren Kanalbandbreiten, da die Kanäle mehr Platz haben?

UMTS ist eine Modulationsart?

 

 

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Abnehmen mit Subways, Burger King oder Mc Donalds?

3 Menübausteine bei allen Vergleichen:

1.) Ein Italian B.M.T. volle Länge (ohne extra Käse und extra Bacon) hat 1012kcal.

Produkt          Italian B.M.T. || Big King XXL
=====================================================
Nährwertangaben: pro 30cm       || pro Burger
Energie 	 4234 kJ        || 3948 kJ
                 1012 kcal      || 950  kcal
Eiweiß 	         45,6 g         || 52,1 g
Kohlenhydrat 	 78,2 g         || 46,0 g
Fett 	         52,6 g         || 58,2 g

2.) Eine Packung Chips von Walkers 178kcal
(Cookies werden sogar mit 222 kcal/Stk. angegeben)

Produkt          Walker Chips   || King Pommes 
=====================================================
1 Packung (34 g)                ||  Portion
Energie          747 kJ         || 
                 178 kcal (222) ||  388 kcal (groß) / 317 kcal (mittel) / 202 kcal (klein)
Protein          2,2 g          ||
Kohlenhydrate    17 g           ||
Fett             11,2 g         ||

3.) Ein Getränk

Nestea 500 ml: 195.00 kcal
Coca Cola 500 ml: 220.00 kcal

Fazit Subways:

Zwischen 1385 kcal (Nestea+Chips) und 1454 kcal (Cola+Cookies) liegt ein Italian B.M.T. Menü von Subways.

Das entspricht knapp unter 75 Prozent des empfohlenen Tageskalorienbedarfs eines erwachsenen Menschen.

Fazit Burger King:

Mit großen Pommes und Cola ca. 1558 kcal.
Mit Mayonaise/Pommes Frites (56 kcal) sauce: 1614 kcal

Das entspricht knapp über 75 Prozent des empfohlenen Tageskalorienbedarfs eines erwachsenen Menschen.

Man(n) würde 295 Minuten aktiven Sex benötigen um das abzubauen oder müsste auf 3 Stück Schokoladentorte verzichten (siehe http://www.shape.de/tools/kalorien-rechner.html)

Burger King

Vergleich Mc Donalds Menü:

Mc Donalds Big Mac 25 g Fett, 8 g Zucker: 495 kcal
Mc. Donalds Pommes (groß):  470 kcal
Coca Cola 500 ml: 220 kcal
Mayonäse: 60 kcal

1247 kcal

Also:

Zum Abnehmen eignet sich am Besten ein Mc Donalds Big Mac Menü mit Cola 500ml und Pommes mit Mayo (groß)

q.e.d.

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

IBM Doors DXL: Module mit speziellen Attributen listen / List modules with special attributes

Problem

Es soll eine Liste aller Module eines Doors-Projekts “MyProject” mit dem Wert des Attributes “BB_SpecDocStatus” ausgegeben werden.

Ansatz / Approach

* Durchlaufen aller Module eine Projektes
* Durchlaufen der Attribut-Definition für das Modul
* mit ad.module die Modulattribute filtern

Lösung / Solution

Item itemRef;
string sItemNameFull;
Module moduleReference;
AttrDef ad;

for itemRef in project "/MyProject" do 
{
  // In den Edit-Mode wechseln
  moduleReference = read(fullName(itemRef),false);
  string as="";
	
  if(!null moduleReference)
  {
    for ad in moduleReference do
    {
      as=ad.name;
      if(matches("BB_SpecDocStatus",as))
      {
	if(ad.module)
	{
	  print name(moduleReference) ":\t" moduleReference.as "\n";
	}
      }
   }
  close moduleReference;
  }	
}
Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Logbuch Rauchstopp 2015

Da ich noch bis zum 04. Januar Urlaub habe, entschließe ich mich wieder auf die positiven Effekten des Nichtrauchens zu konzentrieren und schreibe dieses kleine Logbuch.

Meine Aufhörmethode ist der sofortige Rauchstopp, die letzte Zigarette muss nicht zwangsläufig geraucht werden (wir wollen ihr ja nicht Nachtrauern). Es ist lediglich wichtig sich auf die positiven Gefühle zu konzentrieren (Alan Carr -Easy Way Methode) , die sofort eintreten können wenn man rauchfrei ist. Nach 3 Tagen ist die Nikotinsucht körperlich bekanntlich vorbei.

30.12.2014:

Ich hatte gegen Abend noch ca 5 Zigaretten und mich mit Nico zum Starcraft-2-Spielen verabredet. Zwischen 1.30h und 2.00h am 31.12.2014 beendet wir das letzte Spiel und ich rauchte die letzte der 5 verbliebenen Zigaretten. Da ich ein paar Gläschen Whisky getrunken hatte schlief ich sofort ein.

31. 12.2014:

Ich überlegte nach dem späten Aufstehen zunächst, ob ich mir für den Tag noch eine Schachtel kaufen oder das Rauchen sofort unterlassen sollte. Die Frage die sich stellte war, wie ich es am nächsten Tag ohne Zigaretten aushalten möchte, wenn ich heute schon planen muss über den Tag zu kommen. Darüber hinaus ist die bewusste Aktion notwendig an die Tankstelle zu fahren und Zigaretten zu kaufen. Somit wären die Probleme lediglich auf morgen vertagt. Da ich Sylvester in einem Nichtraucherkreis feierte, fiel mir das erstaunlich leicht. Ich habe den ganzen Tag nicht geraucht, aber mich übers Maß hinaus mit Essen vollgestopft. Gegen 2h verließen wir die Feier und es ging wieder ins Bett.

01.01.2015:

Habe wieder bis 11.30h geschlafen und meiner Waage ein neues Höchstgewicht von 81 KG nach dem Aufstehen entlockt. Das Gewicht ist erstmal zweitrangig, es gilt durchzuhalten.

Ich weiß aus meinen vorherigen Versuchen, dass mir schwindelig werden würde wenn ich jetzt rauche.

Die spürbaren Entzugserscheinungen sind:

  • leichte Schwindelgefühle
  • Kribbeln über den Schläfen an den Kopfseiten
  • ein Gefühl des Unterdrucks in der Mitte des Kopfes.
  • Verstopfung (vermutlich durch Stoffwechselumstellung)
  • Reizbarkeit
  • Schlechte Laune und Niedergeschlagenheit

02.01.2015 – 04.01.2015:

  • Leichte Schwindelgefühle
  • gesteigerter Hunger
Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Sprachlicher Stil von Anforderungen

Aufbau der Anforderungen nach IREB

Rechtliche Vebindlichkeit

VerbindlichkeitDeutsches SchlüsselwortEnglisches SchlüsselwortKommentar
PflichtmussshallEine Pflicht-Anforderung bedeutet, dass eine Forderung unbedingt erfüllt sein muss. Die Abnahme kann verweigert werden, wenn das System die Anforderung nicht erfüllt.
Wunschsollteshould Eine Wunsch-Anforderung drückt aus, dass es ganz gut wäre, wenn z.B. ein Bericht vom Entwickler wöchentlich erstellt wird. Allerdings fordert der Anforderer verpflichtend nur monatliche Berichte.
AbsichtwirdwillDie Absichts-Anforderungen werden vom Anforderer gestellt, um dem Entwickler die Punkte aufzuzeigen, zu denen er schon Pläne für die Zukunft hat. Diese Information soll es dem Entwickler ermöglichen, das System zukunftssicher zu konzipieren
Vorschlagkanncannforderer kommen beim Nachdenken über zu entwickelnde Systeme auf verschiedene Lösungsmöglichkeiten für ein Problem. Diese werden für die spätere Verwendung durch Entwickler in Form von Vorschlags-Anforderungen konserviert.

Verwendung von Satzschablonen

Selbstständige Systemaktivität

Systemaktivitäten, die ohne Zutun des Benutzers ausgeführt werden.

[<Wann?>] [<Unter welcher Bedingung?>]
MUSS | SOLLTE | WIRD
DAS SYSTEM
<Objekt & Ergänzung des Objektes>
<Prozesswort>

Benutzerinteraktion

Funktionalitäten, die dem Benutzer vom System zur Verfügung gestellt werden.

[<Wann?>] [<Unter welcher Bedingung?>]
MUSS | SOLLTE | WIRD
DAS SYSTEM (shall provide the operator the possibility to …)
<Wem?>
DIE MÖGLICHKEIT BIETEN
<Objekt & Ergänzung des Objektes>
<Prozesswort>

Schnittstellenanforderung

Systemaktivitäten, die (nur) in Abhängigkeit von Nachbarsystemen ausgeführt werden.

[<Wann?>] [<Unter welcher Bedingung?>]
MUSS | SOLLTE | WIRD
DAS SYSTEM FÄHIG SEIN (shall be able to)
<Objekt & Ergänzung des Objektes>
<Prozesswort>

Beispiele für Prozessworte

Prozessworte sind Verben, die aus den Anforderungen hervorgehen

anlegen (syn.: erzeugen, erstellen), ändern (syn.: bearbeiten), speichern, löschen, drucken, ausgeben, anzeigen, archivieren, historisieren, senden, übertragen, empfangen

Überprüfung auf Verständlichkeit

Nachdem eine Anforderung erfasst wurde, liest man den Satz nochmal und stellt die folgenden Fragen:

um unvollständig definierte Prozessworte zu eleminieren…

  • von wem?
  • wann?
  • wie (genau)?
  • wodurch?
  • wer?
  • was?
  • Mit wem?

um Generalisierungen mit Universalquantoren (bsp. für alle / für jedes) zu prüfen

  • soll das beschriebene Verfahren wirklich für alles / alle (bsp. Daten) gelten?
  • gibt es (unter bestimmten Voraussetzungen) Ausnahmen?

um unvollständig definierte Bedingungen zu eleminieren

  • was passiert wenn die Bedingung nicht erfüllt ist (else-Zweig)?
  • Gibt es mehr als nur zwei Fälle (else if?)

um Substantive ohne Bezugsindex zu vermeiden

  • Welche (bsp. Daten) … genau?
  • Was (für eine Frist?) … genau?

um Nominalisierungen aufzulösen

  • “Die Dateneingabe soll überwacht werden”

 

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

IBM Doors DXL: Delete and Create Attributes for Doors Module

Problem

An Attribute shall be deleted and replaced (recreated) by the same attribute with another type.

Approach

– Delete old attribute
– Create new one
– Views will not get lost with this method!

Solution

void deleteAttrDef(Module m, string s)
{
  string err;
  AttrDef ad = find(m, s);
  err = delete(ad);
  if (err !="") ack err;
} 

void modifyAttributeType(Module m, string theAttribute, string newAttributType)
{
  current = m;
	
  // Delete Attribute attribute1 if exists
  if (exists(attribute(string theAttribute))) 
  {	
    deleteAttrDef(m, theAttribute);
  }
	
  // Create new attribute1 of type TEXT (not string)
  AttrDef ad = create object type newAttributType attribute theAttribute
		
  if (null ad)
  {
    print "attr didn't create for module " fullName(m) "\n";
    halt;
  }			
}

modifyAttributeType(current Module, "My_Attribut_To_Change_Type", "Text");
Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

IBM Doors DXL: Attribut eines verlinkten Objektes Ausgeben

Problem

Es soll eine LayoutDXL Spalte erzeugt werden, die ein Attribut aus einem verlinktem Requirement (Im V-Model z.B. obendrüber also hier Outlink) ausgibt.

Ansatz

* Öffnen des Moduls
* Nutzen der obj Referenz für das Objekt in der aktuellen Zeile
* Link Modul spezifizieren

Lösung

Module rsModule = read("/pathTo/RS", false);

Link lnk;
Object trg;
string lnkMod;
string strSat = "/pathToLinkModules/Satisfies";

for lnk in obj->"*" do 
{
  lnkMod= fullName module(lnk);
  
  if(!null lnkMod)
  {
	  if(lnkMod == strSat)
	  {
	      Object trg = target(lnk);
	      display trg."BB_PlannedRelease" "";
	  }
  }
}
Veröffentlicht unter DXL, IBM DOORS | Hinterlasse einen Kommentar

IBM Doors DXL: Import from Sparx Systems Enterprise Architect

Problem

To refresh all UML Diagrams within an Formal Doors Module, a script is needed that imports all actual versions of a UML Diagram.

Approach

* Copy the GUID of the Diagram / Note
** right-click the project menu on the right side.
** Select “Copy Reference -> Copy Node GUID to clipboard”
* If not done before, create an Module attribute (here ATTRIBUT_WITH_GUID)
* Paste the GUID to the place in your doors module, where the diagram should be created

Solution

// Recommended as module plugin
/**
 * Run through all objects of the current module 
 * and watch for the attribute ATTRIBUT_WITH_GUID.
 * If it is not empty, fetch the diagram/note
 * from this attribute an load it into the 
 * Object Text of Sparx Systems Enterprise Architect
 */

Object o
Filter currentFilter, f
Module m
DB updateWin

string guid
string projectPath = "DP_ENTARCHITECT --- DBType=1;" //-
"Connect=Provider=SQLOLEDB.1;Integrated Security=SSPI;" //-
"Persist Security Info=False;Initial Catalog=DBNAME;" //-
"Data Source=EA_DB_SERVER"

OleAutoObj eaProject, eaRepository, diaObj, actObj
OleAutoArgs autoArgs = create
string diagramName, elementNotes

void establishInterface()
{
 eaProject = oleGetAutoObject("EA.Project")
 if(null(eaProject))
 { 
   eaProject = oleCreateAutoObject("EA.Project")
 }

 if(null(eaProject))
 {
   ack "Creating OLE-Object 'EA.Project' not possible."
   progressStop
   halt
 }

 eaRepository = oleGetAutoObject("EA.Project")

 if(null(eaRepository))
 {
   eaRepository = oleCreateAutoObject("EA.Repository")
 }

 if(null(eaRepository))
 {
   ack "Creating OLE-Object 'EA.Repository' not possible."
  progressStop
  halt
 }

 put(autoArgs,projectPath)
 oleMethod(eaRepository,"OpenFile",autoArgs)
 clear(autoArgs)
}

void closeInterface()
{
  oleMethod(eaRepository,"CloseFile",autoArgs)
  oleMethod(eaRepository,"Exit",autoArgs)
	
  delete(autoArgs)
}

void updateObjects()
{
 int progessbarStep = 0
 bool diagramCopied
 string fileName

 for o in m do
 {
  guid = o."BB_ImageFileName"
  diagramCopied = false
	
  if(guid != "" && guid[0:0] == "{")
  {
   progressMessage("Updating " identifier(o))
   put(autoArgs, guid)
		
   /**************************************************
    * Gets a pointer to a diagram using an absolute 
    * reference number (local ID). This is usually 
    * found using the DiagramID property of an 
    * element, and stored for later use to open a diagram 
    * without using the 
    * collection GetAt() function.
    **************************************************/
    oleMethod(eaRepository, "GetDiagramByGuid", autoArgs, diaObj)
		
    /*************************************************
     * An Element is the main modeling unit. 
     * It corresponds to (for example) a Class, 
     * Use Case, Node or Component. 
     * You create new elements by adding to the 
     * Package Elements collection. 
     * Once you have created an element, you can add it
     * to the DiagramObject 
     * Class of a diagram to include it in the diagram.
     ****************************************************/
     oleMethod(eaRepository, "GetElementByGuid", autoArgs, actObj)
     clear(autoArgs)
		
     // Wenn das Diagramm mit der GUID nicht gefunden wurde
     if(null(diaObj))
     {
      // ... und auch kein Element mit der GUID gefunden wurde
      if(null(actObj))
      {
         ack "GUID " guid " of object " identifier(o) "" //-
            " not found in EA as diagram or element."
      }
      else
      {
        // Es wurde kein Diagramm, aber ein Element 
        // mit der GUID gefunden
        oleGet(actObj, "Notes", elementNotes)
        if(null(elementNotes))
        {
          ack "Getting Notes of GUID " guid " failed."
        }
        else
        {
	 o."Object Text" = elementNotes
	 progressStep(++progessbarStep)
        }
      }
    }
    else // Es wurde ein Diagramm mit der GUID gefunden
    {					
      /***************************************************
       *  EA.Project.PutDiagramImageOnClipboard: 
       *  ======================================
       *  Copies an image of the specified diagram to the 
       *  clipboard.
       *	
       *  Parameters:
       *	•	DiagramGUID: String - the GUID 
       *        (in XML format) 
       *        of the diagram 
       *        to copy
       *	•	Type: Long - the file type
       *		•	If Type = 0 then it is a metafile
       *		•	If Type = 1 then it is a Device 
       *            Independent Bitmap
       *
       *****************************************************/
       put(autoArgs, guid)
       put(autoArgs, 0)				
       oleMethod(eaProject, "PutDiagramImageOnClipboard", autoArgs, 
	             diagramCopied)
       clear(autoArgs)
		
       if(diagramCopied)
       {
         while(oleDelete(o));
         if(olePaste(o))					
         {
	       oleSetMaxWidth(o."Object Text", 400)
	        progressStep(++progessbarStep)
         }
         else
         {
	       ack "Pasting from clipboard of GUID " guid " failed."
         }
       }
       else
       {
         ack "Copying to clipboard of GUID " guid " failed."
       }
     }
	 diaObj = null
     actObj = null
   }
  }
}

void main(DB updateWin)
{
  int accepted, rejected

  currentFilter = current	
  f = contains(attribute("ATTRIBUT_WITH_GUID"),"{", false)
  set(m, f, accepted, rejected)
  unApplyFiltering(m)
  progressStart(updateWin, "Executing update", "Processing...", accepted)
  establishInterface()
  updateObjects()
  if(!null(currentFilter)) set(m, currentFilter, accepted, rejected)
  closeInterface()
  progressStop
  refresh(m)
  hide(updateWin)
  destroy(updateWin)
  updateWin = null
}

m = current
if(null(m))
{
  ack "Update can only be started within a module."
}
else
{
 if(isEdit(m))
 {
   updateWin = create("Update EA ", styleCentered|styleFloating)
   label(updateWin, "Do you wish to update?")
   ok(updateWin, main)
   show updateWin
 }
 else
 {
  ack "Module must be opend in 'Exclusive Edit'."
 }
}
Veröffentlicht unter DXL, Modellierung, Sparx Systems Enterprise Architect | Hinterlasse einen Kommentar

IBM Doors DXL: Browse Triggers on module

Problem

When there are triggers on a module it often is not visible to administrators and other users that can perform DXL operations.

Approach

A menu point as module add in should be generated. Copy the following script to the moduleaddins directory of your doors installation.

Solution

// This is necessary that it works
/*******************************************************
 * Author: Björn Karpenstein
 * Date:   2014-10-01
 * 
 * This script lists all triggers of the module
 ******************************************************/
pragma runLim, 0;

string lstArray [] = {}; 
 
DB mainWindow;
DBE textBox;
DBE textList;

void listAllTriggerForMod (Module mod) 
{
  string theResult="";
  Trigger t;
  int i = 0;
  for t in mod do 
  {
    insert(textList, i, name(t) "", iconNone);
    i++;
  }
}

string getSourceForTriggerName (string theTrigger) 
{
  string sourceCode = "";
  Trigger t;
  for t in current Module do 
  {
    if(name(t) "" == theTrigger)
    {
      sourceCode = dxl(t) "";
    }		
  }
	
  return sourceCode;
}

void doDeselect(DBE dbe, int idx)
{
  //infoBox "You deselected " dbe[idx] "";
} 


void doActivate(DBE dbe, int idx)
{
  // infoBox "You activated " dbe[idx] "";	
}

void doSelect(DBE dbe, int idx)
{
  string triggerName = getColumnValue(textList,idx,0);
  set(textBox, getSourceForTriggerName(triggerName));	
} 

void main(void)
{
  User currentUser = find();
  bool mayDXL = currentUser.mayEditDXL;
  if (!mayDXL)
  {
   // Show error box and inform user. Stop execution of script.
   errorBox "You are not allowed to run/edit DXL code!";
   halt;
  }		
	
  mainWindow = create("List all triggers");
	
  textList = listView(mainWindow, 0, 310, 20, lstArray);		
  textBox = text(mainWindow, "", "", 400, false);
	
  textList->"right"->"unattached";
  textBox->"left"->"flush"->textList;
  textBox->"top"->"aligned"->textList;	

  realize(mainWindow);			
	
  insertColumn(textList, 0, "Trigger Name", 300, iconNone);
	
  set(textList,doSelect,doDeselect,doActivate);		
  listAllTriggerForMod(current);
	
  // set(textBox, listAllTriggerForMod(current));
  show(mainWindow);	
}

main();
Veröffentlicht unter DXL, IBM DOORS | Hinterlasse einen Kommentar