2017-03-09 15 views
0

Azure Mobile Appsのテーブルコントローラーを使用してテーブルを表示したいと考えていますが、私は何もデータを返すことができません。internal 500 server errorです。私はいくつかの文書に従った:https://shellmonger.com/2016/04/15/30-days-of-zumo-v2-azure-mobile-apps-day-8-table-controller-basics/しかし、それは私の見解に到達することができないかのようです。ここで Azure Mobile Appsのテーブルコントローラを使用してビューにアクセスするにはどうすればよいですか?

は、私のテーブルコントローラである:

mytable.jsから

私の理解私たちがここで言っていることは 'テーブル名がmytableと呼ばれているということですが、私はそれが呼ばれるテーブルを探したいですmy_awesome_view 'は実際にはテーブルではなくモバイルアプリが考えられる限り、それはうまくいくはずです。次に、ページあたり1000個の商品を返すような追加情報があります。

var table = require('azure-mobile-apps').table(); 

table.name = 'mytable'; 
table.schema = 'dbo'; 
table.dynamicSchema = true; 
table.databaseTableName = 'my_awesome_view'; 
table.maxTop = 1000; 

module.exports = table; 

このコードはmy_awesome_viewと呼ばれる私のビューは、単一の下に戻って列の唯一のカップルを引っ張るwwwroot/tables/mytable.js

てMyDatabase /ビュー/ dbo.my_awesome_view

で私の紺碧のサーバーに保存されています調子。私はある私の見解で簡単にテーブルで作成された追加の列を含めるように言われてきたdeletedcreatedAtupdatedAt私はテストのAPIとのためのポストマンと呼ばれるアプリケーションを使用

SELECT mytable.id, 
     name, 
     deleted, 
     createdAt, 
     updatedAt 
FROM mytable 
WHERE name = 'Bob' 

私は、このエンドポイントを照会するときhttps://mybackend.azurewebsites.net/tables/mytable私はこの内部500サーバーのエラーを除いて何も戻っていません。エラーメッセージには、何が間違っているかについての詳細はありません。

誰でもこの問題を解決できますか?テーブルエンドポイントが正常に動作するコードを削除すると、そこにある私のビューに到達していないと感じます。

更新

@AdrianHallによって与えられたいくつかのアドバイスの後、私は、アプリケーションのログファイルを見ても、動的なスキームオプションをオフにしています。

Error occurred during table initialization RequestError: Cannot alter 'dbo.my_awesome_view' because it is not a table.

それはしかし、私が持っているコードを追加すると、システムが私の見解を読み取ることができるようにすべきであるというのが私の理解したビューですので、理にかなって:アプリケーションログには、次のエラーメッセージが表示されます。

+1

1)dynamicSchemaをオフにします。ビューのみのテーブルでは機能しません。 2)App Serviceの診断ログを有効にし、ログビューアを使用して、サーバーがクラッシュする理由を確認します。私は、動的スキーマはビューに失敗しているスキーマビューのSQLコマンドを生成していると思います。 –

+0

追加情報ありがとう@AdrianHall私は 'table.dynamicSchema'をオフにしましたが、助けにはなりません。エラーログ、特にアプリケーションログを確認しました。エラーは次のとおりです。 'テーブルの初期化中にエラーが発生しました。RequestError: 'dbo.my_awesome_view'はテーブルではないため変更できません。 – Yanayaya

答えて

2

私はそれを働かせました。私は今、問題なく私のビューにアクセスできます。問題は、ビューで作成したときに、version列を追加しなかったことです。私が見たドキュメントでは、すべての列が1つまたは2つだけでなく確実に追加されるようにする必要があると言います。私は単にバージョンを逃しました、私はそれを追加したビューが動作を開始し、条件付きの結果が返されている。

だから誰もが、私はここにいた私の完全なソースコードが何であるかを知っていることを確実にするために:

ステップ1 あなたAzureのデータベース内のビューを作成し、私の場合、私は私のローカルマシン上のSQL Management Studioを使用しました私のAzureデータベースに接続されています。あなたが作成すると、あなたのビューには、次の列を追加します。

  • [deleted]
    • [version]
    • [updatedAt]
    • [createdAt]
    • は、ここで私は私のビューを作成するために書いた完全なコードです。

      CREATE VIEW [dbo].[my_awesome_view] 
      AS 
      SELECT id, 
           column_name_1, 
           column_name_2, 
           column_name_3,  
           [version], 
           updatedAt, 
           createdAt, 
           deleted 
      
      FROM mytable 
      WHERE (column_1 = 'Bob' OR 
           column_2 = 'Smith' OR 
           column_3 = 'Jr') 
      
      GO 
      

      ステップ2

      のアプリであなたのクラスを作成します。私のようにXamarin Formsハイブリッドアプリケーションを作成する場合は、共有プロジェクトでテーブルクラスを定義する必要があります。テーブルクラスは、ビュー名ではなくデータの元のテーブル名を参照する必要がありますが、ビューで呼び出される列も含める必要があります。私の場合は

      私の見解は非常に私のクラス名は、それぞれmytable.csあるmytableからデータを選択:

      namespace MyApp 
      { 
          public class mytable 
          { 
           public string id { get; set; } 
           public string column_1 { get; set; } 
           public string column_2 { get; set; } 
          } 
      } 
      

      ステップ3

      今、私たちは場所に基礎を持っていることを、我々は我々のアプリに伝える必要がありますビューを見て、テーブルのように扱います。私のAzureポータルでは、Azure Mobile AppでEasy Tablesを使用してテーブルAPIを作成しました。私はをテーブルとして指定してAzureを作成しました。Azureはその後、腐食の原因となるjavascriptとjsonファイルを作成します。

      作成したテーブルapiをクリックしてEdit Scriptを選択すると、javascriptファイルが保存されているwwwrootが表示されます。

      var table = require('azure-mobile-apps').table(); 
      table.databaseTableName = 'my_awesome_view';  
      module.exports = table; 
      

      あなたはこのファイルを使用して、ここではかなり多くのことを行うことができますし、エイドリアン・ホールは、それが何ができるかに良いダイビングだけでなく、テーブル制御機能があります。ここから、我々は次の表のinitilisationコードを変更しますそのリストはここで見つけることができます:https://shellmonger.com/2016/04/15/30-days-of-zumo-v2-azure-mobile-apps-day-8-table-controller-basics/

      は、私もそれだそれRead

      Allow anonymousとしてdisabledからinsertupdatedeleteを変更することなく、残すことによってのみ読み取ることが私のAPIのアクセス許可を設定しました! Postman(https://www.getpostman.com/)のようなアプリケーションを使用すると、APIを直接照会して結果を戻すことができます。

      問題が発生している場合は、エラーログを有効にして、問題のどこにあるかを確認してください。

    関連する問題