Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Sunshine

Pages: 1 ... 3 4 [5] 6 7 ... 46
61
General Board / Re: EA14 and non-modal windows
« on: August 10, 2018, 10:04:15 am »
Try selecting the element and opening the features window using start tab> Properties> Features or press F9

62
The traceabililty window doesn't have columns or a header to adjust sorting.

Unfortunately, there is no defined order for items shown in that view.

Oh yeah was was thinking of the relationships window. My bad  :(

63
Concur with Nizam a script to remove existing tagged values.
There is a script in the topic url below to add tagged values which could be modified to remove tagged values.
https://www.sparxsystems.com/forums/smf/index.php/topic,40259.0.html

Pre-requist: You'll need to have skills in JavaScript.

64
In V14 click on the header of source or target column and it cycles through [no order | alpha numeric| reverse alpha numeric] following the standard for windows apps.

65
Automation Interface, Add-Ins and Tools / Re: EA 14.0 64 bit C#API
« on: August 09, 2018, 10:42:50 am »
Concur with Geert.
You'll notice Sparx EA is installed by default in the folder "C:\Program Files (x86)\Sparx Systems" so that kind of gives it away. 64 bit programs are installed in "C:\Program Files"

66
Ver.14 vs. Ver13.5 - We are all still on 13.5 and per my recommendation, we will be upgrading only one user and evaluating changes to features and existing diagrams, just like we did for 12 to 13.
Note accessing tagged values in V14 is a little more difficult.

As just a side note and possible bug/issue I tried adding my tagged values to a few diagrams that contained only business process icons (representing a group of related processes) by selecting all of them at once and adding the tagged values. At first glance it seemed to work but for one tagged value type Check List, where all tick boxes where checked off resulting in a Complete text value, they changed to 1, 1, 1, 1 when I logged back into the EA project file.
Yeah you can only see tagged values for one element so you would added to only one even though you had selected multiple elements. Probably the one first one you selected

67
Quote
Is it possible to edit the existing BPMN 2.0 MDG and add my stereotype there? I started researching that but had to shelve it for now.
I guess you could modify the MDG technology as is just xml file so you could hack the BPMN 2.0. MDG located in C:\Program Files (x86)\Sparx Systems\EA\MDGTechnologies\BPMN 2.0 Technology.xml

Open the file with text editor and search for the 'Stereotype' tag then find the next 'tagged values' tag. Copy one the the tag names and add your new one.
<Stereotype name="BusinessProcess" .../>
<TaggedValues>
<Tag name= ... />

You then need to copy the file to some place all users can access and point Sparx EA to that using the advanced options. You need to figure a way not to have conflicts with the original BPMN 2.0 mdg. Easiest way is to just rename it to BPMN 2.0 Technology.bak located in C:\Program Files (x86)\Sparx Systems\EA\MDGTechnologies\ for all users or simply delete it.


68
General Board / Re: Modelling security and security classification
« on: August 08, 2018, 12:30:52 pm »

However that being said the Risk Taxonomy MDG looks like it might be better suited so I'd be tempted to use that rather than shoehorn it into ArchiMate notation.
The most important thing is to understand the metamodel for your security group and the viewpoints they need - find some examples and use them for guidance

I created a MDG for the ArchiMate notation and the original methodology it is based on.  I just have to find where I put them :-)
MDG for the ArchiMate - Me too which I created back in 2007 before it was available in Sparx EA. Still using an updated version of it today :)

However the official ArchiMate Standard does not have those risk taxonomy types defined. The easiest option would be to use the Risk Taxonomy MDG that comes with Sparx EA.


69
General Board / Re: History of lock/unlock
« on: August 08, 2018, 07:35:22 am »
May be you should consider making use of reviews, discussions, base lining and enabling audit.

70
General Board / Re: Modelling security and security classification
« on: August 08, 2018, 07:19:36 am »
Yes you can use Archimate to manage enterprise risk and security. I use ArchiMate already so I use the paper by the open group which provides details on how to do this Ref W172. There was an earlier one W150 mapping it to ArchiMate v2.1
Here is a link to the latest
https://publications.opengroup.org/w172

You just have to map (crowbar) the elements on to Archimate
Threat Agent -> Actor
Threat Event -> Business Event
Loss Event ->  Business Event
Risk->Assessment
Control Objective -> Goal
Vulnerability-> Assessment
Security Requirement-> Requirement
Security Principle -> Principle
Control Measure -> Requirement
Asset at Risk -> Resource
Implemented Control Measure->Business Service, Application Service, Technology Service
Security Domain-> Group

However that being said the Risk Taxonomy MDG looks like it might be better suited so I'd be tempted to use that rather than shoehorn it into ArchiMate notation.
The most important thing is to understand the metamodel for your security group and the viewpoints they need - find some examples and use them for guidance

