sharepoint 2013 _api / $ metadata error'不可为空的DataProperty不能具有null defaultValue。名称:undefined'

时间:2013-12-22 19:29:42

标签: api sharepoint metadata breeze

我尝试使用sharepoint 2013 rest api和breezejs。 我收到错误

A nonnullable DataProperty cannot have a null defaultValue. Name: undefined

当breezejs验证返回的元数据(_api / $ metadata)时。 使用breeze.EntityManager(“/ _ vti_bin / listdata.svc /”)都可以。

有哪些方法可以解决这个问题?

<script src="/_layouts/15/SharePointProject7/scripts/angular.min.js"></script>
<script src="/_layouts/15/SharePointProject7/scripts/q.min.js"></script>
<script src="/_layouts/15/SharePointProject7/scripts/datajs-1.1.1.min.js"></script>
<script src="/_layouts/15/SharePointProject7/scripts/breeze.min.js"></script>
<script src="/_layouts/15/SharePointProject7/scripts/breeze.toq.js"></script>
<script src="/_layouts/15/SharePointProject7/scripts/app.js"></script>


<div data-ng-app="app">
    <div data-ng-controller="Ctrl2">
        <ul>
           <li data-ng-repeat="c in customers"><input type="text" data-ng-model="c.Title" /></li>
        </ul>
    <button type="button" data-ng-click="save()">Save</button>
    </div>
</div>

var app = angular.module('app', []);

app.run(['$q', '$rootScope', function ($q, $rootScope) {
    breeze.core.extendQ($rootScope, $q);
}]);

app.service('listData', function () {

    breeze.config.initializeAdapterInstances({ dataService: "OData" });
    var manager = new breeze.EntityManager("/_api/");

    var changes;
    this.getItems = function () {
        var query = breeze.EntityQuery.from("Lists");
        return manager.executeQuery(query).to$q();
    };

    this.saveItems = function () {

        if (manager.hasChanges()) {


            changes = manager.getChanges();

            manager.saveChanges().to$q(saveSucceeded, saveFailed);
        }
        else {
            alert("Nothing to save");
        };

    };


    function saveSucceeded() {

        alert("OK");
    };

    function saveFailed(error) {
        alert(error.message);
    };
});

app.controller('Ctrl2', function ($scope, listData) {
    function initialize() {
        listData.getItems().then(querySucceeded, _queryFailed);

    };

    function querySucceeded(data) {
        $scope.customers = data.results;

    }

    function _queryFailed(error) {
        alert(error.message);
    }

    $scope.save = function () {

        listData.saveItems();


    };
    initialize();
});

1 个答案:

答案 0 :(得分:0)

最好手写实体配置,因为SP元数据可能很大,并且在应用程序加载开始时将其拉下来并不是一个好主意。

首先从breeze labs获取SharePoint微风适配器。

此处详细信息http://www.andrewconnell.com/blog/getting-breezejs-to-work-with-the-sharepoint-2013-rest-api

该帖子逐步推进了这项工作。