Microsoft CDM Release Version Update: 0.9

This commit is contained in:
Nenad Banfic 2019-12-11 06:20:12 +00:00
Родитель 576ccfd07f
Коммит 5932090f18
1871 изменённых файлов: 454466 добавлений и 51996 удалений

Просмотреть файл

@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;net45;net462</TargetFrameworks>
<Version>0.9.0-preview30</Version>
<Authors>Microsoft</Authors>
<Description>The ADLS adapter implementation for the Microsoft Common Data Model Object Model.</Description>
<Copyright>Copyright Microsoft 2018</Copyright>
<Platforms>AnyCPU;x64</Platforms>
<RepositoryUrl>https://commondatamodel.visualstudio.com/CDM/_git/CDM.ObjectModel.CSharp</RepositoryUrl>
<PackageProjectUrl>https://commondatamodel.visualstudio.com/CDM</PackageProjectUrl>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CSharp" Version="4.5.0" />
<PackageReference Include="Microsoft.IdentityModel.Clients.ActiveDirectory" Version="5.2.4" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Microsoft.CommonDataModel.ObjectModel\Microsoft.CommonDataModel.ObjectModel.csproj" />
</ItemGroup>
</Project>

Просмотреть файл

@ -9,22 +9,19 @@ namespace Microsoft.CommonDataModel.ObjectModel.Storage
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using Microsoft.CommonDataModel.ObjectModel.Utilities;
using Microsoft.CommonDataModel.ObjectModel.Utilities.Network;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System.Security.Cryptography;
using System.Web;
using Newtonsoft.Json.Linq;
using Microsoft.CommonDataModel.ObjectModel.Utilities.Logging;
using System.Diagnostics;
public class ADLSAdapter : NetworkAdapter, StorageAdapter
{
@ -33,7 +30,20 @@ namespace Microsoft.CommonDataModel.ObjectModel.Storage
/// <summary>
/// The root.
/// </summary>
public string Root { get; private set; }
public string Root
{
get
{
return this._root;
}
private set
{
this._root = value;
this.ExtractFilesystemAndSubPath(this._root, out this.fileSystem, out this.subPath);
}
}
private string _root;
/// <summary>
/// The hostname of ADLS.
@ -63,6 +73,16 @@ namespace Microsoft.CommonDataModel.ObjectModel.Storage
/// <inheritdoc />
public string LocationHint { get; set; }
/// <summary>
/// The file-system name.
/// </summary>
private string fileSystem = "";
/// <summary>
/// The sub-path.
/// </summary>
private string subPath = "";
/// <summary>
/// The predefined ADLS resource.
/// </summary>
@ -109,7 +129,6 @@ namespace Microsoft.CommonDataModel.ObjectModel.Storage
this.httpClient = new CdmHttpClient();
}
/// <summary>
/// The ADLS constructor for shared key authentication.
/// </summary>
@ -164,14 +183,14 @@ namespace Microsoft.CommonDataModel.ObjectModel.Storage
var stringContent = new StringContent(request.Content, Encoding.UTF8, request.ContentType);
// Building a request and setting a URL with a position argument to be the length of the byte array of the string content (or length of UTF-8 string content).
request = await this.BuildRequest($"{url}?action=flush&position={(await stringContent.ReadAsByteArrayAsync()).Length}" , new HttpMethod("PATCH"));
request = await this.BuildRequest($"{url}?action=flush&position={(await stringContent.ReadAsByteArrayAsync()).Length}", new HttpMethod("PATCH"));
await this.ExecuteRequest(request);
}
/// <inheritdoc />
public string CreateAdapterPath(string corpusPath)
{
return $"https://{this.Hostname}{this.Root}{corpusPath}";
return $"https://{this.Hostname}{this.Root}{this.FormatCorpusPath(corpusPath)}";
}
/// <inheritdoc />
@ -180,7 +199,7 @@ namespace Microsoft.CommonDataModel.ObjectModel.Storage
var prefix = $"https://{this.Hostname}{this.Root}";
if (adapterPath.StartsWith(prefix))
{
return adapterPath.Slice(prefix.Length);
return adapterPath.Substring(prefix.Length);
}
return null;
@ -195,14 +214,60 @@ namespace Microsoft.CommonDataModel.ObjectModel.Storage
/// <inheritdoc />
public async Task<DateTimeOffset?> ComputeLastModifiedTimeAsync(string corpusPath)
{
// TODO
var url = this.CreateAdapterPath(corpusPath);
var request = await this.BuildRequest(url, HttpMethod.Head);
try
{
CdmHttpResponse cdmResponse = await base.ExecuteRequest(request);
if (cdmResponse.StatusCode.Equals(HttpStatusCode.OK))
{
return cdmResponse.Content.Headers.LastModified;
}
}
catch (HttpRequestException ex)
{
// We don't have standard logger here, so use one from system diagnostics
Debug.WriteLine($"ADLS file not found, skipping last modified time calculation for it. Exception: {ex}");
}
return null;
}
/// <inheritdoc />
public async Task<List<string>> FetchAllFilesAsync(string currFullPath)
public async Task<List<string>> FetchAllFilesAsync(string folderCorpusPath)
{
// TODO
this.CreateFetchAllFilesUrl(this.FormatCorpusPath(folderCorpusPath), out string url, out string directory);
var request = await this.BuildRequest($"{url}?directory={directory}&recursive=True&resource=filesystem", HttpMethod.Get);
CdmHttpResponse cdmResponse = await base.ExecuteRequest(request);
if (cdmResponse.StatusCode.Equals(HttpStatusCode.OK))
{
string json = await cdmResponse.Content.ReadAsStringAsync();
JObject jObject1 = JObject.Parse(json);
JArray jArray = JArray.FromObject(jObject1.GetValue("paths"));
List<string> result = new List<string>();
foreach (JObject jObject in jArray.Children<JObject>())
{
jObject.TryGetValue("isDirectory", StringComparison.OrdinalIgnoreCase, out JToken isDirectory);
if (isDirectory == null || !isDirectory.ToObject<bool>())
{
jObject.TryGetValue("name", StringComparison.OrdinalIgnoreCase, out JToken name);
string nameWithoutSubPath = this.subPath.Length > 0 && name.ToString().StartsWith(this.subPath) ?
name.ToString().Substring(this.subPath.Length + 1) : name.ToString();
result.Add(this.FormatCorpusPath(nameWithoutSubPath));
}
}
return result;
}
return null;
}
@ -267,7 +332,7 @@ namespace Microsoft.CommonDataModel.ObjectModel.Storage
builder.Append($"\n{keyValuePair[0]}:{keyValuePair[1]}");
}
}
// Hash the payload.
byte[] dataToHash = System.Text.Encoding.UTF8.GetBytes(builder.ToString().TrimEnd('\n'));
if (!TryFromBase64String(sharedKey, out byte[] bytes))
@ -286,6 +351,71 @@ namespace Microsoft.CommonDataModel.ObjectModel.Storage
return headers;
}
/// <summary>
/// Create the url to fetch all files async.
/// </summary>
/// <param name="currFullPath">Current full path.</param>
/// <param name="url">The url.</param>
/// <param name="directory">The directory param.</param>
/// <returns></returns>
private void CreateFetchAllFilesUrl(string currFullPath, out string url, out string directory)
{
url = $"https://{this.Hostname}/{fileSystem}";
directory = $"{subPath}/{currFullPath}";
}
/// <summary>
/// Extracts the filesystem and sub-path from the given root value.
/// </summary>
/// <param name="root">The root</param>
/// <param name="fileSystem">The extracted filesystem name</param>
/// <param name="subPath">The extracted sub-path</param>
private void ExtractFilesystemAndSubPath(string root, out string fileSystem, out string subPath)
{
// No root value was set
if (string.IsNullOrEmpty(root))
{
fileSystem = "";
subPath = "";
return;
}
// Remove leading /
var prepRoot = root[0] == '/' ? root.Substring(1) : root;
// Root contains only the file-system name, e.g. "fs-name"
if (prepRoot.IndexOf('/') == -1)
{
fileSystem = prepRoot;
subPath = "";
return;
}
// Root contains file-system name and folder, e.g. "fs-name/folder/folder..."
var prepRootArray = prepRoot.Split('/');
fileSystem = prepRootArray.First();
subPath = String.Join("/", prepRootArray.Skip(1));
}
/// <summary>
/// Format corpus path.
/// </summary>
/// <param name="corpusPath">The corpusPath.</param>
/// <returns></returns>
private string FormatCorpusPath(string corpusPath)
{
if (corpusPath.StartsWith("adls:"))
{
corpusPath = corpusPath.Substring(5);
}
else if (corpusPath.Length > 0 && corpusPath[0] != '/')
{
corpusPath = $"/{corpusPath}";
}
return corpusPath;
}
/// <summary>
/// Encodes from base 64 string to the byte array.
/// </summary>
@ -341,7 +471,7 @@ namespace Microsoft.CommonDataModel.ObjectModel.Storage
request.Content = content;
request.ContentType = contentType;
}
return request;
}

Просмотреть файл

