SlideShare uma empresa Scribd logo
1 de 57
Baixar para ler offline
ConfigModeler and VClipse
Languages and IDEs for Product Modeling
on Different Abstraction Levels
Tim Geisler
webXcerpt Software GmbH
tg@webxcerpt.com
CWG 2010, Vienna 2010-04-20
Product Modeling Gap
●
Post-merger consolidation:
harmonize SAP and non-SAP systems
for sales and configuration
●
SAP ERP/PLM (VC) + SAP CRM 2007 (IPC)
●
Migration challenge:
How to migrate 6 product lines / more than 240
different products to VC / IPC?
(CWG 2009 Berlin talk by Gerhard Hering, NSN)
Product Modeling @
Fabric-like Modeling
NSN VC framework
IPC extensions
coding conventions
Nearshore
VC modeling
team
Company-wide
generic product
structure
Standardized
product descriptions
Fabric-like Modeling
NSN VC framework
IPC extensions
coding conventions
Nearshore
VC modeling
team
Company-wide
generic product
structure
Standardized
product descriptions
Standardized Product Descriptions
●
Product structure
●
Characteristics
(domains, texts, default
values, interface
design)
●
Quantity rules for
materials
●
Other rules
In-house product experts specify product models
Problems
Excel „template“ used as graph paper
●
pseudo code – manual translation required
●
manual tracking of changes
●
no guarantee for completeness
●
no specific tool support – just general Excel
●
first visual feedback with product setup
Standardized Product Descriptions
Standardized Product Descriptions
Formalized Product Descriptions
Formalized Product Descriptions
Domain specific language
●
problem-oriented
●
human-understandable
●
text-based
●
machine-processable
Configuration Modeling Language (CML)
Configuration Modeling Language
Products
Materials
Value Domains
Parameters
Equations
product CWGSwitch is #ABC000010000630 {
uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL;
domain boards =
switch uplink {
case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE];
case 1GE : [*unequipped, 8x1GE, 16x1GE];
};
product interfaceSubsystem is #ABC000010000640 {
slot slot1 in boards is XYZ_CWGSWITCH_SLOT01;
slot slot2 in boards is XYZ_CWGSWITCH_SLOT02;
slot slot3 in boards is XYZ_CWGSWITCH_SLOT03;
slot slot4 in boards is XYZ_CWGSWITCH_SLOT04;
slotable #2x10GE is #ABC00001000634;
slotable #8x1GE is #ABC00001000635;
slotable #16x1GE is #ABC00001000636;
check(#2x10GE > 2, "Only two 2x10GE boards allowed");
};
product powerSubsystem is #ABC000010000641 {
power in [*AC, DC] is XYZ_CWGSWITCH_PWR;
powerRedundancy in
if power == AC
then [*false, true]
else disabled false
is XYZ_CWGSWITCH_PWRRED;
amountPowerSupplies = 1 + (1 when powerRedundancy);
#POWER:AC = amountPowerSupplies when power == AC;
...
};
...
Configuration Modeling Language
Products
Materials
Value Domains
Parameters
Equations
product CWGSwitch is #ABC000010000630 {
uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL;
domain boards =
switch uplink {
case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE];
case 1GE : [*unequipped, 8x1GE, 16x1GE];
};
product interfaceSubsystem is #ABC000010000640 {
slot slot1 in boards is XYZ_CWGSWITCH_SLOT01;
slot slot2 in boards is XYZ_CWGSWITCH_SLOT02;
slot slot3 in boards is XYZ_CWGSWITCH_SLOT03;
slot slot4 in boards is XYZ_CWGSWITCH_SLOT04;
slotable #2x10GE is #ABC00001000634;
slotable #8x1GE is #ABC00001000635;
slotable #16x1GE is #ABC00001000636;
check(#2x10GE > 2, "Only two 2x10GE boards allowed");
};
product powerSubsystem is #ABC000010000641 {
power in [*AC, DC] is XYZ_CWGSWITCH_PWR;
powerRedundancy in
if power == AC
then [*false, true]
else disabled false
is XYZ_CWGSWITCH_PWRRED;
amountPowerSupplies = 1 + (1 when powerRedundancy);
#POWER:AC = amountPowerSupplies when power == AC;
...
};
...
Configuration Modeling Language
Products
Materials
Value Domains
Parameters
Equations
product CWGSwitch is #ABC000010000630 {
uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL;
domain boards =
switch uplink {
case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE];
case 1GE : [*unequipped, 8x1GE, 16x1GE];
};
product interfaceSubsystem is #ABC000010000640 {
slot slot1 in boards is XYZ_CWGSWITCH_SLOT01;
slot slot2 in boards is XYZ_CWGSWITCH_SLOT02;
slot slot3 in boards is XYZ_CWGSWITCH_SLOT03;
slot slot4 in boards is XYZ_CWGSWITCH_SLOT04;
slotable #2x10GE is #ABC00001000634;
slotable #8x1GE is #ABC00001000635;
slotable #16x1GE is #ABC00001000636;
check(#2x10GE > 2, "Only two 2x10GE boards allowed");
};
product powerSubsystem is #ABC000010000641 {
power in [*AC, DC] is XYZ_CWGSWITCH_PWR;
powerRedundancy in
if power == AC
then [*false, true]
else disabled false
is XYZ_CWGSWITCH_PWRRED;
amountPowerSupplies = 1 + (1 when powerRedundancy);
#POWER:AC = amountPowerSupplies when power == AC;
...
};
...
Configuration Modeling Language
Products
Materials
Value Domains
Parameters
Equations
product CWGSwitch is #ABC000010000630 {
uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL;
domain boards =
switch uplink {
case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE];
case 1GE : [*unequipped, 8x1GE, 16x1GE];
};
product interfaceSubsystem is #ABC000010000640 {
slot slot1 in boards is XYZ_CWGSWITCH_SLOT01;
slot slot2 in boards is XYZ_CWGSWITCH_SLOT02;
slot slot3 in boards is XYZ_CWGSWITCH_SLOT03;
slot slot4 in boards is XYZ_CWGSWITCH_SLOT04;
slotable #2x10GE is #ABC00001000634;
slotable #8x1GE is #ABC00001000635;
slotable #16x1GE is #ABC00001000636;
check(#2x10GE > 2, "Only two 2x10GE boards allowed");
};
product powerSubsystem is #ABC000010000641 {
power in [*AC, DC] is XYZ_CWGSWITCH_PWR;
powerRedundancy in
if power == AC
then [*false, true]
else disabled false
is XYZ_CWGSWITCH_PWRRED;
amountPowerSupplies = 1 + (1 when powerRedundancy);
#POWER:AC = amountPowerSupplies when power == AC;
...
};
...
product CWGSwitch is #ABC000010000630 {
uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL;
domain boards =
switch uplink {
case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE];
case 1GE : [*unequipped, 8x1GE, 16x1GE];
};
product interfaceSubsystem is #ABC000010000640 {
slot slot1 in boards is XYZ_CWGSWITCH_SLOT01;
slot slot2 in boards is XYZ_CWGSWITCH_SLOT02;
slot slot3 in boards is XYZ_CWGSWITCH_SLOT03;
slot slot4 in boards is XYZ_CWGSWITCH_SLOT04;
slotable #2x10GE is #ABC00001000634;
slotable #8x1GE is #ABC00001000635;
slotable #16x1GE is #ABC00001000636;
check(#2x10GE > 2, "Only two 2x10GE boards allowed");
};
product powerSubsystem is #ABC000010000641 {
power in [*AC, DC] is XYZ_CWGSWITCH_PWR;
powerRedundancy in
if power == AC
then [*false, true]
else disabled false
is XYZ_CWGSWITCH_PWRRED;
amountPowerSupplies = 1 + (1 when powerRedundancy);
#POWER:AC = amountPowerSupplies when power == AC;
...
};
...
Configuration Modeling Language
Products
Materials
Value Domains
Parameters
Equations
product CWGSwitch is #ABC000010000630 {
uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL;
domain boards =
switch uplink {
case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE];
case 1GE : [*unequipped, 8x1GE, 16x1GE];
};
product interfaceSubsystem is #ABC000010000640 {
slot slot1 in boards is XYZ_CWGSWITCH_SLOT01;
slot slot2 in boards is XYZ_CWGSWITCH_SLOT02;
slot slot3 in boards is XYZ_CWGSWITCH_SLOT03;
slot slot4 in boards is XYZ_CWGSWITCH_SLOT04;
slotable #2x10GE is #ABC00001000634;
slotable #8x1GE is #ABC00001000635;
slotable #16x1GE is #ABC00001000636;
check(#2x10GE > 2, "Only two 2x10GE boards allowed");
};
product powerSubsystem is #ABC000010000641 {
power in [*AC, DC] is XYZ_CWGSWITCH_PWR;
powerRedundancy in
if power == AC
then [*false, true]
else disabled false
is XYZ_CWGSWITCH_PWRRED;
amountPowerSupplies = 1 + (1 when powerRedundancy);
#POWER:AC = amountPowerSupplies when power == AC;
...
};
...
Configuration Modeling Language
Identifiers
product CWGSwitch is #ABC000010000630 {
uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL;
domain boards =
switch uplink {
case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE];
case 1GE : [*unequipped, 8x1GE, 16x1GE];
};
product interfaceSubsystem is #ABC000010000640 {
slot slot1 in boards is XYZ_CWGSWITCH_SLOT01;
slot slot2 in boards is XYZ_CWGSWITCH_SLOT02;
slot slot3 in boards is XYZ_CWGSWITCH_SLOT03;
slot slot4 in boards is XYZ_CWGSWITCH_SLOT04;
slotable #2x10GE is #ABC00001000634;
slotable #8x1GE is #ABC00001000635;
slotable #16x1GE is #ABC00001000636;
check(#2x10GE > 2, "Only two 2x10GE boards allowed");
};
product powerSubsystem is #ABC000010000641 {
power in [*AC, DC] is XYZ_CWGSWITCH_PWR;
powerRedundancy in
if power == AC
then [*false, true]
else disabled false
is XYZ_CWGSWITCH_PWRRED;
amountPowerSupplies = 1 + (1 when powerRedundancy);
#POWER:AC = amountPowerSupplies when power == AC;
...
};
...
Configuration Modeling Language
Identifiers
Slotting
product CWGSwitch is #ABC000010000630 {
uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL;
domain boards =
switch uplink {
case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE];
case 1GE : [*unequipped, 8x1GE, 16x1GE];
};
product interfaceSubsystem is #ABC000010000640 {
slot slot1 in boards is XYZ_CWGSWITCH_SLOT01;
slot slot2 in boards is XYZ_CWGSWITCH_SLOT02;
slot slot3 in boards is XYZ_CWGSWITCH_SLOT03;
slot slot4 in boards is XYZ_CWGSWITCH_SLOT04;
slotable #2x10GE is #ABC00001000634;
slotable #8x1GE is #ABC00001000635;
slotable #16x1GE is #ABC00001000636;
check(#2x10GE > 2, "Only two 2x10GE boards allowed");
};
product powerSubsystem is #ABC000010000641 {
power in [*AC, DC] is XYZ_CWGSWITCH_PWR;
powerRedundancy in
if power == AC
then [*false, true]
else disabled false
is XYZ_CWGSWITCH_PWRRED;
amountPowerSupplies = 1 + (1 when powerRedundancy);
#POWER:AC = amountPowerSupplies when power == AC;
...
};
...
Configuration Modeling Language
Identifiers
Slotting
Conditionals
Configuration Modeling Language
Parallel conditions
●
Value domains
●
Default values
●
Visibility
hw/sw in
if isNewDelivery
then switch chassis {
case Chassis:A : [NoHW/SW, *HW/SW1, HW/SW2];
case Chassis:B :
case Chassis:C : [NoHW/SW, *HW/SW2, HW/SW3];
case Chassis:D : disabled HW/SW1;
default : invisible NoHW/SW;
}
else invisible NoHW/SW;
Configuration Modeling Language
Parallel conditions
●
Value domains
●
Default values
●
Visibility
hw/sw in
if isNewDelivery
then switch chassis {
case Chassis:A : [NoHW/SW, *HW/SW1, HW/SW2];
case Chassis:B :
case Chassis:C : [NoHW/SW, *HW/SW2, HW/SW3];
case Chassis:D : disabled HW/SW1;
default : invisible NoHW/SW;
}
else invisible NoHW/SW;
Configuration Modeling Language
Parallel conditions
●
Value domains
●
Default values
●
Visibility
hw/sw in
if isNewDelivery
then switch chassis {
case Chassis:A : [NoHW/SW, *HW/SW1, HW/SW2];
case Chassis:B :
case Chassis:C : [NoHW/SW, *HW/SW2, HW/SW3];
case Chassis:D : disabled HW/SW1;
default : invisible NoHW/SW;
}
else invisible NoHW/SW;
ConfigModeler
Integrated Development Environment (IDE)
for CML
●
Eclipse-based
General IDE Features
Syntax checks
General IDE Features
Syntax checks
Checking references
General IDE Features
Syntax checks
Checking references
Checking types
General IDE Features
Syntax checks
Checking references
Checking types
Code completion
General IDE Features
Syntax checks
Checking references
Checking types
Code completion
Cycle detection
General IDE Features
Diff and history
Domain-specific IDE Features
Additional information
Domain-specific IDE Features
Additional information
Dependency graph
Domain-specific IDE Features
Additional information
Dependency graph
IPC preview for user interface
VC Code Generation
Automatic generation of SAP product model
from formal specification in CML
VC Code Generation
Uses NSN VC framework and coding conventions
...
* count slotable material
PFUNCTION Z_VC_GEN_AGG_INST_02 (
GEN_CSTIC_IN_PREFIX_01 = 'XYZ_CWGSWITCH_SLOT',
GEN_CSTIC_IN_PREFIX_02 = 'NA',
GEN_CSTIC_IN_PREFIX_03 = 'NA',
GEN_CSTIC_IN_PREFIX_04 = 'NA',
GEN_CSTIC_QTY_PREFIX = 'NA',
GEN_DIGITS = 2,
GEN_CSTIC_OUT = 'GEN_CML_AGG_MODULES',
GEN_INSTANCE_START = 'PARENT',
GEN_INCL_START_INST = 'T',
GEN_INCL_SELF_INST = 'F',
GEN_RECURSIVE = 'F',
GEN_AGG_CTRL_SUFFIX = 'NA',
GEN_AGG_CTRL_MATNR_LIST = 'NA',
GEN_AGG_CTRL_CLASS = 'NA',
GEN_AGG_CTRL_CSTIC = 'NA',
GEN_AGG_CTRL_VAL = 'NA',
GEN_MODE = 'DELETE'),
* slotable material #2x10GE
PFUNCTION Z_VC_GEN_GET_COMP_DATA_01 (
GEN_CSTIC_IN = 'GEN_CML_AGG_MODULES',
GEN_INSTANCE_IN = 'SELF',
GEN_VAL_CHAR_01 = '2x10GE',
GEN_INDEX_NUM = 1,
GEN_COMP_QTY = $SELF.GEN_AUX_NUM_01),
PFUNCTION Z_VC_GEN_SET_VBOM_MU (
GEN_MU_ID = 'ABC00001000634',
GEN_MU_QTY = $SELF.GEN_AUX_NUM_01,
GEN_VBOM_CSTIC = 'GEN_VBOM_CURR') IF $SELF.GEN_AUX_NUM_01 GT 0,
...
VC Code Generation
Automated model setup
via Product Data Replication
PDR
Use of ConfigModeler at NSN
●
Product specialists specify and set up
products models in SAP
●
20 users (10 regular)
●
up to now 60 products
●
but: not a tool for all products
System Overview
RFC
Editor
ConfigModeler
CML
Compiler
Product Modeling in SAP VC
existing:
●
textual languages for procedures and constraints
●
interactive creation and change of VC objects
missing:
●
human-readable textual language for VC objects
– diff / merge / version control
– find / replace
– partial models
– product model as a document
System Overview
RFC
Editor
ConfigModeler
CML
Compiler
System Overview
RFC
Editor
Editor
ConfigModeler
VClipse
CML
VCML
Compiler
VCML: DSL for SAP VC
●
Simple DSL for SAP VC objects
with embedded languages
for procedures and constraints
●
DSL design:
●
Make it simple
●
Model only important properties of SAP objects,
others are hard-wired or defaulted
VCML Example: Characteristic
characteristic WP_OPTIONS {
description "Web Phone Options"
documentation "Some long documentation on Web Phone Options"
symbolic {
numberOfChars 3
values {
'001' { description "Cable for connecting monitor" }
'002' { description "Voice mail" }
'003' { description "Camera" }
'004' { description "Additional Antenna" }
'005' { description "Memory Upgrade"
dependencies {
WP_MEMORY_UPGRADE
}
}
'006' { description "Self-Cleaning Screen" }
}
}
status released
[ multiValue required ]
}
VCML Example: Precondition
precondition WP_MEMORY_UPGRADE {
description "Precond. for memory upgrade"
status released
source {
* memory upgrade is only allowed with answering machine
$self.WP_options specified and
$self.WP_options = '002'.
}
}
VClipse: Eclipse-based IDE for VCML
Syntax check
VClipse: Eclipse-based IDE for VCML
Syntax check
Jump to definition
VClipse: Eclipse-based IDE for VCML
Syntax check
Jump to definition
VClipse: Eclipse-based IDE for VCML
Syntax check
Jump to definition
Code completion
VClipse: Eclipse-based IDE for VCML
Syntax check
Jump to definition
Code completion
Outline
Document order PMEVC order
VClipse: Eclipse-based IDE for VCML
Syntax check
Jump to definition
Code completion
Outline
Diff / merge
History
Interfaces to SAP: RFC-based
CRUD operations
Recursive model extraction
Interfaces to SAP: IDoc-based
Send complete product models
via Product Data Replication (PDR)
VCML JCo IDocs UPS
PDR
VClipse is Free
VClipse is Free
VClipse.org: Open Source
Use, adapt, integrate, contribute!
Summary
Product modeling is like programming
●
Use appropriate languages
●
Use appropriate tools
Tool chain for text-based product modeling
●
CML, VCML:
two languages with different abstraction levels
●
ConfigModeler, VClipse:
two Eclipse-based IDEs
Summary
Thanks to ...
●
various persons at Nokia Siemens Networks
●
Peter Muthsam (VC knowledge)
●
Daniel Naus (CWG Sandbox)
●
itemis (Xtext)
●
webXcerpt team
ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Mais conteúdo relacionado

Semelhante a ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Semelhante a ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels (20)

Timer ppt
Timer pptTimer ppt
Timer ppt
 
Rapport
RapportRapport
Rapport
 
Der perfekte 12c trigger
Der perfekte 12c triggerDer perfekte 12c trigger
Der perfekte 12c trigger
 
Hello, Is That FreeSWITCH? Then We're Coming to Check You!
Hello, Is That FreeSWITCH? Then We're Coming to Check You!Hello, Is That FreeSWITCH? Then We're Coming to Check You!
Hello, Is That FreeSWITCH? Then We're Coming to Check You!
 
OpenWorld Sep14 12c for_developers
OpenWorld Sep14 12c for_developersOpenWorld Sep14 12c for_developers
OpenWorld Sep14 12c for_developers
 
Ver2.ppt
Ver2.pptVer2.ppt
Ver2.ppt
 
Fpga creating counter with internal clock
Fpga   creating counter with internal clockFpga   creating counter with internal clock
Fpga creating counter with internal clock
 
Experiment 16 x2 parallel lcd
Experiment   16 x2 parallel lcdExperiment   16 x2 parallel lcd
Experiment 16 x2 parallel lcd
 
hdl timer ppt.pptx
hdl timer ppt.pptxhdl timer ppt.pptx
hdl timer ppt.pptx
 
