框架如何加载xml binding文件

本文介绍如何在XML配置环境中加载Schema、Type Binding及Message Binding,并详细解析了如何将这些配置信息转化为具体的XML请求,包括参数、过滤器等元素的组装过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

1.       如何装载Schema

unction loadSchemas() {

         var schemaNodes = configRoot.getElementsByTagName("schema");//就是load  tp5000.xsd

         for(var i = 0, len = schemaNodes.length; i < len; i++)   {

            var schemaElement = schemaNodes.item(i);           

            var schemaURL = schemaElement.getAttribute("uri");//主要就是搞URI

            var id = schemaElement.getAttribute("id");

            //var objSchema = XSDUtil.loadSchema(schemaURL);

            var objSchema = null;

            if(system)  {

               objSchema = system.getPDPSchema(id);

            }else {

               objSchema = XSDUtil.loadSchema(schemaURL);//最后读取整个xsd文件

            }

            schemaMap.put(id, objSchema);//id = tp5000,objschema估计是个xml tree的文档对象

         } // for

         return schemaMap;

      };

2.       如何装在typebinding

这里会有一个actionParam,一般定义为cliUserRowStatus

 

3.       如何装在messagebinding

1)     装在message-bingdings tag标签

例如

function loadMessageBindings()  {

         var nodeSet = configRoot.getElementsByTagName("message-bindings");

         if(nodeSet.length > 0)  {

            var messageBindingsElem = nodeSet.item(0);

            var bindingNodes = messageBindingsElem.getElementsByTagName("binding");

2)     然后load binding标签,生成一个bindCollection类

3)     Load bind标签,

var bindings = bindingElem.getElementsByTagName("bind");

                 

                  for(var j = 0, l = bindings.length; j < l; j++)   {

                     var bindElem = bindings.item(j);

                     var bindId = bindElem.getAttribute("id");

                     var nm = bindElem.getAttribute("name");

                     var input = bindElem.getAttribute("input");

                     var output = bindElem.getAttribute("output");

                     var filter = bindElem.getAttribute("filterType");

                     var filterValue = bindElem.getAttribute("value");

                    

                     // add this mesage binding to binding collection

                     var messageBinding =

                           new MessageBinding(bindId, nm, input, output, filter, filterValue);

                     bindCollection.addMessageBinding(messageBinding);

根据结果,bindCollection中增加

4)     最后messageBindings.put(name, bindCollection);

 

   如何组装成一个xmlrequest