@ -12,7 +12,7 @@
{
var trait = GenerateTrait();
var argumentDefinition = new CdmArgumentDefinition(null, null);
var argumentDefinition = new CdmArgumentDefinition(trait.Ctx, null);
trait.ResolvedArguments = true;
Assert.AreEqual(0, trait.Arguments.Count);
@ -20,7 +20,7 @@
Assert.AreEqual(argumentDefinition, addedArgument);
Assert.AreEqual(1, trait.Arguments.Count);
Assert.AreEqual(argumentDefinition, trait.Arguments[0]);
Assert.AreEqual(false, trait.ResolvedArguments);
Assert.IsFalse(trait.ResolvedArguments);
Assert.AreEqual(trait, trait.Arguments[0].Owner);
trait.ResolvedArguments = true;
@ -36,7 +36,7 @@
{
var trait = GenerateTrait();
var toInsert = new CdmArgumentDefinition(null, null);
var toInsert = new CdmArgumentDefinition(trait.Ctx, null);
var arg1 = trait.Arguments.Add("arg1");
var arg2 = trait.Arguments.Add("arg2");
@ -45,7 +45,7 @@
trait.Arguments.Insert(1, toInsert);
Assert.AreEqual(3, trait.Arguments.Count);
Assert.AreEqual(false, trait.ResolvedArguments);
Assert.IsFalse(trait.ResolvedArguments);
Assert.AreEqual(arg1, trait.Arguments[0]);
Assert.AreEqual(toInsert, trait.Arguments[1]);
Assert.AreEqual(arg2, trait.Arguments[2]);
@ -58,14 +58,14 @@
var trait = GenerateTrait();
trait.ResolvedArguments = true;
var argList = new List<CdmArgumentDefinition>();
var argumentDefinition = new CdmArgumentDefinition(null, null)
var argumentDefinition = new CdmArgumentDefinition(trait.Ctx, null)
{
Name = "Arg1",
Value = 123
};
argList.Add(argumentDefinition);
var valOfArg2 = CdmCollectionHelperFunctions.GenerateManifest("C://Nothing");
argumentDefinition = new CdmArgumentDefinition(null, null)
argumentDefinition = new CdmArgumentDefinition(trait.Ctx, null)
{
Name = "Arg2",
Value = valOfArg2
@ -75,7 +75,7 @@
trait.Arguments.AddRange(argList);
Assert.AreEqual(2, trait.Arguments.Count);
Assert.AreEqual(false, trait.ResolvedArguments);
Assert.IsFalse(trait.ResolvedArguments);
Assert.AreEqual("Arg1", trait.Arguments[0].Name);
Assert.AreEqual(123, trait.Arguments[0].Value);
Assert.AreEqual(trait, trait.Arguments[0].Owner);
@ -95,7 +95,7 @@
// This is what is needed by current code.
Assert.AreEqual("ValueOfTrait", value);
var argumentDefinition = new CdmArgumentDefinition(null, null);
var argumentDefinition = new CdmArgumentDefinition(trait.Ctx, null);
trait.ResolvedArguments = true;
trait.Arguments.Add(argumentDefinition);
@ -126,6 +126,25 @@
Assert.AreEqual(trait, trait.Arguments[2].Owner);
}
[TestMethod]
public void TestCdmCollectionAddPopulatesInDocumentWithVisit()
{
var manifest = CdmCollectionHelperFunctions.GenerateManifest("C:\nothing");
var entityReference = new CdmLocalEntityDeclarationDefinition(manifest.Ctx, "entityName");
var trait = entityReference.ExhibitsTraits.Add("theTrait");
var argument = trait.Arguments.Add("GreatArgumentName", "GreatValue");
manifest.Entities.Add(entityReference);
Assert.AreEqual(manifest, manifest.InDocument);
Assert.AreEqual(manifest, entityReference.InDocument);
Assert.AreEqual(manifest, trait.InDocument);
Assert.AreEqual(manifest, argument.InDocument);
}
private CdmTraitReference GenerateTrait()
{
var manifest = CdmCollectionHelperFunctions.GenerateManifest("C:\\Nothing");

Просмотреть файл

@ -22,7 +22,7 @@
cdmCorpus.Storage.Mount("local", new LocalAdapter(localRootPath));
// add cdm namespace
// Add CDM namespace.
cdmCorpus.Storage.Mount("cdm", new LocalAdapter(localRootPath));
var manifest = new CdmManifestDefinition(cdmCorpus.Ctx, "manifest");

Просмотреть файл

@ -59,11 +59,11 @@
Assert.AreEqual(2, collection.Count);
bool removed = collection.Remove(addedDocument);
Assert.AreEqual(true, removed);
Assert.IsTrue(removed);
// try to remove a second time.
removed = collection.Remove(addedDocument);
Assert.AreEqual(false, removed);
Assert.IsFalse(removed);
Assert.AreEqual(1, collection.Count);
}
@ -136,7 +136,7 @@
[TestMethod]
public void TestCdmCollectionChangeMakesDocumentDirty()
{
var manifest = CdmCollectionHelperFunctions.GenerateManifest("C:\nothing");
var manifest = CdmCollectionHelperFunctions.GenerateManifest("C:\\nothing");
var collection = new CdmCollection<CdmEntityReference>(manifest.Ctx, manifest, Enums.CdmObjectType.EntityRef);
manifest.IsDirty = false;
@ -169,7 +169,7 @@
}
/// <summary>
/// For an entity, it creates a document that will containt the entity.
/// For an entity, it creates a document that will contain the entity.
/// </summary>
/// <param name="cdmCorpus">The corpus everything belongs to.</param>
/// <param name="entity">The entity we want a document for.</param>

Просмотреть файл

@ -22,7 +22,7 @@
var addedFolder = document.Definitions.Add(folder);
var addedTrait = document.Definitions.Add(trait);
Assert.AreEqual(true, document.IsDirty);
Assert.IsTrue(document.IsDirty);
Assert.AreEqual(3, document.Definitions.Count);
Assert.AreEqual(attribute, addedAttribute);
Assert.AreEqual(folder, addedFolder);
@ -30,9 +30,8 @@
Assert.AreEqual(attribute, document.Definitions[0]);
Assert.AreEqual(folder, document.Definitions[1]);
Assert.AreEqual(trait, document.Definitions[2]);
Assert.AreEqual(document, attribute.DocCreatedIn);
Assert.AreEqual(document, folder.DocCreatedIn);
Assert.AreEqual(document, trait.DocCreatedIn);
Assert.AreEqual(document, attribute.InDocument);
Assert.AreEqual(document, trait.InDocument);
Assert.AreEqual(document, attribute.Owner);
Assert.AreEqual(document, folder.Owner);
Assert.AreEqual(document, trait.Owner);
@ -53,9 +52,9 @@
document.Definitions.Insert(0, attribute);
Assert.AreEqual(3, document.Definitions.Count);
Assert.AreEqual(true, document.IsDirty);
Assert.IsTrue(document.IsDirty);
Assert.AreEqual(attribute, document.Definitions[0]);
Assert.AreEqual(document, attribute.DocCreatedIn);
Assert.AreEqual(document, attribute.InDocument);
Assert.AreEqual(document, attribute.Owner);
Assert.AreEqual(ent1, document.Definitions[1]);
Assert.AreEqual(ent2, document.Definitions[2]);
@ -68,9 +67,9 @@
document.IsDirty = false;
var entity = document.Definitions.Add("theNameOfTheEntity");
Assert.AreEqual(true, document.IsDirty);
Assert.IsTrue(document.IsDirty);
Assert.AreEqual(entity, document.Definitions[0]);
Assert.AreEqual(document, entity.DocCreatedIn);
Assert.AreEqual(document, entity.InDocument);
Assert.AreEqual(document, entity.Owner);
Assert.AreEqual("theNameOfTheEntity", entity.EntityName);
}
@ -84,12 +83,12 @@
var attribute = document.Definitions.Add(CdmObjectType.AttributeContextDef, "Name of attribute");
var trait = document.Definitions.Add(CdmObjectType.TraitDef, "Name of trait");
Assert.AreEqual(true, document.IsDirty);
Assert.IsTrue(document.IsDirty);
Assert.AreEqual(attribute, document.Definitions[0]);
Assert.AreEqual(trait, document.Definitions[1]);
Assert.AreEqual(document, ((CdmObjectBase)attribute).DocCreatedIn);
Assert.AreEqual(document, ((CdmObjectBase)attribute).InDocument);
Assert.AreEqual(document, attribute.Owner);
Assert.AreEqual(document, ((CdmObjectBase)trait).DocCreatedIn);
Assert.AreEqual(document, ((CdmObjectBase)trait).InDocument);
Assert.AreEqual(document, trait.Owner);
}
@ -104,21 +103,20 @@
var trait = new CdmTraitDefinition(document.Ctx, "The trait");
var definitionsList = new List<CdmObjectDefinition>()
{
{
attribute,
folder,
trait
};
document.Definitions.AddRange(definitionsList);
Assert.AreEqual(true, document.IsDirty);
Assert.IsTrue(document.IsDirty);
Assert.AreEqual(3, document.Definitions.Count);
Assert.AreEqual(attribute, document.Definitions[0]);
Assert.AreEqual(folder, document.Definitions[1]);
Assert.AreEqual(trait, document.Definitions[2]);
Assert.AreEqual(document, attribute.DocCreatedIn);
Assert.AreEqual(document, folder.DocCreatedIn);
Assert.AreEqual(document, trait.DocCreatedIn);
Assert.AreEqual(document, attribute.InDocument);
Assert.AreEqual(document, trait.InDocument);
Assert.AreEqual(document, attribute.Owner);
Assert.AreEqual(document, folder.Owner);
Assert.AreEqual(document, trait.Owner);

Просмотреть файл

@ -46,7 +46,7 @@
manifest.IsDirty = false;
folder.Documents.Insert(2, document);
Assert.AreEqual(true, manifest.IsDirty);
Assert.IsTrue(manifest.IsDirty);
Assert.AreEqual(3, folder.Documents.Count);
Assert.AreEqual(doc1, folder.Documents[0]);
Assert.AreEqual(doc2, folder.Documents[1]);
@ -140,7 +140,7 @@
Assert.IsTrue(removed);
Assert.AreEqual(1, folder.Documents.Count);
Assert.AreEqual(document2, folder.Documents[0]);
Assert.AreEqual(null, document.Owner);
Assert.IsNull(document.Owner);
removed = folder.Documents.Remove(document);
Assert.IsFalse(removed);
@ -153,7 +153,7 @@
removed = folder.Documents.Remove(document.Name);
Assert.AreEqual(1, folder.Documents.Count);
Assert.AreEqual(document2, folder.Documents[0]);
Assert.AreEqual(null, document.Owner);
Assert.IsNull(document.Owner);
}
[TestMethod]

Просмотреть файл

@ -42,18 +42,6 @@
Assert.AreEqual(cdmEntityDeclaration, manifest.Entities.AllItems[1]);
}
/// <summary>
/// Tests whether Manifest.Entities.Add() throws an exception when the associated docutment is not added.
/// </summary>
[TestMethod]
public void TestManifestCannotAddEntityWithoutDoc()
{
var manifest = GenerateManifest("C:\\Root\\Path");
var entity = new CdmEntityDefinition(manifest.Ctx, "entityName", null);
Assert.ThrowsException<System.ArgumentException>(() => manifest.Entities.Add(entity));
}
/// <summary>
/// Tests whether the EntityDefinition can be passed directly to Manifest.Entities.Add().
/// </summary>
@ -126,12 +114,12 @@
bool removed = manifest.Entities.Remove(entity);
Assert.AreEqual(true, removed);
Assert.IsTrue(removed);
Assert.AreEqual(1, manifest.Entities.AllItems.Count);
Assert.AreEqual(otherEntity.EntityName, manifest.Entities.AllItems[0].EntityName);
removed = manifest.Entities.Remove(entity);
Assert.AreEqual(false, removed);
Assert.IsFalse(removed);
Assert.AreEqual(1, manifest.Entities.AllItems.Count);
}

Просмотреть файл

@ -50,7 +50,7 @@
childFolders.Insert(1, childFolder);
Assert.AreEqual(3, childFolders.Count);
Assert.AreEqual(true, manifest.IsDirty);
Assert.IsTrue(manifest.IsDirty);
Assert.AreEqual(child1, childFolders[0]);
Assert.AreEqual(childFolder, childFolders[1]);
Assert.AreEqual(child2, childFolders[2]);

Просмотреть файл

@ -16,7 +16,7 @@
var import = new CdmImport(document.Ctx, "corpusPath", "moniker");
var addedImport = document.Imports.Add(import);
Assert.AreEqual(true, document.IsDirty);
Assert.IsTrue(document.IsDirty);
Assert.AreEqual(1, document.Imports.Count);
Assert.AreEqual(import, addedImport);
Assert.AreEqual(import, document.Imports[0]);
@ -32,11 +32,11 @@
document.IsDirty = false;
var import = document.Imports.Add("corpusPath");
Assert.AreEqual(true, document.IsDirty);
Assert.IsTrue(document.IsDirty);
Assert.AreEqual(1, document.Imports.Count);
Assert.AreEqual(import, document.Imports[0]);
Assert.AreEqual("corpusPath", import.CorpusPath);
Assert.AreEqual(null, import.Moniker);
Assert.IsNull(import.Moniker);
Assert.AreEqual(document.Ctx, import.Ctx);
}
@ -47,7 +47,7 @@
document.IsDirty = false;
var import = document.Imports.Add("corpusPath", "moniker");
Assert.AreEqual(true, document.IsDirty);
Assert.IsTrue(document.IsDirty);
Assert.AreEqual(1, document.Imports.Count);
Assert.AreEqual(import, document.Imports[0]);
Assert.AreEqual("corpusPath", import.CorpusPath);
@ -67,7 +67,7 @@
};
document.Imports.AddRange(importList);
Assert.AreEqual(true, document.IsDirty);
Assert.IsTrue(document.IsDirty);
Assert.AreEqual(2, document.Imports.Count);
Assert.AreEqual(importList[0], document.Imports[0]);
Assert.AreEqual(importList[1], document.Imports[1]);

Просмотреть файл

@ -168,8 +168,8 @@
manifest.ExhibitsTraits.Add(trait);
manifest.ExhibitsTraits.Add(otherTrait);
Assert.AreEqual(false, trait.IsFromProperty);
Assert.AreEqual(false, otherTrait.IsFromProperty);
Assert.IsFalse(trait.IsFromProperty);
Assert.IsFalse(otherTrait.IsFromProperty);
Assert.AreEqual(2, manifest.ExhibitsTraits.Count);
var removed = manifest.ExhibitsTraits.Remove(trait, true);
@ -199,9 +199,9 @@
traitCopyFromProperty.IsFromProperty = true;
manifest.ExhibitsTraits.Add(traitCopyFromProperty);
Assert.AreEqual(false, trait.IsFromProperty);
Assert.AreEqual(false, otherTrait.IsFromProperty);
Assert.AreEqual(true, traitCopyFromProperty.IsFromProperty);
Assert.IsFalse(trait.IsFromProperty);
Assert.IsFalse(otherTrait.IsFromProperty);
Assert.IsTrue(traitCopyFromProperty.IsFromProperty);
Assert.AreEqual(3, manifest.ExhibitsTraits.Count);
var removed = manifest.ExhibitsTraits.Remove("TraitName");
@ -229,7 +229,7 @@
manifest.ExhibitsTraits.Add(otherTrait);
Assert.AreEqual(6, manifest.ExhibitsTraits.Count);
Assert.AreEqual(true, manifest.ExhibitsTraits[2].IsFromProperty);
Assert.IsTrue(manifest.ExhibitsTraits[2].IsFromProperty);
var removed = manifest.ExhibitsTraits.Remove(trait);
Assert.AreEqual("TraitName", (manifest.ExhibitsTraits[0].ExplicitReference as CdmTraitDefinition).TraitName);
@ -248,8 +248,8 @@
manifest.ExhibitsTraits.Add(trait);
manifest.ExhibitsTraits.Add(otherTrait);
Assert.AreEqual(false, manifest.ExhibitsTraits[0].IsFromProperty);
Assert.AreEqual(false, manifest.ExhibitsTraits[1].IsFromProperty);
Assert.IsFalse(manifest.ExhibitsTraits[0].IsFromProperty);
Assert.IsFalse(manifest.ExhibitsTraits[1].IsFromProperty);
var index = manifest.ExhibitsTraits.IndexOf(trait.TraitName, true);
Assert.AreEqual(-1, index);

