您的位置:首页 > 产品设计 > UI/UE

转北京佳明BBS:SDK开发:如何实现UI API 与DI API的无缝连结

2005-06-08 13:10 741 查看
提供了UI API和DI API来控制界面数据和数据对象,但现在版本7.0+SP1版本是无法实现UI API直接调用DI API来进行编程的,

当然启动DI API的时候可以重新登陆一下即可, 可是这就会出现了登陆SBO client之后还需再次登陆的情况.

如何实现UI API 与DI API的无缝连结,以实现类似于即将发布的英文版6.7版本的SDK的SSO(Single Sign On )功能呢?

经过研究我们发现了可以通过使用UI API来读取登陆的用户名密码,自动登陆DI API.
实现如下:
1:根据"选择公司"这个菜单启动"选择公司"的窗体
2:读取窗体上的用户名,密码以及服务器名
3:关闭窗体
4:设置DIAPI
5:连接DIAPI
代码如下:

Private Function ConnectToDIAPI() As Boolean
Dim SBO_Company As SAPbobsCOM.Company
Dim diRstCompany As SAPbobsCOM.Recordset

Dim uiFrm As SAPbouiCOM.Form

Dim CurrentServer As String
Dim CurrentDatabase As String
Dim CurrentUserName As String
Dim CurrentPassword As String
Dim CurrentLanguage As SAPbobsCOM.BoSuppLangs
'Create company object
Set SBO_Company = New SAPbobsCOM.Company

'open SBO form "ChooseCompany", which contains all necessary Information
'3329是"选择公司"这个菜单的UID
SBOApplication.ActivateMenuItem (CStr(3329))

'open form ChooseCompany
'820是选择公司窗体的typeid
Set uiFrm = SBOApplication.Forms.GetFormByTypeAndCount(820, 1)

'minimize SBO form "ChooseCompany to prevent user entries
uiFrm.State = SAPbouicom.BoFormStateEnum.fs_Minimized

'readout necessary information
CurrentServer = uiFrm.Items.Item("23").Specific.String
CurrentUserName = uiFrm.Items.Item("19").Specific.String
CurrentPassword = uiFrm.Items.Item("20").Specific.String
uiFrm.Close

'get companylist from idenfified server

SBO_Company.Server = CurrentServer

'ATTENTION: GetCompanyList takes approximately 10 seconds to complete

Set diRstCompany = SBO_Company.GetCompanyList

'find currently chosen company in companylist
Do Until diRstCompany.EOF
If CStr(diRstCompany.Fields.Item("cmpName").Value) = SBOApplication.Company.Name Then
Exit Do
Else
diRstCompany.MoveNext
End If
Loop

If diRstCompany.EOF Then
'company not found!
' This should not happen,
'since the SBO client should always be connected with a company

Else
'set identified database
CurrentDatabase = CStr(diRstCompany.Fields.Item("dbName").Value)

'finally, connect to company
With SBO_Company
.Server = CurrentServer
.CompanyDB = CurrentDatabase
.UserName = CurrentUserName
.Password = CurrentPassword
.UseTrusted = False
'.Language = SBOApplication.Language
End With

SBO_Company.Connect

Dim ErrCode As Integer
Dim ErrMessage As String

If Not SBO_Company Is Nothing Then
'SBO_Company.GetLastError(ErrCode, ErrMessage)

'if there really is an error
'then show it in SBOIf ErrCode <> 0 Then
SBOApplication.MessageBox ("Fehler Nr.: " & ErrMessage & _
vbCrLf & ErrMessage)
ConnectToDIAPI = False
Else
Debug.Print "DIAPI Connected to " & CurrentDatabase
ConnectToDIAPI = True
End If
End If
End If
End Function
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: