Business Request的虚实之道

Business Request的虚实之道
Business Request的概念,与http request是不同的。为避免误解,特意加上Business一词修饰。
所谓虚实是指是否将Business Request概念实例化。不做实例化的理由时处理简单;实例化则有助于处理Business Transaction以及账目模式。
一个业务上的Business Request可能包括多个Request Form,与核心业务对象对应,例如:在线订单,就包括了购买物品及其数量和折扣,支付协议和发货协议等。
对于没有实例化Business Request的情况下,在实际业务操作时,对每一个form的操作都需要一个物理的transaction来支持。
这样做的问题是,由于没有记录Business Request,直接操作业务对象,在做业务日志时只能记录操作前以及操作后的信息(既“减肥前,减肥后”);同时cross多个transaction,要支持查询到一次Business Request所有操作的信息,需要新建一个log index或者类似的手段,在业务开始时获取注册一个index,所有log操作中引用这个index,在业务结束后close该index。虽然如此,也带来的是业务上做undo以及redo操作的不便。
但是如果实例化Business Request,就很容易处理这两样操作。建立一个Business Request,同时记录所涉及的Request Form。这样做的好处是:可以很容易的记录一些额外的信息;同时可以很容易的支持approve操作(既俗说的“管帐的不管钱,管钱的不管帐”)。不过目前大部分的系统都没有处理Business Request实例化,不是所有的业务操作需要Approve,另外实例化的麻烦是Request Form会和Domain Object看起来一样,已经处理了一个log对象,再处理一个request对象总是让人多少心里有点不爽;而页面处理需要抽取出变化的properties。