Просмотреть файл

@ -39,12 +39,6 @@
CdmCorpusDefinition corpus = new CdmCorpusDefinition();
corpus.SetEventCallback(new Utilities.EventCallback { Invoke = CommonDataModelLoader.ConsoleStatusReport }, CdmStatusLevel.Warning);
corpus.Storage.Mount("local", new LocalAdapter(testInputPath));
corpus.Storage.Mount("cdm", new GithubAdapter()
{
Timeout = TimeSpan.FromSeconds(3),
MaximumTimeout = TimeSpan.FromSeconds(6),
NumberOfRetries = 1
});
corpus.Storage.DefaultNamespace = "local";
@ -61,7 +55,7 @@
// check that each relationship has been created correctly
foreach (E2ERelationship expectedRel in expectedAllManifestRels)
{
List<CdmE2ERelationship> found = rootManifest.Relationships.AllItems.Where(x =>
List<CdmE2ERelationship> found = rootManifest.Relationships.Where(x =>
x.FromEntity == expectedRel.FromEntity
&& x.FromEntityAttribute == expectedRel.FromEntityAttribute
&& x.ToEntity == expectedRel.ToEntity
@ -72,7 +66,7 @@
foreach (E2ERelationship expectedSubRel in expectedAllSubManifestRels)
{
List<CdmE2ERelationship> found = subManifest.Relationships.AllItems.Where(x =>
List<CdmE2ERelationship> found = subManifest.Relationships.Where(x =>
x.FromEntity == expectedSubRel.FromEntity
&& x.FromEntityAttribute == expectedSubRel.FromEntityAttribute
&& x.ToEntity == expectedSubRel.ToEntity
@ -81,7 +75,6 @@
Assert.AreEqual(found.Count, 1);
}
// make sure only relationships where to and from entities are in the manifest are found with the "exclusive" option is passed in
await rootManifest.PopulateManifestRelationshipsAsync(CdmRelationshipDiscoveryStyle.Exclusive);
@ -91,7 +84,7 @@
// check that each relationship has been created correctly
foreach (E2ERelationship expectedRel in expectedExclusiveManifestRels)
{
List<CdmE2ERelationship> found = rootManifest.Relationships.AllItems.Where(x =>
List<CdmE2ERelationship> found = rootManifest.Relationships.Where(x =>
x.FromEntity == expectedRel.FromEntity
&& x.FromEntityAttribute == expectedRel.FromEntityAttribute
&& x.ToEntity == expectedRel.ToEntity
@ -102,7 +95,7 @@
foreach (E2ERelationship expectedSubRel in expectedExclusiveSubManifestRels)
{
List<CdmE2ERelationship> found = subManifest.Relationships.AllItems.Where(x =>
List<CdmE2ERelationship> found = subManifest.Relationships.Where(x =>
x.FromEntity == expectedSubRel.FromEntity
&& x.FromEntityAttribute == expectedSubRel.FromEntityAttribute
&& x.ToEntity == expectedSubRel.ToEntity
@ -117,5 +110,117 @@
Assert.AreEqual(rootManifest.Relationships.Count, 0);
Assert.AreEqual(subManifest.Relationships.Count, 0);
}
/// <summary>
/// Testing calculation of relationships and that those relationships are
/// properly added to manifest objects
/// </summary>
[TestMethod]
public async Task TestCalculateRelationshipsOnResolvedEntities()
{
var expectedResolvedManifestRels = JToken.Parse(TestHelper.GetExpectedOutputFileContent(testsSubpath, "TestCalculateRelationshipsOnResolvedEntities", "expectedResolvedManifestRels.json")).ToObject<List<E2ERelationship>>();
var expectedResolvedSubManifestRels = JToken.Parse(TestHelper.GetExpectedOutputFileContent(testsSubpath, "TestCalculateRelationshipsOnResolvedEntities", "expectedResolvedSubManifestRels.json")).ToObject<List<E2ERelationship>>();
var testInputPath = TestHelper.GetInputFolderPath(testsSubpath, "TestCalculateRelationshipsOnResolvedEntities");
CdmCorpusDefinition corpus = new CdmCorpusDefinition();
corpus.SetEventCallback(new Utilities.EventCallback { Invoke = CommonDataModelLoader.ConsoleStatusReport }, CdmStatusLevel.Warning);
corpus.Storage.Mount("local", new LocalAdapter(testInputPath));
corpus.Storage.DefaultNamespace = "local";
var rootManifest = await corpus.FetchObjectAsync<CdmManifestDefinition>("local:/default.manifest.cdm.json");
var resolvedManifest = await LoadAndResolveManifest(corpus, rootManifest, "-resolved");
string subManifestPath = corpus.Storage.CreateAbsoluteCorpusPath(resolvedManifest.SubManifests[0].Definition);
CdmManifestDefinition subManifest = await corpus.FetchObjectAsync<CdmManifestDefinition>(subManifestPath) as CdmManifestDefinition;
// using createResolvedManifest will only populate exclusive relationships
Assert.AreEqual(resolvedManifest.Relationships.Count, expectedResolvedManifestRels.Count);
Assert.AreEqual(subManifest.Relationships.Count, expectedResolvedSubManifestRels.Count);
// check that each relationship has been created correctly
foreach (E2ERelationship expectedRel in expectedResolvedManifestRels)
{
List<CdmE2ERelationship> found = resolvedManifest.Relationships.Where(x =>
x.FromEntity == expectedRel.FromEntity
&& x.FromEntityAttribute == expectedRel.FromEntityAttribute
&& x.ToEntity == expectedRel.ToEntity
&& x.ToEntityAttribute == expectedRel.ToEntityAttribute
).ToList();
Assert.AreEqual(found.Count, 1);
}
foreach (E2ERelationship expectedSubRel in expectedResolvedSubManifestRels)
{
List<CdmE2ERelationship> found = subManifest.Relationships.Where(x =>
x.FromEntity == expectedSubRel.FromEntity
&& x.FromEntityAttribute == expectedSubRel.FromEntityAttribute
&& x.ToEntity == expectedSubRel.ToEntity
&& x.ToEntityAttribute == expectedSubRel.ToEntityAttribute
).ToList();
Assert.AreEqual(found.Count, 1);
}
// it is not enough to check if the relationships are correct.
// We need to check if the incoming and outgoing relationships are
// correct as well. One being correct can cover up the other being wrong
// A
var aEnt = await corpus.FetchObjectAsync<CdmEntityDefinition>(resolvedManifest.Entities[0].EntityPath, resolvedManifest);
var aInRels = corpus.FetchIncomingRelationships(aEnt);
var aOutRels = corpus.FetchOutgoingRelationships(aEnt);
Assert.AreEqual(aInRels.Count, 0);
Assert.AreEqual(aOutRels.Count, 1);
Assert.AreEqual(aOutRels[0].FromEntity, "local:/A-resolved.cdm.json/A");
Assert.AreEqual(aOutRels[0].ToEntity, "local:/B-resolved.cdm.json/B");
// B
var bEnt = await corpus.FetchObjectAsync<CdmEntityDefinition>(resolvedManifest.Entities[1].EntityPath, resolvedManifest);
var bInRels = corpus.FetchIncomingRelationships(bEnt);
var bOutRels = corpus.FetchOutgoingRelationships(bEnt);
Assert.AreEqual(bInRels.Count, 1);
Assert.AreEqual(bInRels[0].FromEntity, "local:/A-resolved.cdm.json/A");
Assert.AreEqual(bInRels[0].ToEntity, "local:/B-resolved.cdm.json/B");
Assert.AreEqual(bOutRels.Count, 0);
// C
var cEnt = await corpus.FetchObjectAsync<CdmEntityDefinition>(subManifest.Entities[0].EntityPath, subManifest);
var cInRels = corpus.FetchIncomingRelationships(cEnt);
var cOutRels = corpus.FetchOutgoingRelationships(cEnt);
Assert.AreEqual(cInRels.Count, 0);
Assert.AreEqual(cOutRels.Count, 2);
Assert.AreEqual(cOutRels[0].FromEntity, "local:/sub/C-resolved.cdm.json/C");
// TODO: this should point to the resolved entity, currently an open bug
Assert.AreEqual(cOutRels[0].ToEntity, "local:/B.cdm.json/B");
Assert.AreEqual(cOutRels[1].FromEntity, "local:/sub/C-resolved.cdm.json/C");
Assert.AreEqual(cOutRels[1].ToEntity, "local:/sub/D-resolved.cdm.json/D");
// D
var dEnt = await corpus.FetchObjectAsync<CdmEntityDefinition>(subManifest.Entities[1].EntityPath, subManifest);
var dInRels = corpus.FetchIncomingRelationships(dEnt);
var dOutRels = corpus.FetchOutgoingRelationships(dEnt);
Assert.AreEqual(dInRels.Count, 1);
Assert.AreEqual(dInRels[0].FromEntity, "local:/sub/C-resolved.cdm.json/C");
Assert.AreEqual(dInRels[0].ToEntity, "local:/sub/D-resolved.cdm.json/D");
Assert.AreEqual(dOutRels.Count, 0);
}
private async static Task<CdmManifestDefinition> LoadAndResolveManifest(CdmCorpusDefinition corpus, CdmManifestDefinition manifest, string renameSuffix)
{
Console.WriteLine("Resolving manifest " + manifest.ManifestName + " ...");
CdmManifestDefinition resolvedManifest = await manifest.CreateResolvedManifestAsync(manifest.ManifestName + renameSuffix, "{n}-resolved.cdm.json");
foreach (CdmManifestDeclarationDefinition subManifestDecl in manifest.SubManifests)
{
CdmManifestDefinition subManifest = await corpus.FetchObjectAsync<CdmManifestDefinition>(subManifestDecl.Definition, manifest);
CdmManifestDefinition resolvedSubManifest = await LoadAndResolveManifest(corpus, subManifest, renameSuffix);
CdmManifestDeclarationDefinition resolvedDecl = corpus.MakeObject<CdmManifestDeclarationDefinition>(CdmObjectType.ManifestDeclarationDef, resolvedSubManifest.ManifestName);
resolvedDecl.Definition = corpus.Storage.CreateRelativeCorpusPath(resolvedSubManifest.AtCorpusPath, resolvedManifest);
resolvedManifest.SubManifests.Add(resolvedDecl);
}
return resolvedManifest;
}
}
}

Просмотреть файл

@ -23,6 +23,28 @@
/// </summary>
private static string testsSubpath = Path.Combine("Cdm", "ResolutionGuidance");
[TestMethod]
public async Task TestResolutionGuidanceCopy()
{
var corpus = new CdmCorpusDefinition();
var resolutionGuidance = new CdmAttributeResolutionGuidance(corpus.Ctx)
{
expansion = new CdmAttributeResolutionGuidance.Expansion(),
entityByReference = new CdmAttributeResolutionGuidance.CdmAttributeResolutionGuidance_EntityByReference(),
selectsSubAttribute = new CdmAttributeResolutionGuidance.CdmAttributeResolutionGuidance_SelectsSubAttribute(),
imposedDirectives = new List<string>(),
removedDirectives = new List<string>()
};
var resolutionGuidanceCopy = resolutionGuidance.Copy() as CdmAttributeResolutionGuidance;
Assert.IsFalse(Object.ReferenceEquals(resolutionGuidance.expansion, resolutionGuidanceCopy.expansion));
Assert.IsFalse(Object.ReferenceEquals(resolutionGuidance.entityByReference, resolutionGuidanceCopy.entityByReference));
Assert.IsFalse(Object.ReferenceEquals(resolutionGuidance.selectsSubAttribute, resolutionGuidanceCopy.selectsSubAttribute));
Assert.IsFalse(Object.ReferenceEquals(resolutionGuidance.imposedDirectives, resolutionGuidanceCopy.imposedDirectives));
Assert.IsFalse(Object.ReferenceEquals(resolutionGuidance.removedDirectives, resolutionGuidanceCopy.removedDirectives));
}
/// <summary>
/// Resolution Guidance Test 01 - Resolve entity by name
/// </summary>
@ -161,7 +183,7 @@
resOpt.Directives = new AttributeResolutionDirectiveSet(new HashSet<string> { });
outputEntityFileName = $"{sourceEntityName}_Resolved_{entityFileName}.cdm.json";
resolvedEntityDef = await srcEntityDef.CreateResolvedEntityAsync(outputEntityFileName, resOpt, actualOutputFolder);
if (await resolvedEntityDef.InDocument.SaveAsAsync(outputEntityFileName, false, new CopyOptions()))
if (await resolvedEntityDef.InDocument.SaveAsAsync(outputEntityFileName, true, new CopyOptions()))
{
ValidateOutput(outputEntityFileName, testExpectedOutputPath, testActualOutputPath);
}
@ -170,7 +192,7 @@
resOpt.Directives = new AttributeResolutionDirectiveSet(new HashSet<string> { "referenceOnly" });
outputEntityFileName = $"{sourceEntityName}_Resolved_{entityFileName}.cdm.json";
resolvedEntityDef = await srcEntityDef.CreateResolvedEntityAsync(outputEntityFileName, resOpt, actualOutputFolder);
if (await resolvedEntityDef.InDocument.SaveAsAsync(outputEntityFileName, false, new CopyOptions()))
if (await resolvedEntityDef.InDocument.SaveAsAsync(outputEntityFileName, true, new CopyOptions()))
{
ValidateOutput(outputEntityFileName, testExpectedOutputPath, testActualOutputPath);
}
@ -179,7 +201,7 @@
resOpt.Directives = new AttributeResolutionDirectiveSet(new HashSet<string> { "normalized" });
outputEntityFileName = $"{sourceEntityName}_Resolved_{entityFileName}.cdm.json";
resolvedEntityDef = await srcEntityDef.CreateResolvedEntityAsync(outputEntityFileName, resOpt, actualOutputFolder);
if (await resolvedEntityDef.InDocument.SaveAsAsync(outputEntityFileName, false, new CopyOptions()))
if (await resolvedEntityDef.InDocument.SaveAsAsync(outputEntityFileName, true, new CopyOptions()))
{
ValidateOutput(outputEntityFileName, testExpectedOutputPath, testActualOutputPath);
}
@ -188,7 +210,7 @@
resOpt.Directives = new AttributeResolutionDirectiveSet(new HashSet<string> { "structured" });
outputEntityFileName = $"{sourceEntityName}_Resolved_{entityFileName}.cdm.json";
resolvedEntityDef = await srcEntityDef.CreateResolvedEntityAsync(outputEntityFileName, resOpt, actualOutputFolder);
if (await resolvedEntityDef.InDocument.SaveAsAsync(outputEntityFileName, false, new CopyOptions()))
if (await resolvedEntityDef.InDocument.SaveAsAsync(outputEntityFileName, true, new CopyOptions()))
{
ValidateOutput(outputEntityFileName, testExpectedOutputPath, testActualOutputPath);
}
@ -197,16 +219,7 @@
resOpt.Directives = new AttributeResolutionDirectiveSet(new HashSet<string> { "referenceOnly", "normalized" });
outputEntityFileName = $"{sourceEntityName}_Resolved_{entityFileName}.cdm.json";
resolvedEntityDef = await srcEntityDef.CreateResolvedEntityAsync(outputEntityFileName, resOpt, actualOutputFolder);
if (await resolvedEntityDef.InDocument.SaveAsAsync(outputEntityFileName, false, new CopyOptions()))
{
ValidateOutput(outputEntityFileName, testExpectedOutputPath, testActualOutputPath);
}
entityFileName = "referenceOnly_normalized";
resOpt.Directives = new AttributeResolutionDirectiveSet(new HashSet<string> { "referenceOnly", "normalized" });
outputEntityFileName = $"{sourceEntityName}_Resolved_{entityFileName}.cdm.json";
resolvedEntityDef = await srcEntityDef.CreateResolvedEntityAsync(outputEntityFileName, resOpt, actualOutputFolder);
if (await resolvedEntityDef.InDocument.SaveAsAsync(outputEntityFileName, false, new CopyOptions()))
if (await resolvedEntityDef.InDocument.SaveAsAsync(outputEntityFileName, true, new CopyOptions()))
{
ValidateOutput(outputEntityFileName, testExpectedOutputPath, testActualOutputPath);
}
@ -215,7 +228,7 @@
resOpt.Directives = new AttributeResolutionDirectiveSet(new HashSet<string> { "referenceOnly", "structured" });
outputEntityFileName = $"{sourceEntityName}_Resolved_{entityFileName}.cdm.json";
resolvedEntityDef = await srcEntityDef.CreateResolvedEntityAsync(outputEntityFileName, resOpt, actualOutputFolder);
if (await resolvedEntityDef.InDocument.SaveAsAsync(outputEntityFileName, false, new CopyOptions()))
if (await resolvedEntityDef.InDocument.SaveAsAsync(outputEntityFileName, true, new CopyOptions()))
{
ValidateOutput(outputEntityFileName, testExpectedOutputPath, testActualOutputPath);
}
@ -224,7 +237,7 @@
resOpt.Directives = new AttributeResolutionDirectiveSet(new HashSet<string> { "normalized", "structured" });
outputEntityFileName = $"{sourceEntityName}_Resolved_{entityFileName}.cdm.json";
resolvedEntityDef = await srcEntityDef.CreateResolvedEntityAsync(outputEntityFileName, resOpt, actualOutputFolder);
if (await resolvedEntityDef.InDocument.SaveAsAsync(outputEntityFileName, false, new CopyOptions()))
if (await resolvedEntityDef.InDocument.SaveAsAsync(outputEntityFileName, true, new CopyOptions()))
{
ValidateOutput(outputEntityFileName, testExpectedOutputPath, testActualOutputPath);
}
@ -233,7 +246,7 @@
resOpt.Directives = new AttributeResolutionDirectiveSet(new HashSet<string> { "referenceOnly", "normalized", "structured" });
outputEntityFileName = $"{sourceEntityName}_Resolved_{entityFileName}.cdm.json";
resolvedEntityDef = await srcEntityDef.CreateResolvedEntityAsync(outputEntityFileName, resOpt, actualOutputFolder);
if (await resolvedEntityDef.InDocument.SaveAsAsync(outputEntityFileName, false, new CopyOptions()))
if (await resolvedEntityDef.InDocument.SaveAsAsync(outputEntityFileName, true, new CopyOptions()))
{
ValidateOutput(outputEntityFileName, testExpectedOutputPath, testActualOutputPath);
}

Просмотреть файл

@ -164,14 +164,6 @@ namespace Microsoft.CommonDataModel.Tools.Processor
await validateStep(CdmValidationStep.Start).ConfigureAwait(false);
}
public static void PersistCorpus(CdmCorpusDefinition cdmCorpus, AttributeResolutionDirectiveSet directives, CopyOptions options = null)
{
if (cdmCorpus?.ChildFolders?.Count == 1)
{
PersistCorpusFolder(cdmCorpus.RootPath, cdmCorpus.ChildFolders[0], directives, options);
}
}
public static void PersistCorpusFolder(string rootPath, CdmFolderDefinition cdmFolder, AttributeResolutionDirectiveSet directiveSet, CopyOptions options = null)
{
if (cdmFolder != null)

Просмотреть файл

@ -20,6 +20,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Microsoft.CommonDataModel.ObjectModel.Adapter.Adls\Microsoft.CommonDataModel.ObjectModel.Adapter.Adls.csproj" />
<ProjectReference Include="..\Microsoft.CommonDataModel.ObjectModel\Microsoft.CommonDataModel.ObjectModel.csproj" />
</ItemGroup>

Просмотреть файл

@ -7,10 +7,12 @@
using Microsoft.CommonDataModel.ObjectModel.Enums;
using Microsoft.CommonDataModel.ObjectModel.Persistence.CdmFolder;
using Microsoft.CommonDataModel.ObjectModel.Persistence.CdmFolder.Types;
using Microsoft.CommonDataModel.ObjectModel.Storage;
using Microsoft.CommonDataModel.ObjectModel.Utilities;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
[TestClass]
public class DataPartitionTest
@ -21,7 +23,7 @@
private string testsSubpath = Path.Combine("Persistence", "CdmFolder", "DataPartition");
/// <summary>
/// Testing for folder impl instance with local entity declaration having data partitions.
/// Testing for Manifest with local entity declaration having data partitions.
/// </summary>
[TestMethod]
public void TestLoadLocalEntitiyWithDataPartition()
@ -31,23 +33,59 @@
Assert.AreEqual(cdmManifest.Entities.Count, 1);
Assert.AreEqual(cdmManifest.Entities[0].ObjectType, CdmObjectType.LocalEntityDeclarationDef);
var entity = cdmManifest.Entities[0];
Assert.AreEqual(entity.DataPartitions.Count, 1);
var partition = entity.DataPartitions[0];
Assert.AreEqual(partition.Location, "test/location");
Assert.AreEqual(TimeUtils.GetFormattedDateString(partition.LastFileModifiedTime), "2008-09-15T23:53:23.000Z");
Assert.AreEqual(partition.ExhibitsTraits.Count, 1);
Assert.AreEqual(partition.SpecializedSchema, "teststring");
Assert.AreEqual(entity.DataPartitions.Count, 2);
var relativePartition = entity.DataPartitions[0];
Assert.AreEqual(relativePartition.Name, "Sample data partition");
Assert.AreEqual(relativePartition.Location, "test/location");
Assert.AreEqual(TimeUtils.GetFormattedDateString(relativePartition.LastFileModifiedTime), "2008-09-15T23:53:23.000Z");
Assert.AreEqual(relativePartition.ExhibitsTraits.Count, 1);
Assert.AreEqual(relativePartition.SpecializedSchema, "teststring");
var testList = partition.Arguments["test"];
Assert.AreEqual(testList.Count, 2);
var testList = relativePartition.Arguments["test"];
Assert.AreEqual(testList.Count, 3);
Assert.AreEqual(testList[0], "something");
Assert.AreEqual(testList[1], "somethingelse");
Assert.AreEqual(testList[2], "anotherthing");
var keyList = partition.Arguments["KEY"];
var keyList = relativePartition.Arguments["KEY"];
Assert.AreEqual(keyList.Count, 1);
Assert.AreEqual(keyList[0], "VALUE");
Assert.IsFalse(partition.Arguments.ContainsKey("wrong"));
Assert.IsFalse(relativePartition.Arguments.ContainsKey("wrong"));
var absolutePartition = entity.DataPartitions[1];
Assert.AreEqual(absolutePartition.Location, "local:/some/test/location");
}
/// <summary>
/// Testing programmatically creating manifest with partitions and persisting
/// </summary>
[TestMethod]
public void TestProgrammaticallyCreatePartitions()
{
var corpus = new CdmCorpusDefinition();
corpus.Storage.Mount("local", new LocalAdapter());
var manifest = corpus.MakeObject<CdmManifestDefinition>(CdmObjectType.ManifestDef, "manifest");
var entity = manifest.Entities.Add("entity");
var relativePartition = corpus.MakeObject<CdmDataPartitionDefinition>(CdmObjectType.DataPartitionDef, "relative partition");
relativePartition.Location = "relative/path";
var absolutePartition = corpus.MakeObject<CdmDataPartitionDefinition>(CdmObjectType.DataPartitionDef, "absolute partition");
absolutePartition.Location = "local:/absolute/path";
entity.DataPartitions.Add(relativePartition);
entity.DataPartitions.Add(absolutePartition);
var manifestData = ManifestPersistence.ToData(manifest, new ResolveOptions(), new CopyOptions());
Assert.AreEqual(manifestData.Entities.Count, 1);
var entityData = manifestData.Entities[0];
var partitionsList = entityData.Value<JArray>("dataPartitions");
Assert.AreEqual(partitionsList.Count, 2);
var relativePartitionData = partitionsList.First;
var absolutePartitionData = partitionsList.Last;
Assert.AreEqual(relativePartitionData.Value<string>("location"), relativePartition.Location);
Assert.AreEqual(absolutePartitionData.Value<string>("location"), absolutePartition.Location);
}
}
}

Просмотреть файл

@ -82,10 +82,10 @@ namespace Microsoft.CommonDataModel.ObjectModel.Tests.Persistence.CdmFolder
Assert.AreEqual("docName", cdmManifest.ManifestName);
}
/// <summary>
/// Test for copy data.
/// </summary>
[TestMethod]
/// <summary>
/// Test for copy data.
/// </summary>
[TestMethod]
public void TestManifestForCopyData()
{
var content = TestHelper.GetInputFileContent(testsSubpath, "TestManifestForCopyData", "complete.manifest.cdm.json");
@ -118,6 +118,7 @@ namespace Microsoft.CommonDataModel.ObjectModel.Tests.Persistence.CdmFolder
cdmCorpus.SetEventCallback(new EventCallback { Invoke = CommonDataModelLoader.ConsoleStatusReport }, CdmStatusLevel.Warning);
cdmCorpus.Storage.Mount("someNamespace", new LocalAdapter(inputPath));
cdmCorpus.Storage.Mount("local", new LocalAdapter(inputPath));
cdmCorpus.Storage.Unmount("cdm");
cdmCorpus.Storage.DefaultNamespace = "local";
var cdmManifest = await cdmCorpus.FetchObjectAsync<CdmManifestDefinition>("someNamespace:/default.manifest.cdm.json");
var statusTimeAtLoad = cdmManifest.LastFileStatusCheckTime;
@ -173,11 +174,11 @@ namespace Microsoft.CommonDataModel.ObjectModel.Tests.Persistence.CdmFolder
{
switch (partition.Location)
{
case "/partitions/existingPartition.csv":
case "partitions/existingPartition.csv":
totalExpectedPartitionsFound++;
break;
case "/partitions/someSubFolder/someSubPartition.csv":
case "partitions/someSubFolder/someSubPartition.csv":
totalExpectedPartitionsFound++;
Assert.AreEqual(partition.SpecializedSchema, "test special schema");
Assert.IsTrue(partition.LastFileStatusCheckTime > timeBeforeLoad);
@ -192,28 +193,44 @@ namespace Microsoft.CommonDataModel.ObjectModel.Tests.Persistence.CdmFolder
Assert.AreEqual(argArray.Count, 1);
Assert.AreEqual(argArray[0], "/someSubFolder/someSub");
break;
case "/partitions/newPartition.csv":
case "partitions/newPartition.csv":
totalExpectedPartitionsFound++;
Assert.AreEqual(partition.Arguments.Count, 1);
break;
case "/partitions/2018/folderCapture.csv":
case "partitions/2018/folderCapture.csv":
totalExpectedPartitionsFound++;
Assert.AreEqual(partition.Arguments.Count, 1);
Assert.AreEqual(partition.Arguments.ContainsKey("year"), true);
Assert.AreEqual(partition.Arguments["year"][0], "2018");
break;
case "/partitions/testTooFew.csv":
case "partitions/2018/8/15/folderCapture.csv":
totalExpectedPartitionsFound++;
Assert.AreEqual(partition.Arguments.Count, 3);
Assert.AreEqual(partition.Arguments.ContainsKey("year"), true);
Assert.AreEqual(partition.Arguments["year"][0], "2018");
Assert.AreEqual(partition.Arguments.ContainsKey("month"), true);
Assert.AreEqual(partition.Arguments["month"][0], "8");
Assert.AreEqual(partition.Arguments.ContainsKey("day"), true);
Assert.AreEqual(partition.Arguments["day"][0], "15");
break;
case "partitions/2018/8/15/folderCaptureRepeatedGroup.csv":
totalExpectedPartitionsFound++;
Assert.AreEqual(partition.Arguments.Count, 1);
Assert.AreEqual(partition.Arguments.ContainsKey("day"), true);
Assert.AreEqual(partition.Arguments["day"][0], "15");
break;
case "partitions/testTooFew.csv":
totalExpectedPartitionsFound++;
Assert.AreEqual(partition.Arguments.Count, 0);
break;
case "/partitions/testTooMany.csv":
case "partitions/testTooMany.csv":
totalExpectedPartitionsFound++;
Assert.AreEqual(partition.Arguments.Count, 0);
break;
}
}
Assert.AreEqual(totalExpectedPartitionsFound, 6);
Assert.AreEqual(totalExpectedPartitionsFound, 8);
}
/// <summary>
@ -266,8 +283,7 @@ namespace Microsoft.CommonDataModel.ObjectModel.Tests.Persistence.CdmFolder
functionParameter1 = statusLevel;
functionParameter2 = message1;
};
var cdmCorpusContext = new ResolveContext(corpus, callback);
corpus.Ctx = cdmCorpusContext;
corpus.SetEventCallback(callback);
var absolutePath = corpus.Storage.CreateAbsoluteCorpusPath("Abc",
new CdmManifestDefinition(null, null) { Namespace = "cdm", FolderPath = "Mnp" });
@ -296,8 +312,7 @@ namespace Microsoft.CommonDataModel.ObjectModel.Tests.Persistence.CdmFolder
functionParameter1 = statusLevel;
functionParameter2 = message1;
};
var cdmCorpusContext = new ResolveContext(corpus, callback);
corpus.Ctx = cdmCorpusContext;
corpus.SetEventCallback(callback);
var absolutePath = corpus.Storage.CreateAbsoluteCorpusPath("./Abc");
Assert.IsTrue(functionWasCalled);
@ -347,8 +362,7 @@ namespace Microsoft.CommonDataModel.ObjectModel.Tests.Persistence.CdmFolder
functionParameter1 = statusLevel;
functionParameter2 = message1;
};
var cdmCorpusContext = new ResolveContext(corpus, callback);
corpus.Ctx = cdmCorpusContext;
corpus.SetEventCallback(callback);
var absolutePath = corpus.Storage.CreateAbsoluteCorpusPath("Abc",
new CdmManifestDefinition(null, null) { Namespace = "cdm", FolderPath = "./Mnp" });

Просмотреть файл

@ -0,0 +1,56 @@

namespace Microsoft.CommonDataModel.ObjectModel.Tests.Persistence.ModelJson
{
using System.IO;
using Microsoft.CommonDataModel.ObjectModel.Cdm;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using modelJsonPersistence = Microsoft.CommonDataModel.ObjectModel.Persistence.ModelJson;
using Newtonsoft.Json;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using Microsoft.CommonDataModel.ObjectModel.Persistence.ModelJson.types;
[TestClass]
public class DataPartitionTest : ModelJsonTestsBase
{
/// <summary>
/// The path between TestDataPath and TestName.
/// </summary>
private string testsSubpath = Path.Combine("Persistence", "ModelJson", "DataPartition");
/// <summary>
/// Testing whether DataPartition Location is consistently populated when:
/// 1. Manifest is read directly.
/// 2. Manifest is obtained by converting a model.json.
/// </summary>
[TestMethod]
public async Task TestModelJsonDataPartitionLocationConsistency()
{
var inputPath = TestHelper.GetInputFolderPath(testsSubpath, "TestModelJsonDataPartitionLocationConsistency");
var cdmCorpus = this.GetLocalCorpus(inputPath);
var manifestRead = await cdmCorpus.FetchObjectAsync<CdmManifestDefinition>("default.manifest.cdm.json", cdmCorpus.Storage.FetchRootFolder("local"));
Assert.AreEqual("EpisodeOfCare/partition-data.csv", manifestRead.Entities[0].DataPartitions[0].Location);
var convertedToModelJson = await modelJsonPersistence.ManifestPersistence.ToData(manifestRead, null, null);
string location = (convertedToModelJson.Entities[0]["partitions"][0]["location"] as JValue).Value<string>();
// Model Json uses absolute adapter path.
Assert.IsTrue(location.Contains("\\Microsoft.CommonDataModel\\Microsoft.CommonDataModel.ObjectModel.Tests\\TestData\\Persistence\\ModelJson\\DataPartition\\TestModelJsonDataPartitionLocationConsistency\\Input\\EpisodeOfCare\\partition-data.csv"));
var cdmCorpus2 = this.GetLocalCorpus(inputPath);
var manifestAfterConvertion = await modelJsonPersistence.ManifestPersistence.FromData(cdmCorpus2.Ctx, convertedToModelJson, cdmCorpus2.Storage.FetchRootFolder("local"));
Assert.AreEqual("EpisodeOfCare/partition-data.csv", manifestAfterConvertion.Entities[0].DataPartitions[0].Location);
var cdmCorpus3 = this.GetLocalCorpus(inputPath);
var readFile = TestHelper.GetInputFileContent(testsSubpath, "TestModelJsonDataPartitionLocationConsistency", "model.json");
var namespaceFolder = cdmCorpus3.Storage.FetchRootFolder("local");
var modelJsonAsString = readFile.Replace("C:\\\\cdm\\\\CDM.ObjectModel.CSharp\\\\Microsoft.CommonDataModel\\\\Microsoft.CommonDataModel.ObjectModel.Tests\\\\TestData\\\\Persistence\\\\ModelJson\\\\DataPartition\\\\TestModelJsonDataPartitionLocationConsistency\\\\Input\\\\EpisodeOfCare\\\\partition-data.csv",
location.Replace("\\", "\\\\"));
var manifestReadFromModelJson = await modelJsonPersistence.ManifestPersistence.FromData(cdmCorpus3.Ctx, JsonConvert.DeserializeObject<Model>(modelJsonAsString), namespaceFolder);
Assert.AreEqual("EpisodeOfCare/partition-data.csv", manifestReadFromModelJson.Entities[0].DataPartitions[0].Location);
}
}
}

Просмотреть файл

@ -115,7 +115,7 @@
var inputPath = TestHelper.GetInputFolderPath(testsSubpath, "TestModelJsonExtensibility");
var cdmCorpus = this.GetLocalCorpus(inputPath);
var cdmManifest = await cdmCorpus.FetchObjectAsync<CdmManifestDefinition>("SerializerTesting-model.json", cdmCorpus.Storage.FetchRootFolder("local"));
var cdmManifest = await cdmCorpus.FetchObjectAsync<CdmManifestDefinition>("model.json", cdmCorpus.Storage.FetchRootFolder("local"));
var obtainedModel = await ManifestPersistence.ToData(cdmManifest, null, null);
// The imports were generated during processing and are not present in the original file.

Просмотреть файл

@ -9,6 +9,8 @@
using Assert = AssertExtension;
using Newtonsoft.Json.Linq;
using Microsoft.CommonDataModel.ObjectModel.Cdm;
using System.Collections.Generic;
using Microsoft.CommonDataModel.ObjectModel.Persistence.CdmFolder.Types;
/// <summary>
/// The model json tests.
@ -85,7 +87,7 @@
var cdmCorpus = this.GetLocalCorpus(testInputPath);
var watch = Stopwatch.StartNew();
var cdmManifest = await cdmCorpus.FetchObjectAsync<CdmManifestDefinition>("result.manifest.model.json", cdmCorpus.Storage.FetchRootFolder("local"));
var cdmManifest = await cdmCorpus.FetchObjectAsync<CdmManifestDefinition>("model.json", cdmCorpus.Storage.FetchRootFolder("local"));
watch.Stop();
Assert.Performance(1000, watch.ElapsedMilliseconds, "Loading from data");
@ -149,6 +151,41 @@
this.HandleOutput("TestLoadingCdmFolderResultAndSavingModelJson", "model.json", obtainedModelJson);
}
/// <summary>
/// Test if the imports location are relative to the root level file.
/// </summary>
/// <returns>The <see cref="Task"/>.</returns>
[Test]
public async Task TestImportsRelativePath()
{
// the corpus path in the imports are relative to the document where it was defined.
// when saving in model.json the documents are flattened to the manifest level
// so it is necessary to recalculate the path to be relative to the manifest.
var corpus = this.GetLocalCorpus("notImportantLocation");
var folder = corpus.Storage.FetchRootFolder("local");
var manifest = new CdmManifestDefinition(corpus.Ctx, "manifest");
var entityDeclaration = manifest.Entities.Add("EntityName", "EntityName/EntityName.cdm.json/EntityName");
folder.Documents.Add(manifest);
var entityFolder = folder.ChildFolders.Add("EntityName");
var document = new CdmDocumentDefinition(corpus.Ctx, "EntityName.cdm.json");
document.Imports.Add("subfolder/EntityName.cdm.json");
document.Definitions.Add("EntityName");
entityFolder.Documents.Add(document);
var subFolder = entityFolder.ChildFolders.Add("subfolder");
subFolder.Documents.Add("EntityName.cdm.json");
var data = await ManifestPersistence.ToData(manifest, null, null);
Assert.AreEqual(1, data.Entities.Count);
var imports = data.Entities[0]["cdm:imports"].ToObject<List<Import>>();
Assert.AreEqual(1, imports.Count);
Assert.AreEqual("EntityName/subfolder/EntityName.cdm.json", imports[0].CorpusPath);
}
/// <summary>
/// Tests loading Model.json and converting to a CdmFolder.
/// </summary>
@ -157,7 +194,7 @@
{
var testInputPath = TestHelper.GetInputFolderPath(testsSubpath, "TestExtensibilityLoadingModelJsonAndSavingCdmFolder");
var cdmCorpus = this.GetLocalCorpus(testInputPath);
var cdmManifest = await cdmCorpus.FetchObjectAsync<CdmManifestDefinition>("SerializerTesting-model.json", cdmCorpus.Storage.FetchRootFolder("local"));
var cdmManifest = await cdmCorpus.FetchObjectAsync<CdmManifestDefinition>("model.json", cdmCorpus.Storage.FetchRootFolder("local"));
var obtainedCdmFolder = CdmFolderPersistence.ManifestPersistence.ToData(cdmManifest, null, null);

Просмотреть файл

@ -61,7 +61,11 @@
cdmCorpus.SetEventCallback(new EventCallback { Invoke = CommonDataModelLoader.ConsoleStatusReport }, CdmStatusLevel.Warning);
cdmCorpus.Storage.Mount("local", new LocalAdapter(testFilesRoot));
cdmCorpus.Storage.Mount("cdm", new LocalAdapter(SchemaDocsRoot));
// Unmounts the default cdm and mounts the resource adapter. This will
// also implicitely test the resource adapter functionality.
cdmCorpus.Storage.Unmount("cdm");
var hosts = new Dictionary<string, string>();
hosts.Add("contoso", "http://contoso.com");
cdmCorpus.Storage.Mount("remote", new RemoteAdapter()

Просмотреть файл

@ -2,10 +2,12 @@
{
using Microsoft.CommonDataModel.ObjectModel.Cdm;
using Microsoft.CommonDataModel.ObjectModel.Storage;
using Microsoft.CommonDataModel.ObjectModel.Tests.Persistence.Odi;
using Microsoft.CommonDataModel.ObjectModel.Utilities;
using Microsoft.CommonDataModel.Tools.Processor;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
@ -38,5 +40,106 @@
}
Assert.IsNull(invalidManifest);
}
/// <summary>
/// Test that a document is fetched and saved using the correct persistence class, regardless of the case sensitivity of the file name/extension.
/// </summary>
[TestMethod]
public async Task TestFetchingAndSavingDocumentsWithCaseInsensitiveCheck()
{
var testName = "TestFetchingAndSavingDocumentsWithCaseInsensitiveCheck";
var testInputPath = TestHelper.GetInputFolderPath(testsSubpath, testName);
CdmCorpusDefinition corpus = new CdmCorpusDefinition();
corpus.SetEventCallback(new EventCallback { Invoke = CommonDataModelLoader.ConsoleStatusReport }, CdmStatusLevel.Warning);
LocalAdapter localAdapter = new LocalAdapter(testInputPath);
corpus.Storage.Mount("local", localAdapter);
corpus.Storage.DefaultNamespace = "local";
corpus.Storage.Unmount("cdm");
var manifest = await corpus.FetchObjectAsync<CdmManifestDefinition>("empty.Manifest.cdm.json");
var manifestFromModelJson = await corpus.FetchObjectAsync<CdmManifestDefinition>("Model.json");
var manifestFromOdi = await corpus.FetchObjectAsync<CdmManifestDefinition>("Odi.json");
// Swap out the adapter for a fake one so that we aren't actually saving files.
Dictionary<string, string> allDocs = new Dictionary<string, string>();
var testAdapter = new TestStorageAdapter(allDocs);
corpus.Storage.SetAdapter("local", testAdapter);
var newManifestName = "empty.MANIFEST.CDM.json";
await manifest.SaveAsAsync(newManifestName, true);
// Verify that manifest persistence was called by comparing the saved document to the original manifest.
var serializedManifest = allDocs[$"/{newManifestName}"];
var expectedOutputManifest = TestHelper.GetExpectedOutputFileContent(testsSubpath, testName, manifest.Name);
TestHelper.AssertSameObjectWasSerialized(expectedOutputManifest, serializedManifest);
var newManifestFromModelJsonName = "MODEL.json";
await manifestFromModelJson.SaveAsAsync(newManifestFromModelJsonName, true);
// Verify that model.json persistence was called by comparing the saved document to the original model.json.
serializedManifest = allDocs[$"/{newManifestFromModelJsonName}"];
expectedOutputManifest = TestHelper.GetExpectedOutputFileContent(testsSubpath, testName, manifestFromModelJson.Name);
TestHelper.AssertSameObjectWasSerialized(expectedOutputManifest, serializedManifest);
var newManifestFromOdiName = "ODI.json";
await manifestFromOdi.SaveAsAsync(newManifestFromOdiName, true);
// Verify that ODI persistence was called by comparing the saved document to the original ODI document.
serializedManifest = allDocs[$"/{newManifestFromOdiName}"];
expectedOutputManifest = TestHelper.GetExpectedOutputFileContent(testsSubpath, testName, manifestFromOdi.Name);
TestHelper.AssertSameObjectWasSerialized(expectedOutputManifest, serializedManifest);
// TODO: We need to check the odi.json for linked documents too, will add it when Bug 232672 is fixed
}
/// <summary>
/// Test that saving a model.json or odi.json that isn't named exactly as such fails to save.
/// </summary>
[TestMethod]
public async Task TestSavingInvalidModelJsonAndOdiJsonName()
{
CdmCorpusDefinition corpus = new CdmCorpusDefinition();
corpus.SetEventCallback(new EventCallback { Invoke = CommonDataModelLoader.ConsoleStatusReport }, CdmStatusLevel.Warning);
corpus.Storage.Unmount("cdm");
corpus.Storage.DefaultNamespace = "local";
var manifest = new CdmManifestDefinition(corpus.Ctx, "manifest");
corpus.Storage.FetchRootFolder("local").Documents.Add(manifest);
Dictionary<string, string> allDocs = new Dictionary<string, string>();
var testAdapter = new TestStorageAdapter(allDocs);
corpus.Storage.SetAdapter("local", testAdapter);
var newManifestFromModelJsonName = "my.model.json";
await manifest.SaveAsAsync(newManifestFromModelJsonName, true);
// TODO: because we can load documents properly now, SaveAsAsync returns false. Will check the value returned from SaveAsAsync() when the problem is solved
Assert.IsFalse(allDocs.ContainsKey($"/{newManifestFromModelJsonName}"));
var newManifestFromOdiName = "my.odi.json";
await manifest.SaveAsAsync(newManifestFromOdiName, true);
Assert.IsFalse(allDocs.ContainsKey($"/{newManifestFromOdiName}"));
}
/// <summary>
/// Test that loading a model.json or odi.json that isn't named exactly as such fails to load.
/// </summary>
[TestMethod]
public async Task TestLoadingInvalidModelJsonAndOdiJsonName()
{
var testName = "TestLoadingInvalidModelJsonAndOdiJsonName";
var testInputPath = TestHelper.GetInputFolderPath(testsSubpath, testName);
CdmCorpusDefinition corpus = new CdmCorpusDefinition();
corpus.SetEventCallback(new EventCallback { Invoke = CommonDataModelLoader.ConsoleStatusReport }, CdmStatusLevel.Warning);
corpus.Storage.Mount("local", new LocalAdapter(testInputPath));
corpus.Storage.DefaultNamespace = "local";
// We are trying to load a file with an invalid name, so FetchObjectAsync() should just return null.
var invalidModelJson = await corpus.FetchObjectAsync<CdmManifestDefinition>("test.model.json");
Assert.IsNull(invalidModelJson);
var invalidOdiJson = await corpus.FetchObjectAsync<CdmManifestDefinition>("test.odi.json");
Assert.IsNull(invalidOdiJson);
}
}
}

