[Canonical page](<https://docs.dhtmlx.com/planning-engine/net/api/core/suggest/overview/>)
[Full documentation index](<https://docs.dhtmlx.com/planning-engine/llms.txt>)


# suggest

Types for auto-assignment. You describe each requirement instance as a [`Slot`](<https://docs.dhtmlx.com/planning-engine/net/api/core/suggest/slot.md>): a scheduled leaf task, the resources allowed to fill it, and the assignment that fills it now, if any. You pass the slots and [`SuggestOptions`](<https://docs.dhtmlx.com/planning-engine/net/api/core/suggest/suggest-options.md>) to [`Project.SuggestAssignments`](<https://docs.dhtmlx.com/planning-engine/net/api/project-suggest-assignments.md>). The options pick which slot categories to work on ([`AssignTarget`](<https://docs.dhtmlx.com/planning-engine/net/api/core/suggest/suggest-options.md#assigntarget>)), which assignments stay fixed, the cost of each extra person and the number of rebalance passes.

The call returns a [`SuggestResult`](<https://docs.dhtmlx.com/planning-engine/net/api/core/suggest/suggest-result.md>). It holds a proposal as [`SchedulingChanges`](<https://docs.dhtmlx.com/planning-engine/net/api/core/changes/scheduling-changes.md>) that you commit with [`Project.Apply`](<https://docs.dhtmlx.com/planning-engine/net/api/project-apply.md>), plus a step log ([`SuggestStep`](<https://docs.dhtmlx.com/planning-engine/net/api/core/suggest/suggest-result.md#suggeststep>) with its [`StepCost`](<https://docs.dhtmlx.com/planning-engine/net/api/core/suggest/suggest-result.md#stepcost>)), the slots left unfilled or invalid, and scores for the baseline ([`AssignTotal`](<https://docs.dhtmlx.com/planning-engine/net/api/core/suggest/suggest-result.md#assigntotal>)) and the proposal ([`SuggestProposal`](<https://docs.dhtmlx.com/planning-engine/net/api/core/suggest/suggest-result.md#suggestproposal>)). The project itself doesn't change until you apply.

[`Roster`](<https://docs.dhtmlx.com/planning-engine/net/api/core/suggest/roster.md>), returned by [`Project.Roster`](<https://docs.dhtmlx.com/planning-engine/net/api/project-roster.md>), lists the scheduled leaf tasks, resources and active assignments ([`RosterAssignment`](<https://docs.dhtmlx.com/planning-engine/net/api/core/suggest/roster.md#rosterassignment>)) of the accepted state. Use it when you build slots with your own code. To build slots from skills and requirements instead, use [`SkillLayer.Slots`](<https://docs.dhtmlx.com/planning-engine/net/api/skill-layer-slots.md>) from the `Plen.Assign` package.

`StepCost` and `AssignTotal` are `record struct` values and `AssignTarget` is an enum. The other types are sealed classes. Every type here is in the `Plen` namespace. For how picks are made and how to read the proposal, see [Suggesting assignments](<https://docs.dhtmlx.com/planning-engine/net/resources-and-assignment/suggesting-assignments.md>).

:::category-index
:::
