SDK SAP Business One

Muchos consultores o administradores de SAP B1 en las empresas me preguntan «¿Cómo aprender SDK?». Voy a partir explicando qué es. El SDK es un acrónimo de software development kit o kit de desarrollo de software y sirve para crear aplicaciones para un sistema en específico.

En el caso de SAP Business One, el SDK consta de 2 .dll, cada una maneja ámbitos totalmente diferentes de la aplicación SAP. Estás dlls pueden ser llamadas por cualquier lenguaje de programación que soporte objetos COM, como por ejemplo (delphi, visual basic, c sharp, python, etc).

Una de estas dll es la DI API, que maneja toda la estructura de datos de SAP B1, es lo que pasa por debajo cada vez que pulsamos un botón crear o actualizar entre otras cosas.
La otra dll es la UI API, que maneja toda la interfaz gráfica, como formularios, botones, campos, eventos, etc.
Por lo tanto existen 2 tipos de aplicaciones, las aplicaciones DI API que trabajan fuera de SAP B1 y envían la información para ser cargada o actualizada y los AddOns que utilizan ambas dll, una para integrar el formulario dentro de la aplicación SAP B1 y la otra para trabajar con la capa de datos de SAP B1.

Un fiel ejemplo de una aplicación DI API se encuentra en un post de nuestra web llamado Programar una macro para importar desde excel usando la DI API.

La UI API también es posible usarla fuera de la aplicación SAP, podemos extraer información desde un formulario y llevarla a un txt o a un excel y devolverla actualizada al formulario de SAP, como por ejemplo las autorizaciones de usuario. Existen muchos formularios en SAP que no son objetos de negocio y por lo tanto no es posible actualizar mediante el uso de la DI API.

Para quienes manejan la aplicación o han trabajado con ella ingresando operaciones se darán cuenta que la DI API es igual a crear una factura por ejemplo, se deben enviar los mismos datos necesarios para poder crear cualquier operación en SAP, también pasa por procedimientos de autorizacion y transaction notification.
La UI API requiere más conocimiento de programación.

Y por último, la mayoría de los ejemplos de como usar cada objeto, evento, funciones y todo lo demás, se encuentra en la ayuda del SDK.

Espero esto aclare algunas dudas

Saludos a todos y gracias por su visita.

También te podría gustar...