Просмотреть файл

@ -0,0 +1,52 @@
using Microsoft.CommonDataModel.ObjectModel.Cdm;
using Microsoft.CommonDataModel.ObjectModel.Storage;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using NUnit.Framework.Internal;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Microsoft.CommonDataModel.ObjectModel.Tests.Storage
{
[TestClass]
public class ResourceAdapterTests
{
[TestMethod]
public void TestCreateCorpusPath()
{
var adapter = new ResourceAdapter();
var path = adapter.CreateCorpusPath("Microsoft.CommonDataModel.ObjectModel.Resources.ODI_analogs.ODIEntity.cdm.json");
Assert.AreEqual("/ODI-analogs/ODIEntity.cdm.json", path);
path = adapter.CreateCorpusPath("Microsoft.CommonDataModel.ObjectModel.Resources.ODI_analogs.customer.ODIEntity.cdm.json");
Assert.AreEqual("/ODI-analogs/customer/ODIEntity.cdm.json", path);
path = adapter.CreateCorpusPath("Microsoft.CommonDataModel.ObjectModel.Resources.extensions.pbi.extension.cdm.json");
Assert.AreEqual("/extensions/pbi.extension.cdm.json", path);
path = adapter.CreateCorpusPath("Microsoft.CommonDataModel.ObjectModel.Resources.primitives.cdm.json");
Assert.AreEqual("/primitives.cdm.json", path);
path = adapter.CreateCorpusPath("Microsoft.CommonDataModel.ObjectModel.Resources.ODI_analogs.customer._allImports.cdm.json");
Assert.AreEqual("/ODI-analogs/customer/_allImports.cdm.json", path);
}
[TestMethod]
public void TestCreateAdapterPath()
{
var adapter = new ResourceAdapter();
var path = adapter.CreateAdapterPath("/ODI-analogs/ODIEntity.cdm.json");
Assert.AreEqual("Microsoft.CommonDataModel.ObjectModel.Resources.ODI_analogs.ODIEntity.cdm.json", path);
path = adapter.CreateAdapterPath("/ODI-analogs/customer/ODIEntity.cdm.json");
Assert.AreEqual("Microsoft.CommonDataModel.ObjectModel.Resources.ODI_analogs.customer.ODIEntity.cdm.json", path);
path = adapter.CreateAdapterPath("/extensions/pbi.extension.cdm.json");
Assert.AreEqual("Microsoft.CommonDataModel.ObjectModel.Resources.extensions.pbi.extension.cdm.json", path);
path = adapter.CreateAdapterPath("/primitives.cdm.json");
Assert.AreEqual("Microsoft.CommonDataModel.ObjectModel.Resources.primitives.cdm.json", path);
}
}
}

