Click or drag to resize

ExportBaseFIELDSETTINGSTYPE, EXPORTSETTINGSTYPE, PROFILESETTINGSTYPE, USERSETTINGSTYPE Class

Base class for all ERP integrations. Pre-typed classes for different purposes are in CTExtensions.ExportCore.ExportBaseTypes.
Inheritance Hierarchy
SystemObject
  CTExtensionsCTExtension
    CTBuiltInExtension
      CTExtensions.ExportCoreExportBaseFIELDSETTINGSTYPE, EXPORTSETTINGSTYPE, PROFILESETTINGSTYPE, USERSETTINGSTYPE
        More...

Namespace:  CTExtensions.ExportCore
Assembly:  CTInterface (in CTInterface.dll)
Syntax
public abstract class ExportBase<FIELDSETTINGSTYPE, EXPORTSETTINGSTYPE, PROFILESETTINGSTYPE, USERSETTINGSTYPE> : CTBuiltInExtension
where FIELDSETTINGSTYPE : new(), SettingsObject
where EXPORTSETTINGSTYPE : new(), ExportSettingsBase<FIELDSETTINGSTYPE>
where PROFILESETTINGSTYPE : new(), SettingsObject
where USERSETTINGSTYPE : new(), SettingsObject

Type Parameters

FIELDSETTINGSTYPE
Custom type derived from SettingsObject representing Export Profile Field settings. Use Dummy when not needed.
EXPORTSETTINGSTYPE
Custom type derived from ExportSettingsBaseFIELDSETTINGSTYPE representing Export Profile settings. Use Dummy when not needed.
PROFILESETTINGSTYPE
Custom type derived from SettingsObject representing Profile settings. Use Dummy when not needed.
USERSETTINGSTYPE
Custom type derived from SettingsObject representing User settings. Use Dummy when not needed.

The ExportBaseFIELDSETTINGSTYPE, EXPORTSETTINGSTYPE, PROFILESETTINGSTYPE, USERSETTINGSTYPE type exposes the following members.

Constructors
  NameDescription
Protected methodExportBaseFIELDSETTINGSTYPE, EXPORTSETTINGSTYPE, PROFILESETTINGSTYPE, USERSETTINGSTYPE
Initializes a new instance of the ExportBaseFIELDSETTINGSTYPE, EXPORTSETTINGSTYPE, PROFILESETTINGSTYPE, USERSETTINGSTYPE class
Top
Methods
  NameDescription
Protected methodCreateExportType
Instantiate ExportTypeExtension for this class. Can be overriden if custom implementation is needed.
Protected methodCreateFieldEditGuard
Instantiate ObjectEditGuard for this class. Can be overriden if custom implementation is needed.
Protected methodCreateProfileOptions
Instantiate ProfileOptionsExtension for this class. Can be overriden if custom implementation is needed.
Protected methodCreateUserOptions
Instantiate UserOptionsExtension for this class. Can be overriden if custom implementation is needed.
Public methodGetEventExtensions
Public methodGetExportSettings
Return Export Profile settings, including Export Profile Field settings.
Public methodGetInterface2
Provides supported CTExtensions.Interfaces implementations for the Core on request.
(Overrides CTExtensionGetInterface2(ctExtensionInterface).)
Public methodGetProfileSettings
Return Profile settings.
Public methodGetUserSettings
Return User settings of logged in user.
Public methodHasProfileSettings
Check if ProfileOptionsExtension of this class is Dummy or a real object.
Public methodHasUserSettings
Check if UserOptionsExtension of this class is Dummy or a real object.
Public methodHook (Overrides CTExtensionHook(CTInterface).)
Public methodUnHook (Overrides CTExtensionUnHook(CTInterface).)
Top
Fields
Examples
This example shows how to utilize classes of CTExtensions.ExportCore, CTExtensions.ExportCore.Config, CTExtensions.ExportCore.ExportBaseTypes and CTExtensions.ExportCore.EXTs namespaces for creating a custom Export ERP integration that supports custom data storing on CT Profile, current User, Export Profile and Export Profile Field levels, as well as some basics of Export handler scripts.

Language: C#
Class name: MyCustomErpIntegration
C#
// @AUTO-REFERENCE { [CT_INSTALL_PATH]\CTInterface.dll }
// @AUTO-REFERENCE { [CT_INSTALL_PATH]\Interop.CTEngineLib.dll }
// @AUTO-REFERENCE { [CT_INSTALL_PATH]\ATRControls2.dll }
// @AUTO-REFERENCE { c:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Windows.Forms.dll }
// @AUTO-REFERENCE { c:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Drawing.dll }

