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
| 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(), });