SBOSPTransactionNotification.docx
- 文档编号:3442892
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:11
- 大小:21.09KB
SBOSPTransactionNotification.docx
《SBOSPTransactionNotification.docx》由会员分享,可在线阅读,更多相关《SBOSPTransactionNotification.docx(11页珍藏版)》请在冰豆网上搜索。
SBOSPTransactionNotification
使用sbo_sp_transactionnotification存储过程
适用于:
SAPBusinessOne,SDK,sbo_sp_transactionnotification存储过程
摘要
本文介绍了如何使用sbo_sp_transactionnotification存储过程接收一个数据驱动的事件在SAP®业务的通知。
你也可以下载示例代码。
作者(s):
杰姆斯kofalt
公司:
SAP
创建:
3月2004
最后更新:
一月2007的SAPB1解决方案架构师
目录
适用于:
........................................................1
摘要............................................................1
动机............................................................3
详细的sbo_sp_transactionnotification...........................4
2007版的重要注意事项.......................................................................................6
将代码添加到存储过程..........................................7
版权............................................................8
动机
合作伙伴经常问我是否有一种方式接收的数据驱动的事件在SAP业务的通知。
换句话说,开发人员需要一种方法来触发事件在他们的应用程序的基础上发生在SAPBusinessOne。
在SAPBusinessOne客户端应用程序中发生的事件,它是使用用户界面API简单(ui-api)来捕获事件并作出反应。
然而,对于事件的客户端应用程序不涉及,例如当有人将文件通过数据接口API(di-api),另一种机制是必需的。
接收的数据驱动的事件通知机制并在现有的B1部分代码调用的存储过程的sbo_sp_transactionnotification定位。
请注意:
添加SQL触发器或存储过程在数据库级别是不允许的(参见SAPBusinessOne解决方案添加上证明文件)–此外触发器会自动删除在SAPBusinessOne升级过程时,相应的表的修改。
详细的sbo_sp_transactionnotification(事务通告)
SAPBusinessOne提供sbo_sp_transactionnotification存储驱动程序接收事件通知机制。
此存储过程时触发操作的业务对象如文档或主记录在SAP业务进行。
这不仅适用于通过DIAPI已经暴露的对象,但在应用–包括用户定义的任何对象的业务对象(UDO)。
通过添加您自己的transactSQL代码,你可以将参数传递到您的应用程序和检索相应的对象从SAPBusinessOne。
该sbo_sp_transactionnotification存储过程在创建时自动创建一个新的公司在SAPBusinessOne。
这是从一些SAPBusinessOne演示数据库丢失(例如美国的数据库演示),但你可以很容易地添加它使用SQL企业管理器或SQL查询分析器手动。
初始建立时,它看起来像这样:
CREATEprocSBO_SP_TransactionNotification
@object_typenvarchar(20),--SBOObjectType
@transaction_typenchar
(1),--[A]dd,[U]pdate,[D]elete,[C]ancel,C[L]ose
@num_of_cols_in_keyint,
@list_of_key_cols_tab_delnvarchar(255),
@list_of_cols_val_tab_delnvarchar(255)
AS
begin
--Returnvalues
declare@errorint--Result(0fornoerror)
declare@error_messagenvarchar(200)--Errorstringtobedisplayed
select@error=0
select@error_message=N'Ok'
------------------------------------------------------------
--ADDYOURCODEHERE
-------------------------------------------------------------
--Selectthereturnvalues
select@error,@error_message
end
GO
有五个参数:
Parameter
Example
@objecttype
2(BusinessPartner)
Sinceversion2005itreturnsastringrepresentingthetypeofobject–usedtobeanumericalvalueinpreviousversions.
AfulllistofobjecttypesexposedthroughDIAPIcanbefoundintheDIAPIdocumentationunderthesectionEnumerations.TheenumerationiscalledBoObjectTypes.
从2005版本开始,它返回一个字符串对象–以前使用的版本的数值类型。
一个完整的对象类型列表通过DIAPI可以在API文档中找到二部分枚举下。
枚举是称为BoObjectTypes。
@transaction_type
U(update)
Itmayhavevaluesof:
A(wherearecordwasadded)
U(wherearecordwasupdated)
D(wherearecordwasdeleted),
C(whereadocumentwascanceled)
L(whereadocumentwasclosed)
它可能值:
A(一个记录被添加)
U(一个记录被更新)
D(其中一个记录被删除),
C(其中一个文件被取消)
L(其中一个文件被关闭)
@num_of_cols_in_key
1
Returnsthenumberofcolumnsorfieldsinthekeytotherecord.
ABusinessPartner,forexample,hasakeyconsistingofasinglefield(CardCode),sothisvariablewouldhaveavalueof"1".ASpecialPricesobject,however,hasakeyconsistingoftheCardCodeandItemCode,soforaSpecialPricesobjectthisvariablewouldhaveavalueof"2".
返回在关键领域的列或数量的记录。
例如,有一个关键的业务合作伙伴,组成一个单一的领域,所以这个变量(cardcode)将有一个值“1”。
一个特殊的价格目标,然而,有一个关键的组成的cardcode和itemcode,所以为了某一个特别的价格这一变量对象将有一个值“2”。
@list_of_key_cols_tab_del
CardCode
Itreturnsatab-delimitedlistofcolumnnames(fieldnames)thatrepresenttheobjectkey.
ForaBusinessPartner,thiswouldbe"CardCode".ForaSpecialPricesobject,itwouldbe"CardCodeItemCode".
它返回一个制表符分隔的列名称列表(字段名)表示的对象的关键。
对于一个商业伙伴,这将是“cardcode”。
一个特殊的价格目标,这将是“cardcodeitemcode”。
@list_of_cols_val_tab_del
C40001
Thisreturnsatab-delimitedlistofvaluesrequiredtoretrievetheobjectfromBusinessOne.
Forexample,aBusinessPartnerrecordmighthaveavalueof"C40001".ASpecialPricesobjectwouldcontain2fieldsseparatedbyatabcharacter.Forexample:
"V10005...A00001"
这是返回一个制表符分隔的要求从B1对象的值列表。
例如,一个业务伙伴的记录可能有价值的“c40001”。
一个特殊的价格对象将包含2域由制表符分隔的。
例如:
“v10005…a00001”
--------------------------------------------------------------------
2007版的重要注意事项
随着SAPBusinessOne2007发布,企业将存储过程作为返回值返回参数”错误和“error_message等待sbo_sp_transactionnotification。
如果没有这些价值回归,SAPBusinessOne将考虑交易失败。
如果你把代码在sbo_sp_transactionnotification,请确保你总是通过“选择”的错误,“error_message”结束时,尤其是在你想要的交易被视为成功的案例。
--------------------------------------------------------------------
将代码添加到存储过程
现在你已经熟悉sbo_sp_transactionnotification存储过程返回的值,让我们看一个使用示例代码。
本文附带的示例包括一个简单的VisualBasic6项目“displaysboinfo”。
你应该使用REGSVR32.EXE来注册编译DLL,包含。
displaysboinfo暴露一个单一的方法称为displaysboinfo。
该方法以sbo_sp_transactionnotification作为参数提供的信息,写一个制表符分隔的文本文件里面。
该sbo_sp_transactionnotification存储过程应包括以下transactSQL代码。
添加下面的文本为存储过程的部分说,“在这里添加你的代码”:
DECLARE@objectint--declaretheobjectvariable
DECLARE@hresultint--declarethehresultvariable
DECLARE@retvalfloat--declarethereturnvariable
EXEC@hresult=sp_OACreate'DisplaySBOInfo.Class1',@objectOUT
EXEC@hresult=sp_OAMethod@object,DisplaySBOInfo,@retvalOUT,@object_type,@transaction_type,@num_of_cols_in_key,@list_of_key_cols_tab_del,@list_of_cols_val_tab_del
IF@hresult<>0
BEGIN
EXECsp_OAGetErrorInfo@object
RETURN
END
这创造了displaysboinfo.class1实例并调用displaysboinfo方法,参数传递给它,将被写入文本日志。
当你添加你的代码存储过程,开拓业务,做一些改变。
例如,添加一个生意伙伴,编辑一个报价,然后删除业务伙伴。
当你完成后,打开log.txt,看看这些数据。
在现实生活中的情况下,你会使用与di-apisbo_sp_transactionnotification提供检索有关记录,插入,删除,更多的信息,或改变。
当你做这个练习举例,回到存储过程删除或注释掉的代码,增加了。
这将确保样品不继续运行。
如果你愿意,你可以下载示例代码,本文介绍了。
你也可以下载SAPBusinessOne底事件服务样本实施底事件服务上运行现有的SAPBusinessOneSDK接口。
这个服务提供给SAPBusinessOne迪API对象通过一个基于监听器接口相关的事件的通知。
版权所有
©版权2006SAPAG。
保留所有权利。
没有这本刊物的一部分可能会被复制或以任何形式或任何目的没有明确许可的SAPAG。
此处包含的信息可能会在没有事先通知更改。
一些软件产品和其分销商所销售的含有其它软件供应商的专有软件成分。
微软,Windows,观,和PowerPoint是微软公司的注册商标。
IBM,DB2,DB2通用数据库,OS/2,并行系统综合体,MVS/ESA,AIX,S/390,为400,OS/390,OS/400,系列,系列,系列服务器,zseries,z/OS操作系统,AFP,IntelligentMiner,WebSphere,Netfinity,蒂沃丽花园,Informix,i5/操作系统,电力,POWER5,openpower和PowerPC是IBM公司的商标或注册商标。
Adobe,Adobe标志,杂技演员,后记,和读者的商标或Adobe系统公司在美国和/或其他国家的注册商标。
Oracle是甲骨文公司的注册商标。
UNIX,X/Open,OSF/1,和主题是开放集团的注册商标。
CitrixMetaFrame,ICA,程序,邻里,WinFrame,videoframe,和多赢的商标或注册商标的CitrixSystems,Inc.
HTML,XML,XHTML和W3C的®是W3C的商标或注册商标,万维网联盟,麻省理工学院。
Java是Sun公司的注册商标,
JavaScript是一个注册商标的Sun微系统公司,公司,许可使用的技术发明和实施的网景。
MaxDB商标是MySQLAB,瑞典。
SAPR/3,,SAP,mySAP.com,xapps,XAPP,SAPNetWeaver,和其它SAP产品和服务,这里提到的以及他们各自的标志的商标或SAPAG在德国和世界其它一些国家注册商标。
所有其他产品和服务名称是其各自公司的商标。
此文档中的数据只用于查询信息。
国家的产品规格可能会有所不同。
这些材料如有更改,恕不另行通知。
这些材料是由SAPAG和其关联公司提供(“SAP组”)仅供参考,没有任何陈述或保证,和SAP组不得的错误或遗漏承担责任方面的材料。
SAP组产品与服务的唯一担保是指在附带的保修声明这些产品和服务的规定,如果任何。
此处的任何内容都不应被视为构成额外的保修。
这些材料提供的“原样”无任何形式的保证,明示或暗示的保证,包括但不限于,默示保证适销性,适合特定用途或非侵权。
SAP不应承担赔偿责任的任何一种,包括但不限于直接的,间接的,特殊的,或间接的损害赔偿,可能是由于这些材料的使用。
SAP不保证的准确性或完整性的信息,文本,图形,在这些材料中包含的链接或其它项目。
SAP已经无法控制的信息,你可以通过在这些材料中的热链接的使用和不支持您使用第三方网站也不提供任何保证,凡涉及第三方网页。
任何软件编码和/或代码行/字符串(“代码”)包含在这个文件只是例子,不拟用于在一个生产系统环境。
该代码是唯一的目的,更好地解释和可视化的语法和措辞一定的编码规则。
SAP不保证正确性和完整性的代码,这里给出的,和SAP不得错误或损坏代码的使用而引起的责任,除非这种损失的故意或疏忽造成的SAP。
--------------------------------------------------------------------
if@object_type='15'--销售交货
BEGIN
IF@transaction_type='U'or@transaction_type='A'
BEGIN
SET@DocEntry=CAST(@list_of_cols_val_tab_delASint)
SET@iCountA=(SELECTCOUNT(*)FROMDLN1WHEREPrice<5000andDocEntry=@DocEntry)
if@iCountA>0
BEGIN
set@error=-5012
set@error_message=N'做不了啊做不了'
END
END
END
--------------------------------------------------------------------
--------------------------------------------------------------------
--------------------------------------------------------------------
declare@iint
declare@Datedatetime
declare@iCountBint
declare@F_RefDatedatetime--过账日期开始时间
declare@T_RefDatedatetime--过账日期结束时间
declare@Statusnvarchar--过账期间状态
if@object_type='15'--销售交货
or@object_type='17'--销售订单
or@object_type='13'--应收发票
or@object_type='16'--销售退货
BEGIN
IF@transaction_type='U'or@transaction_type='A'--更新单据
BEGIN
SET@iCountB=(selectcount(*)fromOFPR)
SET@Date=getdate()--获取系统当前时间
SET@i=1
WHILE@i<=@iCountB--循环判断当前时间所在过账期间
BEGIN
SET@F_RefDate=(SELECTF_RefDateFROMOFPRWHEREAbsEntry=@i)
SET@T_RefDate=(SELECTT_RefDateFROMOFPRWHEREAbsEntry=@i)
if@Date>=@F_RefDateand@Date<=@T_RefDate
BEGIN
--获取当前期间的状态
SET@Status=(SELECTPeriodStatFROMOFPRWHEREAbsEntry=@i)
--状态是否是“已解锁”状态
if@Status!
='N'
BEGIN
set@error=-5013
set@error_message=N'期间未解锁,不能更新'
END
END
SET@i=@i+1
END
END
END
--------------------------------------------------------------------
--------------------------------------------------------------------
--------------------------------------------------------------------
--尝试限定过账日期期间“已解锁”之外状态的下不能更新单据
declare@iint
declare@Datedatetime
declare@Statusnvarchar--过账期间状态
if@object_type='15'--销售交货
or@object_type='17'--销售订单
or@object_type='13'--应收发票
or@object_type='16'--销售退货
BEGIN
IF@transaction_type='U'or@transaction_type='A'--更新单据
BEGIN
SET@Date=getdate()--获取系统当前时间
set@Status=(selectPeriodStatfromOFPR
WHERE@DATE>F_RefDateand@Date if@Status! ='N' BEGIN set@error=-5013 set@error_message=N'期间未解锁,不能更新' END END END --------------------------------------------------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SBOSPTransactionNotification