Load cell
Load cellLoad cell
Load cell
 
Original DARLING TRANSISTOR ARRAY IC ULQ2003A 2003A 2003 SOP-16 New Texas Ins...
Original DARLING TRANSISTOR ARRAY IC ULQ2003A 2003A 2003 SOP-16 New Texas Ins...Original DARLING TRANSISTOR ARRAY IC ULQ2003A 2003A 2003 SOP-16 New Texas Ins...
Original DARLING TRANSISTOR ARRAY IC ULQ2003A 2003A 2003 SOP-16 New Texas Ins...
 
4511
45114511
4511
 
Session1
Session1Session1
Session1
 
huawei-s5735-s24st4xe-v2-brochure-datasheet.pdf
huawei-s5735-s24st4xe-v2-brochure-datasheet.pdfhuawei-s5735-s24st4xe-v2-brochure-datasheet.pdf
huawei-s5735-s24st4xe-v2-brochure-datasheet.pdf
 
Data Flow Modeling
Data Flow ModelingData Flow Modeling
Data Flow Modeling
 
Iai xsel r_s_specsheet
Iai xsel r_s_specsheetIai xsel r_s_specsheet
Iai xsel r_s_specsheet
 
Basic-VHDL-Constructs1.ppt
Basic-VHDL-Constructs1.pptBasic-VHDL-Constructs1.ppt
Basic-VHDL-Constructs1.ppt
 
knowledge in daily life.ppt
knowledge in daily life.pptknowledge in daily life.ppt
knowledge in daily life.ppt
 
NIR on the Mesa i965 backend (FOSDEM 2016)
NIR on the Mesa i965 backend (FOSDEM 2016)NIR on the Mesa i965 backend (FOSDEM 2016)
NIR on the Mesa i965 backend (FOSDEM 2016)
 
project report
project reportproject report
project report
 

Mais de Tim Geisler

Tools for Test-Driven Product Modeling
Tools for Test-Driven Product ModelingTools for Test-Driven Product Modeling
Tools for Test-Driven Product Modeling
Tim Geisler
 
How to Create Your Own Product-Modeling Environment
How to Create Your Own Product-Modeling EnvironmentHow to Create Your Own Product-Modeling Environment
How to Create Your Own Product-Modeling Environment
Tim Geisler
 

Mais de Tim Geisler (6)

Tools for Test-Driven Product Modeling
Tools for Test-Driven Product ModelingTools for Test-Driven Product Modeling
Tools for Test-Driven Product Modeling
 
openCPQ - A React-Based Product-Configuration Toolkit
openCPQ - A React-Based Product-Configuration ToolkitopenCPQ - A React-Based Product-Configuration Toolkit
openCPQ - A React-Based Product-Configuration Toolkit
 
