2016-06-20 8 views
3

私はSAPUI5フレームワークを使用してJSでコーディングする必要がある会社でインターンシップを行っています。それは私にはまったく新しいものなので、私はhttp://sapui5.hana.ondemand.comのチュートリアルに従ったのです。しかし、今私は問題があり、私はインターネット上で助言を見つけることができません、そして、私はいつも私の同僚に助けを求めることはできません、彼らも仕事をしている... SAPUI5 Metadata.xml:2つのエンティティのバインド

私は計画をしなければならない多くの従業員とその仕事。

<edmx:Edmx xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx" 
Version="1.0"> 
<edmx:DataServices 
    xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" 
    m:DataServiceVersion="1.0"> 
    <Schema xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" 
     xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" 
     xmlns="http://schemas.microsoft.com/ado/2008/09/edm" Namespace="NorthwindModel"> 
     <EntityType Name="Employee"> 
      <Key> 
       <PropertyRef Name="EmployeeID" /> 
      </Key> 
      <Property xmlns:p8="http://schemas.microsoft.com/ado/2009/02/edm/annotation" 
       Name="EmployeeID" Type="Edm.Int32" Nullable="false" 
       p8:StoreGeneratedPattern="Identity" /> 
      <Property Name="LastName" Type="Edm.String" Nullable="false" 
       MaxLength="20" Unicode="true" FixedLength="false" /> 
      <Property Name="City" Type="Edm.String" Nullable="false"/> 
      <Property Name="Team" Type="Edm.String" Nullable="false"/> 
      <NavigationProperty Name="Appointments" Relationship="NorthwindModel.FK_Employees_Appointment" 
       FromRole="Employees" ToRole="Appointments"/> 
     </EntityType> 
     <EntityType Name="Appointment"> 
      <Key> 
       <PropertyRef Name="AppointmentID"/> 
      </Key> 
      <Property Name="AppointmentID" Type="Edm.Int32" Nullable="false"/> 
      <Property Name="EmployeeID" Type="Edm.Int32" Nullable="false"/> 
      <Property Name="start" Type="Edm.DateTime" Nullable="false"/> 
      <Property Name="end" Type="Edm.DateTime" Nullable="false"/> 
      <Property Name="title" Type="Edm.String" Nullable="false"/> 
      <NavigationProperty Name="Employees" Relationship="NorthwindModel.FK_Employees_Appointment" 
       ToRole="Employees" FromRole="Appointments"/> 
     </EntityType> 
     <Association Name="FK_Employees_Appointment"> 
      <End Type="Employee" Role="Employees" Multiplicity="1" /> 
      <End Type="Appointment" Role="Appointments" Multiplicity="*" /> 
      <ReferentialConstraint> 
       <Principal Role="Employees"> 
        <PropertyRef Name="EmployeeID" /> 
       </Principal> 
       <Principal Role="Appointments"> 
        <PropertyRef Name="EmployeeID" /> 
       </Principal> 
      </ReferentialConstraint> 
     </Association> 
    </Schema> 
    <Schema xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" 
     xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" 
     xmlns="http://schemas.microsoft.com/ado/2008/09/edm" Namespace="ODataWeb.Northwind.Model"> 
     <EntityContainer 
      xmlns:p7="http://schemas.microsoft.com/ado/2009/02/edm/annotation" 
      Name="NorthwindEntities" p7:LazyLoadingEnabled="true" 
      m:IsDefaultEntityContainer="true"> 
      <EntitySet Name="Employees" EntityType="NorthwindModel.Employee" /> 
      <EntitySet Name="Appointments" EntityType="NorthwindModel.Appointment"/> 
      <AssociationSet Name="FK_Employees_Appointments" Association="NorthwindModel.FK_Employees_Appointment"> 
       <End Role="Employees" EntitySet="Employees"/> 
       <End Role="Appointments" EntitySet="Appointments"/> 
      </AssociationSet> 
     </EntityContainer> 
    </Schema> 
</edmx:DataServices> 

