Referencias necessárias:

RM.Eai.TotvsMessage.IService

RM.Eai.TotvsMessage.Adapter


1 - Criar a classe referente ao adapter de envio.

Exemplo:

/// <summary>
  /// Adapter Envio de Projeto
  /// </summary>
  [AdapterAttr("PROJECT", "2.000", TransactionDescription = "Project")]
  public class Project_Send_2000 : AdapterWebServiceBase
  {
    /// <summary>
    /// 
    /// </summary>
    protected override void DoInitializeAdapter()
    {
      this.AdapterName = "PROJECT";
      this.TableName = "MPRJ";
      base.DoInitializeAdapter();
    }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="parms"></param>
    /// <returns></returns>
    protected override EAITransformMessageResult DoTransformMessage(EAITransformMessageParam parms)
    {
      EAITransformMessageResult result = new EAITransformMessageResult(null, null);

      Project_Model_V2_BusinessContent businessContentObj = new Project_Model_V2_BusinessContent();

      DataSet dsMPrj = ((DataSet)parms.ObjOriginal);

      DataTable dtProject = dsMPrj.Tables["MPRJ"];
      DataTable dtMPeriodo = dsMPrj.Tables["MPERIODO"];

      if (dtProject.Rows.Count != 1)
        throw new Exception(Properties.Resources.sPrjValidacaoSendProject);

      DataRow rowProject = dtProject.Rows[0];
      
      businessContentObj.CompanyId = RMSConvert.ToString(rowProject["CODCOLIGADA"]);
      businessContentObj.BranchId = RMSConvert.ToString(rowProject["CODFILIAL"]);
      businessContentObj.CompanyInternalId = RMSConvert.ToString(rowProject["COMPANYINTERNALID"]);
      businessContentObj.InternalId = RMSConvert.ToString(rowProject["INTERNALID"]);
      businessContentObj.Code = RMSConvert.ToString(rowProject["CODPRJ"]);
      businessContentObj.Description = RMSConvert.ToString(rowProject["DESCRICAO"]);

      if (rowProject["CODCCUSTO"] != DBNull.Value)
        businessContentObj.CostCenterCode = RMSConvert.ToString(rowProject["CODCCUSTO"]);

      DataTable dtMprjStatusLog = dsMPrj.Tables["MPRJSTATUSLOG"];

      if (dtMprjStatusLog.Rows.Count > 0)
      {
        DataRow rowDtStatusLog = dtMprjStatusLog.Rows[0];
        businessContentObj.RegisterDate = RMSConvert.ToDateTime(rowDtStatusLog["DATAMUDANCA"]);
        businessContentObj.StatusProject = RMSConvert.ToInt32(rowProject["POSICAO"]);
      }
      if (dtMPeriodo.Rows.Count > 0)
      {
        DataRow rowMPeriodo = dtMPeriodo.Rows[0];
        if (rowMPeriodo["DTINICIO"] != DBNull.Value)
          businessContentObj.BeginDate = RMSConvert.ToDateTime(rowMPeriodo["DTINICIO"]);
        if (rowMPeriodo["DTFIM"] != DBNull.Value)
          businessContentObj.FinalDate = RMSConvert.ToDateTime(rowMPeriodo["DTFIM"]);
      }
      
      return base.DoTransformMessage(parms);
    }

    /// <summary>
    /// 
    /// </summary>
    /// <returns></returns>
    protected override List<InfoTableDePara> DoGetInfoTableDePara()
    {
      List<InfoTableDePara> tablesDePara = new List<InfoTableDePara>();
      InfoTableDePara table = new InfoTableDePara("MPRJ", "PROJECT");
      table.DescriptionName = "Projeto";

      InfoColumnDePara column = new InfoColumnDePara(EAIConsts.ctINTERNALID, "CODCOLIGADA|IDPRJ", "MPRJ");
      column.ForeignKeyDePara = false;
      column.ColumnCaptionCode = "CODPRJ";
      column.ColumnCaption = Properties.Resources.sPrjCodPrj;
      table.ColumnsName.Add(column);

      column = new InfoColumnDePara("CompanyInternalId", "CODCOLIGADA|CODFILIAL", "GFILIAL");
      column.ForeignKeyDePara = true;
      column.ColumnCaptionCode = "CODCOLIGADA";
      column.ColumnCaption = Properties.Resources.SPrjEmpProjeto;
      table.ColumnsName.Add(column);

      column = new InfoColumnDePara("CostCenterInternalId", "CODCOLIGADA|CODCCUSTO", "GCCUSTO");
      column.ForeignKeyDePara = true;
      column.ColumnCaptionCode = "CODCCUSTO";
      column.ColumnCaption = Properties.Resources.SPrjCCustoProjeto;
      table.ColumnsName.Add(column);

      tablesDePara.Add(table);

      return tablesDePara;
    }

  }
/// <summary>
  /// Project Model
  /// </summary>
  [System.SerializableAttribute()]
  [System.ComponentModel.DesignerCategoryAttribute("code")]
  [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
  [System.Xml.Serialization.XmlRootAttribute(ElementName = "BusinessContent", IsNullable = false)]
  [MessageContentTypeAttr("PROJECT", 2, MessageTypeEnum.tmBusinessMessage)]
  public partial class Project_Model_V2_BusinessContent : EAIBusinessContentModelBase
  {
    /// <summary>
    /// 
    /// </summary>
    public string CompanyId { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public string BranchId { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public string CompanyInternalId { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public string ShortCode { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public string Code { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public string InternalId { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public string Description { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public string CostCenterCode { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public string CostCenterInternalId { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public DateTime RegisterDate { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public DateTime BeginDate { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public DateTime FinalDate { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public int StatusProject { get; set; }
  }

  /// <summary>
  /// 
  /// </summary>
  [System.SerializableAttribute()]
  [System.ComponentModel.DesignerCategoryAttribute("code")]
  [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
  [System.Xml.Serialization.XmlRootAttribute(ElementName = "ReturnContent", IsNullable = false)]
  [MessageContentTypeAttr("PROJECT", 2, MessageTypeEnum.tmResponseMessage)]
  public partial class Project_Model_V2_ReturnContent : EAIReturnContentModelBase
  {
  }



Dica gerar a classe a partir do XML: