BizModel中的服务方法可以通过NopGraphQL引擎对外暴露为服务函数,可以通过GraphQL、REST和gRPC等多种方式调用BizModel上的方法。
有的时候在后台集成使用的时候,可能会希望跳过NopGraphQL引擎,直接触发BizModel上的方法,比如说在Spring的工作流步骤中触发。
Nop平台提供了BizActionInvoker这个帮助类,通过它上面的方法来直接调用BizModel。
| public class BizActionInvoker {
 
 
 
 
 
 
 
 
 public static Object invokeActionSync(String bizObjName, String bizAction, Object request,
 FieldSelectionBean selection, IServiceContext context) {
 IBizObjectManager bizObjectManager = BeanContainer.getBeanByType(IBizObjectManager.class);
 IBizObject bizObject = bizObjectManager.getBizObject(bizObjName);
 GraphQLOperationType opType = bizObject.getOperationType(bizAction);
 IOrmTemplate ormTemplate = BeanContainer.getBeanByType(IOrmTemplate.class);
 ITransactionTemplate txnTemplate = BeanContainer.getBeanByType(ITransactionTemplate.class);
 
 return ormTemplate.runInSession(session -> {
 if (opType == GraphQLOperationType.query) {
 Object ret = bizObject.invoke(bizAction, request, selection, context);
 return FutureHelper.getResult(ret);
 } else {
 
 return txnTemplate.runInTransaction(null, TransactionPropagation.REQUIRED, txn -> {
 Object ret = bizObject.invoke(bizAction, request, selection, context);
 return FutureHelper.getResult(ret);
 });
 }
 });
 }
 
 
 
 
 public static ApiResponse<?> invokeGraphQLSync(String bizObjName, String bizAction,
 ApiRequest<?> request) {
 IGraphQLEngine graphQLEngine = BeanContainer.getBeanByType(IGraphQLEngine.class);
 IGraphQLExecutionContext gqlCtx = graphQLEngine.newRpcContext(null, bizObjName, request);
 return graphQLEngine.executeRpc(gqlCtx);
 }
 }
 
 | 
- invokeActionSync调用会直接触发BizObject上的action,它会转化为对BizModel上方法的调用。这种调用方式与GraphQL调用的区别在于不会对返回结果执行GraphQL Selection处理。