Referencias necessárias:

RM.Eai.TotvsMessage.IService

RM.Eai.TotvsMessage.Adapter

RM.Eai.TotvsMessage.Lib

Exemplo:

using RM.Eai.TotvsMessage.Adapter;
using RM.Eai.TotvsMessage.IService;
using RM.Eai.TotvsMessage.Lib;
using RM.Lib;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;

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

    protected override void DoGetPrimaryKeysByBusinessContent(ref EAIPrimaryKeysDataServerResult result)
    {
      EAIMsgDeParaItem deParaColigada = this.APIDeParaReceive.GetDeParaByInternalId("GFILIAL", this.BusinessContent.CompanyInternalId, this.AdapterContext.ContextItem.CurrentRoute.IdApp).FirstOrDefault();

      if (deParaColigada != null)
      {
        result.ListPrimaryKeys[0].PrimaryKeyRM = new object[] { deParaColigada.GetValorRM("CODCOLIGADA"), BusinessContent.Code };
      }
    }
   
    //Método para atribuição de Valores Recebidos do Model no DataSet que será salvo.
    protected override void DoPrepareDataset(ref EAIPrepareDataServerObjResult parms)
    {
      base.DoPrepareDataset(ref parms);
      
      //Obtém Rows[0] pois esta mensagem está preparada para somente uma linha (não possui lista).
      DataRow row = parms.DataSet.Tables[TableName].Rows[0];

      row["DESCRICAO"] = BusinessContent.Description;
      row["CAMPOLIVRE"] = BusinessContent.FamilyClassificationCode;
      if (row["INATIVO"] == DBNull.Value)
        row["INATIVO"] = 0;
    }

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

      InfoTableDePara itemTable = new InfoTableDePara("TTB2", "STOCKGROUP");
      itemTable.DescriptionName = Properties.Resources.sEstAdapterGrupoDeProdutoName;

      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;
    }
  }
}


  • Ao definir uma propriedade que não é obrigatória ela deve ser nulabled pois se não é carregado o valor default.

Exemplo:

    public DateTime? BaseDate { get; set; }



[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
  {
    public string InternalId { get; set; }

    public string CompanyInternalId { get; set; }

    public string Code { get; set; }

    public int Inativo { get; set; }

    public string Description { get; set; }

    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
  {
  }