Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

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

Nächste SlideShare
code for quiz  in my sql
code for quiz in my sql
Wird geladen in …3
×

Hier ansehen

1 von 57
1 von 57

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

Herunterladen, um offline zu lesen

We present ConfigModeler and VClipse, two domain-specific languages and corresponding Eclipse-based integrated development environments (IDEs) for product modeling on different levels of abstraction.

VClipse supports the direct specification of objects and dependencies using VC's abstraction level in a textual language called VCML.

ConfigModeler supports the specification of product models in a language supporting a high degree of abstraction. Developed in a customer project, this language has been designed according to the customer's needs and uses the customer's concepts. ConfigModeler translates the product models to VC objects and dependencies, optionally represented as VCML code.

In both cases the VC objects and dependencies can be transferred to an SAP system using RFC or product data replication (PDR) via IDocs. With VClipse, it is also possible to extract product models from an SAP system. This enables the use of standard text comparison tools and version control systems.

VClipse is released as an open-source project on http://www.vclipse.org - so you are all invited to use VClipse in your work and products, or even to contribute to it.

2010 CWG European Conference - Vienna, Austria

We present ConfigModeler and VClipse, two domain-specific languages and corresponding Eclipse-based integrated development environments (IDEs) for product modeling on different levels of abstraction.

VClipse supports the direct specification of objects and dependencies using VC's abstraction level in a textual language called VCML.

ConfigModeler supports the specification of product models in a language supporting a high degree of abstraction. Developed in a customer project, this language has been designed according to the customer's needs and uses the customer's concepts. ConfigModeler translates the product models to VC objects and dependencies, optionally represented as VCML code.

In both cases the VC objects and dependencies can be transferred to an SAP system using RFC or product data replication (PDR) via IDocs. With VClipse, it is also possible to extract product models from an SAP system. This enables the use of standard text comparison tools and version control systems.

VClipse is released as an open-source project on http://www.vclipse.org - so you are all invited to use VClipse in your work and products, or even to contribute to it.

2010 CWG European Conference - Vienna, Austria

Weitere Verwandte Inhalte

Ähnliche Bücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen

Ähnliche Hörbücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen

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

  1. 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
  2. 2. Product Modeling Gap
  3. 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. 4. Fabric-like Modeling NSN VC framework IPC extensions coding conventions Nearshore VC modeling team Company-wide generic product structure Standardized product descriptions
  5. 5. Fabric-like Modeling NSN VC framework IPC extensions coding conventions Nearshore VC modeling team Company-wide generic product structure Standardized product descriptions
  6. 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. 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
  8. 8. Standardized Product Descriptions
  9. 9. Standardized Product Descriptions Formalized Product Descriptions
  10. 10. Formalized Product Descriptions Domain specific language ● problem-oriented ● human-understandable ● text-based ● machine-processable Configuration Modeling Language (CML)
  11. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 22. ConfigModeler Integrated Development Environment (IDE) for CML ● Eclipse-based
  23. 23. General IDE Features Syntax checks
  24. 24. General IDE Features Syntax checks Checking references
  25. 25. General IDE Features Syntax checks Checking references Checking types
  26. 26. General IDE Features Syntax checks Checking references Checking types Code completion
  27. 27. General IDE Features Syntax checks Checking references Checking types Code completion Cycle detection
  28. 28. General IDE Features Diff and history
  29. 29. Domain-specific IDE Features Additional information
  30. 30. Domain-specific IDE Features Additional information Dependency graph
  31. 31. Domain-specific IDE Features Additional information Dependency graph IPC preview for user interface
  32. 32. VC Code Generation Automatic generation of SAP product model from formal specification in CML
  33. 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. 34. VC Code Generation Automated model setup via Product Data Replication PDR
  35. 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
  36. 36. System Overview RFC Editor ConfigModeler CML Compiler
  37. 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
  38. 38. System Overview RFC Editor ConfigModeler CML Compiler
  39. 39. System Overview RFC Editor Editor ConfigModeler VClipse CML VCML Compiler
  40. 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. 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. 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. 43. VClipse: Eclipse-based IDE for VCML Syntax check
  44. 44. VClipse: Eclipse-based IDE for VCML Syntax check Jump to definition
  45. 45. VClipse: Eclipse-based IDE for VCML Syntax check Jump to definition
  46. 46. VClipse: Eclipse-based IDE for VCML Syntax check Jump to definition Code completion
  47. 47. VClipse: Eclipse-based IDE for VCML Syntax check Jump to definition Code completion Outline Document order PMEVC order
  48. 48. VClipse: Eclipse-based IDE for VCML Syntax check Jump to definition Code completion Outline Diff / merge History
  49. 49. Interfaces to SAP: RFC-based CRUD operations Recursive model extraction
  50. 50. Interfaces to SAP: IDoc-based Send complete product models via Product Data Replication (PDR) VCML JCo IDocs UPS PDR
  51. 51. VClipse is Free
  52. 52. VClipse is Free
  53. 53. VClipse.org: Open Source Use, adapt, integrate, contribute!
  54. 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
  55. 55. Summary
  56. 56. Thanks to ... ● various persons at Nokia Siemens Networks ● Peter Muthsam (VC knowledge) ● Daniel Naus (CWG Sandbox) ● itemis (Xtext) ● webXcerpt team

×