Sensenet内容选择器定制

Sensenet内容选择器定制,sensenet,Sensenet,我创建了两种自定义内容类型,ProjectContract和PaymentRequest。在PaymentRequest下,我有一份参考现场合同,我想用它来参考ProjectContract。当我创建/更改PaymentRequest时,我需要以下内容: 如何初始化内容选择器以显示可用ProjectContracts的ContractNumber字段? 如何在ReferenceField网格控制下显示所选ProjectContract的ContractNumber? SN js代码和mvc包含/

我创建了两种自定义内容类型,ProjectContract和PaymentRequest。在PaymentRequest下,我有一份参考现场合同,我想用它来参考ProjectContract。当我创建/更改PaymentRequest时,我需要以下内容:

如何初始化内容选择器以显示可用ProjectContracts的ContractNumber字段? 如何在ReferenceField网格控制下显示所选ProjectContract的ContractNumber?
SN js代码和mvc包含/返回修复字段值。我没有找到任何可以添加自定义字段以显示的设置。 首先,SN包的版本是什么,因为oData.svc请求在旧版本上不起作用。可从6.2中获取。 关于oData,这里有一个链接:

还有另一种方法可以解决这个问题,但是有了这个方法,您需要修改现有的序列号代码。 您需要将/Root/Global/scripts/sn/sn.Picker.js文件复制到具有相同结构的皮肤文件夹中/Root/Skins/[yourskinfolder]/scripts/sn/sn.ReferenceGrid.js 您还需要将/Root/Global/scripts/sn/sn.ReferenceGrid.js文件复制到皮肤文件夹中

请勿修改原始序列号文件,因为序列号更新后将覆盖该文件

下一步:将以下代码复制到$grid.jqGrid{line之前的第1068行,并复制到InitGrid函数中

    ...
    var neededTypeName = "ProjectContract";
    var neededFieldName = "ContractNumber";
    var findField = false;
    o2 = (function () {
        var result = [];
        var itemArray = [];
        $.each(o2, function (index, el) {
            el.ContentField = "";
            result.push(el);
            if (el.ContentTypeName == neededTypeName) {
                itemArray.push([index, el.Path]);
                findField = true;
            }
        });
        if (findField) {
            $.each(itemArray, function (itemIndex, itemElArray) {
                var itemId = itemElArray[0];
                var itemEl = itemElArray[1];
                var thisLength = itemEl.length;
                var thislastSplash = itemEl.lastIndexOf("/");
                var thisPath = itemEl.substring(0, thislastSplash) + "('" + itemEl.substring(thislastSplash + 1, thisLength) + "')";
                $.ajax({
                    url: "/oData.svc" + thisPath + "?metadata=no$select=Path," + neededFieldName,
                    dataType: "json",
                    async: false,
                    success: function (d) {
                        result[itemId].ContentField = d.d[neededFieldName];
                    }
                });
            });
            colNames.splice(6, 0, "ContentField");
            colModel.splice(6, 0, { index: "ContentField", name: "ContentField", width: 100 });
            return result;
        }
        return o2;
    })();

    ...
    $grid.jqGrid({
    ...
...
if (rowdata.ContentField != undefined) {
    result.ContentField = rowdata.ContentField;
}
...
neededTypeName可能包含您的内容类型值,neededFieldName可能包含您要呈现的字段名。 另一个将建立网格。 这将修改内容选择器表

在函数返回之前,需要在第660行将此代码添加到GetResultDataFromRow函数中

    ...
    var neededTypeName = "ProjectContract";
    var neededFieldName = "ContractNumber";
    var findField = false;
    o2 = (function () {
        var result = [];
        var itemArray = [];
        $.each(o2, function (index, el) {
            el.ContentField = "";
            result.push(el);
            if (el.ContentTypeName == neededTypeName) {
                itemArray.push([index, el.Path]);
                findField = true;
            }
        });
        if (findField) {
            $.each(itemArray, function (itemIndex, itemElArray) {
                var itemId = itemElArray[0];
                var itemEl = itemElArray[1];
                var thisLength = itemEl.length;
                var thislastSplash = itemEl.lastIndexOf("/");
                var thisPath = itemEl.substring(0, thislastSplash) + "('" + itemEl.substring(thislastSplash + 1, thisLength) + "')";
                $.ajax({
                    url: "/oData.svc" + thisPath + "?metadata=no$select=Path," + neededFieldName,
                    dataType: "json",
                    async: false,
                    success: function (d) {
                        result[itemId].ContentField = d.d[neededFieldName];
                    }
                });
            });
            colNames.splice(6, 0, "ContentField");
            colModel.splice(6, 0, { index: "ContentField", name: "ContentField", width: 100 });
            return result;
        }
        return o2;
    })();

    ...
    $grid.jqGrid({
    ...
...
if (rowdata.ContentField != undefined) {
    result.ContentField = rowdata.ContentField;
}
...
这将把内容选择器中的选定项属性添加到引用字段表中

然后,您需要打开SN.ReferenceGrid.js并在var$grid=$+displayAreaId之前将以下代码添加到init函数中

 var neededTypeName = "CustomItem2";
    var neededFieldName = "Custom2Num";
    var findField = false;
    var alreadyAdded = false;
    var btnAttr = $("#"+addButtonId).attr("onClick");
    if (btnAttr.indexOf(neededTypeName) > -1) {
        alreadyAdded = true;
        colNames[4].width = 150;
        colModel[4].width = 150;
        colNames.splice(3, 0, "ContentField");
        colModel.splice(3, 0, { index: "ContentField", name: "ContentField", width: 60 });
    }

    initialSelection = (function () {
        var result = [];
        var itemArray = [];
        $.each(initialSelection, function (index, el) {
            el.ContentField = "";
            result.push(el);
            if (el.ContentTypeName == neededTypeName) {
                itemArray.push([index, el.Path]);
                findField = true;
            }
        });
        if (findField) {
            $.each(itemArray, function (itemIndex, itemElArray) {
                var itemId = itemElArray[0];
                var itemEl = itemElArray[1];
                var thisLength = itemEl.length;
                var thislastSplash = itemEl.lastIndexOf("/");
                var thisPath = itemEl.substring(0, thislastSplash) + "('" + itemEl.substring(thislastSplash + 1, thisLength) + "')";
                $.ajax({
                    url: "/oData.svc" + thisPath + "?metadata=no$select=Path," + neededFieldName,
                    dataType: "json",
                    async: false,
                    success: function (d) {
                        result[itemId].ContentField = d.d[neededFieldName];
                    }
                });
            });
            if (!alreadyAdded) {
                colNames.splice(3, 0, "ContentField");
                colModel.splice(3, 0, { index: "ContentField", name: "ContentField", width: 100 });
            }
            return result;
        }
        return initialSelection;
    })();
我希望这会有所帮助,但SN版本应该会有所帮助