using ATR.CT.CTInterface;
using CTEngineLib;
using CTExtensions.ExportCore.Config;           /* SettingsObject, ControlAdapter, StreamExtensions, PropertyGridAdapter */
using CTExtensions.ExportCore.EXTs;             /* EventExtension */
using CTExtensions.ExportCore.ExportBaseTypes;  /* ERPExportBaseExtraOptsWithUserSettings */
using System.Windows.Forms;                     /* MyExportSettingsGUI */
using System.IO;                                /* Stream */
using ATRControls2;                             /* MyUserSettingsGUI (GenericLoginCtrl) */
using System.Collections.Generic;               /* List */
using System;

namespace CustomErpIntegrationDemo
{

  // Object representing my custom settings (MyFieldStringData and MyFieldBoolData)
  // for Export Profile Fields of Export Profiles that are bound to my Erp Integration.
  public class MyExportFieldSettings : SettingsObject
  {

    // -- My data --
    public string MyFieldStringData { get; set; }
    public bool MyFieldBoolData { get; set; }
    // -- -- -- --


    // -- Serialization of my data
    protected override void Deserialize(Stream s)
    {
      MyFieldStringData = s.PopString();
      MyFieldBoolData = s.PopBool();
    }

    protected override void Serialize(Stream s)
    {
      s.PushString(MyFieldStringData);
      s.PushBool(MyFieldBoolData);
    }
    // -- -- -- --


    // -- return GUI control capable of showing and modifying my data
    //    when editing Export Profile Fields at Options.
    public override ControlAdapter CreateAdapter(ICTExtension parent)
    {
      // PropertyGridAdapter just utilizes System.Windows.Forms.PropertyGrid
      // to enable editing of data object values. It could be custom control too, 
      // but this is a quick solution.
      return new PropertyGridAdapter<MyExportFieldSettings>(parent);
    }
    // -- -- -- --

  }

  // Object representing my custom settings
  // for each individual CT user.
  public class MyUserSettings : SettingsObject
  {

    // -- My data --
    public bool Enabled { get; set; }
    public string UserName { get; set; }
    public string PassWord { get; set; }
    // -- -- -- --

    // -- Serialization of my data
    protected override void Serialize(Stream s)
    {
      s.PushBool(Enabled);
      s.PushString(UserName);
      s.PushString(PassWord);
    }

    protected override void Deserialize(Stream s)
    {
      Enabled = s.PopBool();
      UserName = s.PopString();
      PassWord = s.PopString();
    }
    // -- -- -- --

    // -- return GUI control capable of showing and modifying my data
    //    at User Options.
    public override ControlAdapter CreateAdapter(ICTExtension parent)
    {
      // Custom control "MyUserSettingsGUI" declared below
      return new MyUserSettingsGUI(parent);
    }
    // -- -- -- --
  }

  // Custom control that accesses "MyUserSettings", shown as
  // an individual page at User Options
  public class MyUserSettingsGUI : ControlAdapter<MyUserSettings>
  {

    // Utilizing generic login control from ATRControls2
    ATRControls2.WinForm.GenericLoginCtrl moCtrl;

    public MyUserSettingsGUI(ICTExtension parent) : base(parent)
    {
      // Load and configure the control.
      moCtrl = new ATRControls2.WinForm.GenericLoginCtrl();
      moCtrl.BackColor = System.Drawing.Color.White;
      moCtrl.ShowEnableCheck(true);
      moCtrl.ShowUsernameField(true);
      moCtrl.ShowPasswordField(true);

      moCtrl.ShowDatabaseField(false);
      moCtrl.ShowTestConnectionButton(false);
      moCtrl.ShowCommunicationPointField(false);

      moCtrl.Dock = System.Windows.Forms.DockStyle.Fill;
      Controls.Add(moCtrl);
    }

    // -- Couple the data object values with GUI elements
    //    back and forth.
    public override void LoadFrom(MyUserSettings settings)
    {
      moCtrl.LoginEnabled = settings.Enabled;
      moCtrl.Username = settings.UserName;
      moCtrl.Password = settings.PassWord;

    }
    public override void SaveTo(MyUserSettings settings)
    {
      settings.Enabled = moCtrl.LoginEnabled;
      settings.UserName = moCtrl.Username;
      settings.PassWord = moCtrl.Password;
    }
    // -- -- -- --
  }


  // Object representing my custom Export Profile specific settings.
  // Accessed from [...] button at Export Profile settings.
  // Internally, ExportSettingsBase holds also Export Profile Field
  // settings of our custom type (MyExportFieldSettings)
  public class MyExportSettings : ExportSettingsBase<MyExportFieldSettings>
  {

    // -- My data --
    public string TargetCompany { get; set; }
    // -- -- -- --

    // -- Serialization of my data
    protected override void Deserialize(Stream s)
    {
      base.Deserialize(s);  // Important to remember base object serialization!

      TargetCompany = s.PopString();
    }

    protected override void Serialize(Stream s)
    {
      base.Serialize(s); // Important to remember base object serialization!

      s.PushString(TargetCompany);
    }
    // -- -- -- --


    // -- return GUI control capable of showing and modifying
    //    TargetCompany Export Profile options.
    public override ControlAdapter CreateAdapter(ICTExtension extension)
    {
      return new MyExportSettingsGUI(extension);
    }
  }

  // GUI control that accesses "MyExportSettings", shown 
  // with [...] button at Export Profile settings
  // Just a simple text box.
  public class MyExportSettingsGUI : ControlAdapter<MyExportSettings>
  {
    System.Windows.Forms.TextBox tb;

    public MyExportSettingsGUI(ICTExtension ext) : base(ext)
    {
      tb = new System.Windows.Forms.TextBox();
      tb.Dock = System.Windows.Forms.DockStyle.Top;
      Controls.Add(tb);
    }

    // -- Couple the data object values with GUI elements
    //    back and forth.
    public override void LoadFrom(MyExportSettings settings)
    {
      tb.Text = settings.TargetCompany;
    }

    public override void SaveTo(MyExportSettings settings)
    {
      settings.TargetCompany = tb.Text;
    }
    // -- -- -- --
  }

  // Object representing my custom settings
  // in the scope of the current CT Profile
  public class MyProfileSettings : SettingsObject
  {

    // -- My data --
    public string ConnectionString { get; set; }
    // -- -- -- --


    // -- Serialization of my data
    protected override void Deserialize(Stream s)
    {
      ConnectionString = s.PopString();
    }

    protected override void Serialize(Stream s)
    {
      s.PushString(ConnectionString);
    }
    // -- -- -- --


    // -- return GUI control capable of showing and modifying my data
    //    when visiting this integration's page at Profile Options
    public override ControlAdapter CreateAdapter(ICTExtension parent)
    {
      // PropertyGridAdapter just utilizes System.Windows.Forms.PropertyGrid
      // to enable editing of data object values.
      return new PropertyGridAdapter<MyProfileSettings>(parent);
    }
    // -- -- -- --
  }


  // The actual Export script; the one that handles 
  // all the Item/BOM export to the target system
  // utilizing the previously defined custom settings.
  // This demo also utilizes export xml to StructureItem, hence IStructureItemCreator
  public class MyExportEventsHandler : EventExtension<MyCustomErpIntegration>, IStructureItemCreator
  {

    // The main class of your integration.
    public MyCustomErpIntegration ParentExtension { get; private set; }

    // You always want to check at OnExportProfileSelected
    // if you should handle any of the events.
    // Only handle them if the typename of the Export Profile 
    // matches the identifying name of your integration.
    public bool HandleEvents { get; private set; }

    public override void Init(MyCustomErpIntegration parent)
    {
      ParentExtension = parent;
      HandleEvents = false;
    }


    // -- The only and only place to subscribe for CTInterface Events
    //    Everything subscribed at Hook MUST beunsubscribed at UnHook.
    public override void Hook(CTInterface oCTInterface)
    {
      oCTInterface.OnExportProfileSelected += OnExportProfileSelectedHandler;
      oCTInterface.OnStrExport += OnStrExportHandler;
    }

    public override void UnHook(CTInterface oCTInterface)
    {
      oCTInterface.OnExportProfileSelected -= OnExportProfileSelectedHandler;
    }
    // -- -- -- --


    // -- IStructureItemCreator: This allows returning
    //    a custom object type for export items.
    public StructureItem CreateStructureItemObject()
    {
      return new StructureItem(); // Just use the default object.
    }
    // -- -- -- --


    // -- Event Handlers

    // An Export profile was loaded at Export
    private void OnExportProfileSelectedHandler(object sender, CTInterface.ExportProfileSelectedArgs e)
    {
      // Verify we want handle export events.
      HandleEvents = e.ExportProfile.Typename == ParentExtension.IdentifyingName();
    }

