dynamics_create_relationship
Create relationships between tables in Microsoft Dynamics CRM by defining schema, entities, attributes, and cascade behaviors for data modeling.
Instructions
Cria um relacionamento entre duas tabelas
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| schemaName | Yes | Nome do schema do relacionamento | |
| referencingEntity | Yes | Entidade referenciadora (many) | |
| referencedEntity | Yes | Entidade referenciada (one) | |
| referencingAttribute | Yes | Atributo de lookup | |
| relationshipType | No | OneToMany | |
| cascadeAssign | No | NoCascade | |
| cascadeDelete | No | RemoveLink | |
| solutionUniqueName | No |
Implementation Reference
- src/tools/schema/index.ts:506-568 (handler)The handler function for "dynamics_create_relationship" which defines the relationship metadata and sends a POST request to Dataverse.
server.tool( "dynamics_create_relationship", "Cria um relacionamento entre duas tabelas", CreateRelationshipSchema.shape, async (params: z.infer<typeof CreateRelationshipSchema>) => { if (params.relationshipType === "OneToMany") { const relData = { SchemaName: params.schemaName, "@odata.type": "Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata", ReferencedEntity: params.referencedEntity, ReferencingEntity: params.referencingEntity, Lookup: { SchemaName: params.referencingAttribute, DisplayName: { "@odata.type": "Microsoft.Dynamics.CRM.Label", LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: params.referencedEntity, LanguageCode: 1046 }], }, RequiredLevel: { Value: "None" }, }, CascadeConfiguration: { Assign: params.cascadeAssign, Delete: params.cascadeDelete, Merge: "NoCascade", Reparent: "NoCascade", Share: "NoCascade", Unshare: "NoCascade", }, }; let endpoint = "RelationshipDefinitions"; if (params.solutionUniqueName) { endpoint += `?SolutionUniqueName='${params.solutionUniqueName}'`; } const result = await client.post<{ MetadataId: string }>(endpoint, relData); return { content: [ { type: "text" as const, text: `Relacionamento 1:N criado!\nMetadataId: ${result.MetadataId}\n${params.referencedEntity} -> ${params.referencingEntity}`, }, ], }; } else { const relData = { SchemaName: params.schemaName, "@odata.type": "Microsoft.Dynamics.CRM.ManyToManyRelationshipMetadata", Entity1LogicalName: params.referencedEntity, Entity2LogicalName: params.referencingEntity, IntersectEntityName: `${params.referencedEntity}_${params.referencingEntity}`, }; let endpoint = "RelationshipDefinitions"; if (params.solutionUniqueName) { endpoint += `?SolutionUniqueName='${params.solutionUniqueName}'`; } const result = await client.post<{ MetadataId: string }>(endpoint, relData); return { content: [ { type: "text" as const, text: `Relacionamento N:N criado!\nMetadataId: ${result.MetadataId}\n${params.referencedEntity} <-> ${params.referencingEntity}`, - src/tools/schema/index.ts:95-104 (schema)The Zod schema definition for "dynamics_create_relationship" inputs.
export const CreateRelationshipSchema = z.object({ schemaName: z.string().describe("Nome do schema do relacionamento"), referencingEntity: z.string().describe("Entidade referenciadora (many)"), referencedEntity: z.string().describe("Entidade referenciada (one)"), referencingAttribute: z.string().describe("Atributo de lookup"), relationshipType: z.enum(["OneToMany", "ManyToMany"]).default("OneToMany"), cascadeAssign: z.enum(["NoCascade", "Cascade", "Active", "UserOwned"]).default("NoCascade"), cascadeDelete: z.enum(["NoCascade", "Cascade", "RemoveLink", "Restrict"]).default("RemoveLink"), solutionUniqueName: z.string().optional(), });