2020-08-30 20:31发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嘿,有一个在快速服务模式下工作的插件的示例。 我们需要在收据中的行级别访问UDF并提示对其进行验证,我们还需要访问凭证数据,如果有示例或示例文档,它将对很多帮助
尊敬的 Mohamad Metwaly ,
请在PluginAt注释中使用以下类和方法来 新的UI堆栈:
@PluginAt(pluginClass = ReceiptPosService.class,方法=" postReceipt",其中= POSITION.BEFORE) @pluginAt(pluginClass = ReceiptPosService.class,method =" addSalesItem",其中= POSITION.BEFORE)
在args数组中,所有必需的实体都应该可用。
注意 p>
Robert
亲爱的 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 {
他们传递的调试器
亲爱的 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 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(){
});
在您的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或取消按下'); } } });
Robert Zieschang 非常感谢您的指导,它们非常清楚,感谢您的支持
最多设置5个标签!
尊敬的 Mohamad Metwaly ,
请在PluginAt注释中使用以下类和方法来 新的UI堆栈:
在args数组中,所有必需的实体都应该可用。
注意 p>
Robert
亲爱的 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 {
}
他们传递的调试器
亲爱的 Mohamad Metwaly ,
使用在Typescript中用Angular编写的新UI Stack,您将无法像示例中那样对js方法进行修补。 从2.0 FP08起,您可以选择订阅事件总线。 在事件总线中,所有UI组件都在发布事件,例如
创建一个js文件:
现在,当您的插件加载完毕后,打开google开发者控制台(按F12键)并确定您要操纵的事件(我目前不知道哪个事件是要添加销售商品的事件)。 在每个事件的有效负载中,您都可以找到所需的所有内容(例如,添加销售商品时,事件的有效负载部分中将包含销售商品实体)。
hth
Robert
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");
}
}
});
尊敬的 Mohamad Metwaly ,
在您的js代码中,您可以使用backendPluginEvent将事件推送到您的插件后端,而不是使用PluginServlet(这仍然可以,但是这样做更加方便)。
在您的后端中,您需要像这样从EventChannelListener覆盖handleEvent方法:
对于通用InputDialog,您只需将事件推送到Eventbus并沿以下方向发送一些配置:
hth
Robert
Robert Zieschang 非常感谢您的指导,它们非常清楚,感谢您的支持
一周热门 更多>