rksoftware

Visual Studio とか C# とかが好きです

SharePoint REST API でリストの列を別のリストにコピーするにつながるメモ

正確にはコピーではありません。

以前にリストの情報の取り方を書きました。
rksoftware.hatenablog.com 以前に取得したリストの情報からリストを作成する記事を書きました。
rksoftware.hatenablog.com 以前にリストの列情報を取得する記事を書きました。 rksoftware.hatenablog.com

この情報を使って作成したリストにコピー元の列もコピーする方法につながるメモです。

■ 結論

以前の記事の方法で取得した情報から列の情報をいっけんずつ取り出し、次のような JSON で列を作ることができます。
※まだ一行テキストでしか試していません。

{
  "DescriptionResource": {},
  "TitleResource": {},
  "AutoIndexed": false,
  "CanBeDeleted": true,
  "ClientSideComponentId": "00000000-0000-0000-0000-000000000000",
  "ClientSideComponentProperties": null,
  "ClientValidationFormula": null,
  "ClientValidationMessage": null,
  "CustomFormatter": null,
  "DefaultFormula": null,
  "DefaultValue": null,
  "Description": "",
  "Direction": "none",
  "EnforceUniqueValues": false,
  "EntityPropertyName": "OData__xXXXX__xXXXX_",
  "Filterable": true,
  "FromBaseType": false,
  "Group": "ユーザー設定の列",
  "Hidden": false,
  "Id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "Indexed": false,
  "IndexStatus": 0,
  "InternalName": "_xXXXX__xXXXX_",
  "IsModern": false,
  "JSLink": "clienttemplates.js",
  "PinnedToFiltersPane": false,
  "ReadOnlyField": false,
  "Required": false,
  "SchemaXml": "< (中略) >",
  "Scope": "/Lists/saitamalist0001",
  "Sealed": false,
  "ShowInFiltersPane": 0,
  "Sortable": true,
  "StaticName": "_xXXXX__xXXXX_",
  "Title": "埼玉",
  "FieldTypeKind": 2,
  "TypeAsString": "Text",
  "TypeDisplayName": "1 行テキスト",
  "TypeShortDescription": "1 行テキスト",
  "ValidationFormula": null,
  "ValidationMessage": null
}

■ 注意点

この方法で作られるのは列だけで、ビューなどの設定は変わりません。そのため、リストを開いても列が見えません。

■ この JSON をどうやって作ったか

リスト作成 API に投げてエラーになる項目を取り除きました。

■ 例えばどんなエラー?

プロパティ '__metadata' は型 'SP.Field' に存在しません。型で定義されているプロパティ名のみ使用してください。
プロパティ '__deferred' は型 'SP.UserResource' に存在しません。型で定義されているプロパティ名のみ使用してください。
プロパティ '__deferred' は型 'SP.UserResource' に存在しません。型で定義されているプロパティ名のみ使用してください。
プロパティ 'MaxLength' は型 'SP.Field' に存在しません。型で定義されているプロパティ名のみ使用してください。

■ さっきの JSON をどう使うの?

Power Automate でこんな感じに突っ込んでください。

POST: _api/web/lists/GetByTitle('{リスト名}')/fields

■ 簡単ですね

簡単ですね。