Microsoft Dynamics CRM 2011 Javascript lookup 过滤视图 方法
Posted on 2013-01-31 22:54 Hamilton Tan 阅读(375) 评论(0) 收藏 举报/*获取查找类型字段值的对象(适用于表单)
如:var entityReferent=getEntityReferenceObject(accountid,"account","CRM客户");
*/
function getEntityReferenceObject(id, entityType, name) {
var lookupReference = [];
lookupReference[0] = {};
lookupReference[0].id = id;
lookupReference[0].entityType = entityType;
lookupReference[0].name = name;
return lookupReference;
}
/*根据ODATA参数查询指定实体(entityName)的多条记录
如:var select=name,accountnumber; var filter=statecode/Value eq 0; var orderby=accountid; var expand=""; var top=2; var skip=2;
var resultObject=retrieveMultipleEntity(ODataPath,"Account", select, filter, orderby, expand, top, skip);
var retrieved = resultObject.response;
var statusText = resultObject.statusText;
*/
function retrieveMultipleEntity(ODataPath, entitySchemaName, select, filter, orderby, expand, top, skip) {
var retrieveParams = "";
if (typeof (select) != "undefined" && select != null && select != "") {
retrieveParams = retrieveParams + "&$select=" + select;
}
if (typeof (filter) != "undefined" && filter != null && filter != "") {
retrieveParams = retrieveParams + "&$filter=" + filter;
}
if (typeof (orderby) != "undefined" && orderby != null && orderby != "") {
retrieveParams = retrieveParams + "&$orderby=" + orderby;
}
if (typeof (expand) != "undefined" && expand != null && expand != "") {
retrieveParams = retrieveParams + "&$expand=" + expand;
}
if (typeof (top) != "undefined" && top != null && top != "") {
retrieveParams = retrieveParams + "&$top=" + top;
}
if (typeof (skip) != "undefined" && skip != null && skip != "") {
retrieveParams = retrieveParams + "&$skip=" + skip;
}
if (retrieveParams != "" && retrieveParams != null) {
retrieveParams = retrieveParams.substring(1, retrieveParams.length);
}
var retrieveReq = new XMLHttpRequest();
retrieveReq.open("GET", ODataPath + "/XRMServices/2011/OrganizationData.svc/" + entitySchemaName + "Set?" + retrieveParams, false);
retrieveReq.setRequestHeader("Accept", "application/json");
retrieveReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
retrieveReq.send();
var resultObject = new Object();
resultObject.statusText = null;
resultObject.response = null;
if (retrieveReq.statusText == "OK") { //OK为查询成功,否则查询异常
resultObject.statusText = "OK";
resultObject.response = JSON.parse(retrieveReq.responseText).d;
} else {
resultObject.response = retrieveReq.responseText;
}
return resultObject;
}
/*修改Lookup选择窗口的URL参数的值 begin*/
//禁用选择视图功能:document.getElementById("LookupFieldName").setAttribute("disableViewPicker", "1");
function modifiedLookupParameter(fieldName, parameterName, parameterValue) {
document.getElementById(fieldName).setAttribute(parameterName, parameterValue);
}
/*
描述:过滤发货部品代码的view
三种情况:
1.部品更换单明细窗体上,
发货部品代码等于退货部品代码
2.部品更换单明细窗体上的发货部品代码等于退货部品代码的替换
部品代码
具体:a.如果部品更换单明细窗体上的退货部品代码等于部品替换表窗体上的部品代码,
则部品更换单明细窗体上的发货部品代码等于部品替换表窗体上的替代部品的部品代码。
b.如果部品更换单明细窗体上的退货部品代码等于部品替换表窗体上的替代部品的部品代码
,则部品更换单明细窗体上的发货部品代码等于部品替换表窗体上的部品代码。
日期:2013年1月31日
作者:
*/
function addCustomShipSysMaterialView() {
var returnssysmaterialid = Xrm.Page.getAttribute("new_returns_sys_materialid"); //退货部品代码
var shipsysmaterial = Xrm.Page.getAttribute("new_ship_sys_material"); //发货部品代码
var serverUrl = Xrm.Page.context.getServerUrl(); //获取路径
var entityName = "new_sys_material";
var retrieveResult =
retrieveMultipleEntity(serverUrl,
"new_sys_fittings_replace",
"new_fittingsid,new_fittings_replaceid",
"new_fittingsid/Id eq (guid'" + returnssysmaterialid.getValue()[0].id + "') or new_fittings_replaceid/Id eq (guid'" + returnssysmaterialid.getValue()[0].id + "') and statecode/Value eq 0",
"", "", "", "");
if (retrieveResult == null || retrieveResult.statusText != "OK") {
alert("查询失败" + "(" + retrieveResult.response + ")");
return;
}
var new_fittings_arr = "";
new_fittings_arr = retrieveResult.response.results;
//如果没有查到数据,那么直接把退货部品代码的值赋给发货部品代码
if (new_fittings_arr.length == 0) {
if (returnssysmaterialid != undefined && returnssysmaterialid != "") {
var entityReference = getEntityReferenceObject(returnssysmaterialid.getValue()[0].id, entityName, returnssysmaterialid.getValue()[0].Name);
shipsysmaterial.setValue(entityReference);
}
}
var viewId = "{00000000-0000-0000-0000-000000000001}";
var viewDisplayName = "filter";
var lookupControl = Xrm.Page.getControl("new_ship_sys_material");
var fetchXml =
" <fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'> " +
" <entity name='new_sys_material'> " +
" <attribute name='new_material_code' /> " +
" <attribute name='new_material_type' /> " +
" <attribute name='new_material_name' /> " +
" <attribute name='new_sys_materialid' /> " +
" <attribute name='createdon' /> " +
" <order attribute='new_material_code' descending='false' /> " +
" <filter type='and'> " +
" <condition attribute='statecode' operator='eq' value='0' /> " +
" </filter> " +
" <link-entity name='new_sys_fittings_replace' from='new_fittingsid' to='new_sys_materialid' alias='aa'> " +
" <filter type='and'> " +
" <filter type='or'> ";
for (var i = 0; i < new_fittings_arr.length; i++) {
fetchXml +=
" <condition attribute='new_fittingsid' operator='eq' uiname='" + new_fittings_arr[i].new_fittingsid.Name + "' uitype='new_sys_material' value='" + new_fittings_arr[i].new_fittingsid.Id + "' /> " +
" <condition attribute='new_fittings_replaceid' operator='in'> " +
" <value uiname='" + new_fittings_arr[i].new_fittings_replaceid.Name + "' uitype='new_sys_material'>" + new_fittings_arr[i].new_fittings_replaceid.Id + "</value> " +
" </condition>";
}
fetchXml +=
" </filter> " +
" </filter> " +
" </link-entity> " +
" </entity> " +
" </fetch> ";
var layoutXml =
"<grid name='resultset' " +
"object='1' " +
"jump='name' " +
"select='1' " +
"icon='1' " +
"preview='1'>" +
"<row name='result' " +
"id='new_sys_materialid'>" +
"<cell name='new_material_code' " +
"width='100' />" +
"<cell name='new_material_name' " +
"width='100' />" +
"</row>" +
"</grid>";
lookupControl.addCustomView(viewId, entityName, viewDisplayName, fetchXml, layoutXml, false);
modifiedLookupParameter("new_ship_sys_material", "DisableViewPicker", "1");
lookupControl.setDefaultView(viewId);
}
/*
描述:部品更换单明细窗体上的 选择退料部品按钮
在更换单明细中选择退料单,过滤条件为与更换单网点关联的新件不良换货类型的、
并且已更换数量小于收货数量的退料单。
自动带出退货部品代码、退货部品SN号、单价。
日期:2013年1月30日
作者:tanhua
*/
function ReturninfoSelect() {
var materialid = Xrm.Page.getAttribute("new_returns_sys_materialid"); //退货部品代码
var snnum = Xrm.Page.getAttribute("new_return_snnum"); //退货部品S/N号
var price = Xrm.Page.getAttribute("new_price"); //单价
var url = "/ISV/Sharp_BatchSelect/ReturnpartsSelect.aspx";
var dialoghw = "dialogheight=455px;dialogwidth=500px;status=yes;scroll=no";
var returnValue = window.showModalDialog(url, null, dialoghw);
if (returnValue != null && typeof (returnValue) != undefined) {
var ls = returnValue.split('%');
var entityReference = getEntityReferenceObject(ls[0], "new_sys_material", ls[1])
materialid.setValue(entityReference);
snnum.setValue(ls[2]);
price.setValue(parseInt(ls[3]));
}
}
在pageOnload 里面加下这两个方法 就可以了。
addCustomShipSysMaterialView();
modifiedLookupParameter("new_ship_sys_material", "disableViewPicker", "1");
浙公网安备 33010602011771号