JavaScriptのItemServiceの使用
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
ItemServiceは、項目の作成、取得、保存、削除を行うためのスタンドアロンのXHR(XMLHttpRequest)ライブラリSitecore。フロントエンドとバックエンド間のデータ取引を支援する多くの組み込みユーティリティやヘルパーを備えています。ライブラリは/sitecore/shell/client/Services/Assets/lib/itemService.js。
!注多くの例はUnit.jsの機能を使用しています。もし例を文字通り実行したい場合は、コード内でUnit.jsへの参照を追加する必要があります。
このトピックでは以下の内容を説明します。
- アイテム作成
- アイテムの取得
- アイテムの子を呼び戻す
- アイテムの保存
- アイテムの破壊
- アイテムの検索
- 汚れたアイテムの作成
- アイテムが汚れているかどうかの確認
- 生のJSONとしてアイテムを取得する方法
- 追跡項目
- アイテムの自動保存
- hasChanged() メソッド
- revertChanges() メソッド
- クエリオブジェクト
- 約束の取り扱い
- ミドルウェアの扱いについて
- イベントエミッターとの連携
- ItemServiceと検証
アイテム作成
オブジェクトとサーバーにアイテムを作成させたいSitecore木のパスを渡し、executeメソッドを呼び出してアイテムを作成します。
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); var aNewGuy = { name: "David", isActive: true, gender: "male" }; peopleService.create( aNewGuy ).path( "/sitecore/content/home" ).execute().then( function ( david ) { david.should.be.an.instanceOf( ItemService.Item ); david.name.should.eql( "David" ); david.isActive.should.eql( true ); david.gender.should.eql( "male" ); done(); } ).fail( done );
実行メソッドを呼び出しないことで汚れたアイテムを作成します:
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.create().then( function () { done(); } ).fail( done );
アイテムの取得
ItemIDでアイテムを取得するには、fetchItem() メソッドがあります:
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.fetchItem( "d4119c4f-31e9-4fd0-9fc4-6af1d6e36c8e" ).execute().then( function ( melton ) { melton.should.be.an.instanceOf( ItemService.Item ); done(); } ).fail( done );
アイテムの子を呼び戻す
fetchChildren()メソッドでアイテムの子を取得します:
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.fetchItem( "d4119c4f-31e9-4fd0-9fc4-6af1d6e36c8e" ).execute().then( function ( melton ) { melton.should.be.an.instanceOf( ItemService.Item ); melton.fetchChildren().execute().then( function ( meltonsChildren ) { meltonsChildren.should.be.an.Array.and.have.a.lengthOf( 3 ); meltonsChildren 0 .should.be.an.instanceOf( ItemService.Item ); meltonsChildren 1 .should.be.an.instanceOf( ItemService.Item ); meltonsChildren 2 .should.be.an.instanceOf( ItemService.Item ); done(); } ).fail( done ); } ).fail( done );
アイテムの保存
アイテムを拾うか作成しなければ保存できません:
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.fetchItem( "d4119c4f-31e9-4fd0-9fc4-6af1d6e36c8e" ).execute().then( function ( melton ) { melton.should.be.an.instanceOf( ItemService.Item ); melton.name = "Melton the Magnificent"; melton.save().execute().then( function ( savedMelton ) { savedMelton.name.should.eql( "Melton the Magnificent" ); done(); } ).fail( done ); } ).fail( done );
アイテムの破壊
破壊するには、アイテムを取り寄せるか作成する必要があります:
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.fetchItem( "d4119c4f-31e9-4fd0-9fc4-6af1d6e36c8e" ).execute().then( function ( melton ) { melton.should.be.an.instanceOf( ItemService.Item ); melton.destroy().execute().then( function () { done(); } ).fail( done ); } ).fail( done );
アイテムの検索
アイテムの検索方法は2通りあります
、クエリを使うかです。検索()
検索語を渡して実行メソッドを呼び出してアイテムを検索します:
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.search( "melton" ).execute().then( function ( queryResults ) { queryResults.should.have.a.property( "Links" ).and.be.an.Array; queryResults.should.have.a.property( "Results" ).and.be.an.Array; queryResults.should.have.a.property( "TotalCount" ).and.be.a.Number; queryResults.should.have.a.property( "TotalPage" ).and.be.a.Number; queryResults.Results 0 .should.be.an.instanceOf( ItemService.Item ); queryResults.Results 0 .name.should.eql( "Banks Melton" ); done(); } ).fail( done );
query() の使用
クエリはクエリ項目を渡し、実行メソッドを呼び出します:
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.query(( "xxxx-xxxx-xxxx-xxxx" ).execute().then( function ( queryResults ) { queryResults.should.have.a.property( "Links" ).and.be.an.Array; queryResults.should.have.a.property( "Results" ).and.be.an.Array; queryResults.should.have.a.property( "TotalCount" ).and.be.a.Number; queryResults.should.have.a.property( "TotalPage" ).and.be.a.Number; queryResults.Results 0 .should.be.an.instanceOf( ItemService.Item ); done(); } ).fail( done );
「xxxx-xxxx-xxxx-xxxx」はクエリ項目のSitecore IDです。
汚れたアイテムの作成
ダーティアイテムとは、ブラウザのメモリにのみ存在し、サーバーに保存されていないアイテムのことです。これは、アプリケーションがユーザーの入力を待つ必要がある場合に役立ちます。以下のコードを使ってダーティアイテムを作成しましょう:
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.create().then( function ( aNewDirtyItem ) { /* At this point `aNewDirtyItem` has not been saved */ aNewDirtyItem.should.be.an.instanceOf( ItemService.Item ); aNewDirtyItem.name = "Melton"; /* After modifying the dirty item, now we save it */ aNewDirtyItem.save().execute().then( function () { done(); } ).fail( done ); } ).fail( done );
アイテムが汚れているかどうかの確認
isNewプロパティで「汚れたアイテム」として保存されていないかどうかを確認できます:
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.create().then( function ( guy ) { guy.isNew.should.be.true; done(); } ).fail( done );
サーバーからアイテムが届く場合、isNewは常にfalseです:
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.create( { name: "guy" } ).execute().then( function ( guy ) { guy.isNew.should.be.false; done(); } ).fail( done );
生のJSONとしてアイテムを取得する方法
アイテムのデータを生のJSON(追加メソッドやプロパティを含まず)で取得する必要があるかもしれません。以下のコードを使って生のJSONを取得してください:
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.fetchItem( "d4119c4f-31e9-4fd0-9fc4-6af1d6e36c8e" ).execute().then( function ( melton ) { var meltonAsJSON = melton.json(); melton.should.be.an.instanceOf( ItemService.Item ); meltonAsJSON.should.be.an.instanceOf( Object ); meltonAsJSON.should.not.be.an.instanceOf( ItemService.Item ); done(); } ).fail( done );
追跡項目
アイテムに追跡を追加できます。これにより、追加の機能を追加することが可能になります:
- プロパティが変わったときに自動的に保存できます。
- hasChanged()を呼んで、アイテムが変更されているか確認できます。
- プロパティ値を元に戻すにはrevertChanges()を呼び出せます。
追跡可能なオプションをtrueに設定して、商品に追跡を追加します:
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.fetchItem( "d4119c4f-31e9-4fd0-9fc4-6af1d6e36c8e" ).option( "trackable", true ).execute().then( function ( melton ) { melton.option( "trackable" ).should.be.true; done(); } ).fail( done );
アイテムの自動保存
そのSitecoreを指定することができます。Services.Clientは自動的にアイテムの変更を保存します。この機能を有効にするにはtrackableをtrueに設定してください。エミッターの「オン」または「一度だけ」を使ってセーブイベントを聞くことができます:
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.fetchItem( "d4119c4f-31e9-4fd0-9fc4-6af1d6e36c8e" ).option( "trackable", true ).execute().then( function ( melton ) { /* Listening to the `save` event `once`. You can also use `on` here to continuously listen to the `save` event. */ melton.once( "save", function ( error ) { done(); } ); melton.name = "Melton the Magnificent"; } ).fail( done );
hasChanged() メソッド
ItemServiceが のメソッドを追加するために、trackableをtrueに設定することで、hasChanged()メソッドを追加できます。hasChanged() メソッドを使って、アイテムが変更されているか確認します:
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.fetchItem( "d4119c4f-31e9-4fd0-9fc4-6af1d6e36c8e" ).option( "trackable", true ).execute().then( function ( melton ) { melton.hasChanged().should.be.false; melton.name = "Melton the Magnificent"; melton.hasChanged().should.be.true; done(); } ).fail( done );
hasChangedメソッドは、null、undefed、そして空文字列 '' の間で値が変化する場合、trueを返しません。
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.fetchItem( "d4119c4f-31e9-4fd0-9fc4-6af1d6e36c8e" ).option( "trackable", true ).execute().then( function ( melton ) { melton.hasChanged().should.be.false; melton.subscribed = ""; melton.hasChanged().should.be.false; melton.subscribed = null; melton.hasChanged().should.be.false; melton.subscribed = undefined; melton.hasChanged().should.be.false; done(); } ).fail( done );
revertChanges() メソッド
revertChanges()を追加ItemService方法を指定するには、追跡可能をtrueに設定できます。revertChanges()メソッドを使ってアイテムの変更を元に戻します:
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.fetchItem( "d4119c4f-31e9-4fd0-9fc4-6af1d6e36c8e" ).option( "trackable", true ).execute().then( function ( melton ) { melton.name.should.eql( "Banks Melton" ); melton.name = "Melton the Magnificent"; melton.name.should.eql( "Melton the Magnificent" ); melton.hasChanged().should.be.true; melton.revertChanges(); melton.hasChanged().should.be.false; melton.name.should.eql( "Banks Melton" ); done(); } ).fail( done );
クエリオブジェクト
各ItemServiceメソッドはクエリオブジェクトを返します:
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.create( {} ).should.be.an.instanceOf( ItemService.Query ); peopleService.fetchItem( "d4119c4f-31e9-4fd0-9fc4-6af1d6e36c8e" ).should.be.an.instanceOf( ItemService.Query ); peopleService.query( "/sitecore" ).should.be.an.instanceOf( ItemService.Query ); peopleService.search( "sitecore" ).should.be.an.instanceOf( ItemService.Query ); The query object has chainable helper methods. These methods add the given value to the query string of the request: var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.create( {} ) .database( "master" ) .facet( "a facet" ) .fields( "ItemName" ) .includeMetadata( true ) .includeStandardTemplateFields( true ) .language( "en" ) .page( 2 ) .path( "/sitecore/content/home" ) .sort( "aItemName" ) .take( 5 ) .version( "latest" ) .should.be.an.instanceOf( ItemService.Query ); You call the execute() method to run the query. The execute() method returns a promise: var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.fetchItem( "d4119c4f-31e9-4fd0-9fc4-6af1d6e36c8e" ).execute().then( function ( melton ) { melton.should.be.an.instanceOf( ItemService.Item ); done(); } ).fail( done );
約束の取り扱い
ほぼすべての非同期呼び出しは約束を返します。特に、execute() メソッドは約束を返します。 ItemServiceはqモジュールを使ってこれを処理します。
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); var fetchQuery = peopleService.fetchItem( "d4119c4f-31e9-4fd0-9fc4-6af1d6e36c8e" ); var fetchQueryPromise = fetchQuery.execute(); fetchQueryPromise.should.have.a.property( "then" ); fetchQueryPromise.should.have.a.property( "fail" );
ミドルウェアの扱いについて
このItemServiceは、sc-useifyモジュールを用いてミドルウェア機能を提供します:
ItemService.use( function ( data, next ) { data.timestamp = new Date().getTime(); next( null, data ); } );
統合ミドルウェアがあれば、次にサーバーからデータを受け取る際には、そのデータにタイムスタンプのプロパティが付与されます:
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.fetchItem( "d4119c4f-31e9-4fd0-9fc4-6af1d6e36c8e" ).execute().then( function ( melton ) { melton.should.have.a.property( "timestamp" ); done(); } ).fail( done );
すべてのミドルウェアワーカーをクリア(またはキーでクリア)できます:
ItemService.useify.clear();
すべてのミドルウェアをクリアしたため、次にサーバーからデータを受け取ったときにはタイムスタンプのプロパティが付いていません。
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.fetchItem( "d4119c4f-31e9-4fd0-9fc4-6af1d6e36c8e" ).execute().then( function ( melton ) { melton.should.have.not.a.property( "timestamp" ); done(); } ).fail( done );
イベントエミッターとの連携
イベントエミッターでアイテムを延長できます:
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.fetchItem( "d4119c4f-31e9-4fd0-9fc4-6af1d6e36c8e" ).execute().then( function ( melton ) { melton.on( "save", function ( error ) { done(); } ); melton.age = 40; melton.save().execute(); } ).fail( done );
ItemServiceと検証
このItemServiceはクライアント側の検証を提供しません。以下の例では、アイテムのIDを無効なGUIDに変更し、その後セーブをトリガーします。検証がないため、クライアントはセーブの実行を許可します。しかし、サーバーが無効なデータを含むリクエストを受信すると解決せず、約束は失敗します:
var peopleService = new ItemService( { url: "/sitecore/api/ssc/people" } ); peopleService.fetchItem( "d4119c4f-31e9-4fd0-9fc4-6af1d6e36c8e" ).execute().then( function ( melton ) { melton.ItemID = "invalid guid"; melton.save().execute().then( function ( badMelton ) { should( badMelton ).not.exist; } ).fail( function ( error ) { error.should.be.an.instanceOf( Error ); done(); } ); } ).fail( done );