0

我们制作了一个系统,以便根据用户指定的“获取 XML”来处理记录列表。(简单的 FetchXml 字段)

为了方便起见,我们想做一个漂亮的 UI 来编辑“Fetch XML”。

我们看到了这个解决方案——但它适用于 CRM 4。

CRM 2011 有什么类似的吗?

4

3 回答 3

1
// JavaScript source code
function SearchCustomers() {

    var params = '';   

    var fullname = Xrm.Page.getAttribute("fullname").getValue();
    if (fullname != null) {
        params += "fullname" + GetParam(fullname);        
    }    
    var IFrame = Xrm.Page.ui.controls.get("IFRAME_advancedfind");

    var url = getServerUrl() + "/WebResources/new_advancedfind.htm?Data=" + params;
    IFrame.setSrc(url);
}

function GetParam(data) {
    return "%3D" + encodeURIComponent(data) + "%26";
}
function getServerUrl() {
    //var context = GetGlobalContext();
    //var serverUrl = context.getClientUrl();
    var serverUrl = window.location.protocol + "//" + window.location.host + "/" + Xrm.Page.context.getOrgUniqueName();
    if (serverUrl.match(/\/$/)) {
        serverUrl = serverUrl.substring(0, serverUrl.length - 1);
    }
    return serverUrl;
}

// new_advancedfind.htm 网络资源

<HTML><HEAD><TITLE></TITLE>
<SCRIPT type=text/javascript src="ClientGlobalContext.js.aspx"></SCRIPT>
<SCRIPT type=text/javascript>    

    function submitForm() {

        var fullname = "";
        var vals = getDataParam();
        fullname = GetParam(vals, 'fullname');

        var filter = '<filter type="and"> <condition attribute="fullname" value="%' + fullname + '%" operator="like"/> <condition attribute="statecode" value="0" operator="eq"/> </filter>';
        var fetch = '<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false"><entity name="contact"><attribute name="fullname"/><attribute name="telephone1"/><attribute name="contactid"/><order attribute="fullname" descending="false"/>' + filter + '</entity></fetch>';
        var form = document.getElementById("AdvancedFind");

        form.action = getServerUrl() + '/AdvancedFind/fetchData.aspx';
        form.LayoutXml.value = '<grid name="resultset" object="2" jump="lastname" select="1" icon="1" preview="1"><row name="result" id="contactid"><cell name="fullname" width="300" /><cell name="telephone1" width="125" /></row></grid>';

        form.FetchXml.value = fetch;
        form.submit();
    }
function getServerUrl() {
    //var context = GetGlobalContext();
    //var serverUrl = context.getClientUrl();
    var serverUrl = window.location.protocol + "//" + window.location.host + "/" + Xrm.Page.context.getOrgUniqueName();
    if (serverUrl.match(/\/$/)) {
        serverUrl = serverUrl.substring(0, serverUrl.length - 1);
    }
    return serverUrl;
}
function getDataParam() {

    //Get the any query string parameters and load them
    //into the vals array
    var RetVals = new Array();
    var vals = new Array();
    if (location.search != "") {
        vals = location.search.substr(1).split("&");
        for (var prmCounter = 0; prmCounter < vals.length; prmCounter++) {
            vals[prmCounter] = vals[prmCounter].replace(/\+/g, " ").split("=");
        }
        //look for the parameter named 'data'
        var found = false;
        for (var _prmCounter = 0; _prmCounter < vals.length; _prmCounter++) {
            if (vals[_prmCounter][0].toLowerCase() == "data") {
                RetVals = parseDataValue(vals[_prmCounter][1]);
            }
        }

    }
    return RetVals;
}

function parseDataValue(datavalue) {
    if (datavalue != "") {
        return decodeURIComponent(datavalue).split("&");
    }
}
function GetParam(vals, attribute) {
    var val = '';
    var found = false;
    for (i = 0; i < vals.length && !found; i++) {
        if (vals[i].indexOf(attribute) > -1) {
            val = vals[i].split('=')[1];
            found = true;
            break;
        }
    }
    return val;
}
</SCRIPT>
<META charset=utf-8></HEAD>
<BODY onload=submitForm()>
<FORM id="AdvancedFind" method="post" action="">
<INPUT name=FetchXml type=hidden> 
<INPUT name=LayoutXml type=hidden> 
<INPUT name=EntityName value=contact type=hidden> 
    <!--Replace DefaultAdvFindViewId valu to contact's default advanced find view Guid-->
<INPUT name=DefaultAdvFindViewId value={00000000-0000-0000-00AA-000000666400} type=hidden> 
<INPUT name=ViewId value={00000000-0000-0000-00AA-000000666400} type=hidden> 
<INPUT name=ViewType value=4230 type=hidden> 
<INPUT name=SortCol value=fullname:1; type=hidden> 
<INPUT name=UIProvider type=hidden> 
<INPUT name=DataProvider type=hidden> </FORM></BODY></HTML>
于 2013-06-06T06:18:37.470 回答
0

是的,我在 Dynamics CRM 2011 上做过,它适用于所有部署,在线/本地和托管 (IFD),

  1. 创建一个 Javascript 网络资源,并创建您的 FetchXML,然后发送到自定义高级 Find Web 资源。
  2. 为显示高级查找网格创建一个 Html 网络资源,为所有实体执行创建的动态 FetchXml。
于 2013-05-31T14:03:27.640 回答
0

我还没有尝试过这个(还),但我认为应该可以(以支持的方式)使用URL addressable views来做到这一点。以某种方式在 CRM 中创建视图(例如在使用 adv find 之前手动创建)或使用 JS 动态创建它。然后应该可以“调用”上面每个链接的视图。

免责声明:这都是理论。如果你得到一些工作,也许让我们知道。

于 2013-05-22T15:39:55.590 回答