(原文发在http://www.blogjava.net/AndersLin/archive/2006/09/19/70643.html,不过business action自己也没想好,就不贴在论坛上了。一直在等partech的Domain Model驱动一章,不知道什么时候能出来)
用 SAP Business Application Studio 给 Custom Business Object 做一套真正可交付的 SAP Fiori 应用 摘要: SAP S/4HANA Cloud 的 Key User Extensibility 核心在于将业务对象扩展与 Fiori 应用开发结合。通过 Custom Business Objects 创建数据模型并生成 OData 服务,再使用 SAP Business Application Studio 开发定制化 UI,最终部署到 Fiori Launchpad。关键点包括:业务对象命名影响全链路(CDS、OData、前端绑定);权限需配置 SAP_CORE_BC_EXT_TST 等目录;BAS 需正 阅读详情

相关推荐

从 SAP Central Business Configuration 看懂 S/4HANA Cloud Public Edition 三系统配置体系

SAP S/4HANA Cloud Public Edition的三系统架构与传统On-Premise环境有本质区别,其核心是SAP Central Business Configuration(CBC)。CBC作为云端配置中枢,整合了范围选择、组织结构定义和配置管理,通过工作区(workspace)统一管理从SAP最佳实践到企业实际配置的转化过程。与传统分散配置不同,CBC实现了配置内容的全生命周期管理,确保在SAP持续升级背景下企业配置的可控性。该体系强调标准化流程与业务可配置性的平衡,要求项目团队严格

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1058

curl命令发送请求调用服务,参数无法获取解决办法

最近使用curl命令调用服务进行测试,命令如下 curl -H  'Content-Type: application/json' -d  '{"CHANCE_STATUS":"","GRP_ID":"","BUSI_REQ_CLASS":"","PAGE_NUM":1,"CREATE_NO":"","pageSize

蜗牛驿站 4126

从「道生一。一生二。二生三。三生万物」看 SAP RAP 开发,业务之道如何长成一个可演进的企业应用

摘要:SAP ABAP RAP开发中,业务对象设计应遵循"道生一,一生二,二生三,三生万物"的渐进原则。核心在于先确立稳定的业务语义根(道),再逐步展开数据模型(一)、行为模型(二)和服务层(三)。避免过早堆砌所有技术对象,而应从Root Entity开始,清晰分离数据结构与业务行为,最终形成可扩展的应用形态。这种分层架构确保业务语义在不同技术出口间保持稳定,是构建可持续企业应用的关键。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 781

Domain Model:Business Request的虚实之道与Business Action的设计模式

Domain Model:Business Request的虚实之道与Business Action的设计模式 Author:Anders小明 同步自:http://www.blogjava.net/AndersLin/archive/2006/09/19/70643.html 在《Domain Object:基于业务行为的分析》一文中,我提出在h...

weixin_30672019的博客 139

在 SAP BTP ABAP 环境中传输 Business User Groups 的完整实战指南

摘要:本文详细介绍了在SAP BTP ABAP环境中传输Business User Groups的最佳实践。作为企业权限体系的关键配置资产,Business User Groups需要遵循规范的变更管理流程。文章阐述了通过Customizing Transport机制实现分组配置从质量系统到生产系统的安全迁移,包括将分组加入传输请求、指定Software Component、释放请求等关键步骤。这种基于传输请求的管理方式能有效避免手工维护的风险,确保配置变更的可审计性和版本控制,特别适用于需要管理大量业务用

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 178

用 RAP Generator 生成并注册可传输的 Business Configuration Object,把建模、注册、发布和传输一次走通

文章摘要:本文探讨了在SAP BTP ABAP环境中如何替代传统的SM30配置维护方式,提出使用Business Configuration Object和RAP Generator构建云上配置维护方案。作者通过节假日日历配置案例,详细介绍了从数据库表设计、RAP BO建模到Fiori UI集成的完整链路,重点分析了RAP Generator如何通过JSON配置自动化生成样板代码,解决手工开发重复劳动问题。文章还强调了配置类表的关键属性设置和主键设计原则,为云环境下的配置管理提供了实用指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 526

JavaWeb request封装JavaBean工具类

利用反射机制写的一个工具类,只做了String Integer Float类的自动封装,其他类请自行添加,注释很全 有问题可以评论留言,大家一起讨论 调用实例 Business business = WebUtils.request2Bean(request,Business.class); WebUtils.java import com.neusoft.elm.entity.Business; import javax.servlet.http.HttpServletRequest; import

DBXXY的博客 425

把 Custom Business Configurations 推进到 strict mode 2,一次从 dump 到 bgPF 封装的完整落地

摘要:将RAP行为定义切换至strict(2)模式会强化运行时契约检查,导致业务配置保存时触发提交语句冲突。典型案例显示,当使用ABAP生成器创建的业务配置维护对象升级到strict(2)后,系统在记录变更到CTS请求时会抛出运行时错误。解决方案是将transport API调用封装到Background Processing Framework(bgPF)中异步执行,既保留标准功能又规避RAP行为上下文的提交限制。该方法通过修改save_modified()方法实现,将原同步记录逻辑替换为bgPF异步操作

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 702

Jmeter后置处理器之JSON Extractor使用

JSON Extractor的目的:用来提取json响应信息。 参数 1.Names of created variables :自定义参数名,可以在beanshell中引用 2.Json path expression:json表达式,能取到你的响应节点对应数据。(注意格式) 3.Match No.(0 for Random):0随机,1匹配所有,n表示匹配第几个(具体使用没有深究) 4.Def...

JR19951012的博客 328

等保: Postgresql配置ssl链接

等保: postgresql配置ssl链接完整方案和避坑指南

weixin_43557605的博客 4382

中孚保密检查系统彻底卸载指南:绕过口令与清除内核残留

中孚保密检查系统是深度集成于Windows内核的合规管控软件,其卸载涉及用户态口令校验、内核态服务引擎与Ring 0级驱动自保三重机制。理解其基于SHA-256哈希的本地口令验证原理和zfsysflt.sys过滤驱动的加载逻辑,是实现无残留清理的技术前提。该系统具备高权限驻留特性,常规卸载工具无法触达驱动与服务层,易引发蓝屏、启动缓慢及新安全软件冲突等工程问题。典型应用场景包括涉密终端批量清退、安全研究环境重建及误装后紧急退出。本文聚焦‘口令绕过+手动清理’双轨方案,覆盖注册表、服务、驱动、文件与计划任务五

weixin_33508411的博客 1029

fnd_request.submit_request 的用法

--submit the request 2      l_req_id_fee := fnd_request.submit_request('PO',--po模块 3                                                 'REQIMPORT', 4                                                 '', 

wangxiaoyan_1991的专栏 2097

如何把DeepSeek这个奈斯工具接入到Pycharm里

DeepSeek接入到Pycharm中,提高编程效率,以及帮助解决遇到的问题。

学无止境,何以言满 2623

Business Central(BC)是微软推出的基于云的企业资源规划(ERP)解决方案,其集成能力是其核心优势之一

Business Central(BC)是微软推出的基于云的企业资源规划(ERP)解决方案,其集成能力是其核心优势之一。Business Central integration 通常指将 BC 与外部系统(如 CRM、电商平台、财务系统、IoT 设备、Power Platform、Azure 服务或自定义应用)进行数据与流程的双向连接,以实现自动化、实时同步和端到端业务协同。

[Blog][Domain] programb.blog.youkuaiyun.com 617

Labview执行adbshell操作

一、目录 1、实现思路 2、adbshell工具配置 3、Labview执行命令窗口 1、实现思路 使用Labview的优点: 1、可以配合电源系统或者调用其他接口工具实现更高程度的自动化测试; 2、直接执行Linux相关命令,编写相关执行顺序或者逻辑更简易; --------可以用adbpush命令将.sh的脚本文件推入控制器内部执行; 3、Ubuntu系统比较大,如果只是日常执行脚本测试还是比较占用磁盘空间; 2、adbshell工具配置 1)下载adbshell工具; adbshell工具下载链

zataji的博客 2053

手把手教你学Simulink--基于Simulink的高增益DC-DC变换器仿真建模

特点高电压增益:可以在不使用变压器的情况下实现较大的电压升压比。适用于低电压源:如太阳能电池板、燃料电池等提供的低压直流电源。效率问题:设计时需特别注意提高效率,减少能量损失。挑战电路复杂性:通常涉及多个电感和电容,以及复杂的开关模式。元件选择:合适的元件参数对于达到理想性能至关重要。控制策略:确保高效稳定运行的同时,适应负载变化。首先明确要模拟的任务内容。实现特定的电压增益比(例如从24V升至380V)。根据预期的输入输出电压确定合适的电路拓扑和元件值。

MHD0815的博客 173

fnd_request

在包中调用子请求 1.提交请求fnd_request.submit_request 返回number型值 l_request_id NUMBER; l_request_id :=fnd_request.submit_request(application CHAR, --AP模块 program CHAR, --应用程序 description CH...

asd132qwe1321的专栏 364

[低代码 + AI] 明道云与 Dify 的三种融合实践方式详解

融合方式技术路径优点局限或注意事项UI 嵌入iframe 表单嵌入快速集成、用户体验一致无法自定义交互逻辑明道云调用 DifyAPI 请求节点工作流自动化、逻辑灵活有 timeout 限制、需优化 promptDify 调用明道云插件或 API 调用节点可查询实际业务数据、增强 AI 智能需理解明道云 API 结构、权限设置复杂明道云与 Dify 的结合为低代码平台注入了智能动力。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1187

SAP Fiori中Business Catalog引用机制详解与实践指南

在SAP Fiori架构中,Business Catalog作为应用导航的核心组件,通过引用机制实现跨业务角色的应用共享。该技术基于逻辑容器概念,采用元数据映射原理,可显著降低系统冗余数据量。从技术实现看,其依赖PFCG角色授权和OData服务调用,通过Target Mapping机制解析应用访问权限。典型应用场景包括多角色共享审批流程、跨国企业本地化目录管理等。结合SAP Fiori Launchpad设计器,开发者可配置Full/Partial引用类型,并利用动态继承模式实现业务目录的灵活管理。热词分析

weixin_34414650的博客 438

电子电器架构 --- OEM企标中规定ECU启动时间的目的

电子电器架构 --- OEM企标中规定ECU启动时间的目的

Soly_kun的博客 223

nuScenes数据集详细介绍

nuScenes网上介绍资料较多,但是大部分仅仅是对官网的翻译,缺乏各个文件的内在联系介绍。例如,nuScenes激光雷达的数据格式,点云包含哪几种属性。再比如,sample文件夹和sweeps文件夹下的文件关系,以及是如何在相关json文件中体现的。本文将详细介绍nuScenes数据集的各个部分。

叶子的博客 1万+

GitHub Copilot Business:企业级AI编码治理平台实战指南

AI编码助手已从个人效率工具演进为组织级基础设施,其核心挑战在于安全合规、策略可控与工作流融合。GitHub Copilot Business并非简单接入Claude的渠道,而是基于统一Agent Control Plane构建的企业级AI治理框架,通过Repository Instructions实现策略注入、跨终端上下文继承与审计日志沉淀,天然适配等保、PCI DSS、GDPR等合规要求。它解决的是模型调用背后的权限治理、数据边界与协作一致性问题,尤其适用于中大型技术团队在VS Code、GitHub

weixin_30522183的博客 314

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

EBS中FND_REQUEST.SUBMIT_REQUEST的一点介绍

学习PO的时候,遇到一个Quotation Import的问题,然后在程式中看到以下部分,特记录下来。 1: 2: l_request_id := fnd_request.submit_request('XAO', 3: 'XXAOIPO_R0007A', ...

weixin_30925411的博客 349

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

request,js

【代码】request,js。

weixin_45655721的博客 369

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: Domain Model:Business Request的虚实之道与Business Action的设计模式
下一篇: Domain Model:业务对象的进一步设计
林仪明
博客等级 码龄25年 313粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值