【问题标题】:How to add data in UDT of SAP B1 in SDK?如何在 SDK 中的 SAP B1 的 UDT 中添加数据?
【发布时间】:2018-07-29 03:18:17
【问题描述】:

我在 SDK 中的 SAP B1 的 UDT 中添加记录时遇到问题。

我的所有代码

Public Class SystemForm
    Private oCompany As SAPbobsCOM.Company
    Private WithEvents SBO_Application As SAPbouiCOM.Application

    Private Sub SetApplication()

        Dim SboGuiApi As SAPbouiCOM.SboGuiApi
        Dim sConnectionString As String

        SboGuiApi = New SAPbouiCOM.SboGuiApi()
        sConnectionString = Command()
        SboGuiApi.Connect(sConnectionString)
        SBO_Application = SboGuiApi.GetApplication()
    End Sub

    Public Sub New()
        MyBase.New()

        SetApplication()

    End Sub


    Private Sub SBO_Application_ItemEvent(ByVal FormUID As String, ByRef pVal As SAPbouiCOM.ItemEvent, ByRef BubbleEvent As Boolean) Handles SBO_Application.ItemEvent

        If pVal.FormTypeEx = "UDO_FT_RPRL" AndAlso pVal.ActionSuccess = False AndAlso pVal.EventType = SAPbouiCOM.BoEventTypes.et_ITEM_PRESSED AndAlso pVal.ItemUID = "2" AndAlso pVal.FormMode = 3 Then
            Dim oUsrTbl As SAPbobsCOM.UserTable
            Dim Res As Integer

            oCompany = New SAPbobsCOM.Company

            oUsrTbl = oCompany.UserTables.Item("@TODD")

            oUsrTbl.Code = "1"
            oUsrTbl.Name = "189"
            oUsrTbl.UserFields.Fields.Item("U_Amount").Value = 4000
            Res = oUsrTbl.Add()

            If Res = 0 Then
                SBO_Application.MessageBox("Added")
            Else
                SBO_Application.MessageBox("Error, failed to add Record")
            End If

        End If

    End Sub
End Class

我试图做研究但没有帮助

实际上我想要做的是,如果我点击 UDO 的添加按钮,那么它会更新我的名为 @TODD 的 UDT,但是如果我点击上面代码的添加按钮,则会出现以下错误消息“Addon 9000058 failed with exception; 事件类型: 1"。

任何人都可以帮助我

【问题讨论】:

  • Res0 时 oCompany.GetLastErrorCode 和 GetLastErrorDescription 的值是多少?
  • 我试图检查 oCompany.GetLastErrorCode 但没有显示任何内容,因为如果编译到达这一行 oUsrTbl = oCompany.UserTables.Item("@TODD") 它会在状态栏上显示错误消息时失败SAP B1 插件 9000020 异常失败;事件类型:1。@TODD 是我创建的用户定义表,我知道它为什么会失败。我在 Public 类中将 Private oCompany 声明为 SAPbobsCOM.Company
  • 我认为问题出在保存过程中,但事实并非如此。请看我的回答。

标签: visual-studio sdk sapb1 sap-business-one-di-api


【解决方案1】:

在创建实例 oCompany 后,您缺少对 DIAPI 的 Connect() 方法的调用。在调用它之前,您需要设置连接上下文,方法是指定服务器和登录名,或者从您的 UI-API 连接中获取会话上下文。假设您的 UI-API 对象称为 SBO_Application:

Dim Cookie as String = oCompany.GetContextCookie()
Dim conStr as String = SBO_Application.Company.GetConnectionContext(Cookie)
oCompany.SetSboLoginContext(conStr)
oCompany.Connect()

(未经测试的代码)

显然,您可能希望在继续之前检查 Connect 调用是否成功。

【讨论】:

  • 另外,在事件处理程序中调用 oCompany.Connect() 可能不是一个好主意。连接需要几秒钟,这将挂断 UI。用户甚至可能认为您的插件已经崩溃。
  • 是的,我使用 UI-API 连接进行连接,并且我的 UI-API 对象称为 SBO_Application,如何将其与 oCompany 连接?我认为如果我与 UI-API 连接,则不需要其他连接。以下是我正常的连接 Private Sub SetApplication() Dim SboGuiApi As SAPbouiCOM.SboGuiApi Dim sConnectionString As String SboGuiApi = New SAPbouiCOM.SboGuiApi() sConnectionString = Command() SboGuiApi.Connect(sConnectionString) SBO_Application = SboGuiApi.GetApplication() End Sub
  • 你需要一个 UI-API 连接(你有,否则你的事件不会被处理)和一个 DI-API 连接。我给你的代码将从现有的 UI-API 连接建立一个 DI-API 连接。我的答案中的代码应该直接在“oCompany = New SAPbobsCOM.Company”之后。这会起作用,但是根据我上面的第一条评论,将此连接代码放在事件处理程序中并不合适。
  • 非常感谢达兹!!你节省了我的时间
【解决方案2】:

这是我正在使用的代码,用于连接并在我的情况下设置一个可用于事务和“DoQuery”查询的“oCompany”对象。

SAPbobsCOM.Company oCompany = new SAPbobsCOM.Company();

oCompany.CompanyDB = "DATABASE_NAME";
oCompany.Server = "FTHANA01:30015";  // Your server name goes here
oCompany.LicenseServer = "FTHANA01:30000";
oCompany.SLDServer = "FTHANA01:40000";
oCompany.DbUserName = "SAPSYSTEM";
oCompany.DbPassword = psw1;
oCompany.UserName = "SAP Username";
oCompany.Password = psw2;

// We are using a SAP Hana database
oCompany.DbServerType = SAPbobsCOM.BoDataServerTypes.dst_HANADB;
oCompany.UseTrusted = true;

int ret = oCompany.Connect();
string errMsg = oCompany.GetLastErrorDescription();
int ErrNo = oCompany.GetLastErrorCode();

if (ErrNo != 0)
    (we have an error)
else
    (success)

数据库登录凭据和用户登录凭据都是必需的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多