71
General Board / Re: Project Integrity Check
« on: August 08, 2018, 06:26:53 am »
Make a copy of your repository then let the project integrity check do its work. If you lose everything then do as qwerty recommends and report a bug. You never know it might actually fix your problem.

72
General Board / Re: Do not get WebEA to work on IIS
« on: August 03, 2018, 07:59:31 am »
Thanks for sharing Peter and well done solving it.

73
Methodology isn't necessarily bad but I know what you mean. However it is important to know what notation you want to use and that leads to the question regarding how much detail you want.
ArchiMate is really aimed at Enterprise Architecture level so its not good for detailed level. More like a black box notation where you don't care whats in the box. For instance the business objects and data objects don't have attributes.

UML is fine for getting down to the nitty gritty code and database levels. So more like white box where you do care whats in the box.

From what I interpret from
Quote
We have a customer who has asked us to document their systems starting at a high level and then drilling down into them.

It sounds like its down to detailed code and database tables and attributes so UML is probably the best choice. Note that the elements can be represented by graphics to make them more ascetically pleasing to the eye for certain stakeholders.

Done some similar models and my solution architects include things like this;

System [Package]
   Use Cases -  to describe what it does
   Components - to describe what its made up of
   Deployment Diagram - to show the components deployed onto servers
   Package and Class Diagrams - show the software architect and construction
   State Models - to describe any object states and events
   Interactions diagrams - to show any interactions at system/component/class levels

That usually covers what most people want. Haven't done any UML for around 11 years now so there might be some other stuff in the latest version of UML but the above works for us.


74
Bugs and Issues / Re: Diagram Running Slow
« on: August 03, 2018, 07:33:11 am »
I am currently using an EAP file, i am looking to move to an SQL server in the coming weeks as we need to connect and read other systems from it.
There are currently 7 windows docked as such, they are unpinned docked if that makes sense. Traceability is open, as is project browser, resources, layout tools, toolbox, etc.
Number of items i have in the diagram is approx 260, with a lot of relationships. The whole model has over 300k relationships to give you an idea of complexity. The relationships in the diagram are turned off in diagram properties.
Wow 260 items on one diagram - no wonder. However that being said I do have an application landscape diagram with around 200 items but don't have any issues loading it. Relationships are disabled and I use SQL Server as the repository.

Moving to SQL Server may improve the performance if you have good network bandwidth and a reasonably server.
In the short term you could consider putting the eap file on an SSD rather than HDD that would significantly improve performance.
Other things might improve performance is to use Jet 4 rather than 3.5 so if you have V14 transfer it to an eapx file.

There's my 2 cents worth of ideas for now. Hope it helps.

75
Sounds like you've just added the tag values to one of the BPMN 2.0 <<BusinessProcess>> elements rather than define a stereotype with the extra tag values so synching tagged values as won't work.

AFAIKT there are only two ways to add those extra tagged values on mass other than do it manually;
a) Create an MDG with stereotype that has the extra tagged values that extend BPMN 2.0. Then change all the stereotypes and synch tagged values to add all the tagged values. This approach has the advantage that new elements will be created with the tagged values. However this is a fair amount of work and probably a bit more effort than just simply added the tagged values manually.
b) Use a script such as JScript to navigate all the elements down the hierarchy and add the tagged values if they don't already exist. However you'll need to run this periodically as new BPMN elements won't have the tagged values by default.

Probably option b) is your way forward. You'll need some skills in JScript. I did something similar a while back where I needed to change tagged values on mass, see code below. If you modify the tag names and values in the function ChangeElementTags() then run it should work. Caution:  I'd test it on a copy of your repository first rather than just run it on your live data. Once your happy  its works then copy the code onto the live repository and run it. You'll then need to run it to update any new BPMN Business Processes to add the tag values to them.

NOTE whilst trying this out I did notice getting access to tag values for business process on V14  was a little more difficult than V13.5. I could only see the tagged values in the element properties dialog using special actions in the context menu from a diagram.   

Code: [Select]
!INC Local Scripts.EAConstants-JScript

/*
 * This script should be stored as JScript under a Project Brower Group so 
 * it can be executed from the context menu in the project browser
 *
 * Script Name: Add Tagged Values
 * Author: Sunshine
 * Purpose: Adds tagged values to BPMN stereotype <BusinessProcess>
 * Date: 3/08/2018
 */

/*
 * Project Browser Script main function
 */
function OnProjectBrowserScript()
{
// Get the type of element selected in the Project Browser
var treeSelectedType = Repository.GetTreeSelectedItemType();

switch ( treeSelectedType )
{
case otElement :
{
// Code for when an element is selected
var theElement as EA.Element;
theElement = Repository.GetTreeSelectedObject();
ChangeElements( '', theElement);
break;
}
case otPackage :
{
// Code for when a package is selected
var thePackage as EA.Package;
thePackage = Repository.GetTreeSelectedObject();
NavigatePackage("    ",thePackage);
Session.Prompt( "Script Completed, TagValues Added", promptOK );
break;
}

default:
{
// Error message
Session.Prompt( "This script does not support items of this type. Please select a package", promptOK );
}
}
}

function NavigatePackage( indent, thePackage )
{
    // Cast thePackage to EA.Package so we get intellisense
    var currentPackage as EA.Package;
    currentPackage = thePackage;
   
    // Add the current package's name to the list
    Session.Output( indent + currentPackage.Name + " (PackageID=" +
        currentPackage.PackageID + ")" );
   
    // Convert the elements this package contains
    ChangeElementsInPackage( indent + "    ", currentPackage );
   
    // Recursively process any child packages
    var childPackageEnumerator = new Enumerator( currentPackage.Packages );
    while ( !childPackageEnumerator.atEnd() )
    {
        var childPackage as EA.Package;
        childPackage = childPackageEnumerator.item();
        NavigatePackage( indent + "    ", childPackage );
       
        childPackageEnumerator.moveNext();
    }
}

function ChangeElementsInPackage( indent, thePackage )
{
    // Cast thePackage to EA.Package so we get intellisense
    var currentPackage as EA.Package;
    currentPackage = thePackage;
   
    // Iterate through all elements and add them to the list
    var elementEnumerator = new Enumerator( currentPackage.Elements );
    while ( !elementEnumerator.atEnd() )
    {
        var currentElement as EA.Element;
        currentElement = elementEnumerator.item();
ChangeElements(indent+"    ",currentElement );
        elementEnumerator.moveNext();
    }
}

function ChangeElements( indent, theElement )
{
// if workpackage then do change
if (theElement.Stereotype === "BusinessProcess")
{
ChangeElementTags(indent+"    ",theElement );
   // Iterate through all embedded elements and add them to the list
var elementEnumerator = new Enumerator( theElement.Elements );
while ( !elementEnumerator.atEnd() )
{
var currentElement as EA.Element;
currentElement = elementEnumerator.item();
// if workpackage then do change
ChangeElements(indent+"    ",currentElement );
elementEnumerator.moveNext();
}
}
}

function TagValue(tagName,tagValue,tagNotes)
{
    this.tagName = tagName;
    this.tagValue = tagValue;
this.tagNotes = tagNotes
}


// Change element tagValues
function ChangeElementTags( indent, theElement )
{
    // Cast theElement to EA.Element so we get intellisense
    var currentElement as EA.Element;
    currentElement = theElement;

var tagValues = new Array();

//Tag Values to add for BPMN:BusinessProcess
tagValues[0] = new TagValue("TaggedValueName0", "DefaultValue0",""); // Value
tagValues[1] = new TagValue("TaggedValueName1", "DefaultValue1",""); // Value
tagValues[2] = new TagValue("TaggedValueName2", "<memo>","DefaultNotes2"); //Notes
tagValues[3] = new TagValue("TaggedValueName3", "<memo>","DefaultNotes3"); // Notes

var tagEnumerator = new Enumerator( tagValues );

Session.Output( "Processing Element: " + theElement.Name );

while ( !tagEnumerator.atEnd() )
    {
//Session.Output( "Processing Element: " + theElement.Name + ", TagValue:"+tagEnumerator.item());
//Add Tagged Value to Element preserving any existing tagged values
// Set Tagged Notes
//SetElementTaggedNotes(theElement,tagEnumerator.item().tagName, tagEnumerator.item().tagValue,false);
// Set Tagged Value

if (theElement.TaggedValues.GetByName( tagEnumerator.item().tagName ) == null)
{
//If tagname does not exist then add it.
SetElementTaggedValue(theElement,tagEnumerator.item().tagName, tagEnumerator.item().tagValue,tagEnumerator.item().tagNotes,true);
}
tagEnumerator.moveNext();
    }

theElement.Update();

}

/**
  * Retrieves the TaggedValue value from the provided element whose name matches the specified name.
  * If the element does not exist, or does not contain a TaggedValue with the specified name, null
  * is returned.
  *
  * @param[in] theElement (EA.Element) The element to retrieve the TaggedValue value from
  * @param[in] taggedValueName (String) The name of the TaggedValue whose value will be retrieved
  *
  * @return The value of the requested TaggedValue in variant form
  */
