La eficiencia operativa y la experiencia del cliente son cruciales para el éxito en el comercio electrónico. Para las empresas que buscan optimizar sus procesos y ofrecer una experiencia de compra fluida, la API de Workflow de SAP Commerce es una herramienta valiosa. Exploremos cómo esta solución puede transformar la gestión de procesos y mejorar la eficiencia, ayudando a los tomadores de decisiones a entender su valor e implementación. ¿Qué es la API de Workflow de SAP Commerce? La API de Workflow en SAP Commerce Cloud automatiza flujos de trabajo complejos, desde la definición de plantillas hasta la generación de instancias de workflow en tiempo real. Es ideal para negocios con operaciones regulares que requieren tanto interacciones humanas como tareas automatizadas, asegurando consistencia y eficiencia en cada paso. Beneficios para los Tomadores de Decisiones Automatización de Procesos La automatización reduce los errores humanos y acelera las operaciones. La API de Workflow permite que actividades como la creación y revisión de precios de productos, llamadas a servicios web y validaciones sean automatizadas, liberando a los equipos para que se concentren en tareas estratégicas. Flexibilidad y Control La personalización de workflows para satisfacer las necesidades específicas del negocio proporciona un control operativo sin precedentes. Cada paso, desde la creación del producto hasta su disponibilidad en el mercado, puede ser orquestado con precisión. Integración y Escalabilidad Accesible a través de código Java o interfaces REST/SOAP, la API se integra fácilmente con otros sistemas. Esto es crucial para las empresas que buscan escalabilidad e integración fluida entre diferentes plataformas. Caso de Uso: Transformando la Experiencia de Compra Considere un escenario en el que la creación, revisión y validación de precios de productos estén completamente automatizadas. Esto no solo acelera el tiempo de lanzamiento al mercado, sino que también garantiza que los precios estén siempre actualizados y aprobados, mejorando la satisfacción del cliente. Creación del Precio del ProductoResponsable: Usuario CreadorAcción: Definir el precio inicial del producto. Revisión del PrecioResponsable: Usuario AprobadorAcción: Revisar y aprobar el precio definido. Llamada a Servicio WebResponsable: Sistema AutomatizadoAcción: Enviar datos a un servicio web externo. Validación FinalResponsable: Administrador del WorkflowAcción: Validar y finalizar el precio del producto. Implementación de la API de Workflow Para empezar, cree plantillas de workflow, defina acciones y decisiones, y finalmente instancie e inicie el workflow. Usando scripts Groovy, los desarrolladores pueden automatizar y personalizar fácilmente estos procesos. import de.hybris.platform.workflow.model.WorkflowTemplateModel; import de.hybris.platform.workflow.model.WorkflowActionTemplateModel; import de.hybris.platform.workflow.enums.WorkflowActionType; import de.hybris.platform.workflow.model.WorkflowDecisionTemplateModel; import de.hybris.platform.workflow.model.AutomatedWorkflowActionTemplateModel; import de.hybris.platform.workflow.model.WorkflowModel; import de.hybris.platform.workflow.model.WorkflowItemAttachmentModel; import de.hybris.platform.core.model.product.ProductModel; import java.util.Locale; import java.util.ArrayList; import java.util.List; import de.hybris.platform.core.model.ItemModel; import java.util.Collection; import java.util.Collections; modelService = spring.getBean(‘modelService’); userService = spring.getBean(‘userService’); productService = spring.getBean(‘productService’); catalogVersionService = spring.getBean(‘catalogVersionService’) workflowService = spring.getBean(‘workflowService’); workflowTemplateService = spring.getBean(‘workflowTemplateService’); workflowProcessingService = spring.getBean(‘workflowProcessingService’); newestWorkflowService = spring.getBean(‘newestWorkflowService’); workflowTemplateCode = «productPriceWorkflowTemplate»; workflowTemplateName = «product price workflow template»; //action code | action name | action user | action type | jobHandler ACTION_PLAN = «»» createProductPriceAction|create product price|creatorUser1|START createProductPriceReviewAction|create product price review|approverUser1|NORMAL makeWebserviceCallForPriceAction|make webservice call for price|workflowAdminUser1|NORMAL|shopzoneAutomatedWorkflowAction createProductPriceSignOffAction|create product price sign off|workflowAdminUser1|END «»»; //decision code | decision name | origin action for this decision DECISION_PLAN = «»» productPriceCompletedDecision|product price completed|createProductPriceAction productPriceApprovedDecision|product price approved|createProductPriceReviewAction productPriceRejectedDecision|product price rejected|createProductPriceReviewAction webservicesCallSuccessDecision|webservice call success|makeWebserviceCallForPriceAction webservicesCallFailureDecision|webservice call failure|makeWebserviceCallForPriceAction «»»; //decision code | target next action for this decision WORKFLOW_LINK = «»» productPriceCompletedDecision|createProductPriceReviewAction productPriceApprovedDecision|makeWebserviceCallForPriceAction productPriceRejectedDecision|createProductPriceAction webservicesCallSuccessDecision|createProductPriceSignOffAction webservicesCallFailureDecision|createProductPriceReviewAction «»»; prepareWorkflow(ACTION_PLAN,DECISION_PLAN,WORKFLOW_LINK); def prepareWorkflow(ACTION_PLAN,DECISION_PLAN,WORKFLOW_LINK) { WorkflowTemplateModel workflowTemplate = createWorkflowTemplate(workflowTemplateCode,workflowTemplateName); List workflowActionTemplateList = createWorkflowActions(workflowTemplate, ACTION_PLAN); List workflowDecisionTemplateList = createWorkflowDecisions(DECISION_PLAN); createWorkflowInstance(); } def createWorkflowTemplate(workflowTemplateCode,workflowTemplateName) { WorkflowTemplateModel workflowTemplate = modelService.create(WorkflowTemplateModel.class); workflowTemplate.setOwner(userService.getUserForUID(«admin»)); workflowTemplate.setCode(workflowTemplateCode); workflowTemplate.setName(workflowTemplateName, Locale.ENGLISH); modelService.save(workflowTemplate); return workflowTemplate; } def createWorkflowActions(workflowTemplate, ACTION_PLAN) { //action code | action name | action user | action type | jobHandler //create list of WorkflowActionTemplateModel workflowActionTemplateList = []; def actions = ACTION_PLAN.split(«n»); for (String action : actions) { //if action is not blank if(action.isBlank()) { continue; } def actionDetails = action.split(«\|»); workflowActionTemplate = null; if(actionDetails.length > 4 && actionDetails[4] != null && !actionDetails[4].isBlank()) { workflowActionTemplate = modelService.create(AutomatedWorkflowActionTemplateModel.class); } else { workflowActionTemplate = modelService.create(WorkflowActionTemplateModel.class); } workflowActionTemplate.setOwner(userService.getUserForUID(«admin»)); workflowActionTemplate.setCode(actionDetails[0].trim()); workflowActionTemplate.setName(actionDetails[1], Locale.ENGLISH); workflowActionTemplate.setPrincipalAssigned(userService.getUserForUID(actionDetails[2])); workflowActionTemplate.setActionType(WorkflowActionType.valueOf(actionDetails[3])); workflowActionTemplate.setWorkflow(workflowTemplate); //actionDetails[3] is not blanck then set jobHandler if(actionDetails.length > 4 && actionDetails[4] != null && !actionDetails[4].isBlank()) { workflowActionTemplate.setJobHandler(actionDetails[4]); } modelService.save(workflowActionTemplate); workflowActionTemplateList.add(workflowActionTemplate); } return workflowActionTemplateList; } def createWorkflowDecisions(DECISION_PLAN) { //decision code | decision name | origin action for this decision //create list of WorkflowDecisionTemplateModel List workflowDecisionTemplateList = new ArrayList(); def decisions = DECISION_PLAN.split(«n»); for (String decision : decisions) { if(decision.isBlank()) { continue; } def decisionDetails = decision.split(«\|»); WorkflowDecisionTemplateModel workflowDecisionTemplate = modelService.create(WorkflowDecisionTemplateModel.class); workflowDecisionTemplate.setOwner(userService.getUserForUID(«admin»)); workflowDecisionTemplate.setCode(decisionDetails[0].trim()); workflowDecisionTemplate.setName(decisionDetails[1], Locale.ENGLISH); println decisionDetails[0]+’ source action > ‘+decisionDetails[2]; workflowDecisionTemplate.setActionTemplate(workflowActionTemplateList.find { it.code == decisionDetails[2] }); def targetActionModels = findAllTargetActionsForDecision(decisionDetails[0]); workflowDecisionTemplate.setToTemplateActions(targetActionModels); modelService.save(workflowDecisionTemplate); workflowDecisionTemplateList.add(workflowDecisionTemplate); } return workflowDecisionTemplateList; } def findAllTargetActionsForDecision(decisionCode) { //decision code | target next action for this decision def links = WORKFLOW_LINK.split(«n»); def targetActions = new ArrayList(); for (String link : links) { def linkDetails = link.split(«\|»); if(linkDetails[0] == decisionCode) { targetActions.add(linkDetails[1]); } } def targetActionModels = []; targetActionModels = targetActions.collect { targetAction -> WorkflowActionTemplateModel foundModel = workflowActionTemplateList.find { it.getCode() == targetAction } if (foundModel == null) { throw new RuntimeException(«No model found with the code: ${targetAction}») } return foundModel } targetActionModels.removeAll([null]); return targetActionModels; } def createWorkflowInstance() { WorkflowTemplateModel workflowTemplate = workflowTemplateService.getWorkflowTemplateForCode(workflowTemplateCode); catalog = catalogVersionService.getCatalogVersion(‘apparelProductCatalog’, ‘Online’); ProductModel product = productService.getProduct(catalog,»300618506″); WorkflowModel workflow = newestWorkflowService.createWorkflow(«prodPriceWorkEx1»,workflowTemplate, Collections. singletonList(product),userService.getUserForUID(«admin»)); workflowProcessingService.startWorkflow(workflow); } La API de Workflow de SAP Commerce es una herramienta poderosa para las empresas que buscan optimizar operaciones y proporcionar una experiencia de compra integrada y eficiente. Al automatizar procesos complejos y asegurar la consistencia en cada etapa, esta solución es esencial para los líderes empresariales que desean mantener una ventaja competitiva en el mercado digital. Sobre Digiu Digital Digiu Digital se especializa en transformación digital y comercio electrónico, con amplia experiencia en soluciones SAP Customer Experience. Ofrecemos soporte 24/7 y un equipo de expertos globales para asegurar que su negocio se mantenga a la vanguardia.