Referencias necessárias:

RM.Eai.TotvsMessage.IService

RM.Eai.TotvsMessage.Adapter


Exemplo:

[System.SerializableAttribute()]
  [System.ComponentModel.DesignerCategoryAttribute("code")]
  [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
  [System.Xml.Serialization.XmlRootAttribute(ElementName = "BusinessContent", IsNullable = false)]
  [MessageContentTypeAttr("STOCKGROUP", 1, MessageTypeEnum.tmBusinessMessage)]
  public partial class StockGroup_Model_V1_BusinessContent : EAIBusinessContentModelBase
  {
    [ColumnAttr("INTERNALID")]
    public string InternalId { get; set; }

    [ColumnAttr("COMPANYINTERNALID")]
    public string CompanyInternalId { get; set; }

    [ColumnAttr("CODTB2FAT")]
    public string Code { get; set; }

    [ColumnAttr("INATIVO", 0)]
    public int Inativo { get; set; }

    [ColumnAttr("DESCRICAO")]
    public string Description { get; set; }

    [ColumnAttr("CAMPOLIVRE")]
    public string FamilyClassificationCode { get; set; }
  }

  [System.SerializableAttribute()]
  [System.ComponentModel.DesignerCategoryAttribute("code")]
  [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
  [System.Xml.Serialization.XmlRootAttribute(ElementName = "ReturnContent", IsNullable = false)]
  [MessageContentTypeAttr("STOCKGROUP", 1, MessageTypeEnum.tmResponseMessage)]
  public partial class StockGroup_V1_ReturnContent : EAIReturnContentWithListModelBase
  {
  }



/// <summary>
  /// Adapter de recebimento de grupo de produto.
  /// </summary>
  [AdapterAttr("STOCKGROUP", "1.000")]
  public class StockGroup_Receive_1000 : EAIAdapterDataServerObjBase
  {
    protected override void DoInitializeDataServer()
    {
      base.AdapterName = "STOCKGROUP";
      base.TableName = "TTB2";
      base.DataserverName = "EstTb2Data";
      base.CodigoSistema = Lib.CodSistema.Est;
      base.ColumnsToReplicate = new RMRegisterColumnsReplicate("CODCOLIGADA", "");
      base.TypeModel = typeof(StockGroup_Model_V1_BusinessContent);
    }

    /// <summary>
    /// Define estrutura da tabela.
    /// </summary>
    /// <returns></returns>
    protected override List<InfoTableDePara> DoGetInfoTableDePara()
    {
      List<InfoTableDePara> lstTable = new List<InfoTableDePara>();

      InfoTableDePara itemTable = new InfoTableDePara("TTB2", "STOCKGROUP");
      itemTable.DescriptionName = Properties.Resources.sEstAdapterGrupoDeProdutoName;
      itemTable.ColumnsName = new List<InfoColumnDePara>();

      InfoColumnDePara itemColumn = new InfoColumnDePara("COMPANYINTERNALID",
        "CODCOLIGADA|CODFILIAL", "GFILIAL");

      itemTable.ColumnsName.Add(itemColumn);

      InfoColumnDePara column = new InfoColumnDePara(EAIConsts.ctINTERNALID,
        "CODCOLIGADA|CODTB2FAT", "TTB2");
      column.ForeignKeyDePara = false;
      itemTable.ColumnsName.Add(column);

      lstTable.Add(itemTable);

      return lstTable;
    }

    /// <summary>
    /// Valida niveis de compartilhamento.
    /// </summary>
    /// <param name="parms"></param>
    /// <param name="result"></param>
    /// <param name="sharedModeEmpresa"></param>
    /// <param name="sharedModeFilial"></param>
    /// <returns></returns>
    public override EAIValidatedSharedModeResult ValidateLevelCompanyBranch(
      EAIValidatedSharedModeParams parms, EAIValidatedSharedModeResult result,
      SharingModeEnum sharedModeEmpresa, SharingModeEnum sharedModeFilial)
    {
      if (sharedModeFilial != SharingModeEnum.smCompartilhado)
      {
        result.Validated = false;
        result.ValidationMessage += Properties.Resources.sEstConfigGrupoProdutoFilial;
      }
      return result;
    }
  }