> ## Documentation Index
> Fetch the complete documentation index at: https://docs.superoffice.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Example connector

> ERP sync connector example

This is purely an example to show how simple a basic connector can be.

<Note>
  It does not contain code that talks to an ERP system. It purely implements the required methods and generates default return objects.
</Note>

```csharp CS theme={null}
using SuperOffice.CRM;
using SuperOffice.ErpSync.Contract;
using System;
using System.Collections.Generic;
using System.Linq;
namespace SuperOffice.Erp Sync.DummyConnector
{
  public class DummyArguments
  {
    [ConfigField("A String", FieldMetadataTypeInfo.Text, DisplayDescription = "This is just a string")] public string AString;
    [ConfigField("A Date", FieldMetadataTypeInfo.Datetime, DisplayDescription = "This is just a string")] public DateTime ADate;
    [ConfigField("A Password", FieldMetadataTypeInfo.Password, DisplayDescription = "This is just a string")] public string APassword;
    [ConfigField("Mandatory Int", FieldMetadataTypeInfo.Integer, DisplayDescription = "This is just a string", Access = FieldAccessInfo.Mandatory)]

    public int MandatoryInt;
  }

  [ErpConnector("DummyConnector")] public class DummyConnector : IErpConnector
  {
    public FieldMetadataInfoArrayPluginResponse GetConfigData()
    {
      var resp = ResponseHelper.CreateOkResponse<FieldMetadataInfoArrayPluginResponse>();
      resp.FieldMetaDataObjects = ConfigDataHelper.GetMetaData<DummyArguments>().ToDictionary(f => f.FieldKey);
      return resp;
    }

    public PluginResponseInfo TestConfigData(Dictionary<string,string> connectionInfo)
    {
      var config = ConfigDataHelper.GetData<DummyArguments>(connectionInfo);
      var resp = ResponseHelper.CreateOkResponse<PluginResponseInfo>();
      return resp;
    }

    public PluginResponseInfo SaveConnection(Guid connectionID, Dictionary<string, string> connectionInfo)
    {
      ConfigDataHelper.SaveData<DummyArguments>(connectionID, connectionInfo);
      var resp = ResponseHelper.CreateOkResponse<PluginResponseInfo>();
      return resp;
    }

    public PluginResponseInfo TestConnection(Guid connectionID)
    {
      var info = ConfigDataHelper.GetData<DummyArguments>(connectionID);
      var resp = ResponseHelper.CreateOkResponse<PluginResponseInfo>();
      return resp;
    }

    public PluginResponseInfo DeleteConnection(Guid connectionID)
    {
      ConfigDataHelper.DeleteData(connectionID);
      var resp = ResponseHelper.CreateOkResponse<PluginResponseInfo>();
      return resp;
    }

    public StringArrayPluginResponse GetSupportedActorTypes(Guid connectionID)
    {
      var config = ConfigDataHelper.GetData<DummyArguments>(connectionID);
      var resp = ResponseHelper.CreateOkResponse<StringArrayPluginResponse>();
      // ...
      return resp;
    }

    public FieldMetadataInfoArrayPluginResponse GetSupportedActorTypeFields(Guid connectionID, string actorType)
    {
      var config = ConfigDataHelper.GetData<DummyArguments>(connectionID);
      var resp = ResponseHelper.CreateOkResponse<FieldMetadataInfoArrayPluginResponse>();
      // ...
      return resp;
    }

    public ActorArrayPluginResponse GetActors(Guid connectionID, string actorType, string[] erpKeys, string[] fieldKeys)
    {
      var config = ConfigDataHelper.GetData<DummyArguments>(connectionID);
      var resp = ResponseHelper.CreateOkResponse<ActorArrayPluginResponse>();
      // ...
      return resp;
    }

    public ActorArrayPluginResponse SearchActors(Guid connectionID, string actorType, string searchText, string[] fieldKeys)
    {
      var config = ConfigDataHelper.GetData<DummyArguments>(connectionID);
      var resp = ResponseHelper.CreateOkResponse<ActorArrayPluginResponse>();
      // ...
      return resp;
    }

    public ActorArrayPluginResponse SearchActorByParent(Guid connectionID, string actorType,
      string searchText, string parentActorType,
      string parentActorErpKey, string[] fieldKeys)
    {
      var config = ConfigDataHelper.GetData<DummyArguments>(connectionID);
      var resp = ResponseHelper.CreateOkResponse<ActorArrayPluginResponse>();
      // ...
      return resp;
    }

    public ActorPluginResponse CreateActor(Guid connectionID, ErpActor act)
    {
      var config = ConfigDataHelper.GetData<DummyArguments>(connectionID);
      var resp = ResponseHelper.CreateOkResponse<ActorPluginResponse>();
      // ...
      return resp;
    }

    public ActorArrayPluginResponse SaveActors(Guid connectionID, ErpActor[] actors)
    {
      var config = ConfigDataHelper.GetData<DummyArguments>(connectionID);
      var resp = ResponseHelper.CreateOkResponse<ActorArrayPluginResponse>();
      // ...
      return resp;
    }

    public ListItemArrayPluginResponse GetList(Guid connectionID, string listName)
    {
      var config = ConfigDataHelper.GetData<DummyArguments>(connectionID);
      var resp = ResponseHelper.CreateOkResponse<ListItemArrayPluginResponse>();
      // ...
      return resp;
    }

    public ListItemArrayPluginResponse GetListItems(Guid connectionID, string listName, string[] listItemKeys)
    {
      var config = ConfigDataHelper.GetData<DummyArguments>(connectionID);
      var resp = ResponseHelper.CreateOkResponse<ListItemArrayPluginResponse>();
      // ...
      return resp;
    }

    public ActorArrayPluginResponse GetActorsByTimestamp(Guid connectionID, string updatedOnOrAfter,
            string actorType, string[] fieldKeys)
    {
      var config = ConfigDataHelper.GetData<DummyArguments>(connectionID);
      var resp = ResponseHelper.CreateOkResponse<ActorArrayPluginResponse>();
      // ...
      return resp;
    }
  }
}
```


## Related topics

- [QuoteConnectorBase implementation](/en/api/plugins/quote-connectors/api/quoteconnectorbase.md)
- [ERP Connector API Changes](/en/api/plugins/erp-connectors/online/example-api.md)
- [SMS connectors](/en/marketing/sms/it/index.md)
- [How to set up a quote connector](/en/api/plugins/quote-connectors/set-up.md)
- [IErpConnector](/en/api/plugins/erp-connectors/api/ierpconnector.md)
- [SuperOffice.WebApi.Data.ErpSyncConnectorEntity](/en/api/reference/webapi/SuperOffice.WebApi.Data.ErpSyncConnectorEntity.md)
