Gathering detailed insights and metrics for @memberjunction/data-context
Gathering detailed insights and metrics for @memberjunction/data-context
Gathering detailed insights and metrics for @memberjunction/data-context
Gathering detailed insights and metrics for @memberjunction/data-context
@memberjunction/data-context-server
This library provides a server-side implementation of the DataContextItem class from @memberjunction/data-context that can handle the server-side only use case of loading data into a context using raw SQL statements.
@memberjunction/ng-data-context
MemberJunction: Angular component and pop-up window to display and edit the contents of a data context.
npm install @memberjunction/data-context
Typescript
Module System
Node Version
NPM Version
Cumulative downloads
Total Downloads
Last Day
0%
NaN
Compared to previous day
Last Week
0%
NaN
Compared to previous week
Last Month
0%
NaN
Compared to previous month
Last Year
0%
NaN
Compared to previous year
2
The @memberjunction/data-context
library provides a comprehensive framework for managing data contexts in MemberJunction applications. It enables developers to define, load, and manipulate collections of related data items across different tiers of an application.
A Data Context in MemberJunction represents a collection of data items that can include:
1npm install @memberjunction/data-context
1import { DataContext, DataContextItem } from '@memberjunction/data-context'; 2import { Metadata } from '@memberjunction/core'; 3 4// Create a new data context 5const context = new DataContext(); 6 7// Load metadata and data for an existing data context 8const dataContextID = 'your-data-context-id'; 9const loaded = await context.Load( 10 dataContextID, 11 dataSource, // Required for SQL type items (server-side only) 12 false, // forceRefresh 13 true, // loadRelatedDataOnSingleRecords 14 10, // maxRecordsPerRelationship 15 userInfo // contextUser 16); 17 18if (loaded) { 19 // Access the loaded data 20 context.Items.forEach(item => { 21 console.log(`Item: ${item.Description}`); 22 console.log(`Data rows: ${item.Data?.length || 0}`); 23 }); 24}
1import { UserViewEntityExtended } from '@memberjunction/core-entities'; 2 3// Assuming you have a view entity loaded 4const viewEntity: UserViewEntityExtended = await md.GetEntityObject<UserViewEntityExtended>('User Views'); 5await viewEntity.Load(viewID); 6 7const viewItem = DataContextItem.FromViewEntity(viewEntity); 8context.Items.push(viewItem);
1import { BaseEntity } from '@memberjunction/core'; 2 3// Assuming you have an entity record loaded 4const record: BaseEntity = await md.GetEntityObject('Customers'); 5await record.Load(recordID); 6 7const recordItem = DataContextItem.FromSingleRecord(record); 8context.Items.push(recordItem);
1import { QueryInfo } from '@memberjunction/core'; 2 3// Get query info from metadata 4const queryInfo = md.Queries.find(q => q.Name === 'My Query'); 5if (queryInfo) { 6 const queryItem = DataContextItem.FromQuery(queryInfo); 7 context.Items.push(queryItem); 8}
1import { EntityInfo } from '@memberjunction/core'; 2 3// Get entity info from metadata 4const entityInfo = md.Entities.find(e => e.Name === 'Products'); 5if (entityInfo) { 6 const entityItem = DataContextItem.FromFullEntity(entityInfo); 7 context.Items.push(entityItem); 8}
1// Load data for all items in the context 2const dataLoaded = await context.LoadData( 3 dataSource, // Required for SQL type items 4 false, // forceRefresh 5 true, // loadRelatedDataOnSingleRecords 6 10 // maxRecordsPerRelationship 7); 8 9// Or load data for a specific item 10const itemLoaded = await context.Items[0].LoadData( 11 dataSource, 12 false, 13 true, 14 10 15);
1// Save all items in the context to the database 2const saved = await context.SaveItems( 3 userInfo, // contextUser 4 true // persistItemData - saves actual data, not just metadata 5); 6 7if (saved) { 8 console.log('Data context items saved successfully'); 9 // Each item now has a DataContextItemID populated 10}
1// Validate that all items have data loaded 2if (context.ValidateDataExists()) { 3 // Convert to a simple object for easier manipulation 4 const simpleData = context.ConvertToSimpleObject('item_', false); 5 // Result: { item_0: [...], item_1: [...], ... } 6 7 // Get type definition for the data structure 8 const typeDef = context.CreateSimpleObjectTypeDefinition('item_'); 9 console.log(typeDef); 10 // Output: {item_0: []; // View: Customer List, From Entity: Customers\n...} 11} 12 13// Access individual item data 14context.Items.forEach(item => { 15 if (item.DataLoaded && item.Data) { 16 console.log(`${item.Description}: ${item.Data.length} rows`); 17 18 // Process the data 19 item.Data.forEach(row => { 20 // Work with row data 21 }); 22 } else if (item.DataLoadingError) { 23 console.error(`Error loading ${item.Description}: ${item.DataLoadingError}`); 24 } 25});
1// Clone an existing data context 2const clonedContext = await DataContext.Clone( 3 originalContext, 4 true, // includeData - copies the data along with metadata 5 userInfo // contextUser 6); 7 8if (clonedContext) { 9 console.log(`Cloned context ID: ${clonedContext.ID}`); 10}
ID: string
- The unique identifier of the data contextDataContextEntity: DataContextEntity
- The metadata entity for the data contextItems: DataContextItem[]
- Array of data context itemsasync LoadMetadata(DataContextID: string, contextUser?: UserInfo, provider?: IMetadataProvider): Promise<boolean>
async LoadData(dataSource: any, forceRefresh?: boolean, loadRelatedDataOnSingleRecords?: boolean, maxRecordsPerRelationship?: number, contextUser?: UserInfo): Promise<boolean>
async Load(DataContextID: string, dataSource: any, forceRefresh?: boolean, loadRelatedDataOnSingleRecords?: boolean, maxRecordsPerRelationship?: number, contextUser?: UserInfo): Promise<boolean>
async SaveItems(contextUser?: UserInfo, persistItemData?: boolean): Promise<boolean>
AddDataContextItem(): DataContextItem
ValidateDataExists(ignoreFailedLoadItems?: boolean): boolean
ConvertToSimpleObject(itemPrefix?: string, includeFailedLoadItems?: boolean): any
CreateSimpleObjectTypeDefinition(itemPrefix?: string, includeFailedLoadItems?: boolean): string
LoadDataFromObject(data: any[][]): boolean
static async Clone(context: DataContext, includeData?: boolean, contextUser?: UserInfo): Promise<DataContext>
static async FromRawData(rawData: any): Promise<DataContext>
Type: 'view' | 'query' | 'full_entity' | 'sql' | 'single_record'
- The type of data itemRecordID: string
- Primary key for single_record typesEntityID?: string
- Entity identifierViewID?: string
- View identifierQueryID?: string
- Query identifierRecordName: string
- Name of the view, query, or entitySQL?: string
- SQL statement for 'sql' typeEntityName?: string
- Name of the entityFields: DataContextFieldInfo[]
- Field metadataData: any[]
- The loaded dataDataLoaded: boolean
- Indicates if data has been loadedDataLoadingError?: string
- Error message if loading failedDescription: string
- Auto-generated descriptionAdditionalDescription?: string
- Optional custom descriptionasync LoadData(dataSource: any, forceRefresh?: boolean, loadRelatedDataOnSingleRecords?: boolean, maxRecordsPerRelationship?: number, contextUser?: UserInfo): Promise<boolean>
LoadDataFromObject(data: any[]): boolean
ValidateDataExists(ignoreFailedLoad?: boolean): boolean
static FromViewEntity(viewEntity: UserViewEntityExtended): DataContextItem
static FromSingleRecord(singleRecord: BaseEntity): DataContextItem
static FromQuery(query: QueryInfo): DataContextItem
static FromFullEntity(entity: EntityInfo): DataContextItem
static FromRawItem(rawItem: any): DataContextItem
1class DataContextFieldInfo { 2 Name: string; 3 Type: string; 4 Description?: string; 5}
For SQL type data context items, you'll need to use the server-side implementation from @memberjunction/data-context-server
which properly handles SQL execution with appropriate security and data source management.
@memberjunction/global
: Core global utilities and class factory@memberjunction/core-entities
: Entity definitions for MemberJunction@memberjunction/core
: Core MemberJunction functionalityLoadMetadata()
before LoadData()
or simply use Load()
which does bothDataLoaded
and DataLoadingError
properties on itemsmaxRecordsPerRelationship
to limit related data loadingValidateDataExists()
before processing dataISC
No vulnerabilities found.
No security vulnerabilities found.