转北京佳明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
当然启动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
相关文章推荐
- 描述一下iOS SDK中如何实现MVC的开发模式
- 【百度地图-安卓SDK】如何实现跨城驾车导航?例如从重庆到北京。
- 如何开发SDK及其API
- 【百度地图-安卓SDK】如何实现跨城驾车导航?例如从重庆到北京。
- 如何利用第三方SDK开发MSN机器人以及实现语音视频?
- 如何用Baas快速在腾讯云上开发小程序-系列3 :实现腾讯云COS API调用
- 安卓开发中,在低版本SDK使用高版本的API会报错。一般处理方法是换一种实现方法,或者在高版本SDK中使用高版本API,低版本SDK中使用效果可能会差点的折衷方案;后者可以用如下技巧来实现。
- 如何用Baas快速在腾讯云上开发小程序-系列3 :实现腾讯云COS API调用
- 转:Android应用开发中如何使用隐藏API
- 【祥哥带你玩HoloLens开发】了解如何实现远程主机为HoloLens实时渲染
- 语音视频SDK如何实现超低延迟优化?
- iOS开发如何实现消息推送机制
- 华为如何实现基于Git的跨地域协同开发
- iOS开发如何集成支付宝SDK
- sugarnms如何快速实现网管软件定制开发?
- iOS开发中如何更快的实现汉字转拼音
- iOS开发如何实现消息推送机制
- 第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容
- .Net语言 APP开发平台——Smobiler学习日志:如何快速实现按钮组功能
- 从QQ音乐开发,探讨如何利用腾讯云SDK在直播中加入视频动画