Menu ▾ ▴

Templates

Anonymous

under construction, note docs are extensive but the product has a very small codebase that subscribes to the KISS principle.


Build Orders

The templates describe components for the IOC to build "FinPlusViews" and "FinPlusServices", below are example of build orders re different usecases.

  • DeskTop.exe ➞ Montage ➞ ClientShell.exe ➞ FinPlusView ➞ ConnectService ➞ Host.exe ➞ FinPlusService
  • ClientShell.exe ➞ FinPlusView ➞ ConnectService ➞ Host.exe ➞ FinPlusService
  • Web.deploy ➞ WebMenu ➞ Page ➞ FinPlusView ➞ ConnectService ➞ Host.exe ➞ FinPlusService
  • Any PRISM UI ➞ RegisterViewWithRegion() ➞ FinPlusView ➞ ConnectService ➞ Host.exe ➞ FinPlusService

_Note FinPlusService can connect to other services via FinPlusConnectService distributed solutions and services can be shared. _


IOC and Queryable Templates

IOC and template formats have changed to a less naive solution which incorporates constructor/method param solving, assembly ref re FunctionName and assembly version check.

Dependency Injection Code
Client Templates
Service Templates

Client/service Templates are not configs, query strings passed to Templates form different configs. Component Templates are consumed by the IOC to form services/clients from framework libraries of component assemblies.

  • Real-time functional capacity re functionality of component templates.
  • Query driven templates, clients can open derived clients from context menus/toolbars.
  • Both service/client components share a common interface.
  • Client views can be dropped into existing PRISM style UIs (re IView).
  • Templates can form applications or simple reports SSRS style (real-time or static as of).

Note potential for massive component reuse to reduce client/service development cost/time to minimal re new components to add business logic, once framework components have reached saturation. Large reuse of small code base will provide an industrialised solution (less code less bugs).


Real-time Observability

Components connect, join, build on and share models real-time.

  • Observable Universal Model allowing components to react to one another.
  • Reaction through observability between components, services, clients and child services.

_Note we have a component that can be dropped between component models through minor template changes to add throttling (far simpler than RX). _


Configurable Architecture

Templates can be altered to form different architectures without code changes. Management make descisions on architecture re use-case and hardware, architecture can be altered as use-case evolves without breaking code.

  • Remote servies with multiple end-points, partitioned and distributed ideal for grid tech and server farms.
  • Remote services with single/few end-points, Gemfire/Coherance style of solution.
  • Local services.
  • Alternative none template solution programmatic use of components.

Dependency Injection

Depending on component docking can be via constructor, call for instance, method IOC solves.

  • IOC Construction and Method Solves for FinPlusComp, Primatives, String IDictionary, IList, Array and Most types.
  • InjectStates, load initial component states.
  • ExtractStates, states or test states.
  • InjectCommonds, used for testing or reversion.

States, commands, templates are in a component format re our kvp Universal Model.

Note Dock via method appears logical for UI components and constructor IOC for service components, you can write components to use either its possible we might deprecate Dock via method this is under consideration.


Template Assembly Control

IOC checks assembley and versions from templates.

<?xml version="1.0" encoding="utf-8" ?>
<root>
  <current>

   <VersionControl>
     <Item Name="Id" Value="VersionControl" />
     <Item Name="FunctionName" Value="VersionControl" />
     <Item Name="Environment" Value="Dev" />
     <Item Name="Assemblies" Value="{{FinPlusComponents,1.0.0.1}}" />
   </VersionControl>

   <Delta1bpOpen>
      <Item Name="Id" Value="Delta1bpOpen" />
      <Item Name="FunctionName" Value="FinPlusComponents.FinPlusLink" />

Template Readabilty

Ability to layout templates horizontal, vertical, nested or mix of allows the user to make component templates readable re users preference

  • Layouts apply both to client and service templates.
  • Note do not use keyword Dock for constructor IOC components.

Patterns.

  • Horizontal, ideal for trivial components.

    <MenuItem Id="ContextMenuEdit" FunctionName="FinPlusWPFControls.FinPlusMenuItem" Header="Edit Ctrl+_E" Icon="SNotes" Action="Edit" Params="" />
    <MenuItem Id="ContextMenuClone" FunctionName="FinPlusWPFControls.FinPlusMenuItem" Header="Clone Ctrl+_N" Icon="SNew" Action="Clone" Params="" />
    <MenuItem Id="ContextMenuCopy" FunctionName="FinPlusWPFControls.FinPlusMenuItem" Header="Copy Ctrl+_C" Icon="SCopy" Action="Copy" Params="" />
    
  • Vertical, ideal for complex/major components

    <GridBooks>
      <Item Name="Id" Value="GridBooks" />
      <Item Name="FunctionName" Value="FinPlusWPFControls.FinPlusGroupGrid" />
      <Item Name="ColTypes" Value="{{SelectLink,{Book,Desk,Department,Location}}}" />
      <Item Name="ColIsEnabled" Value="{Book,Desk,Department,Location}" />
      <Item Name="ColLinks" Value="" />
      <Item Name="ColFormats" Value="{{LongDateTime,{TimeStamp}}}" />
      <Item Name="MakeRowVirtual" Value="True" />
      <Item Name="MakeColVirtual" Value="False" />
      <Item Name="Dock" Value="{ColSelector,DataBooks,FiltertrayBooks,ContextMenu}" />
    </GridBooks>
    
  • Nested, reflecting relationships.

    <GridBooks>
      <Item Name="Id" Value="GridBooks" />
      <Item Name="FunctionName" Value="FinPlusWPFControls.FinPlusGroupGrid" />
      <Item Name="ColTypes" Value="{{SelectLink,{Book,Desk,Department,Location}}}" />
      <Item Name="ColIsEnabled" Value="{Book,Desk,Department,Location}" />
      <Item Name="ColLinks" Value="" />
      <Item Name="ColFormats" Value="{{LongDateTime,{TimeStamp}}}" />
      <Item Name="MakeRowVirtual" Value="True" />
      <Item Name="MakeColVirtual" Value="False" />
      </Dock>
        <ColSelector Id="ColSelector" FunctionName="FinPlusWPFControls.FinPlusColSelectBar" />
        <DataBooks>
          <Item Name="Id" Value="DataBooks" />
          <Item Name="FunctionName" Value="FinPlusWPFControls.FinPlusconnectService" />
          <Item Name="ServiceName" Value="Books" />
          <Item Name="ServiceType" Value="Query" />
          <Item Name="Parms" Value="[group],Structure;[type],Select;[where],Name='FunctionName' And Value='Book'" />
          <Item Name="KeyFormat" Value=""/>
          <Item Name="IsTransposed" Value="True" />
        </DataBooks>
        <FiltertrayBooks Id="FiltertrayBooks" FunctionName="FinPlusWPFControls.FinPlusFilterbarTray" />
        <ContextMenu Id="ContextMenu" FunctionName="FinPlusWPFControls.FinPlusContextMenu" Dock="{ContextMenuEdit,ContextMenuClone,ContextMenuCopy,ContextMenuPrint}" />
      </Dock>
    </GridBooks>
    

Note this is just Xml parsing all layouts or mix of get translated to collections of Function re universal model. Templates can be add to database re Universal Model which will include timestamps and change user re auditability of IOC together with the ability to query templates AsOf (query driven version control).


Related

Wiki: FinPlusConnectService
Wiki: FinPlusView