public void CriaCampo(Company oCompany, string sTabela, string sCampo, string sDescricao, BoFieldTypes Tipo, BoFldSubTypes SubTipo, int iComprimento, BoYesNoEnum Obrigatorio, bool bValorPadrao, string sValorPadrao, bool bValoresValidos, string[,] sValoresValidos, out string sMensagem) { sMensagem = string.Empty; try { if (!VerificaExistenciaCampo(oCompany, sTabela, sCampo)) { int lErrCode; string lErrStr; int lRetVal; UserFieldsMD oUserFieldMD = null; //Limpa a memória oUserFieldMD = (UserFieldsMD)oCompany.GetBusinessObject(BoObjectTypes.oUserFields); System.Runtime.InteropServices.Marshal.ReleaseComObject(oUserFieldMD); oUserFieldMD = null; GC.Collect(); oUserFieldMD = (UserFieldsMD)oCompany.GetBusinessObject(BoObjectTypes.oUserFields); oUserFieldMD.TableName = sTabela; oUserFieldMD.Name = sCampo; oUserFieldMD.Description = sDescricao; oUserFieldMD.Type = Tipo; oUserFieldMD.SubType = SubTipo; oUserFieldMD.Mandatory = Obrigatorio; if (bValoresValidos) { for (int i = 0; i < sValoresValidos.GetLength(0); i++) { oUserFieldMD.ValidValues.Value = sValoresValidos[i, 0]; oUserFieldMD.ValidValues.Description = sValoresValidos[i, 1]; oUserFieldMD.ValidValues.Add(); } } if (bValorPadrao) { oUserFieldMD.DefaultValue = sValorPadrao; } if (iComprimento > 0) { oUserFieldMD.Size = iComprimento; } lRetVal = oUserFieldMD.Add(); if (lRetVal != 0) { oCompany.GetLastError(out lErrCode, out lErrStr); sMensagem = string.Format("Falha! Descricao B1: {0} - Codigo Erro B1: {1}", lErrStr, lErrCode.ToString()); } else { sMensagem = string.Format("Campo {0} - {1}, criado com sucesso..", sCampo, sDescricao); } //Limpa a Memória System.Runtime.InteropServices.Marshal.ReleaseComObject(oUserFieldMD); oUserFieldMD = null; GC.Collect(); } } catch (Exception ex) { sMensagem = string.Format("Erro ao criar Tabela/Campos SAP, Erro: {0}", ex.Message); } }