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);
如何组装成一个xml的request
DALBindingHelper.createNpXmlRequest = function
(strType, msgBindingId, objBindingHelper, objDataMap) {
//objDataMap一般是formModel.getFieldDataAsMap(),就是得到一个map,key=id value就是field的value.这个value可//能是“”,就是空字符
var bHelper = objBindingHelper;
var moduleSchemas = bHelper.getBindingSchemas();
//获取一个Messagebinding的子项,比如modify,get等等
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;
}