快速服务插件CCO的示例

2020-08-30 20:31发布

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

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


嘿,有一个在快速服务模式下工作的插件的示例。 我们需要在收据中的行级别访问UDF并提示对其进行验证,我们还需要访问凭证数据,如果有示例或示例文档,它将对很多帮助

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

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


嘿,有一个在快速服务模式下工作的插件的示例。 我们需要在收据中的行级别访问UDF并提示对其进行验证,我们还需要访问凭证数据,如果有示例或示例文档,它将对很多帮助

付费偷看设置
发送
12条回答
亦是此间程序员
1楼 · 2020-08-30 20:58.采纳回答

尊敬的 Mohamad Metwaly

请在PluginAt注释中使用以下类和方法来 新的UI堆栈:

 @PluginAt(pluginClass = ReceiptPosService.class,方法=" postReceipt",其中= POSITION.BEFORE)

 @pluginAt(pluginClass = ReceiptPosService.class,method =" addSalesItem",其中= POSITION.BEFORE)

在args数组中,所有必需的实体都应该可用。

注意

Robert

南山jay
2楼-- · 2020-08-30 21:09

亲爱的 Robert Zieschang 下面的新用户界面中使用的代码示例

@PluginAt(pluginClass = IReceiptManager.class,method =" dirtyStore",where = POSITION.BEFORE)

public void performReceiptValidation(Object proxy,Object [] args,StackTraceElement callStack)引发BreakExecutionException {

}

@PluginAt(pluginClass = IReceiptManager.class,method =" addSalesItems",where = POSITION.BEFORE)

public void performReceiptaddSaleItems(Object proxy,Object [] args,StackTraceElement callStack)引发BreakExecutionException {

}

他们传递的调试器

huskylover
3楼-- · 2020-08-30 21:20

亲爱的 Mohamad Metwaly

使用在Typescript中用Angular编写的新UI Stack,您将无法像示例中那样对js方法进行修补。 从2.0 FP08起,您可以选择订阅事件总线。 在事件总线中,所有UI组件都在发布事件,例如

创建一个js文件:

 Plugin.MyPlugin = class MyPlugin {
   构造函数(pluginService,eventBus){
     this.pluginService = pluginService;
     this.eventBus = eventBus;
     this.init();
   }

   在里面() {
     this.eventBus.subscribe({
       'handleEvent':(事件)=> {console.log(event);  }
      });
   }
 };
  

现在,当您的插件加载完毕后,打开google开发者控制台(按F12键)并确定您要操纵的事件(我目前不知道哪个事件是要添加销售商品的事件)。 在每个事件的有效负载中,您都可以找到所需的所有内容(例如,添加销售商品时,事件的有效负载部分中将包含销售商品实体)。

hth

Robert

Cikesha
4楼-- · 2020-08-30 20:58

Robert Zieschang 非常感谢它工作的最后一段代码 非常顺利,我希望得到您的支持,我的最后一件事是,在零售模式下有一个对话框,可以捕获数据并将其存储在UDF中,我需要知道如何在新UI(快速服务模式)中进行管理 )代码如下

$("#dialog-confirm").dialog({resizable:false,height:" auto",width:400,modal:true,

按钮:{Ok:function()

{imeiNo = $('#txtimei')。val();

showInProgressDialog();

$ .ajax(

{" url":" PluginServlet?action = getIMEIInfo&imeiNo =" + imeiNo +"&materialId =" + materialId,

" dataType":" JSON",

" type":" GET"})。

成功(函数(数据){

hideInProgressDialog();

console.log(data);

if(data [" status"] ===" success" && data [" action"]!=" imei"){

originAddNewSalesItem(rowid,materialId,amount,unitOfMeasure,materialUsed,additionalParams);

}

})。fail(function(){hideInProgressDialog();});

$("#dialog-confirm").dialog(" close");

},取消:function(){

$("#dialog-confirm").dialog(" close");

}

}

});

CJones
5楼-- · 2020-08-30 21:19

尊敬的 Mohamad Metwaly

在您的js代码中,您可以使用backendPluginEvent将事件推送到您的插件后端,而不是使用PluginServlet(这仍然可以,但是这样做更加方便)。

 this.pluginService。  backendPluginEvent('MY_PLUGIN_EVENT',{
     'myData':'数据'
 }); 

在您的后端中,您需要像这样从EventChannelListener覆盖handleEvent方法:

 BroadcasterHolder.INSTANCE.addEventChannelListener(new UIEventChannelListener(){
   @Override
   公共无效handleEvent(String eventId,JSONObjectpayload){
     if(StringUtils.equals(eventId," MY_PLUGIN_EVENT")){
       System.out.println(payload.getString(" myData"));;
     }
   }
 } 

对于通用InputDialog,您只需将事件推送到Eventbus并沿以下方向发送一些配置:

 const inputModel = new cco.InputModel();
 this.eventBus.push('SHOW_GENERIC_INPUT',{
             "配置":[
                 新的cco.GenericInputConfiguration('This is the text','0','CenteredLabel'),
                 新的cco.GenericInputConfiguration('请输入一个值','1','Input',inputModel),
             ],
             'title':'这是标题',
             'callback':(positive)=> {
                 如果(肯定){
                     console.log('OK Pressed。value is:'+ inputModel.getValue());
                 }其他{
 console.log('X或取消按下');
                 }
             }
         });
 

hth

Robert

SKY徐
6楼-- · 2020-08-30 21:11

Robert Zieschang 非常感谢您的指导,它们非常清楚,感谢您的支持

一周热门 更多>