(タグAssociationSetとNavigationPropertyのために、私は私が使用したODataサービスに見てきたので、私はそれをしなかったが、私はしないでください:私はmetadata.xmlファイルでmockserverと連携しますそれを理解し、今私はそれは大丈夫だろうと推測...)

Appointments.jsonファイル:

[ 
{ 
    "AppointmentID" : 0, 
    "EmployeeID" : 0, 
    "start":"\/Date(1466416800000)\/", 
    "end":"\/Date(1466424000000)\/", 
    "title": "test" 
},{ 
    "AppointmentID" : 1, 
    "EmployeeID" : 1, 
    "start":"\/Date(1466409600000)\/", 
    "end":"\/Date(1466416800000)\/", 
    "title": "test2" 
}] 

Employees.jsonファイル:

[ 
{ 
    "EmployeeID":0, 
    "LastName":"APERCE", 
    "City":"Paris", 
    "Team":"Dev" 
}, 
{ 
    "EmployeeID":1, 
    "LastName":"HACHMI", 
    "City":"Lille", 
    "Team":"Dev" 
}, 
{ 
    "EmployeeID":2, 
    "LastName":"MILLET", 
    "City":"Paris", 
    "Team":"Admin" 
}, 
{ 
    "EmployeeID":3, 
    "LastName":"CORNET", 
    "City":"Poitiers", 
    "Team":"Admin" 
}, 
{ 
    "EmployeeID":4, 
    "LastName":"EVAIN", 
    "City":"Paris", 
    "Team":"R&D" 
}] 
(あなたが見ることができるように、社員は両方Appointments.jsonらEmployees.json上に存在している)

そして最後にOverview.view.xmlファイル:

<mvc:View controllerName="sap.ui.demo.wt.controller.Overview" 
xmlns="sap.m" xmlns:mvc="sap.ui.core.mvc" xmlns:semantic="sap.m.semantic" 
xmlns:unified="sap.ui.unified" 
xmlns:core="sap.ui.core" displayBlock="true"> 
<semantic:FullscreenPage title="{i18n>overviewPageTitle}"> 
    <VBox> 
     <PlanningCalendar startDate="{path : '/Startdate'}" rows="{path : 'data>/Employees',parameters:{expand:'Appointments'}}" 
      appointmentSelect="handleAppointmentSelect"> 
      <rows> 
       <PlanningCalendarRow title="{data>LastName}" 
        appointments="{path : 'data>Appointments',templateShareable:true}"> 
        <appointments> 
         <unified:CalendarAppointment 
          startDate="{data>start}" 
          endDate="{data>end}" 
          title="{data>title}"> 

         </unified:CalendarAppointment> 
        </appointments> 
       </PlanningCalendarRow> 
      </rows> 
     </PlanningCalendar> 
    </VBox> 
</semantic:FullscreenPage> 

( "data"モデルはmetadata.xmlで既にバインドされ、Appointments.jsonとEmployees.jsonの両方を取得します)

実際には、このコード計画中のすべての従業員のためのAppointments.jsonからの2つのタスクを表示します。私は「HACHMI」の従業員「APERCE」と「test2」だけを「テスト」に任命するためにバインドしたいと思いますが、できません。

SQLデータベースのJOINと同等の処理を実行することは可能ですが、何も見つかりません。私はどうすればいいのですか?あなたの答えをありがとう。

PS:私が上に書いたことを理解していないと、私はフランス語です、ごめんなさい。あなたがフランス語で答えることができれば、そうしてください、それは私の理解のために良いでしょう。

EDIT:私はnistv4nのアドバイスに従ってコードを修正しました。

MockServer:リソースは、セグメントの予定 '=>私はそれが予定 "だから、セグメントの予定が'が存在しないことを理解し、私はドン」が見つかりません今、私は次のエラーを取得します私はどこを忘れたのか知りません。

次の問題が発生しました:HTTP要求が失敗しました404、Not Found、{"error":{"code":404、 "message":{"lang": "en"、 "value": " 'Appointment' "}}} =>「Appointment 」の代わりに「Appointment」をリクエストしているので、前のエラーに関連していると思いますか?

REEDIT:私は正しい場所に 's'を置きます。今、私は持っている:Overview.viewで使用されているモデルに問題があるので、未定義のプロパティ 'getTime'を読むことはできません。xml、おそらく、しかし、私が使用する場合は同じです: "{予定}"、 "{予定}"、 "{開始}"または "{/予定}"} "。

LASTEDIT: nistv4nのおかげで、私はついにそれを行いました。同じ問題がある場合、上記のコードを更新しました。統一で:CalendarAppointment =>たstartDate = "{データ>開始}"等...実際

:正しいコードは "{ 'データ>予定' パス}" = PlanningCalendarRow =>予定でありますnistv4nを引用すると: "Appointmentsには相対参照があり、内部プロパティ(start、end、title)にはモデル名を含む相対参照も含まれています。"あなたがPlanningCalendarの集計行のバインディングを定義

+0

startDate = "{データ>開始}"、endDate = "{データ>終了}"、title = "{データ>タイトル}"について –

+0

すべての従業員は "test"と "test2"というタスクを持っています。しかし、私は "HACHMI"の "APERCE"と "test2"のみ "テスト"を、他の従業員は "テスト"を望んでいません。 – Nicaps

+0

@Ash実際はあなたが正しいと思っていましたが、問題はPlanningCalendarRowにありました。ありがとうございました ! – Nicaps

答えて

1

は、コンテナ内の参照活動がアクセスできるようにする$expandキーワードが含まれています。

<PlanningCalendar startDate="{path : '/Startdate'}" rows="{path : 'data>/Employees', parameters:{expand:'Appointment'}}" 
appointmentSelect="handleAppointmentSelect"> 

それは、与えられた従業員のために割り当てられたAppointmentデータをフェッチします。集計内のAppointment/startバインディングパスを使用して参照することができます。

編集: 最初のスキーマから関連付けノードが欠けているようです。これを次のように定義します。

<Association Name="FK_Employees_Appointment"> 
    <End Type="Employee" Role="Employees" Multiplicity="1" /> 
    <End Type="Appointment" Role="Appointments" Multiplicity="*" /> 
    <ReferentialConstraint> 
     <Principal Role="Employees"> 
      <PropertyRef Name="EmployeeID" /> 
     </Principal> 
     <Principal Role="Appointments"> 
      <PropertyRef Name="EmployeeID" /> 
     </Principal> 
    </ReferentialConstraint> 
</Association> 

2つのエンティティ間に一方向の接続のみを定義することをお勧めします。

アーキテクチャーとコードライン全体を調査するためにコードをどこか(zipアーカイブ内でも)投稿できますか?

編集2:これに応じて、あなたのビューXMLのPlanningCalendarRowセグメントを変更してください:

<PlanningCalendarRow title="{data>LastName}" 
    appointments="{path : 'data>Appointments',templateShareable:true}"> 
    <appointments> 
     <unified:CalendarAppointment 
      startDate="{data>start}" 
      endDate="{data>end}" 
      title="{data>title}"> 

     </unified:CalendarAppointment> 
    </appointments> 
</PlanningCalendarRow> 

Appointmentsは相対参照を持っており、内側の性質(startendtitle)も相対参照を持っている、など、モデル名。

+0

さて、それは 's'のアポイントメントです。そうでなければ、それを認識しません。今私は、次のエラーがあります:1)MockServer:セグメントの '予定'のリソースが見つかりません|||| 2)次の問題が発生しました:HTTPリクエストが失敗しました404、Not Found、{"error":{"code":404、 "message":{"lang": "en"、 "value": " 'Appointments' "}}} タグのようなmetadata.xmlに何かが間に合わなかったと思います。
私の同僚はodata.orgの文書を読むように私に言いました。私はこの面を見ていきますが、それは約350ページです。 – Nicaps

+0

Appointment w/o 's'を書くと、次のエラーが表示されます。 HTTP要求が失敗した、定義されていない、HTTP/1.1 NaN コンテンツタイプ:application/json コンテンツ長:0 dataserviceversion :2.0 – Nicaps

+0

@NicolasApercé私の答えが – nistv4n

関連する問題