DALBindingHelper.createNpXmlRequest = function

      (strType, msgBindingId, objBindingHelper, objDataMap) {

 

//objDataMap一般是formModel.getFieldDataAsMap(),就是得到一个mapkey=id value就是fieldvalue.这个value//能是“”,就是空字符

   var bHelper = objBindingHelper;

   var moduleSchemas = bHelper.getBindingSchemas();

 

  //获取一个Messagebinding的子项,比如modifyget等等

   var msgBindingColn = bHelper.getMessageBindingCollection(msgBindingId);

  

   var incRule = null;

   try   {

     incRule = bHelper.getInclusionRule(msgBindingId);

    

     if(incRule && incRule.execute)   {

        objDataMap = incRule.execute(objDataMap);

     }

   }catch(exp) {

      logError("DALBindingHelper.createNpXmlRequest():" + getObjectAsCSV(exp));

   }

  

   var arrNpRequests = new Array();

   var mapNpRequests = new Map();

  

   var arrBindIds = objDataMap.keys();

  

   Assert.notNull(msgBindingColn, npEval("DALBindingHelper.createNpXmlRequest():"

         + " Message binding collection not found: ") + msgBindingId);

        

   //循环处理各个field,组装成一个一个的NpRequst

   for(var i = 0, len = arrBindIds.length; i < len; i++)   {

      var bindId = arrBindIds[i];

      var bindValue = objDataMap.get(bindId) || "";

     

      var typeBinding = bHelper.getTypeBinding(bindId);

      var msgBinding = msgBindingColn.getMessageBinding(bindId);

     

      if(msgBinding == null)  {

         // TODO: Log this message

         //alert("Message binding not found for: " + bindId);

         continue;        

      }

     

      var schema = typeBinding.getSchema();

      var moduleName = TypeBinding.getModuleForSchema(schema) || "";

      var schemaElemName = typeBinding.getElementName() || "";

      var actionParam = msgBindingColn.getActionParam();

     

      var npRequest = mapNpRequests.get(moduleName);

     

      // create if not already present.

      if(! npRequest)   {

         if(! actionParam)   {

            actionParam = typeBinding.getActionParam();

         }        

         actionParam = (moduleName + "_" + actionParam).toUpperCase();

        

         var action = msgBindingColn.getAction();

         npRequest = new NPRequest(strType, null, moduleName, actionParam, action);

         mapNpRequests.put(moduleName, npRequest);

      }

     

      var paramId = moduleName.toUpperCase() + "_" + schemaElemName.toUpperCase();

      var paramName = msgBinding.getName();

      var strOutputBinding = msgBinding.getOutputBinding().toUpperCase();

     

      var bPopulate = false;

      if(strType == NPRequest.TYPE_SET) {

         bPopulate = true;

      }

     

      var paramValue = bPopulate == true ? ((bindValue == null) ? "" : bindValue) : "";

     

      //alert("- " + bPopulate + " - " + paramValue);

     

      if(strOutputBinding.indexOf("PARAMETER") != -1) {

         var parameter = new Parameter(paramId, paramName, paramValue);

//设置NPRequst的属性

         npRequest.addParameterObject(parameter);

      }

     

      if(strOutputBinding.indexOf("FILTER") != -1) {

         var filterType = msgBinding.getFilterType();

         var filter = new Filter(paramId, filterType, bindValue);

         npRequest.addFilterObject(filter);

      }

     

      // IDEA: Binding for action param could be done specific request and

      // not in the type binding, that way action pram could be bound dynamically

      if(strOutputBinding.indexOf("ACTION") != -1) {

         npRequest.setAction(bindValue);

      }

     

   }// for

   //最后把mapNpRequst.values展开成xml即可

   return DalUtil.createXmlRequest(mapNpRequests.values());

};

 

 

 

下面看看如何组装NPXMLRequst

NPXMLRequest有下面的方法,其中arrRequests中都是NPReuqst的类。关注它的toXml方法()

  /**

       * Converts this object to Xml

       */

      function toXml()  {

         // var npXmlRequest = DataManager.asDomDocument("<NPXMLRequest />").documentElement;

         var npXmlRequest = loadXmlString("<NPXMLRequest />").documentElement;

        

         if(contextInfo)   {

            npXmlRequest.setAttribute("contextInfo", contextInfo);

         }

         for(var i = 0, len = arrRequests.length; i < len; i++)   {

            var npRequest = arrRequests[i].toXml();

            npXmlRequest.appendChild(npRequest.documentElement);

         }

         return npXmlRequest;

      }

 

 

NPRequst的方法

function toXml()  {

         // var reqDoc = DataManager.asDomDocument("<NPRequest />");

         var reqDoc = loadXmlString("<NPRequest />");

         var reqElem = reqDoc.documentElement;

        

         // set the request attriutes

         reqElem.setAttribute("type", type);

         reqElem.setAttribute("requestId", id);

         reqElem.setAttribute("module", module);

         reqElem.setAttribute("actionParam", actionParam);

         if(action)  {

            reqElem.setAttribute("action", action);

         }

        

         // add parameters if any

         if(! parameters.isEmpty()) {

            var npParams = reqDoc.createElement("NPParameters");//在这里创建子Node NPParameters

            var paramArray = parameters.values();

            for(var i = 0, len = paramArray.length; i < len; i++) {

               var xmlParam = paramArray[i].toXml(reqDoc);//NPParameters里面加入NPPrarmeter

               npParams.appendChild(xmlParam);

            }

            reqElem.appendChild(npParams);

         }

        

         // add filters if any

         if(! filters.isEmpty() || filterGroup) {

            var npFilters = reqDoc.createElement("NPFilters");

            var filterArray = filters.values();

            for(var i = 0, len = filterArray.length; i < len; i++)   {

               // this could be a filter or filterGroup.

               var xmlFilter = filterArray[i].toXml(reqDoc);

               npFilters.appendChild(xmlFilter);

            }

            reqElem.appendChild(npFilters);

           

            if(filterGroup)   {

               var xmlFilterGroup = filterGroup.toXml();

               npFilters.appendChild(xmlFilterGroup);

            }

         }

        

         return reqDoc;

      }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值