    // Export has been invoked
    private void OnStrExportHandler(object sender, CTInterface.StrExportArgs e)
    {
      if (!HandleEvents) return; // Immediately stop if not my event.

      e.RetVal = true; // Cancel XML output.

      // Just as an extended example, this is a common way of 
      // transforming export XML into something more dev-friendly
      StructureItem root = StructureItem.ParseStructureXml(this, e.Str);


      /* EXAMPLE ON HOW TO ACCESS CUSTOM SETTINGS */

      // Profile level settings.
      MyProfileSettings currentProfileSettings = ParentExtension.GetProfileSettings();
      var connectionString = currentProfileSettings.ConnectionString;


      // Get my custom user settings
      MyUserSettings currentUserSettings = ParentExtension.GetUserSettings();
      var isEnabled = currentUserSettings.Enabled;
      var userName = currentUserSettings.UserName;
      var pwd = currentUserSettings.PassWord;


      // Get my custom export profile settings
      MyExportSettings currentExportSettings = ParentExtension.GetExportSettings((CTExportProfile)e.ExpProfile);
      var targetCompany = currentExportSettings.TargetCompany;


      // Get my custom export profile field settings from MyExportSettings
      object[] fields = (object[])e.ExpProfile.GetFields();
      foreach (ICTExportProfileField field in fields)
      {
        MyExportFieldSettings fieldSetting = null;

        if (currentExportSettings.FieldSettings.TryGetValue(field.Label, out fieldSetting))
        {
          // My Custom field settings of this export profile field.
          var myBool = fieldSetting.MyFieldBoolData;
          var myStr = fieldSetting.MyFieldStringData;

        }
      }

      /* -- -- -- -- */

    }

    // -- -- -- --

  }

  // THIS is the main class that ties it all together. In its simplicity,
  // it just defines the stong types for all custom objects and returns 
  // the MyExportEventsHandler for the base class.
  // All data is stored using IdentifyingName, so changing it will 
  // cause all previous data of this integration to be lost.
  // FriendlyName is shown all of the UI and messages related to this integration.
  public class MyCustomErpIntegration : ERPExportBaseExtraOptsWithUserAndProfileSettings<MyExportFieldSettings, MyExportSettings, MyUserSettings, MyProfileSettings>
  {
    public override string FriendlyName()
    {
      return "My Custom Integration"; // This is shown in the UI.
    }
    public override string IdentifyingName()
    {
      return "MY-CUSTOM-ERP-INTEGRATION-12345"; // Just something that is unique and constant.
    }

    public override List<EventExtension> GetEventExtensions()
    {
      return new List<EventExtension>() { new MyExportEventsHandler() };
    }

  }
}
Availability

CUSTOMTOOLS 2022 SP0


See Also
Inheritance Hierarchy
SystemObject
  CTExtensionsCTExtension
    CTBuiltInExtension
      CTExtensions.ExportCoreExportBaseFIELDSETTINGSTYPE, EXPORTSETTINGSTYPE, PROFILESETTINGSTYPE, USERSETTINGSTYPE
        CTExtensions.ExportCore.ExportBaseTypesERPExportBase
        CTExtensions.ExportCore.ExportBaseTypesERPExportBaseFIELDSETTINGSTYPE
        CTExtensions.ExportCore.ExportBaseTypesERPExportBaseExtraOptsFIELDSETTINGSTYPE, EXPORTSETTINGSTYPE
        CTExtensions.ExportCore.ExportBaseTypesERPExportBaseExtraOptsWithProfileSettingsFIELDSETTINGSTYPE, EXPORTSETTINGSTYPE, PROFILESETTINGSTYPE
        CTExtensions.ExportCore.ExportBaseTypesERPExportBaseExtraOptsWithUserAndProfileSettingsFIELDSETTINGSTYPE, EXPORTSETTINGSTYPE, USERSETTINGSTYPE, PROFILESETTINGSTYPE
        CTExtensions.ExportCore.ExportBaseTypesERPExportBaseExtraOptsWithUserSettingsFIELDSETTINGSTYPE, EXPORTSETTINGSTYPE, USERSETTINGSTYPE
        CTExtensions.ExportCore.ExportBaseTypesERPExportBaseWithProfileSettingsFIELDSETTINGSTYPE, PROFILESETTINGSTYPE
        CTExtensions.ExportCore.ExportBaseTypesERPExportBaseWithUserAndProfileSettingsFIELDSETTINGSTYPE, USERSETTINGSTYPE, PROFILESETTINGSTYPE
        CTExtensions.ExportCore.ExportBaseTypesERPExportBaseWithUserSettingsFIELDSETTINGSTYPE, USERSETTINGSTYPE