Agregar registro a Tabla de Usuario por DI API

Buen día expertos,

Quería consultar con ustedes si es posible agregar registros a una tabla de usuario de SAP B1 a través del DI API, actualmente estoy utilizando C#, ASP.NET y SQL Server.

Como para hacer movimientos no se pueden hacer “insert” directamente, quería ver si alguno ha realizado ésto antes, si me pudieran apoyar con algún ejemplo o recurso para conseguirlo.

Como siempre gracias de antemano por su apoyo. Saludos cordiales.

Buenas @l.villarreal,

Las tablas de usuario puedes hacer insert, update y delete sin ningún problema, ya que no afectas a información de SAP. Al igual que los campos de usuario de las tablas de SAP.

Lo único que no recomiendan es hacerlo sobre las tablas y campos de SAP.

Saludos

2 Me gusta

Hola que tal Carlos, muchas gracias por tu respuesta, la verdad desconocía esa información.

De casualidad abes si hay algún documento o algo con lo que me pueda respaldar como evidencia de lo que comentas?

Gracias de antemano, saludos cordiales!

Para poder agregar registros a una UDT por medio de la DI API debes hacer uso del objeto GeneralServices, aqui va un ejemplo(Esta en VB.net):

    Dim oGeneralService As SAPbobsCOM.GeneralService
    Dim oGeneralData As SAPbobsCOM.GeneralData
    Dim oChild As SAPbobsCOM.GeneralData
    Dim oChildren As SAPbobsCOM.GeneralDataCollection
    Dim oGeneralParams As SAPbobsCOM.GeneralDataParams

    //Get GeneralService (oCmpSrv is the CompanyService)
    Set oGeneralService = oCmpSrv.GetGeneralService("MiTablaUDT")

    //Create data for new row in main UDO
    Set oGeneralData = oGeneralService.GetDataInterface(gsGeneralData)
    oGeneralData.SetProperty ("Code", "First")
    oGeneralData.SetProperty ("U_MiCampo", "Mi data")

    //Create data for a row in the child table
    Set oChildren = oGeneralData.Child("ChildUDO")
    Set oChild = oChildren.Add
    oChild.SetProperty ("U_Data", "child data")
    oChild.SetProperty ("U_Type", 6)

    //Add the new row, including children, to database
    oGeneralService.Add oGeneralData

Respecto a lo que indica @Charlei117 , es cierto, SAP unicamente permite manipular de forma directa (SQL stament) las UDT, pero no las Tablas del sistema, ni los UDOs, ni los UDF definidos sobre estos ultimos (No consegui a la mano la documentacion, pero en los fors en ingles es lo primero que aprendes).

Saludos

3 Me gusta

Buenas @l.villarreal,

Siento defraudarte con eso, pero no tengo documentación, pero si te pones a pensar, todas las sentencias de SAP solo contempla las tablas y campos que vienen por defecto, por lo que el resto de información no la tiene en cuenta y es para personalización propia.

Un saludo

1 me gusta

Hola que tal Gabriel, muchas gracias por tu respuesta. Hice la prueba con tu ejemplo y con otro código y funcionó correctamente. Al final, por simplicidad dejé como código el siguiente:

oUserTable = oCompany.UserTables.Item("Nombre_Tabla");
int iRet = 0;

try
{
	oCompany.StartTransaction();
	oUserTable.Code = code;
    oUserTable.Name = name;
    oUserTable.UserFields.Fields.Item("U_Field").Value = Valor;
	iRet = oUserTable.Add();

Por si en un futuro a alguien mas le sirve.

Y lo que comentas @Charlei117 tiene mucho sentido, pero como en algunos casos el SDK es algo restrictivo, quise despejar las dudas antes de arriesgarme a alguna mala práctica.

Muchas gracias a ambos por su apoyo. Quedó marcada la solución por el ejemplo del código. :slightly_smiling_face:

4 Me gusta

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.