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 - natvig

Pages: [1] 2 3 4
1
Hi Robert,

I agree with KP that information flows is not what you would typically see within an activity diagram. I believe that by using information flows between InputPins and OutputPins you are actually violating the UML spec. (You could use them between ActivityNodes but this is also not a very common usage.) Instead you should use object flows as KP suggests.

However, in an ibd, you would typically use item flows (the SysML variant of information flows) that conveys items between properties. In this case Sparx has adopted a somewhat problematic approach with respect to their underlying implementation. The information about conveyed items are stored within the xref table which can only hold up to 7 conveyed items per information flow. If I remember correctly it is alos not possible to realise more than 7 item flows to the same connector because of the length of the Decription field in the xref table.

I attach an example SQL fragment that I use to extract this kind of information. Yes, it is long, but is working fine if you can modify it according to your specific situation. It will extract any information that is conveyed within a block (id 28246). It may be the case that I have used some specific MySQL/MariaDB statement.

Code: [Select]
SELECT
Neighbour_Name, Connector_Name, Connector_ID, Flow_Id,
[Neighbour_Type.Hyperlink],
Consumer_Name AS SIF,ifnull(CONCAT(ConsumerType_guid,ConsumerType_Name),'') AS "ConsumerPort_Type.Hyperlink",
TRIM(TRAILING ', ' FROM CONCAT(GROUP_CONCAT(DISTINCT Recieved_Name SEPARATOR ', '),', ',ifnull(GROUP_CONCAT(Recieved_Items SEPARATOR ', '),''))) AS "SIF_mottar",
TRIM(TRAILING ', ' FROM CONCAT(GROUP_CONCAT(DISTINCT Transmitted_Name SEPARATOR ', '),', ',ifnull(GROUP_CONCAT(Transmitted_Items SEPARATOR ', '),''))) AS "SIF_skickar",
Producer_Name AS IFS,ifnull(CONCAT(ProducerType_guid,ProducerType_Name),'') AS "ProducerPort_Type.Hyperlink"
FROM
(
SELECT
TRIM(LEADING ':' FROM CONCAT(ifnull(PRODUCERPP.Name,''),'::',ifnull(PRODUCERP.Name,''),'::',ifnull(PRODUCER.Name,''))) AS Neighbour_Name,
ifnull(CONCAT(PRODUCERTYPE.ea_guid,PRODUCERTYPE.Name),'') AS "Neighbour_Type.Hyperlink",
CONNECTOR.Name AS Connector_Name,
CONNECTOR.Connector_ID AS Connector_ID,
CONNECTOR.Stereotype AS Connector_Type,
FLOW.Stereotype AS Flow_Type,
FLOW.Connector_ID AS Flow_Id,
CONVEYED.Stereotype AS Conveyed_Type,
NULL AS Transmitted_Name,
NULL AS Transmitted_Items,
CONVEYED.Name AS Recieved_Name,
ITEMPROPERTY.Name AS Recieved_Items,
 
PRODUCER.Stereotype AS Producer_Type,
TRIM(LEADING ':' FROM CONCAT(ifnull(PRODUCERPP.Name,''),'::',ifnull(PRODUCERP.Name,''),'::',ifnull(PRODUCER.Name,''))) AS Producer_Name,
PRODUCERTYPE.ea_guid AS ProducerType_guid,PRODUCERTYPE.Name AS ProducerType_Name,
 
CONSUMER.Stereotype AS Consumer_Type,
TRIM(LEADING ':' FROM CONCAT(ifnull(CONSUMERPP.Name,''),'::',ifnull(CONSUMERP.Name,''),'::',ifnull(CONSUMER.Name,''))) AS Consumer_Name,
CONSUMERTYPE.ea_guid AS ConsumerType_guid,CONSUMERTYPE.Name AS ConsumerType_Name,
FLOW.SubType
FROM
(((((((((((((t_connector FLOW
LEFT JOIN
(
                                     SELECT opid.Property, opid.ElementID, CONCAT(test.Name,":",type.Name) AS Name, test.Stereotype AS Stereotype, test.Object_Type AS Object_Type
                                     FROM ((t_connectortag opid
                                     INNER JOIN t_object test ON test.ea_guid = opid.VALUE)
                                     LEFT JOIN t_object type ON type.ea_guid = test.PDATA1)
                                     WHERE (opid.Property='itemProperty')
) ITEMPROPERTY ON FLOW.Connector_ID = ITEMPROPERTY.ElementID)
INNER JOIN t_xref XCONVEYED ON XCONVEYED.Client = FLOW.ea_guid)
LEFT JOIN t_object CONVEYED ON (CONVEYED.ea_guid in (
left(XCONVEYED.Description,38),
mid(XCONVEYED.Description,40,38),
mid(XCONVEYED.Description,79,38),
mid(XCONVEYED.Description,118,38),
mid(XCONVEYED.Description,157,38),
mid(XCONVEYED.Description,196,38),
mid(XCONVEYED.Description,235,38),
mid(XCONVEYED.Description,274,38),
mid(XCONVEYED.Description,313,38),
mid(XCONVEYED.Description,352,38))) )
INNER JOIN t_xref XABSTRACTION ON (XCONVEYED.Client in (
left(XABSTRACTION.Description,38),
mid(XABSTRACTION.Description,40,38),
mid(XABSTRACTION.Description,79,38),
mid(XABSTRACTION.Description,118,38),
mid(XABSTRACTION.Description,157,38),
mid(XABSTRACTION.Description,196,38),
mid(XABSTRACTION.Description,235,38),
mid(XABSTRACTION.Description,274,38),
mid(XABSTRACTION.Description,313,38),
mid(XABSTRACTION.Description,352,38))))
INNER JOIN t_connector CONNECTOR ON CONNECTOR.ea_guid = XABSTRACTION.Client)
INNER JOIN t_object PRODUCER ON CONNECTOR.Start_Object_ID = PRODUCER.Object_ID)
INNER JOIN t_object CONSUMER ON CONNECTOR.End_Object_ID = CONSUMER.Object_ID)
LEFT JOIN t_object PRODUCERP ON PRODUCERP.Object_ID = PRODUCER.ParentID AND PRODUCERP.Object_Type in ('Port','Part'))
LEFT JOIN t_object CONSUMERP ON CONSUMERP.Object_ID = CONSUMER.ParentID AND CONSUMERP.Object_Type in ('Port','Part'))
LEFT JOIN t_object PRODUCERPP ON PRODUCERPP.Object_ID = PRODUCERP.ParentID AND PRODUCERPP.Object_Type in ('Port','Part'))
LEFT JOIN t_object CONSUMERPP ON CONSUMERPP.Object_ID = CONSUMERP.ParentID AND CONSUMERPP.Object_Type in ('Port','Part'))
LEFT JOIN t_object PRODUCERTYPE ON PRODUCER.PDATA1 = PRODUCERTYPE.EA_guid)
LEFT JOIN t_object CONSUMERTYPE ON CONSUMER.PDATA1 = CONSUMERTYPE.EA_guid)
 
WHERE
CONNECTOR.Stereotype IN ('ResourceConnector','OperationalConnector')
AND FLOW.Stereotype IN ('ResourceExchange','OperationalExchange')
AND XABSTRACTION.Behavior = 'abstraction'
AND (CONSUMER.Object_ID = 28246 OR
CONSUMERP.Object_ID = 28246 OR
CONSUMERPP.Object_ID = 28246)
 
UNION
 
SELECT
TRIM(LEADING ':' FROM CONCAT(ifnull(CONSUMERPP.Name,''),'::',ifnull(CONSUMERP.Name,''),'::',ifnull(CONSUMER.Name,''))) AS Neighbour_Name,
ifnull(CONCAT(CONSUMERTYPE.ea_guid,CONSUMERTYPE.Name),'') AS "Neighbour_Type.Hyperlink",
CONNECTOR.Name AS Connector_Name,
CONNECTOR.Connector_ID AS Connector_ID,
CONNECTOR.Stereotype AS Connector_Type,
FLOW.Stereotype AS Flow_Type,
FLOW.Connector_ID AS Flow_Id,
CONVEYED.Stereotype AS Conveyed_Type,
CONVEYED.Name AS Transmitted_Name,
ITEMPROPERTY.Name AS Transmitted_Items,
NULL AS Recieved_Name,
NULL AS Recieved_Items,
 
PRODUCER.Stereotype AS Producer_Type,
TRIM(LEADING ':' FROM CONCAT(ifnull(PRODUCERPP.Name,''),'::',ifnull(PRODUCERP.Name,''),'::',ifnull(PRODUCER.Name,''))) AS Producer_Name,
PRODUCERTYPE.ea_guid AS ProducerType_guid,PRODUCERTYPE.Name AS ProducerType_Name,
 
CONSUMER.Stereotype AS Consumer_Type,
TRIM(LEADING ':' FROM CONCAT(ifnull(CONSUMERPP.Name,''),'::',ifnull(CONSUMERP.Name,''),'::',ifnull(CONSUMER.Name,''))) AS Consumer_Name,
CONSUMERTYPE.ea_guid AS ConsumerType_guid,CONSUMERTYPE.Name AS ConsumerType_Name,
FLOW.SubType
FROM
(((((((((((((t_connector FLOW
LEFT JOIN
(
                                     SELECT opid.Property, opid.ElementID, CONCAT(test.Name,":",type.Name) AS Name, test.Stereotype AS Stereotype, test.Object_Type AS Object_Type
                                     FROM ((t_connectortag opid
                                     INNER JOIN t_object test ON test.ea_guid = opid.VALUE)
                                     LEFT JOIN t_object type ON type.ea_guid = test.PDATA1)
                                     WHERE (opid.Property='itemProperty')
) ITEMPROPERTY ON FLOW.Connector_ID = ITEMPROPERTY.ElementID)
INNER JOIN t_xref XCONVEYED ON XCONVEYED.Client = FLOW.ea_guid)
LEFT JOIN t_object CONVEYED ON (CONVEYED.ea_guid in (
left(XCONVEYED.Description,38),
mid(XCONVEYED.Description,40,38),
mid(XCONVEYED.Description,79,38),
mid(XCONVEYED.Description,118,38),
mid(XCONVEYED.Description,157,38),
mid(XCONVEYED.Description,196,38),
mid(XCONVEYED.Description,235,38),
mid(XCONVEYED.Description,274,38),
mid(XCONVEYED.Description,313,38),
mid(XCONVEYED.Description,352,38))) )
INNER JOIN t_xref XABSTRACTION ON (XCONVEYED.Client in (
left(XABSTRACTION.Description,38),
mid(XABSTRACTION.Description,40,38),
mid(XABSTRACTION.Description,79,38),
mid(XABSTRACTION.Description,118,38),
mid(XABSTRACTION.Description,157,38),
mid(XABSTRACTION.Description,196,38),
mid(XABSTRACTION.Description,235,38),
mid(XABSTRACTION.Description,274,38),
mid(XABSTRACTION.Description,313,38),
mid(XABSTRACTION.Description,352,38))))
INNER JOIN t_connector CONNECTOR ON CONNECTOR.ea_guid = XABSTRACTION.Client)
INNER JOIN t_object PRODUCER ON CONNECTOR.Start_Object_ID = PRODUCER.Object_ID)
INNER JOIN t_object CONSUMER ON CONNECTOR.End_Object_ID = CONSUMER.Object_ID)
LEFT JOIN t_object PRODUCERP ON PRODUCERP.Object_ID = PRODUCER.ParentID AND PRODUCERP.Object_Type in ('Port','Part'))
LEFT JOIN t_object CONSUMERP ON CONSUMERP.Object_ID = CONSUMER.ParentID AND CONSUMERP.Object_Type in ('Port','Part'))
LEFT JOIN t_object PRODUCERPP ON PRODUCERPP.Object_ID = PRODUCERP.ParentID AND PRODUCERPP.Object_Type in ('Port','Part'))
LEFT JOIN t_object CONSUMERPP ON CONSUMERPP.Object_ID = CONSUMERP.ParentID AND CONSUMERPP.Object_Type in ('Port','Part'))
LEFT JOIN t_object PRODUCERTYPE ON PRODUCER.PDATA1 = PRODUCERTYPE.EA_guid)
LEFT JOIN t_object CONSUMERTYPE ON CONSUMER.PDATA1 = CONSUMERTYPE.EA_guid)
 
WHERE
CONNECTOR.Stereotype IN ('ResourceConnector','OperationalConnector')
AND FLOW.Stereotype IN ('ResourceExchange','OperationalExchange')
AND XABSTRACTION.Behavior = 'abstraction'
AND (PRODUCER.Object_ID = 28246 OR
PRODUCERP.Object_ID = 28246 OR
PRODUCERPP.Object_ID = 28246)
) DerivedTable
GROUP BY Connector_ID;

//Hans

2
General Board / Re: Information Items Conveyed
« on: October 25, 2019, 07:19:22 pm »
Answer to your issue no 1: Right click on the Information flow and choose Advanced -> Information Items Conveyed...

3
You should definitely place internal block diagrams within the block itself. There are many benefits which this approach, there is simply no other way. Yes, documentation can be a little tricky, especially if I have multiple ibd:s within a block. How can you output elements from one diagram at a time in this case? I have had success doing it with document scripts following this guide: https://zubkiewicz.com/nonlinear-generation-of-documentation-in-sparx-enterprise-architect/

Block definition diagrams on the other hand is normally not placed within a block, but can be in some special cases. One example is the diagram 7.10 in the book A Practical Guide to SysML (second edition). There you see the diagram header bdd [block] Camera (Power Subsystem) which indicates that the context for the diagram is a block which indicates that the diagram can be placed under the block itself.

4
SysML is general in the sense that it can model any system, hardware and software. It can also be used to model logical architectures, i.e. where it has not yet been decided if solution is hardware or software. Yes, UML (and SysML) have diagrams suitable to model non-textual constraints/requirements in use cases, interactions, activities, state machines etc. However, stakeholder needs and requirements are still very often expressed in textual languages and you are often expected to provide traceability from those text based requirements to more refined model based requirements. This is where SysML comes in handy since it provides everything you need to make the transition and traceability from those text based requirements to other parts of your model. UML and SysML can be used together in a model. A suggestion is to add the requirements part of SysML to the UML you are currently using.

5
You should look at SysML which is a UML based language (and an ISO standard) for modelling systems and its requirements. SysML includes all the concepts needed to model requirements and their relationships to system elements such as interfaces and other properties. The UML profile for SysML is available in Sparx EA.

6
There is yet another method. You can drag the quick linker to an empty area of your diagram and press the Shift-key before choosing the target element type. You will then be prompted with the search dialog which allows you to search for any element in the whole model. The target element does not need to be present in any diagram.

7
The new metamodeling features in EA14 is absolutely fantastic. Finally meta constraints and view specifications can be easily implemented into a profile to enable constraints to diagrams and model validation. There are a couple of minor features missing that would improve even furter, such as the possibility to set diagram options in a view specification. Another thing that I have not been able to implement is the inclusion of patterns from a view specification. It works well from a toolbox profile, but not from a view specification. Has anybody made it work? From a view specification I tried to expose an abstract stereotype called MyProfileName::MyPatternName(UMLPatternSilent), but it is not working.

Any ideas?

8
General Board / Re: Diagrams in report cropped!
« on: September 06, 2017, 04:36:07 am »
I have noticed similar behaviour when using EA from within a virtualised windows environment (like Parallels on Mac). Depending on the resolution set on the Windows desktop the images are cropped to a larger or lesser extent. Before generation of final documentation I sometimes need to change resolution.

/Hans

9
General Board / Re: ISO 80000-1 Quantaties and Units
« on: May 29, 2017, 06:44:19 pm »
if I have done it correctly, it doesn't look like the ISO Library  (ISO 80000-1 Quantities and Units).

Do you see the Quantities and Units? Maybe I've missed something.
I forgot to mention that the library is only available from the SysML 1.3 Technology which is the one I still use most of the time. Note also that there were some changes made to units in SysML 1.4. Tim Weilkiens has written a post about the changes here: http://model-based-systems-engineering.com/2015/04/13/whats-new-in-sysml-1-4-units/
/Hans

10
General Board / Re: ISO 80000-1 Quantaties and Units
« on: May 29, 2017, 05:24:10 pm »
Those are available from the model wizard (Right click on a package -> Add a Model using Wizard...). My first impression is that they work reasonably ok.

/Hans

11
I recognise the need that I think jankari is describing. My interpretation is that jankari needs to be able to include a tagged value, defined on the model document itself, into the generated report from that model document. Thus, analogous to Project Constants, but for each model document in a virtual document. The Report Constants setting on a virtual document overwrites any defined tagged values in a n individual model document. Also, it is not possible to include a custom defined tagged value of a virtual document.

With the above functionality it would be possible reduce the number of templates necessary in a model by reusing the same template for many different sections of a report. Consider for example a report with a standard template (look) for all chapters, except that the chapter heading is different for all chapters. With the possibility to include tagged values on the model document itself into the report, we could reuse one single template throughout the virtual document.

/Hans

12

  • In order to share a common page definition between two diagram types you need to have this common page definition extend the ToolboxPage meta classes in both profiles! The common page can be located in one of the toolbox page packages, it does not matter which. But it should be visible in the diagrams of both toolbox pages.

No, doesn't work. Page only displayed in one toolbox associated with profile where this page is located.

Then you must have generated the toolbox profile from a directory instead of the diagrams. Or, the toolbox page is NOT present in both toolbox profile diagrams before generating the toolbox profiles. (I use this method all the time and know for a fact that it works.)

13
I'm not sure I understand you but I think I do, and yes it is possible to achieve what you want. A couple of points:

  • Each diagram type can only be associated with one toolbox profile, which means you have to create two toolbox profiles if you have two diagram types. Each toolbox profile need to have its own ToolboxPage metaclass. To create a Toolbox Page you extend this metaclass in a "stereotype" which holds the definition of the different elements you wish to have in your toolbox page.
  • In order to share a common page definition between two diagram types you need to have this common page definition extend the ToolboxPage meta classes in both profiles! The common page can be located in one of the toolbox page packages, it does not matter which. But it should be visible in the diagrams of both toolbox pages.
  • Make sure you create you profile by right clicking in a toolbox page diagram -> choose Advanced -> Save as profile. (The definitions you wish to include in your profile must be visible in the diagram.) It is not possible to create the profile by right clicking in the browser since the common page can only be located inb one of the toolbox profile folders. It will be missing from one of the toolbox pages if you try to do so. (Unless you move it of course between creation of toolbox profiles. But don't do that. Much easier to use the diagrams.)

/Hans

14
Uml Process / Re: How to use IBD and properties
« on: November 30, 2016, 07:56:15 pm »
To be honest I haven't much experience with interfaces. I just think diagrams get cluttered with "lollipops". I haven't understood what interfaces add that cannot be achieved with ordinary blocks and interface blocks. If you turn to modern architectural frameworks such as the UAFP interfaces are not used.

I think you may have misunderstood my point about item properties. Everything is already in EA 12 (and EA 13). If you define your
properties on a block, item properties can be visualised exactly in the same way as item flows. No specials necessary. Follow these steps:
  • Define one or more flow properties under your block.
  • Create an item flow between two parts of the block.
  • Go to Properties | Tags of the item flow and choose your flow property created under step 1. (Only one item property is allows per item flow, as per the SysML spec.)
  • Add a connector between the parts of the block.
  • Right click the connector and choose Information Flows Realized...
  • Now select your item flows, and the item property will be displayed just lite any item flow.

/Hans

15
Uml Process / Re: How to use IBD and properties
« on: November 29, 2016, 04:50:05 am »
Helmut, I agree on what you wrote, with one exception:

In SysML you can put Flow Properties on the connector and in EA you can only put blocks like classifiers on the connector (Information Flow realized).

EA is actually capable of handling item properties. Look at tagged values of your item flow. There you will be able to assign an item property to the flow. The flow can subsequently be realized by a connector.

(Also, I could live without Interfaces. Why would you want to use them?)

/Hans

Pages: [1] 2 3 4