How to Create Your Own Product Modeling Environment Tim Geisler webXcerpt Software GmbH
Transcription
How to Create Your Own Product Modeling Environment Tim Geisler webXcerpt Software GmbH
How to Create Your Own Product Modeling Environment Tim Geisler webXcerpt Software GmbH tg@webxcerpt.com CWG 2011, Marco Island 2011-10-04 Product Modeling Product Modeling Specification Coding in SAP R/3 ● Materials ● BOMs ● Classes ● Cstics ● Procedures ● Constraints ● Selection Conditions ● Interface Designs Product Modeling Environment Means for describing product model ➔ Textual domain-specific language ➔ Tailored to your needs Tooling ➔ ➔ Eclipse-based Integrated Development Environment (IDE) Functionality tailored to your needs Domain-Specific Languages Domain-Specific Languages Domain-specific language (noun): a computer programming language of limited expressiveness focused on a particular domain. The two main reasons why DSLs are popular: ● Improving productivity for developers ● Improving communication with domain experts (Martin Fowler) Customer Project @ Company-wide generic product structure Standardized product descriptions NSN VC framework IPC extensions coding conventions Customer Project @ Company-wide generic product structure Standardized Formalized product descriptions NSN VC framework IPC extensions coding conventions Customer Project @ Domain Specific Languages CML + CMLUI + CMLT VCML Company-wide generic product structure Standardized Formalized product descriptions NSN VC framework IPC extensions coding conventions Tooling: Eclipse-based IDEs ConfigModeler VClipse ConfigModeler and Vclipse: Two DSLs with Eclipse-based IDE ConfigModeler CML Editor/IDE Code Generation VClipse Editor/IDE VCML RFC CML: Customer's Concepts product structure grouping for order structure logical materials domains complex expressions equations counting VCML: SAP's Concepts Language elements for describing VC objects: ● cstic ● class ● dependency net ● … Embedded SAP languages for dependencies Code Generation: CML to VCML Generate VC objects and dependencies ● correct ordering of procedures Use NSN VC framework ● use generic variant functions ● use generic cstics ● use generic procedures and dependency nets ● respect NSN naming conventions Code generation on the fly ● using Eclipse builder infrastructure Interfacing SAP Two mechanisms for interfacing SAP ● ALE via IDocs (Product Data Replication) ● create/change/read/delete objects via RFC Reading objects via RFC ● Model extraction from SAP to VCML No extraction of CML from SAP possible! IDE: Tooling for Modelers IDE: Tooling for Modelers Syntax checking Semantic checking Cross references IDE: Tooling for Modelers Rename refactoring Outline Folding Templates Content Assist Companion Languages Companion Language I: CMLUI NSN UI Enhancement Framework Framework for describing ● ● Old: Maintenance Dialogs widgets (headings, checkboxes, notes, …) and layout (columns, font, color, spacing) New: DSL + IDE Tooling Companion Language II: CMLT Automated Model Testing Test tool at NSN: Fysbee's ConfigScan DSL for describing test cases using CML concepts Companion Language II: CMLT Test-Case Execution ● ● ● Remote call of ConfigScan from ConfigModeler Display of test results in separate view Navigation to corresponding test statement in test-case language Companion Language II: CMLT Support for Test-Case Maintenance ● Test-coverage analysis (static) Is there a test case for each material, cstic, ...? ● Fully integrated languages CML / CMLT ● Robustness: generation of ConfigScan code ● Import of test cases from IPC export files Use of ConfigModeler @ More than 100 product models are currently in development using ConfigModeler. (prototypes not included) About 50% of these product models are already on production system. About 50% of all product models on production system have been built with ConfigModeler. (size and complexity not taken into account) Showtime Product “hiT 7030” Multiplexes STM-1/STM-4 to 2M, 34/45M, STM-1, STM4 1 uplink board with 2 SFP module slots 3 downlink boards with 0-6 SFP module slots Life Demo: Modeling with DSLs Demo: Deployment to SAP ● Using PDR Technology in Use Open source technology based on Java ● Eclipse: IDE platform ● Xtext: ● ● domain-specific language framework ● ANTLR-based parser ● IDE generated automatically ● adaptable via dependency injection (Google Guice) EMF: Eclipse Modeling Framework SAP JCo / IDocs library VClipse is Free VClipse is Free VClipse.org: Open Source Use, adapt, integrate, contribute! Use Cases for VClipse Mass upload (of parts) of configuration Model comparison – Use textual or EMF diff tools to compare models Model versioning – use version control system for textual models Model refactoring – rename objects, move cstics Model validation – check own naming conventions – check for syntactic and semantic errors How to Create Your Own Product Modeling Environment? Product Modeling Environment @ NSN ConfigModeler CML Editor/IDE Code Generation VClipse Editor/IDE VCML RFC My Own Product-Modeling Environment my ConfigModeler myCML Editor/IDE my Code Generation VClipse Editor/IDE VCML RFC Building Blocks Scoping + Validation Metamodel Target Architecture Grammar Code Generation my ConfigModeler Editor/IDE myCML my Code Generation Import from Legacy Configurators or Specifications IDE adaptions Export / Reports Vclipse adaptions Defining your Modeling-Language Grammar ● using the Xtext grammar language ● from this grammar, the following is derived: ● metamodel (Ecore + Java classes) ● parser ● editor with syntax highlighting, content assist, outline, folding, ... Defining your Modeling-Language Metamodel Represents all product models in the domain (like a schema) ● EMF Ecore Meta Model ● Generated from grammar or defined separately ● Source of transformation Scoping + Validation Language Aspects not Represented in Grammar Scoping: visibility of objects for cross-references Validation: checks for complex model properties Defining your Target Architecture Clear: SAP Variant Configuration Open aspects: ● Naming conventions ● Which objects should be modeled? ● Constraints / conditions on values? ● BOM calculation ● Use of variant tables ● Use of certain variant functions ● … Might be very company-specific! Code Generation Task: map myCML models (instances of your metamodel) to VCML models ● Respect your target architecture ● Various means to implement: ● Java ● EMF model transformation languages IDE Adaptions ● ● Xtext-based editors are highly configurable through dependency injection using Google Guice Nearly each part of system can be adapted and replaced. Import from Legacy Configurators ● ● Task: map models of your legacy configurator to xCML models Various means to implement, depending on your legacy configurator: ● Extension of legacy transformator ● XML transformation using e.g. XSLT ● ● Implement DSL for legacy configurator use model 2 model transformation to transform to xCML ... Export / Reports ● ● Use EMF model to text transformation language Features for Free ● Due to the use of Eclipse as platform, you get a lot of features for free: ● Integration of all modern version control systems (CVS, Subversion, Git, …) ● Textual file comparison ● Task-focused work using Mylyn ● Integration of bug-tracking systems ● Query / replace with regular expressions ● ... Conclusion Conclusion Textual Domain-Specfic Languages ● suitable for product modeling ● modern tooling easy to create with Eclipse/Xtext VClipse ● interface to SAP system when using DSLs ● open-source tool useful for various modeling tasks How to create your own product-modeling environment ● identified several building blocks Thanks to ... ● various persons at Nokia Siemens Networks ● Peter Muthsam & Michael Wilhelm (SAP VC) ● Fysbee team for ConfigScan support ● Daniel Naus (CWG Sandbox) ● various persons at itemis (Xtext) ● webXcerpt team How could product modeling with textual DSLs look like for your domain and your company?