cancel
Showing results for 
Search instead for 
Did you mean: 

Register UDO

Former Member
0 Kudos

Hello to all. I am trying to register an UDO, need that sera a form for fault, and when I put the option, it me does not recognize. Here this one the code. If someone knows since solving it I will be grateful for it to him.

Private Shared Sub BPAR10(ByVal oCompany As SAPbobsCOM.Company)

Dim oUserObjectMD As SAPbobsCOM.UserObjectsMD

oUserObjectMD = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oUserObjectsMD)

If oUserObjectMD.GetByKey("BPAR10") = 0 Then

oUserObjectMD.CanCancel = SAPbobsCOM.BoYesNoEnum.tYES

oUserObjectMD.CanClose = SAPbobsCOM.BoYesNoEnum.tYES

oUserObjectMD.CanCreateDefaultForm = SAPbobsCOM.BoYesNoEnum.tYES

oUserObjectMD.FormColumns.

oUserObjectMD.CanDelete = SAPbobsCOM.BoYesNoEnum.tYES

oUserObjectMD.CanFind = SAPbobsCOM.BoYesNoEnum.tYES

oUserObjectMD.CanLog = SAPbobsCOM.BoYesNoEnum.tNO

oUserObjectMD.CanYearTransfer = SAPbobsCOM.BoYesNoEnum.tYES

'Columnas que debe traer la grilla

oUserObjectMD.FindColumns.ColumnAlias = "DocEntry"

oUserObjectMD.FindColumns.Add()

oUserObjectMD.FindColumns.SetCurrentLine(1)

oUserObjectMD.FindColumns.ColumnAlias = "DocNum"

oUserObjectMD.FindColumns.Add()

oUserObjectMD.FindColumns.SetCurrentLine(2)

oUserObjectMD.FindColumns.ColumnAlias = "U_TGV_FVATWD_CARDCOD"

oUserObjectMD.FindColumns.Add()

oUserObjectMD.FindColumns.SetCurrentLine(3)

oUserObjectMD.FindColumns.ColumnAlias = "U_TGV_FVATWD_DATE"

oUserObjectMD.FindColumns.Add()

oUserObjectMD.FindColumns.SetCurrentLine(4)

oUserObjectMD.FindColumns.ColumnAlias = "U_TGV_FVATWD_RET_TYP"

oUserObjectMD.FindColumns.Add()

oUserObjectMD.FindColumns.SetCurrentLine(5)

oUserObjectMD.FindColumns.ColumnAlias = "U_TGV_FVATWD_PAYORD"

oUserObjectMD.FindColumns.Add()

oUserObjectMD.LogTableName = ""

'Nombre de la tabla hija si es que tiene

oUserObjectMD.ChildTables.TableName = "TGV_TVATWD_DOCHIS"

oUserObjectMD.UseUniqueFormType = SAPbobsCOM.BoYesNoEnum.tYES

oUserObjectMD.ExtensionName = ""

oUserObjectMD.ManageSeries = SAPbobsCOM.BoYesNoEnum.tYES

oUserObjectMD.Code = "BPAR10"

oUserObjectMD.Name = "Certificados de Retención (IVA)"

oUserObjectMD.ObjectType = SAPbobsCOM.BoUDOObjType.boud_Document

oUserObjectMD.TableName = "TGV_TVATWD_DOCS"

If oUserObjectMD.Add() <> 0 Then

Dim ErrMsg As String

Dim ErrCode As Long

oCompany.GetLastError(ErrCode, ErrMsg)

MsgBox("Error Registrando UDO BPAR10" & vbCrLf & ErrMsg)

System.Runtime.InteropServices.Marshal.ReleaseComObject(oUserObjectMD)

oUserObjectMD = Nothing

End If

Else

MsgBox("El UDO BPAR10 ya existe.")

End If

System.Runtime.InteropServices.Marshal.ReleaseComObject(oUserObjectMD)

End Sub

Edited by: Andres Blanco on Oct 17, 2008 9:32 PM

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hi

See this working example.


Private Sub Add_UDO(ByVal c_UDO As CUdo)

  Dim oUserObjectMD As SAPbobsCOM.UserObjectsMD
  Try

      Dim lErrCode As Long = 0
      Dim sErrMsg As String = ""

      oUserObjectMD = SBO_Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oUserObjectsMD)

      If oUserObjectMD.GetByKey(c_UDO.Code) = 0 Then

	  ' General Information
	  ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	  oUserObjectMD.Code = c_UDO.Code ' "UDOBDGM"
	  oUserObjectMD.Name = c_UDO.Name ' "Budget Mensile"
	  oUserObjectMD.ObjectType = c_UDO.ObjectType ' SAPbobsCOM.BoUDOObjType.boud_MasterData
	  oUserObjectMD.TableName = c_UDO.TableName ' "O01_BDGTEM"

	  ' Services
	  ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	  oUserObjectMD.CanCancel = c_UDO.CanCancel
	  oUserObjectMD.CanClose = c_UDO.CanClose
	  oUserObjectMD.CanCreateDefaultForm = c_UDO.CreateDefaultForm
	  oUserObjectMD.CanDelete = c_UDO.CanDelete
	  oUserObjectMD.CanFind = c_UDO.CanFind
	  oUserObjectMD.CanYearTransfer = c_UDO.CanYearTransfer
	  oUserObjectMD.ManageSeries = c_UDO.ManageSeries

	  ' Log
	  ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	  If c_UDO.LogTableName.Equals("") Then
	      oUserObjectMD.CanLog = SAPbobsCOM.BoYesNoEnum.tNO
	      oUserObjectMD.LogTableName = ""
	  Else
	      oUserObjectMD.CanLog = c_UDO.CanLog
	      oUserObjectMD.LogTableName = c_UDO.LogTableName
	  End If

	  ' DLL Extension Name
	  ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	  oUserObjectMD.ExtensionName = c_UDO.ExtensionName

	  ' Find Columns
	  ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	  Dim i As Integer = 0
	  oUserObjectMD.FindColumns.SetCurrentLine(i)
	  oUserObjectMD.FormColumns.FormColumnAlias = "Code"
	  For Each sColName As String In c_UDO.FindFields
	      If Not sColName.Equals("Code") Then
		  i += 1
		  Call oUserObjectMD.FindColumns.Add()
		  oUserObjectMD.FindColumns.SetCurrentLine(i)
		  oUserObjectMD.FindColumns.ColumnAlias = sColName
	      End If
	  Next

	  ' Child Tables
	  ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	  If Not oUserObjectMD.ChildTables.Count = 0 _
	  And Not c_UDO.Children Is Nothing _
	  Then
	      If c_UDO.Children.Count > 0 Then
		  Dim oUserObjectMD_ChildTables As SAPbobsCOM.UserObjectMD_ChildTables
		  oUserObjectMD_ChildTables = oUserObjectMD.ChildTables
		  i = -1
		  For Each sChildTable As String In c_UDO.Children
		      i += 1
		      If i > 0 Then
			  oUserObjectMD_ChildTables.Add()
		      End If
		      oUserObjectMD_ChildTables.SetCurrentLine(i)
		      oUserObjectMD_ChildTables.TableName = sChildTable
		  Next
	      End If
	  End If
	  ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	  ' ADD UDO +++
	  ' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	  If oUserObjectMD.Add() <> 0 Then
	      Call SBO_Company.GetLastError(lErrCode, sErrMsg)
	      Throw New Exception("ERROR: NEW UDO [" & c_UDO.Code & ":" & c_UDO.Name & "]: " & sErrMsg)
	  Else
	      Dim str As String = ""
	      str = "UDO [" & c_UDO.Code & ":" & c_UDO.Name & "] created correct."
	      log(str)
	      Application.DoEvents()
	  End If
      Else
	  Dim strMsg As String = "UDO [" & c_UDO.Code & ":" & c_UDO.Name & "] exist'."
	  log(strMsg)
	  Application.DoEvents()
      End If
  Catch ex As Exception
      Dim s As String = "ERRORE: " & ex.Message
      log(s)
  Finally
      If Not oUserObjectMD Is Nothing Then
	  System.Runtime.InteropServices.Marshal.ReleaseComObject(oUserObjectMD)
	  oUserObjectMD = Nothing
      End If
      System.GC.Collect()
  End Try

End Sub

Regards

Sierdna S.

Answers (1)

Answers (1)

Nussi
Active Contributor
0 Kudos

Hi,

i guess you made a mistake in the FormColumns section.

be sure to when adding fields to a default form, the first field must be as follows:

For Master data object type - Code.

For Document object type - DocEntry.

oUserObjectMD.FormColumns.FormColumnAlias = "DocEntry"

oUserObjectMD.FormColumns.FormColumnDescription = "DocEntry"

oUserObjectMD.FormColumns.Add

also be sure that in the Documentation is written that when you use CanCreateDefaultForm "yes"

the SonNumber is mandatory (Sets or returns the number of the child user table to relate to the default user form)

lg David