Configuring in the Browser, Really!
Configuring in the Browser, Really!Configuring in the Browser, Really!
Configuring in the Browser, Really!
 
VClipse – Xtext-based IDE for the SAP Variant Configurator
VClipse – Xtext-based IDE for the SAP Variant ConfiguratorVClipse – Xtext-based IDE for the SAP Variant Configurator
VClipse – Xtext-based IDE for the SAP Variant Configurator
 
How to Create Your Own Product-Modeling Environment
How to Create Your Own Product-Modeling EnvironmentHow to Create Your Own Product-Modeling Environment
How to Create Your Own Product-Modeling Environment
 
Domain-Specific Languages for Product Modeling (CWG 2011 Cologne, SAP Configu...
Domain-Specific Languages for Product Modeling (CWG 2011 Cologne, SAP Configu...Domain-Specific Languages for Product Modeling (CWG 2011 Cologne, SAP Configu...
Domain-Specific Languages for Product Modeling (CWG 2011 Cologne, SAP Configu...
 

Último

CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 

Último (20)

The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 

ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

  • 1. ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels Tim Geisler webXcerpt Software GmbH tg@webxcerpt.com CWG 2010, Vienna 2010-04-20
  • 3. ● Post-merger consolidation: harmonize SAP and non-SAP systems for sales and configuration ● SAP ERP/PLM (VC) + SAP CRM 2007 (IPC) ● Migration challenge: How to migrate 6 product lines / more than 240 different products to VC / IPC? (CWG 2009 Berlin talk by Gerhard Hering, NSN) Product Modeling @
  • 4. Fabric-like Modeling NSN VC framework IPC extensions coding conventions Nearshore VC modeling team Company-wide generic product structure Standardized product descriptions
  • 5. Fabric-like Modeling NSN VC framework IPC extensions coding conventions Nearshore VC modeling team Company-wide generic product structure Standardized product descriptions
  • 6. Standardized Product Descriptions ● Product structure ● Characteristics (domains, texts, default values, interface design) ● Quantity rules for materials ● Other rules In-house product experts specify product models
  • 7. Problems Excel „template“ used as graph paper ● pseudo code – manual translation required ● manual tracking of changes ● no guarantee for completeness ● no specific tool support – just general Excel ● first visual feedback with product setup
  • 10. Formalized Product Descriptions Domain specific language ● problem-oriented ● human-understandable ● text-based ● machine-processable Configuration Modeling Language (CML)
  • 11. Configuration Modeling Language Products Materials Value Domains Parameters Equations product CWGSwitch is #ABC000010000630 { uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL; domain boards = switch uplink { case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE]; case 1GE : [*unequipped, 8x1GE, 16x1GE]; }; product interfaceSubsystem is #ABC000010000640 { slot slot1 in boards is XYZ_CWGSWITCH_SLOT01; slot slot2 in boards is XYZ_CWGSWITCH_SLOT02; slot slot3 in boards is XYZ_CWGSWITCH_SLOT03; slot slot4 in boards is XYZ_CWGSWITCH_SLOT04; slotable #2x10GE is #ABC00001000634; slotable #8x1GE is #ABC00001000635; slotable #16x1GE is #ABC00001000636; check(#2x10GE > 2, "Only two 2x10GE boards allowed"); }; product powerSubsystem is #ABC000010000641 { power in [*AC, DC] is XYZ_CWGSWITCH_PWR; powerRedundancy in if power == AC then [*false, true] else disabled false is XYZ_CWGSWITCH_PWRRED; amountPowerSupplies = 1 + (1 when powerRedundancy); #POWER:AC = amountPowerSupplies when power == AC; ... }; ...
  • 12. Configuration Modeling Language Products Materials Value Domains Parameters Equations product CWGSwitch is #ABC000010000630 { uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL; domain boards = switch uplink { case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE]; case 1GE : [*unequipped, 8x1GE, 16x1GE]; }; product interfaceSubsystem is #ABC000010000640 { slot slot1 in boards is XYZ_CWGSWITCH_SLOT01; slot slot2 in boards is XYZ_CWGSWITCH_SLOT02; slot slot3 in boards is XYZ_CWGSWITCH_SLOT03; slot slot4 in boards is XYZ_CWGSWITCH_SLOT04; slotable #2x10GE is #ABC00001000634; slotable #8x1GE is #ABC00001000635; slotable #16x1GE is #ABC00001000636; check(#2x10GE > 2, "Only two 2x10GE boards allowed"); }; product powerSubsystem is #ABC000010000641 { power in [*AC, DC] is XYZ_CWGSWITCH_PWR; powerRedundancy in if power == AC then [*false, true] else disabled false is XYZ_CWGSWITCH_PWRRED; amountPowerSupplies = 1 + (1 when powerRedundancy); #POWER:AC = amountPowerSupplies when power == AC; ... }; ...
  • 13. Configuration Modeling Language Products Materials Value Domains Parameters Equations product CWGSwitch is #ABC000010000630 { uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL; domain boards = switch uplink { case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE]; case 1GE : [*unequipped, 8x1GE, 16x1GE]; }; product interfaceSubsystem is #ABC000010000640 { slot slot1 in boards is XYZ_CWGSWITCH_SLOT01; slot slot2 in boards is XYZ_CWGSWITCH_SLOT02; slot slot3 in boards is XYZ_CWGSWITCH_SLOT03; slot slot4 in boards is XYZ_CWGSWITCH_SLOT04; slotable #2x10GE is #ABC00001000634; slotable #8x1GE is #ABC00001000635; slotable #16x1GE is #ABC00001000636; check(#2x10GE > 2, "Only two 2x10GE boards allowed"); }; product powerSubsystem is #ABC000010000641 { power in [*AC, DC] is XYZ_CWGSWITCH_PWR; powerRedundancy in if power == AC then [*false, true] else disabled false is XYZ_CWGSWITCH_PWRRED; amountPowerSupplies = 1 + (1 when powerRedundancy); #POWER:AC = amountPowerSupplies when power == AC; ... }; ...
  • 14. Configuration Modeling Language Products Materials Value Domains Parameters Equations product CWGSwitch is #ABC000010000630 { uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL; domain boards = switch uplink { case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE]; case 1GE : [*unequipped, 8x1GE, 16x1GE]; }; product interfaceSubsystem is #ABC000010000640 { slot slot1 in boards is XYZ_CWGSWITCH_SLOT01; slot slot2 in boards is XYZ_CWGSWITCH_SLOT02; slot slot3 in boards is XYZ_CWGSWITCH_SLOT03; slot slot4 in boards is XYZ_CWGSWITCH_SLOT04; slotable #2x10GE is #ABC00001000634; slotable #8x1GE is #ABC00001000635; slotable #16x1GE is #ABC00001000636; check(#2x10GE > 2, "Only two 2x10GE boards allowed"); }; product powerSubsystem is #ABC000010000641 { power in [*AC, DC] is XYZ_CWGSWITCH_PWR; powerRedundancy in if power == AC then [*false, true] else disabled false is XYZ_CWGSWITCH_PWRRED; amountPowerSupplies = 1 + (1 when powerRedundancy); #POWER:AC = amountPowerSupplies when power == AC; ... }; ...
  • 15. product CWGSwitch is #ABC000010000630 { uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL; domain boards = switch uplink { case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE]; case 1GE : [*unequipped, 8x1GE, 16x1GE]; }; product interfaceSubsystem is #ABC000010000640 { slot slot1 in boards is XYZ_CWGSWITCH_SLOT01; slot slot2 in boards is XYZ_CWGSWITCH_SLOT02; slot slot3 in boards is XYZ_CWGSWITCH_SLOT03; slot slot4 in boards is XYZ_CWGSWITCH_SLOT04; slotable #2x10GE is #ABC00001000634; slotable #8x1GE is #ABC00001000635; slotable #16x1GE is #ABC00001000636; check(#2x10GE > 2, "Only two 2x10GE boards allowed"); }; product powerSubsystem is #ABC000010000641 { power in [*AC, DC] is XYZ_CWGSWITCH_PWR; powerRedundancy in if power == AC then [*false, true] else disabled false is XYZ_CWGSWITCH_PWRRED; amountPowerSupplies = 1 + (1 when powerRedundancy); #POWER:AC = amountPowerSupplies when power == AC; ... }; ... Configuration Modeling Language Products Materials Value Domains Parameters Equations
  • 16. product CWGSwitch is #ABC000010000630 { uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL; domain boards = switch uplink { case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE]; case 1GE : [*unequipped, 8x1GE, 16x1GE]; }; product interfaceSubsystem is #ABC000010000640 { slot slot1 in boards is XYZ_CWGSWITCH_SLOT01; slot slot2 in boards is XYZ_CWGSWITCH_SLOT02; slot slot3 in boards is XYZ_CWGSWITCH_SLOT03; slot slot4 in boards is XYZ_CWGSWITCH_SLOT04; slotable #2x10GE is #ABC00001000634; slotable #8x1GE is #ABC00001000635; slotable #16x1GE is #ABC00001000636; check(#2x10GE > 2, "Only two 2x10GE boards allowed"); }; product powerSubsystem is #ABC000010000641 { power in [*AC, DC] is XYZ_CWGSWITCH_PWR; powerRedundancy in if power == AC then [*false, true] else disabled false is XYZ_CWGSWITCH_PWRRED; amountPowerSupplies = 1 + (1 when powerRedundancy); #POWER:AC = amountPowerSupplies when power == AC; ... }; ... Configuration Modeling Language Identifiers
  • 17. product CWGSwitch is #ABC000010000630 { uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL; domain boards = switch uplink { case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE]; case 1GE : [*unequipped, 8x1GE, 16x1GE]; }; product interfaceSubsystem is #ABC000010000640 { slot slot1 in boards is XYZ_CWGSWITCH_SLOT01; slot slot2 in boards is XYZ_CWGSWITCH_SLOT02; slot slot3 in boards is XYZ_CWGSWITCH_SLOT03; slot slot4 in boards is XYZ_CWGSWITCH_SLOT04; slotable #2x10GE is #ABC00001000634; slotable #8x1GE is #ABC00001000635; slotable #16x1GE is #ABC00001000636; check(#2x10GE > 2, "Only two 2x10GE boards allowed"); }; product powerSubsystem is #ABC000010000641 { power in [*AC, DC] is XYZ_CWGSWITCH_PWR; powerRedundancy in if power == AC then [*false, true] else disabled false is XYZ_CWGSWITCH_PWRRED; amountPowerSupplies = 1 + (1 when powerRedundancy); #POWER:AC = amountPowerSupplies when power == AC; ... }; ... Configuration Modeling Language Identifiers Slotting
  • 18. product CWGSwitch is #ABC000010000630 { uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL; domain boards = switch uplink { case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE]; case 1GE : [*unequipped, 8x1GE, 16x1GE]; }; product interfaceSubsystem is #ABC000010000640 { slot slot1 in boards is XYZ_CWGSWITCH_SLOT01; slot slot2 in boards is XYZ_CWGSWITCH_SLOT02; slot slot3 in boards is XYZ_CWGSWITCH_SLOT03; slot slot4 in boards is XYZ_CWGSWITCH_SLOT04; slotable #2x10GE is #ABC00001000634; slotable #8x1GE is #ABC00001000635; slotable #16x1GE is #ABC00001000636; check(#2x10GE > 2, "Only two 2x10GE boards allowed"); }; product powerSubsystem is #ABC000010000641 { power in [*AC, DC] is XYZ_CWGSWITCH_PWR; powerRedundancy in if power == AC then [*false, true] else disabled false is XYZ_CWGSWITCH_PWRRED; amountPowerSupplies = 1 + (1 when powerRedundancy); #POWER:AC = amountPowerSupplies when power == AC; ... }; ... Configuration Modeling Language Identifiers Slotting Conditionals
  • 19. Configuration Modeling Language Parallel conditions ● Value domains ● Default values ● Visibility hw/sw in if isNewDelivery then switch chassis { case Chassis:A : [NoHW/SW, *HW/SW1, HW/SW2]; case Chassis:B : case Chassis:C : [NoHW/SW, *HW/SW2, HW/SW3]; case Chassis:D : disabled HW/SW1; default : invisible NoHW/SW; } else invisible NoHW/SW;
  • 20. Configuration Modeling Language Parallel conditions ● Value domains ● Default values ● Visibility hw/sw in if isNewDelivery then switch chassis { case Chassis:A : [NoHW/SW, *HW/SW1, HW/SW2]; case Chassis:B : case Chassis:C : [NoHW/SW, *HW/SW2, HW/SW3]; case Chassis:D : disabled HW/SW1; default : invisible NoHW/SW; } else invisible NoHW/SW;
  • 21. Configuration Modeling Language Parallel conditions ● Value domains ● Default values ● Visibility hw/sw in if isNewDelivery then switch chassis { case Chassis:A : [NoHW/SW, *HW/SW1, HW/SW2]; case Chassis:B : case Chassis:C : [NoHW/SW, *HW/SW2, HW/SW3]; case Chassis:D : disabled HW/SW1; default : invisible NoHW/SW; } else invisible NoHW/SW;
  • 22. ConfigModeler Integrated Development Environment (IDE) for CML ● Eclipse-based
  • 24. General IDE Features Syntax checks Checking references
  • 25. General IDE Features Syntax checks Checking references Checking types
  • 26. General IDE Features Syntax checks Checking references Checking types Code completion
  • 27. General IDE Features Syntax checks Checking references Checking types Code completion Cycle detection
  • 30. Domain-specific IDE Features Additional information Dependency graph
  • 31. Domain-specific IDE Features Additional information Dependency graph IPC preview for user interface
  • 32. VC Code Generation Automatic generation of SAP product model from formal specification in CML
  • 33. VC Code Generation Uses NSN VC framework and coding conventions ... * count slotable material PFUNCTION Z_VC_GEN_AGG_INST_02 ( GEN_CSTIC_IN_PREFIX_01 = 'XYZ_CWGSWITCH_SLOT', GEN_CSTIC_IN_PREFIX_02 = 'NA', GEN_CSTIC_IN_PREFIX_03 = 'NA', GEN_CSTIC_IN_PREFIX_04 = 'NA', GEN_CSTIC_QTY_PREFIX = 'NA', GEN_DIGITS = 2, GEN_CSTIC_OUT = 'GEN_CML_AGG_MODULES', GEN_INSTANCE_START = 'PARENT', GEN_INCL_START_INST = 'T', GEN_INCL_SELF_INST = 'F', GEN_RECURSIVE = 'F', GEN_AGG_CTRL_SUFFIX = 'NA', GEN_AGG_CTRL_MATNR_LIST = 'NA', GEN_AGG_CTRL_CLASS = 'NA', GEN_AGG_CTRL_CSTIC = 'NA', GEN_AGG_CTRL_VAL = 'NA', GEN_MODE = 'DELETE'), * slotable material #2x10GE PFUNCTION Z_VC_GEN_GET_COMP_DATA_01 ( GEN_CSTIC_IN = 'GEN_CML_AGG_MODULES', GEN_INSTANCE_IN = 'SELF', GEN_VAL_CHAR_01 = '2x10GE', GEN_INDEX_NUM = 1, GEN_COMP_QTY = $SELF.GEN_AUX_NUM_01), PFUNCTION Z_VC_GEN_SET_VBOM_MU ( GEN_MU_ID = 'ABC00001000634', GEN_MU_QTY = $SELF.GEN_AUX_NUM_01, GEN_VBOM_CSTIC = 'GEN_VBOM_CURR') IF $SELF.GEN_AUX_NUM_01 GT 0, ...
  • 34. VC Code Generation Automated model setup via Product Data Replication PDR
  • 35. Use of ConfigModeler at NSN ● Product specialists specify and set up products models in SAP ● 20 users (10 regular) ● up to now 60 products ● but: not a tool for all products
  • 37. Product Modeling in SAP VC existing: ● textual languages for procedures and constraints ● interactive creation and change of VC objects missing: ● human-readable textual language for VC objects – diff / merge / version control – find / replace – partial models – product model as a document
  • 40. VCML: DSL for SAP VC ● Simple DSL for SAP VC objects with embedded languages for procedures and constraints ● DSL design: ● Make it simple ● Model only important properties of SAP objects, others are hard-wired or defaulted
  • 41. VCML Example: Characteristic characteristic WP_OPTIONS { description "Web Phone Options" documentation "Some long documentation on Web Phone Options" symbolic { numberOfChars 3 values { '001' { description "Cable for connecting monitor" } '002' { description "Voice mail" } '003' { description "Camera" } '004' { description "Additional Antenna" } '005' { description "Memory Upgrade" dependencies { WP_MEMORY_UPGRADE } } '006' { description "Self-Cleaning Screen" } } } status released [ multiValue required ] }
  • 42. VCML Example: Precondition precondition WP_MEMORY_UPGRADE { description "Precond. for memory upgrade" status released source { * memory upgrade is only allowed with answering machine $self.WP_options specified and $self.WP_options = '002'. } }
  • 43. VClipse: Eclipse-based IDE for VCML Syntax check
  • 44. VClipse: Eclipse-based IDE for VCML Syntax check Jump to definition
  • 45. VClipse: Eclipse-based IDE for VCML Syntax check Jump to definition
  • 46. VClipse: Eclipse-based IDE for VCML Syntax check Jump to definition Code completion
  • 47. VClipse: Eclipse-based IDE for VCML Syntax check Jump to definition Code completion Outline Document order PMEVC order
  • 48. VClipse: Eclipse-based IDE for VCML Syntax check Jump to definition Code completion Outline Diff / merge History
  • 49. Interfaces to SAP: RFC-based CRUD operations Recursive model extraction
  • 50. Interfaces to SAP: IDoc-based Send complete product models via Product Data Replication (PDR) VCML JCo IDocs UPS PDR
  • 53. VClipse.org: Open Source Use, adapt, integrate, contribute!
  • 54. Summary Product modeling is like programming ● Use appropriate languages ● Use appropriate tools Tool chain for text-based product modeling ● CML, VCML: two languages with different abstraction levels ● ConfigModeler, VClipse: two Eclipse-based IDEs
  • 56. Thanks to ... ● various persons at Nokia Siemens Networks ● Peter Muthsam (VC knowledge) ● Daniel Naus (CWG Sandbox) ● itemis (Xtext) ● webXcerpt team