Просмотреть файл

@ -1,12 +1,10 @@
namespace Microsoft.CommonDataModel.ObjectModel.Tests
namespace Microsoft.CommonDataModel.ObjectModel.Tests.Storage
{
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Threading.Tasks;
using Microsoft.CommonDataModel.ObjectModel.Cdm;
using Microsoft.CommonDataModel.ObjectModel.Storage;
using System.IO;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
[TestClass]
public class StorageConfigTests
@ -14,7 +12,7 @@
/// <summary>
/// The Storage path.
/// </summary>
private string testsSubpath = Path.Combine("Storage");
private string testsSubpath = "Storage";
/// <summary>
/// Gets local corpus.
@ -84,5 +82,29 @@
Assert.IsNotNull(cdmManifest);
Assert.AreEqual(1, unrecognizedAdapters.Count);
}
/// <summary>
/// Testing loading and saving resource and system defined adapters.
/// </summary>
[TestMethod]
public async Task TestSystemAndResourceAdapters()
{
var path = TestHelper.GetExpectedOutputFolderPath(testsSubpath, "TestSystemAndResourceAdapters");
// Create a corpus to load the config.
var cdmCorpus = this.GetLocalCorpus(path);
var differentCorpus = new CdmCorpusDefinition();
differentCorpus.Storage.Unmount("cdm");
differentCorpus.Storage.DefaultNamespace = "local";
var resultConfig = differentCorpus.Storage.FetchConfig();
var outputConfig = await cdmCorpus.Storage.NamespaceAdapters["local"].ReadAsync("/config.json");
Assert.AreEqual(outputConfig, resultConfig);
}
}
}

