Callback_AfterRedisplay在Office Workbook的Analysis中不起作用

2020-08-30 13:06发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,我创建了一个Office报告分析,其中包含来自2个信息提供者的不同数据源 (CRM活动 机会) 。 不幸的是,在活动InfoProvider中,特征被称为

  • 0BPARTNER__0SALES_GRP/0BPARTNER__0SALES_GRP

在商机信息提供者中,它们被称为

  • 0BP_ACTIVIT_0SALES_GRP/0BP_ACTIVIT_0SALES_OFF

因此,当将报告过滤到某个销售组或销售办公室时,我将不得不添加2个过滤器。 为了避免这种情况,我想通过VBA设置一个过滤器。 在 ThisWorkbook 下,我已经注册了回叫

公共Sub Workbook_SAP_Initialize()

'注册回调
调用Application.Run(" SAPExecuteCommand"," RegisterCallback"," AfterRedisplay"," Callback_AfterRedisplay")

结束子

在模块1中,我添加了以下代码以从活动过滤器中读取值并将其设置为机会过滤器

FilterSalesGroup()

Application.ScreenUpdating = False

工作表("查询")。激活

'从活动过滤器中选择变量

效果暗淡

昏暗的SlsGrp作为字符串

SlsGrp = Range(" C6")。Value

Dim SlsOff作为字符串

SlsOff = Range(" C5")。Value

'将SlsGroup变量设置为OPP数据源的过滤器

lResult = Application.Run(" SAPSetFilter"," DS_3"," 0BP_ACTIVIT__0SALES_GRP",SlsGrp," INPUT_STRING")

lResult = Application.Run(" SAPSetFilter"," DS_1"," 0BP_ACTIVIT__0SALES_GRP",SlsGrp," INPUT_STRING")

'将SlsOff变量设置为OPP数据源的过滤器

lResult = Application.Run(" SAPSetFilter"," DS_3"," 0BP_ACTIVIT__0SALES_OFF",SlsOff," INPUT_STRING")

lResult = Application.Run(" SAPSetFilter"," DS_1"," 0BP_ACTIVIT__0SALES_OFF",SlsOff," INPUT_STRING")

Application.ScreenUpdating = True

结束子

公共子区域 Callback_AfterRedisplay()

致电FilterSalesGroup

结束子

因此,每次为商机数据源设置销售组或销售办公室过滤器时,宏都应为商机数据源DS_1和DS_3设置相同的过滤器。

如果我手动或通过Excel中的按钮启动宏 FilterSalesGroup ,它可以正常工作。 但是 Callback_AfterRedisplay 方法在此工作簿中不起作用,而我在另一份报告中使用了相同的框架。 当然,我们将更改InfoProvider,但是我暂时想将VBA过程用作解决方法。

是否有人面临同样的问题? 欢迎任何想法

感谢斯蒂芬

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,我创建了一个Office报告分析,其中包含来自2个信息提供者的不同数据源 (CRM活动 机会) 。 不幸的是,在活动InfoProvider中,特征被称为

  • 0BPARTNER__0SALES_GRP/0BPARTNER__0SALES_GRP

在商机信息提供者中,它们被称为

  • 0BP_ACTIVIT_0SALES_GRP/0BP_ACTIVIT_0SALES_OFF

因此,当将报告过滤到某个销售组或销售办公室时,我将不得不添加2个过滤器。 为了避免这种情况,我想通过VBA设置一个过滤器。 在 ThisWorkbook 下,我已经注册了回叫

公共Sub Workbook_SAP_Initialize()

'注册回调
调用Application.Run(" SAPExecuteCommand"," RegisterCallback"," AfterRedisplay"," Callback_AfterRedisplay")

结束子

在模块1中,我添加了以下代码以从活动过滤器中读取值并将其设置为机会过滤器

FilterSalesGroup()

Application.ScreenUpdating = False

工作表("查询")。激活

'从活动过滤器中选择变量

效果暗淡

昏暗的SlsGrp作为字符串

SlsGrp = Range(" C6")。Value

Dim SlsOff作为字符串

SlsOff = Range(" C5")。Value

'将SlsGroup变量设置为OPP数据源的过滤器

lResult = Application.Run(" SAPSetFilter"," DS_3"," 0BP_ACTIVIT__0SALES_GRP",SlsGrp," INPUT_STRING")

lResult = Application.Run(" SAPSetFilter"," DS_1"," 0BP_ACTIVIT__0SALES_GRP",SlsGrp," INPUT_STRING")

'将SlsOff变量设置为OPP数据源的过滤器

lResult = Application.Run(" SAPSetFilter"," DS_3"," 0BP_ACTIVIT__0SALES_OFF",SlsOff," INPUT_STRING")

lResult = Application.Run(" SAPSetFilter"," DS_1"," 0BP_ACTIVIT__0SALES_OFF",SlsOff," INPUT_STRING")

Application.ScreenUpdating = True

结束子

公共子区域 Callback_AfterRedisplay()

致电FilterSalesGroup

结束子

因此,每次为商机数据源设置销售组或销售办公室过滤器时,宏都应为商机数据源DS_1和DS_3设置相同的过滤器。

如果我手动或通过Excel中的按钮启动宏 FilterSalesGroup ,它可以正常工作。 但是 Callback_AfterRedisplay 方法在此工作簿中不起作用,而我在另一份报告中使用了相同的框架。 当然,我们将更改InfoProvider,但是我暂时想将VBA过程用作解决方法。

是否有人面临同样的问题? 欢迎任何想法

感谢斯蒂芬

付费偷看设置
发送
4条回答
灬番茄
1楼-- · 2020-08-30 13:34

从理论上讲,您的代码应该可以工作。 我尝试通过在Callback_AfterRedisplay(版本2.7)中调用其他宏来运行类似的内容。 我猜想这与您的FilterSalesGroup宏的活动有关。 为了进行测试,而不是调用FilterSalesGroup宏,而是让它调用一个简单的宏,该宏只说msgbox"这有效"。 我猜它会正常运行。

我可能是错的,但是由于AfterRedDisplay中包含SAPSetFilter查询,您的代码不会创建无限循环吗? 如果这确实有效,它会不会继续触发AfterRedisplay过程...? 再次,如果您注释掉了这些代码行,也许就可以了。

作为一种解决方法,也许用户是否可以通过按下特定的按钮从头到尾调用每个宏(包括刷新)来进行刷新?

好奇您(或任何人)是否确定无限循环是否是问题。

CPLASF-自律
2楼-- · 2020-08-30 13:19

我知道我的答案是几个月后,但好奇是否已解决。

哎,真难
3楼-- · 2020-08-30 13:15

嗨,

我在您的计算机上尝试了您的代码,并遇到了同样的问题,"正常"代码可以正常工作,但CallBack却不能。 也许公司的宏指导方针有问题吗? 在我的公司中,所有宏都被禁用,因此可能是原因,回调无法注册。

我当前正在使用AO 2.7.300.86673

我希望这会对您有所帮助。

愤怒的猪头君
4楼-- · 2020-08-30 13:26

您好Stefan,

我今天也面临着同样的问题。

最后,使用Excel函数进行了解决。

请将以下代码粘贴到AO工作簿的" Thisworkbook"中

  Public Sub Workbook_SAP_Initialize()
'注册回调 调用Application.Run(" SAPExecuteCommand"," RegisterCallback"," AfterRedisplay"," Callback_AfterRedisplay")
调用Application.OnTime(现在," FilterSalesGroup")
结束子类

一周热门 更多>