Sharepoint 2013 App AngularJS:リストに追加するときにエラーが発生するルックアップフィールド "'SP.Data.TeamsListItem'という名前のタイプをモデルで解決できませんでした

サリー

PlayersリストにTeam Nameリンクするためのルックアップフィールドを備えたリストがありますTeams

プレイヤーリストを追加または更新しようとすると、エラーが発生します

「「SP.Data.TeamsListItem」という名前のタイプはモデルで解決できませんでした。モデルが使用可能な場合、各タイプ名は有効なタイプに解決する必要があります。」

プレーヤーリストのGUIDは「16a03b71-07ea-49c4-ab14-419b51047119」です。

チームリストのGUIDは「2a2916c2-22fb-4588-bca1-83479a4d85b2」です。

エラーが発生したときのデータフィールドの内容は次のとおりです。

<pre>
    "{\"__metadata\":{\"type\":\"SP.Data.PlayersListItem\"},\"Title\":\"Bill\",\"PlayerPosition\":\"Goalie\",\"Birthdate\":\"2/21/1999\",\"TeamName\":{\"__metadata\":{\"id\":\"Web/Lists(guid'2a2916c2-22fb-4588-bca1-83479a4d85b2')/Items(1)\",\"uri\":\"https://app-2971fdcf9ede6a.rawtecapps.com/sites/raiders/AngularCRM/_api/Web/Lists(guid'2a2916c2-22fb-4588-bca1-83479a4d85b2')/Items(1)\",\"etag\":\"\\\"1\\\"\",\"type\":\"SP.Data.TeamsListItem\"},\"Id\":1,\"Title\":\"aa\",\"ID\":1,\"$$hashKey\":\"object:176\"},\"Season\":\"2015\"}"
</pre>

ルックアップフィールドの定義。

<pre>
    <Elements xmlns="http://schemas.microsoft.com/sharepoint/">  
      <Field
           ID="{7853bbf2-9fd7-4f85-aca8-269d8f967650}"
           Name="TeamName"
           DisplayName="Team Name"
           Type="Lookup"
           List="Lists/Teams"
           ShowField="Title"
           Required="FALSE"
           Group="Custom Site Columns">
      </Field>
    </Elements>
</pre>

チームリストのコンテンツタイプ:

<pre>
     <Elements xmlns="http://schemas.microsoft.com/sharepoint/"><ContentType ID="0x0100A379177A3533447D9B6546708F7DFD2D" Name="Teams" Group="Custom Content Types" Description="Teams Content Type" Inherits="FALSE" Version="0">
    <FieldRefs>
      <FieldRef ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" DisplayName="Team Name" Required="TRUE" Name="Title" />
      <FieldRef ID="{fce82853-3f44-4cc9-8f71-eb6506be0e9e}" DisplayName="Team City" Required="FALSE" Name="TeamCity" />
    </FieldRefs>
  </ContentType>
</pre>

playernew.htmlページ:

<pre>
     <div class="form-horizontal">
    <fieldset>
        <div class="form-group">
            <label for="txtID" class="col-lg-2 control-label">ID:</label>
            <div class="col-lg-6">
                <input id="txtID" type="text" readonly class="form-control" ng-model="player.ID">
            </div>
        </div>
        <div class="form-group">
            <label for="txtPlayerName" class="col-lg-2 control-label">Player Name:</label>
            <div class="col-lg-6">
                <input id="txtPlayerName" type="text" class="form-control" ng-model="player.Title">
            </div>
        </div>
        <div class="form-group">
            <label for="txtPlayerPosition" class="col-lg-2 control-label">Player Position:</label>
            <div class="col-lg-6">
                <input id="txtPlayerPosition" type="text" class="form-control" ng-model="player.PlayerPosition">
            </div>
        </div>
        <div class="form-group">
            <label for="txtBirthdate" class="col-lg-2 control-label">Birthdate:</label>
            <div class="col-lg-6">
                <input id="txtBirthdate" type="text" class="form-control" ng-model="player.Birthdate">
            </div>
        </div>
        <div class="form-group">
            <label for="txtTeamName" class="col-lg-2 control-label">Team Name:</label>
            <div class="col-lg-6" ng-controller="TeamDropDownController">
                <select name="teams" ng-model="player.TeamName" ng-options="team.Title for team in teams">
                    <option ng-repeat="team in teams" value="{{team.Id}}">{{team.Title}}</option>
                </select>
            </div>
        </div>
        <div class="form-group">
            <label for="txtSeason" class="col-lg-2 control-label">Season:</label>
            <div class="col-lg-6">
                <input id="txtSeason" type="text" class="form-control" ng-model="player.Season">
            </div>
        </div>
        <div class="form-group">
            <div class="col-lg-offset-2">
                <input id="cmdSave" type="button" class="button" value="Save" data-ng-click="addPlayer()" />
            </div>
        </div>
</pre>

Angular JS(playersnew Controller):

 ><pre> 
 app.controller('playersnewController',
     function ($scope, $location, wingtipCrmService) {
         $scope.player = {};
         $scope.player.Title = "";
         $scope.player.PlayerPosition = "";
         $scope.player.Birthdate = "";
         $scope.player.TeamName = "";
         $scope.player.TeamName.Id = "";
         $scope.player.TeamName.Title = "";
         $scope.player.Season = "";
         $scope.addPlayer = function () {
             var playerName = $scope.player.Title;
             var playerPosition = $scope.player.PlayerPosition;
             var birthdate = $scope.player.Birthdate;
            var teamName = $scope.player.TeamName;
             var teamNameId = $scope.player.TeamName.Id;
             var teamNameTitle = $scope.player.TeamName.Title;
             var season = $scope.player.Season;
             wingtipCrmService.addPlayer(playerName, playerPosition, birthdate, teamName, teamNameId, teamNameTitle ,season)
               .success(function (data) {
                   $location.path("/playershome");
               });
         }
     } );
</pre>

Angular JS(addplayerのサービス):

>     <pre>
    service.addPlayer = function (PlayerName,PlayerPosition,Birthdate,TeamName,TeamNameId,TeamNameTitle,Season) {
    var restQueryUrl = "../_api/web/lists/getByTitle('Players')/items";
    var playerData = {
        __metadata: { "type": "SP.Data.PlayersListItem" },
        Title: PlayerName,
        PlayerPosition: PlayerPosition,
        Birthdate: Birthdate,
        TeamName: TeamName,
        Season: Season
    };
    var requestBody = JSON.stringify(playerData);
    return $http({
                       method: 'POST',
              url: restQueryUrl,
              contentType: "application/json;odata=verbose",
              data: requestBody,
              headers: {
                  "Accept": "application/json; odata=verbose",
                  "X-RequestDigest": requestDigest,
                  "content-type": "application/json;odata=verbose"
              }
          });
      }
</pre>

Angular JS(TeamDropDownControllerおよびサービス):

    <pre>
    app.controller('TeamDropDownController', 
    function ($scope, wingtipCrmService) {
    wingtipCrmService.getDropDownTeams().success(function (data) {
        $scope.teams = data.d.results;
    })
});
</pre>
<pre>
service.getDropDownTeams = function () {
          var restQueryUrl = "../_api/web/lists/getByTitle('Teams')/items/" +
                             "?$select=ID,Title";
          return $http({
              method: 'GET',
              url: restQueryUrl,
              headers: { "Accept": "application/json; odata=verbose" }
          })
      }
</pre>

私はSharePointアプリとAngularJSの開発に不慣れです。私はこの問題の解決策を1週間以上見つけようとしてきましたが、その過程で多くのことを学びました。

を使用TeamDropDownControllerしてselectステートメントにチーム名をロードし、を使用playersnewcontrollerして新しいプレーヤーレコードを追加しています。

add player javascriptは、TeamNameフィールドを含めるコードを追加するまで機能します。コントローラーを使用してドロップダウンをロードする方法が、で問題を引き起こしているのではないかと心配していplayersnewControllerます。

サリー

問題を修正するために、TeamNameルックアップフィールドに入力せずにプレーヤーレコードを追加しました。次に、TeamNameフィールド情報を使用してプレーヤーレコードの更新をすぐに実行しました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