Просмотреть файл

@ -0,0 +1,8 @@
[
{
"fromEntity": "A-resolved.cdm.json/A",
"fromEntityAttribute": "AId",
"toEntity": "B-resolved.cdm.json/B",
"toEntityAttribute": "BId"
}
]

Просмотреть файл

@ -0,0 +1,8 @@
[
{
"fromEntity": "C-resolved.cdm.json/C",
"fromEntityAttribute": "CId",
"toEntity": "D-resolved.cdm.json/D",
"toEntityAttribute": "DId"
}
]

Просмотреть файл

@ -0,0 +1,50 @@
{
"$schema": "../schema.cdm.json",
"jsonSchemaSemanticVersion": "0.9.0",
"imports": [
{
"corpusPath": "cdm:/foundations.cdm.json"
},
{
"corpusPath": "B.cdm.json"
}
],
"definitions": [
{
"purpose": "identifiedBy",
"dataType": "entityId",
"name": "AId"
},
{
"entityName": "A",
"extendsEntity": "CdmEntity",
"hasAttributes": [
{
"name": "toB",
"entity": {
"entityReference": "B",
"appliedTraits": [
{
"traitReference": "is.identifiedBy",
"arguments": [
"B/(resolvedAttributes)/BId"
]
}
]
},
"resolutionGuidance": {
"renameFormat": "{m}",
"entityByReference": {
"allowReference": true,
"foreignKeyAttribute": {
"purpose": "hasA",
"dataType": "entityId",
"name": "AId"
}
}
}
}
]
}
]
}

