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]
コメントを追加