function GetElementTaggedValue( theElement /* : EA.Element */, taggedValueName /* : String */, defaultValue /* : String */ ) /* : variant */
{
var result = defaultValue;

if ( theElement != null && taggedValueName.length > 0 )
{
var taggedValue as EA.TaggedValue;
taggedValue = theElement.TaggedValues.GetByName( taggedValueName );

if ( taggedValue != null )
{
result = taggedValue.Value;
Session.Output( "Element Value: " + theElement.Name + " TagValue:"+taggedValueName + "Value = " + result)

}
else
{
Session.Output( "ERROR Element Value: " + theElement.Name + " TagValue:"+taggedValueName + "Doesn't exist");
}
}

return result;
}


function GetElementTaggedNotes( theElement /* : EA.Element */, taggedValueName /* : String */, defaultValue /* : String */ ) /* : variant */
{
var result = defaultValue;

if ( theElement != null && taggedValueName.length > 0 )
{
var taggedValue as EA.TaggedValue;
taggedValue = theElement.TaggedValues.GetByName( taggedValueName );

if ( taggedValue != null )
result = taggedValue.Notes;
}

return result;
}

/**
 * Sets the specified TaggedValue on the provided element. If the provided element does not already
 * contain a TaggedValue with the specified name, a new TaggedValue is created with the requested
 * name and value. If a TaggedValue already exists with the specified name then action to take is
 * determined by the replaceExisting variable. If replaceExisting is set to true, the existing value
 * is replaced with the specified value, if not, a new TaggedValue is created with the new value.
 *
 * @param[in] theElement (EA.Element) The element to set the TaggedValue value on
 * @param[in] taggedValueName (String) The name of the TaggedValue to set
 * @param[in] taggedValueValue (variant) The value of the TaggedValue to set
 * @param[in] replaceExisting (boolean) If a TaggedValue of the same name already exists, specifies
 * whether to replace it, or create a new TaggedValue.
 */
function SetElementTaggedValue( theElement /* : EA.Element */, taggedValueName /* : String */, taggedValueValue /* : variant */, taggedValueNotes /* : variant */,replaceExisting /* : boolean */ ) /* : void */
{
if ( theElement != null && taggedValueName.length > 0 )
{
var taggedValue as EA.TaggedValue;
taggedValue = null;

// If replace existing was specified then attempt to get a tagged value from the element
// with the provided name
if ( replaceExisting )
taggedValue = theElement.TaggedValues.GetByName( taggedValueName );

if ( taggedValue == null )
{
//Add a new taggedValue
taggedValue = theElement.TaggedValues.AddNew( taggedValueName, taggedValueValue );
taggedValue.Notes = taggedValueNotes;
Session.Output( "     Added Element: " + theElement.Name+ ' TaggedValue:'+ taggedValueName + " ="+ taggedValueValue);
}
else
{
taggedValue.Value = taggedValueValue;
taggedValue.Notes = taggedValueNotes;
Session.Output( "     Updated Element: " + theElement.Name+ ' TaggedValue:'+ taggedValueName + " ="+ taggedValueValue);
}

taggedValue.Update();
}
}

function SetElementTaggedNotes( theElement /* : EA.Element */, taggedValueName /* : String */, taggedValueNotes /* : variant */, replaceExisting /* : boolean */ ) /* : void */
{
if ( theElement != null && taggedValueName.length > 0 )
{
var taggedValue as EA.TaggedValue;
taggedValue = null;

// If replace existing was specified then attempt to get a tagged value from the element
// with the provided name
if ( replaceExisting )
taggedValue = theElement.TaggedValues.GetByName( taggedValueName );

if ( taggedValue == null )
{
taggedValue = theElement.TaggedValues.AddNew( taggedValueName, "<memo>" );
taggedValue.Notes = taggedValueNotes;
}
else
{
taggedValue.Notes = taggedValueNotes;
}

taggedValue.Update();
}
}

function DeleteElementTaggedValue( theElement /* : EA.Element */, taggedValueName /* : String */ ) /* : void */
{
if ( theElement != null && taggedValueName.length > 0 )
{
var taggedValue as EA.TaggedValue;
taggedValue = null;

// var taggedValueArray as EA.Element.TaggedValues;
// taggedValue = theElement.TaggedValues


for ( var i = 0; i < theElement.TaggedValues.Count; i++ )
{

// Session.Output( "DELETING Element: "+ theElement.Name + " TagValue:"+ taggedValueName);
taggedValue = theElement.TaggedValues.GetAt(i);
// If the element is the one we just added, then delete it
if ( taggedValue.Name == taggedValueName )
{
Session.Output( "     Deleted Element: " + theElement.Name + ", TagValue:"+theElement.TaggedValues.GetAt(i).Name);
theElement.TaggedValues.DeleteAt(i,false);
theElement.TaggedValues.Refresh();
break;
}
}
}
}

OnProjectBrowserScript();



Pages: 1 ... 3 4 [5] 6 7 ... 46