Просмотреть файл

@ -0,0 +1,21 @@
{
"$schema": "../schema.cdm.json",
"jsonSchemaSemanticVersion": "0.9.0",
"imports": [
{
"corpusPath": "cdm:/foundations.cdm.json"
}
],
"definitions": [
{
"purpose": "identifiedBy",
"dataType": "entityId",
"name": "BId"
},
{
"entityName": "B",
"extendsEntity": "CdmEntity",
"hasAttributes": []
}
]
}

Просмотреть файл

@ -0,0 +1,27 @@
{
"$schema": "CdmFolder.cdm.json",
"jsonSchemaSemanticVersion": "0.9.0",
"manifestName": "relationshipsAreHard",
"imports": [
{
"uri": "cdm:/primitives.cdm.json"
}
],
"entities": [
{
"entityName": "A",
"entitySchema": "A.cdm.json/A"
},
{
"entityName": "B",
"entitySchema": "B.cdm.json/B"
}
],
"subManifests": [
{
"manifestName": "sub",
"definition": "sub/sub.manifest.cdm.json"
}
]
}

Просмотреть файл

@ -0,0 +1,54 @@
{
"$schema": "../schema.cdm.json",
"jsonSchemaSemanticVersion": "0.9.0",
"imports": [
{
"corpusPath": "cdm:/foundations.cdm.json"
},
{
"corpusPath": "/A.cdm.json"
},
{
"corpusPath": "D.cdm.json"
}
],
"definitions": [
{
"purpose": "identifiedBy",
"dataType": "entityId",
"name": "CId"
},
{
"entityName": "C",
"extendsEntity": "A",
"hasAttributes": [
{
"name": "toD",
"entity": {
"entityReference": "D",
"appliedTraits": [
{
"traitReference": "is.identifiedBy",
"arguments": [
"D/(resolvedAttributes)/DId"
]
}
]
},
"resolutionGuidance": {
"renameFormat": "{m}",
"entityByReference": {
"allowReference": true,
"foreignKeyAttribute": {
"purpose": "hasA",
"dataType": "entityId",
"name": "CId"
}
}
}
}
]
}
]
}

Просмотреть файл

@ -0,0 +1,21 @@
{
"$schema": "../schema.cdm.json",
"jsonSchemaSemanticVersion": "0.9.0",
"imports": [
{
"corpusPath": "cdm:/foundations.cdm.json"
}
],
"definitions": [
{
"purpose": "identifiedBy",
"dataType": "entityId",
"name": "DId"
},
{
"entityName": "D",
"extendsEntity": "CdmEntity",
"hasAttributes": []
}
]
}

Просмотреть файл