11 Respuestas

  1. Victor Alejandro Chávez García dice:

    hola muy buen dia¡¡
    soy nuevo en sap business one y estoy tratando de agregar valores a una udo de tipo documento ya estuve haciendo pruebas con diferentes codigo y hubo que vi mas viable pero me arroja un error de service no encontrado al trabajar con servicios generales. espero puedas ayudarme.
    quedo atento saludos!!–

    • Ejemplo:

              private void bttSave(string FormUID, ref SAPbouiCOM.ItemEvent oItemEvent, out bool bBubbleEvent)
              {
                  bBubbleEvent = true;
                  SAPbouiCOM.Form oForm = oApplication.Forms.Item(FormUID);
                  SAPbouiCOM.Grid oGrid = (SAPbouiCOM.Grid)oForm.Items.Item("grdFore").Specific;
                  SAPbouiCOM.DataTable oDT = oGrid.DataTable;
                  SAPbobsCOM.GeneralService oGeneralService = null;
                  SAPbobsCOM.GeneralData oGeneralData = null;
                  SAPbobsCOM.GeneralDataCollection oChildren = null;
                  SAPbobsCOM.GeneralDataParams oGeneralParams = null;
                  SAPbobsCOM.CompanyService oCompanyService = null;
      
                  if (!oItemEvent.BeforeAction)
                  {
                      try
                      {
                          oForm.Freeze(true);
                          oGrid.CollapseLevel = 0;
      
                          oCompanyService = oCompany.GetCompanyService();
                          oGeneralService = oCompanyService.GetGeneralService("OFOR");
      
                          oGeneralParams = ((SAPbobsCOM.GeneralDataParams)(oGeneralService.GetDataInterface(SAPbobsCOM.GeneralServiceDataInterfaces.gsGeneralDataParams)));
      
                          oGeneralParams.SetProperty("DocEntry", oDT.GetValue(48, 0));
                          oGeneralData = oGeneralService.GetByParams(oGeneralParams);
      
                          oChildren = oGeneralData.Child("FOR1");
      
                          for (int i = 0; i < oGrid.Rows.Count; i++)
                          {
                              oChildren.Item(oDT.GetValue(49, i) - 1).SetProperty("U_GrowPerc", oDT.GetValue(38, i));
                              oChildren.Item(oDT.GetValue(49, i) - 1).SetProperty("U_PyQtyCm", oDT.GetValue(39, i));
                              oChildren.Item(oDT.GetValue(49, i) - 1).SetProperty("U_PyCosto", oDT.GetValue(40, i));
                              oChildren.Item(oDT.GetValue(49, i) - 1).SetProperty("U_PyValCm", oDT.GetValue(41, i));
                              oChildren.Item(oDT.GetValue(49, i) - 1).SetProperty("U_PyMargen", oDT.GetValue(42, i));
                              oChildren.Item(oDT.GetValue(49, i) - 1).SetProperty("U_PyMUP", oDT.GetValue(43, i));
                              oChildren.Item(oDT.GetValue(49, i) - 1).SetProperty("U_PyCrmUn", oDT.GetValue(44, i));
                              oChildren.Item(oDT.GetValue(49, i) - 1).SetProperty("U_PyCrmVl", oDT.GetValue(45, i));
                              oChildren.Item(oDT.GetValue(49, i) - 1).SetProperty("U_PyStkFin", oDT.GetValue(46, i));
                              oChildren.Item(oDT.GetValue(49, i) - 1).SetProperty("U_PyStkVal", oDT.GetValue(47, i));
      
                              oApplication.StatusBar.SetText("Procesando linea: " + (i + 1).ToString() + " de: " + (oGrid.Rows.Count).ToString(), BoMessageTime.bmt_Short, BoStatusBarMessageType.smt_Warning);
                          }
      
                          oGeneralService.Update(oGeneralData);
                          oApplication.MessageBox("Forecast actualizado con exito");
                      }
                      catch (Exception ex)
                      {
                          oApplication.MessageBox(ex.Message);
                      }
                      finally
                      {
                          oGrid.CollapseLevel = 1;
                          oGrid.CollapseLevel = 2;
                          oGrid.CollapseLevel = 3;
                          oGrid.CollapseLevel = 4;
                          oGrid.CollapseLevel = 5;
                          oGrid.CollapseLevel = 6;
                          oGrid.CollapseLevel = 7;
      
                          oForm.Freeze(false);
      
                          oForm = null;
                          oGrid = null;
                          oDT = null;
                          oGeneralService = null;
                          oGeneralData = null;
                          oChildren = null;
                          oGeneralParams = null;
                          oCompanyService = null;
      
                          Funciones.FlushMemory();
                      }
                  }
              }
      
      
  2. Eduardo Buitrago dice:

    Muy bue día,

    Es un excelente aporte para aclarar dudas a los que recién estamos comenzando en el desarrollo de addons. Te agradezco por eso y me gustaría saber si tienes o sabes en donde se pueden conseguir manuales para principiantes en este mundo del desarrollo en SAP. Muchas gracias.

  3. Buenos días felipe,

    Una consulta estoy activando unos escenarios de NetWeaver, pero al intentar generar el WSDL dice que no tiene pasos, a pesar que en el XSD muestra todo bien, sabes que me puede estar faltando?

    con anterioridad gracias por tu colaboración.

  4. RG dice:

    Hola que tal Felipe, buenas noches, disculpa, me llama mucho la atención cuando hablas del UI API para extracción de información, soy nuevo en el tema y me gustaría saber si me puedes apoyar o tienes algún tutorial de como hacerlo te lo agradecería bastante.
    De antemano gracias.
    Saludos cordiales.

  5. Claudio dice:

    Felipe…, Tienes algún ejemplo o tutorial de como realizarlo?

    yo trabajo con qlikview y Reporting Services, quisiera que mis reportes se pudieran acceder directamente de SAP BO con un Botón.

    Ej: Estoy en el pedido del cliente y quisiera ver Su deuda (Fact-Cheques-Letras, Fact Vencidas etc) Agrupada, esto en un solo click no es posible a menos que se llame a un reporte externo…

    de antemano gracias…

  6. claudio pardo dice:

    Hola, sería posible crear en SAP un Botón que llame a un RPT o ventana que rescate información de una Query?, lo necesito para la ventana de solicitud de aprobación crediticia o en algún lugar del maestro de socio de negocios…

    gracias de antemano.

    • Buenas tardes

      Lo que desea realizar si es posible, puedes crear un formulario usando el screen painter o el B1 studio y mediante un pequeño addon cargarle información a través de una consulta.

      También puedes llamar un RPT en caso de no usar el formulario con la librerías CR de SAP B1.

      Saludos

  7. El ejemplo de excel podrian ayudarme a establecer la conexion con delphi

Deja una respuesta

Tu dirección de correo electrónico no será publicada.