@ -0,0 +1,21 @@
{
"$schema": "CdmFolder.cdm.json",
"jsonSchemaSemanticVersion": "0.9.0",
"manifestName": "relationshipsAreEvenHarder",
"imports": [
{
"uri": "cdm:/primitives.cdm.json"
}
],
"entities": [
{
"entityName": "C",
"entitySchema": "C.cdm.json/C"
},
{
"entityName": "D",
"entitySchema": "D.cdm.json/D"
}
],
"subManifests": []
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_default.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_default.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProduct",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"resolvedFrom/Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +163,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -223,15 +190,10 @@
{
"name": "SalesProductProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProduct/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +226,8 @@
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProduct/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_normalized.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_normalized.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProduct",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"resolvedFrom/Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +163,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -223,15 +190,10 @@
{
"name": "SalesProductProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProduct/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +226,8 @@
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProduct/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_normalized_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_normalized_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_normalized_structured.cdm.json/attributeContext/Sales_Resolved_normalized_structured.cdm.json/SalesProduct",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"resolvedFrom/Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +125,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized_structured.cdm.json/attributeContext/Sales_Resolved_normalized_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -228,7 +195,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProduct",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"resolvedFrom/Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +163,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -223,15 +190,10 @@
{
"name": "SalesProductProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProduct/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +226,8 @@
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProduct/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_normalized.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_normalized.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProduct",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"resolvedFrom/Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +163,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -223,15 +190,10 @@
{
"name": "SalesProductProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProduct/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +226,8 @@
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProduct/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized_structured.cdm.json/SalesProduct",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"resolvedFrom/Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +125,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -228,7 +195,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_structured.cdm.json/SalesProduct",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"resolvedFrom/Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +125,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -228,7 +195,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_structured.cdm.json/attributeContext/Sales_Resolved_structured.cdm.json/SalesProduct",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"resolvedFrom/Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +125,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_structured.cdm.json/attributeContext/Sales_Resolved_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -228,7 +195,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_default.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_default.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +163,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -223,15 +190,10 @@
{
"name": "SalesProductIdProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +226,8 @@
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_normalized.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_normalized.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +163,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -223,15 +190,10 @@
{
"name": "SalesProductIdProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +226,8 @@
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_normalized_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_normalized_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_normalized_structured.cdm.json/attributeContext/Sales_Resolved_normalized_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +125,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized_structured.cdm.json/attributeContext/Sales_Resolved_normalized_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -228,7 +195,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +163,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -223,15 +190,10 @@
{
"name": "SalesProductIdProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +226,8 @@
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_normalized.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_normalized.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +163,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -223,15 +190,10 @@
{
"name": "SalesProductIdProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +226,8 @@
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +125,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -228,7 +195,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +125,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -228,7 +195,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_structured.cdm.json/attributeContext/Sales_Resolved_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +125,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_structured.cdm.json/attributeContext/Sales_Resolved_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -228,7 +195,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_default.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_default.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +163,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -223,15 +190,10 @@
{
"name": "SalesProductIdProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +226,8 @@
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_normalized.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_normalized.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +163,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -223,15 +190,10 @@
{
"name": "SalesProductIdProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +226,8 @@
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_normalized_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_normalized_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_normalized_structured.cdm.json/attributeContext/Sales_Resolved_normalized_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +125,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized_structured.cdm.json/attributeContext/Sales_Resolved_normalized_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -228,7 +195,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +163,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -223,15 +190,10 @@
{
"name": "SalesProductIdProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +226,8 @@
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_normalized.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_normalized.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +163,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -223,15 +190,10 @@
{
"name": "SalesProductIdProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +226,8 @@
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +125,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -228,7 +195,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +125,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -228,7 +195,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_structured.cdm.json/attributeContext/Sales_Resolved_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +125,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_structured.cdm.json/attributeContext/Sales_Resolved_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -228,7 +195,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_default.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_default.cdm.json",
@ -68,6 +54,15 @@
"Sales_Resolved_default.cdm.json/hasAttributes/SalesAmount"
]
},
{
"type": "attributeDefinition",
"name": "SalesTypeAttribute",
"parent": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json",
"definition": "resolvedFrom/Sales/hasAttributes/SalesTypeAttribute",
"contents": [
"Sales_Resolved_default.cdm.json/hasAttributes/SalesTypeAttribute"
]
},
{
"type": "attributeDefinition",
"name": "SalesProductId",
@ -79,20 +74,6 @@
"name": "Product",
"parent": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +172,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -220,18 +196,23 @@
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesAmount",
"dataFormat": "Decimal"
},
{
"name": "SalesTypeAttribute",
"appliedTraits": [
"is.dataFormat.character",
"is.dataFormat.big",
"is.dataFormat.array"
],
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesTypeAttribute",
"dataFormat": "String"
},
{
"name": "ProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +245,8 @@
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_normalized.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_normalized.cdm.json",
@ -68,6 +54,15 @@
"Sales_Resolved_normalized.cdm.json/hasAttributes/SalesAmount"
]
},
{
"type": "attributeDefinition",
"name": "SalesTypeAttribute",
"parent": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json",
"definition": "resolvedFrom/Sales/hasAttributes/SalesTypeAttribute",
"contents": [
"Sales_Resolved_normalized.cdm.json/hasAttributes/SalesTypeAttribute"
]
},
{
"type": "attributeDefinition",
"name": "SalesProductId",
@ -79,20 +74,6 @@
"name": "Product",
"parent": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +172,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -220,18 +196,23 @@
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesAmount",
"dataFormat": "Decimal"
},
{
"name": "SalesTypeAttribute",
"appliedTraits": [
"is.dataFormat.character",
"is.dataFormat.big",
"is.dataFormat.array"
],
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesTypeAttribute",
"dataFormat": "String"
},
{
"name": "ProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +245,8 @@
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_normalized_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_normalized_structured.cdm.json",
@ -68,6 +54,15 @@
"Sales_Resolved_normalized_structured.cdm.json/hasAttributes/SalesAmount"
]
},
{
"type": "attributeDefinition",
"name": "SalesTypeAttribute",
"parent": "Sales_Resolved_normalized_structured.cdm.json/attributeContext/Sales_Resolved_normalized_structured.cdm.json",
"definition": "resolvedFrom/Sales/hasAttributes/SalesTypeAttribute",
"contents": [
"Sales_Resolved_normalized_structured.cdm.json/hasAttributes/SalesTypeAttribute"
]
},
{
"type": "attributeDefinition",
"name": "SalesProductId",
@ -79,20 +74,6 @@
"name": "Product",
"parent": "Sales_Resolved_normalized_structured.cdm.json/attributeContext/Sales_Resolved_normalized_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +134,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized_structured.cdm.json/attributeContext/Sales_Resolved_normalized_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -182,6 +158,16 @@
"attributeContext": "Sales_Resolved_normalized_structured.cdm.json/attributeContext/Sales_Resolved_normalized_structured.cdm.json/SalesAmount",
"dataFormat": "Decimal"
},
{
"name": "SalesTypeAttribute",
"appliedTraits": [
"is.dataFormat.character",
"is.dataFormat.big",
"is.dataFormat.array"
],
"attributeContext": "Sales_Resolved_normalized_structured.cdm.json/attributeContext/Sales_Resolved_normalized_structured.cdm.json/SalesTypeAttribute",
"dataFormat": "String"
},
{
"attributeGroupReference": {
"attributeGroupName": "SalesProductId",
@ -228,7 +214,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly.cdm.json",
@ -68,6 +54,15 @@
"Sales_Resolved_referenceOnly.cdm.json/hasAttributes/SalesAmount"
]
},
{
"type": "attributeDefinition",
"name": "SalesTypeAttribute",
"parent": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json",
"definition": "resolvedFrom/Sales/hasAttributes/SalesTypeAttribute",
"contents": [
"Sales_Resolved_referenceOnly.cdm.json/hasAttributes/SalesTypeAttribute"
]
},
{
"type": "attributeDefinition",
"name": "SalesProductId",
@ -79,20 +74,6 @@
"name": "Product",
"parent": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +172,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -220,18 +196,23 @@
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesAmount",
"dataFormat": "Decimal"
},
{
"name": "SalesTypeAttribute",
"appliedTraits": [
"is.dataFormat.character",
"is.dataFormat.big",
"is.dataFormat.array"
],
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesTypeAttribute",
"dataFormat": "String"
},
{
"name": "ProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +245,8 @@
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_normalized.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_normalized.cdm.json",
@ -68,6 +54,15 @@
"Sales_Resolved_referenceOnly_normalized.cdm.json/hasAttributes/SalesAmount"
]
},
{
"type": "attributeDefinition",
"name": "SalesTypeAttribute",
"parent": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json",
"definition": "resolvedFrom/Sales/hasAttributes/SalesTypeAttribute",
"contents": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/hasAttributes/SalesTypeAttribute"
]
},
{
"type": "attributeDefinition",
"name": "SalesProductId",
@ -79,20 +74,6 @@
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +172,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -220,18 +196,23 @@
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesAmount",
"dataFormat": "Decimal"
},
{
"name": "SalesTypeAttribute",
"appliedTraits": [
"is.dataFormat.character",
"is.dataFormat.big",
"is.dataFormat.array"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesTypeAttribute",
"dataFormat": "String"
},
{
"name": "ProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +245,8 @@
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json",
@ -68,6 +54,15 @@
"Sales_Resolved_referenceOnly_normalized_structured.cdm.json/hasAttributes/SalesAmount"
]
},
{
"type": "attributeDefinition",
"name": "SalesTypeAttribute",
"parent": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized_structured.cdm.json",
"definition": "resolvedFrom/Sales/hasAttributes/SalesTypeAttribute",
"contents": [
"Sales_Resolved_referenceOnly_normalized_structured.cdm.json/hasAttributes/SalesTypeAttribute"
]
},
{
"type": "attributeDefinition",
"name": "SalesProductId",
@ -79,20 +74,6 @@
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +134,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -182,6 +158,16 @@
"attributeContext": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized_structured.cdm.json/SalesAmount",
"dataFormat": "Decimal"
},
{
"name": "SalesTypeAttribute",
"appliedTraits": [
"is.dataFormat.character",
"is.dataFormat.big",
"is.dataFormat.array"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized_structured.cdm.json/SalesTypeAttribute",
"dataFormat": "String"
},
{
"attributeGroupReference": {
"attributeGroupName": "SalesProductId",
@ -228,7 +214,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_structured.cdm.json",
@ -68,6 +54,15 @@
"Sales_Resolved_referenceOnly_structured.cdm.json/hasAttributes/SalesAmount"
]
},
{
"type": "attributeDefinition",
"name": "SalesTypeAttribute",
"parent": "Sales_Resolved_referenceOnly_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_structured.cdm.json",
"definition": "resolvedFrom/Sales/hasAttributes/SalesTypeAttribute",
"contents": [
"Sales_Resolved_referenceOnly_structured.cdm.json/hasAttributes/SalesTypeAttribute"
]
},
{
"type": "attributeDefinition",
"name": "SalesProductId",
@ -79,20 +74,6 @@
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +134,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -182,6 +158,16 @@
"attributeContext": "Sales_Resolved_referenceOnly_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_structured.cdm.json/SalesAmount",
"dataFormat": "Decimal"
},
{
"name": "SalesTypeAttribute",
"appliedTraits": [
"is.dataFormat.character",
"is.dataFormat.big",
"is.dataFormat.array"
],
"attributeContext": "Sales_Resolved_referenceOnly_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_structured.cdm.json/SalesTypeAttribute",
"dataFormat": "String"
},
{
"attributeGroupReference": {
"attributeGroupName": "SalesProductId",
@ -228,7 +214,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_structured.cdm.json",
@ -68,6 +54,15 @@
"Sales_Resolved_structured.cdm.json/hasAttributes/SalesAmount"
]
},
{
"type": "attributeDefinition",
"name": "SalesTypeAttribute",
"parent": "Sales_Resolved_structured.cdm.json/attributeContext/Sales_Resolved_structured.cdm.json",
"definition": "resolvedFrom/Sales/hasAttributes/SalesTypeAttribute",
"contents": [
"Sales_Resolved_structured.cdm.json/hasAttributes/SalesTypeAttribute"
]
},
{
"type": "attributeDefinition",
"name": "SalesProductId",
@ -79,20 +74,6 @@
"name": "Product",
"parent": "Sales_Resolved_structured.cdm.json/attributeContext/Sales_Resolved_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +134,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_structured.cdm.json/attributeContext/Sales_Resolved_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -182,6 +158,16 @@
"attributeContext": "Sales_Resolved_structured.cdm.json/attributeContext/Sales_Resolved_structured.cdm.json/SalesAmount",
"dataFormat": "Decimal"
},
{
"name": "SalesTypeAttribute",
"appliedTraits": [
"is.dataFormat.character",
"is.dataFormat.big",
"is.dataFormat.array"
],
"attributeContext": "Sales_Resolved_structured.cdm.json/attributeContext/Sales_Resolved_structured.cdm.json/SalesTypeAttribute",
"dataFormat": "String"
},
{
"attributeGroupReference": {
"attributeGroupName": "SalesProductId",
@ -228,7 +214,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -23,6 +23,13 @@
"dataType": "decimal",
"name": "SalesAmount"
},
{
"dataType": "string",
"name": "SalesTypeAttribute",
"resolutionGuidance": {
"renameFormat": "{m}"
}
},
{
"dataType": "int",
"name": "SalesProductId",
@ -37,9 +44,9 @@
}
]
},
"resolutionGuidance": {
"resolutionGuidance": {
"renameFormat": "{m}"
}
}
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_default.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_default.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +163,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -223,15 +190,10 @@
{
"name": "ProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +226,8 @@
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_normalized.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_normalized.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +163,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -223,15 +190,10 @@
{
"name": "ProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +226,8 @@
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_normalized_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_normalized_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_normalized_structured.cdm.json/attributeContext/Sales_Resolved_normalized_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +125,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized_structured.cdm.json/attributeContext/Sales_Resolved_normalized_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -228,7 +195,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly.cdm.json",
@ -78,21 +64,7 @@
"type": "entity",
"name": "Product",
"parent": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
]
"definition": "resolvedFrom/Product"
},
{
"type": "generatedSet",
@ -124,15 +96,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -181,7 +148,8 @@
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/_foreignKey",
"dataFormat": "Guid"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_normalized.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_normalized.cdm.json",
@ -78,21 +64,7 @@
"type": "entity",
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
]
"definition": "resolvedFrom/Product"
},
{
"type": "generatedSet",
@ -124,15 +96,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -181,7 +148,8 @@
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/_foreignKey",
"dataFormat": "Guid"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json",
@ -78,21 +64,7 @@
"type": "entity",
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
]
"definition": "resolvedFrom/Product"
},
{
"type": "generatedSet",
@ -124,15 +96,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -189,7 +156,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_structured.cdm.json",
@ -78,21 +64,7 @@
"type": "entity",
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
]
"definition": "resolvedFrom/Product"
},
{
"type": "generatedSet",
@ -124,15 +96,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -189,7 +156,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_structured.cdm.json/attributeContext/Sales_Resolved_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +125,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_structured.cdm.json/attributeContext/Sales_Resolved_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -228,7 +195,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_default.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_default.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +163,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -223,15 +190,10 @@
{
"name": "ProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +226,8 @@
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_normalized.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_normalized.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +163,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -223,15 +190,10 @@
{
"name": "ProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +226,8 @@
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_normalized_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_normalized_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_normalized_structured.cdm.json/attributeContext/Sales_Resolved_normalized_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +125,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized_structured.cdm.json/attributeContext/Sales_Resolved_normalized_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -228,7 +195,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly.cdm.json",
@ -78,21 +64,7 @@
"type": "entity",
"name": "Product",
"parent": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
]
"definition": "resolvedFrom/Product"
},
{
"type": "generatedSet",
@ -124,15 +96,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -181,7 +148,8 @@
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/_foreignKey",
"dataFormat": "Guid"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_normalized.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_normalized.cdm.json",
@ -78,21 +64,7 @@
"type": "entity",
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
]
"definition": "resolvedFrom/Product"
},
{
"type": "generatedSet",
@ -124,15 +96,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -181,7 +148,8 @@
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/_foreignKey",
"dataFormat": "Guid"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json",
@ -78,21 +64,7 @@
"type": "entity",
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
]
"definition": "resolvedFrom/Product"
},
{
"type": "generatedSet",
@ -124,15 +96,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -189,7 +156,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_structured.cdm.json",
@ -78,21 +64,7 @@
"type": "entity",
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
]
"definition": "resolvedFrom/Product"
},
{
"type": "generatedSet",
@ -124,15 +96,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -189,7 +156,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_structured.cdm.json/attributeContext/Sales_Resolved_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +125,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_structured.cdm.json/attributeContext/Sales_Resolved_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -228,7 +195,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_default.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_default.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -213,15 +185,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -245,15 +212,10 @@
{
"name": "ProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -301,7 +263,8 @@
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/_foreignKey",
"dataFormat": "Guid"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_normalized.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_normalized.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -213,15 +185,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -245,15 +212,10 @@
{
"name": "ProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -301,7 +263,8 @@
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/_foreignKey",
"dataFormat": "Guid"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_normalized_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_normalized_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_normalized_structured.cdm.json/attributeContext/Sales_Resolved_normalized_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -175,15 +147,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized_structured.cdm.json/attributeContext/Sales_Resolved_normalized_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -265,7 +232,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly.cdm.json",
@ -78,21 +64,7 @@
"type": "entity",
"name": "Product",
"parent": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
]
"definition": "resolvedFrom/Product"
},
{
"type": "generatedSet",
@ -124,15 +96,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -181,7 +148,8 @@
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/_foreignKey",
"dataFormat": "Guid"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_normalized.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_normalized.cdm.json",
@ -78,21 +64,7 @@
"type": "entity",
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
]
"definition": "resolvedFrom/Product"
},
{
"type": "generatedSet",
@ -124,15 +96,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -181,7 +148,8 @@
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/_foreignKey",
"dataFormat": "Guid"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json",
@ -78,21 +64,7 @@
"type": "entity",
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
]
"definition": "resolvedFrom/Product"
},
{
"type": "generatedSet",
@ -124,15 +96,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -189,7 +156,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_structured.cdm.json",
@ -78,21 +64,7 @@
"type": "entity",
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
]
"definition": "resolvedFrom/Product"
},
{
"type": "generatedSet",
@ -124,15 +96,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -189,7 +156,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_structured.cdm.json/attributeContext/Sales_Resolved_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -175,15 +147,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_structured.cdm.json/attributeContext/Sales_Resolved_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -265,7 +232,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_default.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_default.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +163,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -223,15 +190,10 @@
{
"name": "ProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +226,8 @@
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_normalized.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_normalized.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +163,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -223,15 +190,10 @@
{
"name": "ProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +226,8 @@
"attributeContext": "Sales_Resolved_normalized.cdm.json/attributeContext/Sales_Resolved_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_normalized_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_normalized_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_normalized_structured.cdm.json/attributeContext/Sales_Resolved_normalized_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +125,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_normalized_structured.cdm.json/attributeContext/Sales_Resolved_normalized_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -228,7 +195,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly.cdm.json",
@ -78,21 +64,7 @@
"type": "entity",
"name": "Product",
"parent": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
]
"definition": "resolvedFrom/Product"
},
{
"type": "generatedSet",
@ -124,15 +96,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -177,7 +144,8 @@
"attributeContext": "Sales_Resolved_referenceOnly.cdm.json/attributeContext/Sales_Resolved_referenceOnly.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/_foreignKey",
"dataFormat": "Int32"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_normalized.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_normalized.cdm.json",
@ -78,21 +64,7 @@
"type": "entity",
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
]
"definition": "resolvedFrom/Product"
},
{
"type": "generatedSet",
@ -124,15 +96,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -177,7 +144,8 @@
"attributeContext": "Sales_Resolved_referenceOnly_normalized.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/_foreignKey",
"dataFormat": "Int32"
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json",
@ -78,21 +64,7 @@
"type": "entity",
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
]
"definition": "resolvedFrom/Product"
},
{
"type": "generatedSet",
@ -124,15 +96,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_normalized_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_normalized_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_normalized_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -185,7 +152,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_referenceOnly_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_referenceOnly_structured.cdm.json",
@ -78,21 +64,7 @@
"type": "entity",
"name": "Product",
"parent": "Sales_Resolved_referenceOnly_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
]
"definition": "resolvedFrom/Product"
},
{
"type": "generatedSet",
@ -124,15 +96,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_referenceOnly_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_referenceOnly_structured.cdm.json/attributeContext/Sales_Resolved_referenceOnly_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -185,7 +152,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_structured.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_structured.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_structured.cdm.json/attributeContext/Sales_Resolved_structured.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -153,15 +125,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_structured.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_structured.cdm.json/attributeContext/Sales_Resolved_structured.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -228,7 +195,8 @@
]
}
}
]
],
"version": "0.9"
}
]
}

Просмотреть файл

@ -9,20 +9,6 @@
"definitions": [
{
"entityName": "Sales_Resolved_default.cdm.json",
"exhibitsTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/SalesId"
]
}
],
"attributeContext": {
"type": "entity",
"name": "Sales_Resolved_default.cdm.json",
@ -79,20 +65,6 @@
"name": "Product",
"parent": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId",
"definition": "resolvedFrom/Product",
"appliedTraits": [
{
"traitReference": "is.CDM.entityVersion",
"arguments": [
"0.9"
]
},
{
"traitReference": "is.identifiedBy",
"arguments": [
"Product/(resolvedAttributes)/ProductId"
]
}
],
"contents": [
{
"type": "entityReferenceExtends",
@ -191,15 +163,10 @@
{
"name": "SalesId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/SalesId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -223,15 +190,10 @@
{
"name": "ProductId",
"appliedTraits": [
"is.dataFormat.integer",
{
"traitReference": "is.identifiedBy",
"arguments": [
"Sales_Resolved_default.cdm.json/(resolvedAttributes)/ProductId"
]
}
"is.dataFormat.integer"
],
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductId",
"isPrimaryKey": true,
"dataFormat": "Int32"
},
{
@ -264,7 +226,8 @@
"attributeContext": "Sales_Resolved_default.cdm.json/attributeContext/Sales_Resolved_default.cdm.json/SalesProductId/_generatedAttributeSet/_generatedAttributeRound0/ProductUnitPrice",
"dataFormat": "Decimal"
}
]
],
"version": "0.9"
}
]
}

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше