Job
A jobJobA high-level container, comparable to a project, that bundles related tasks together with common information such as customer, billing, and address. in Dime.Scheduler is the encompassing entity that groups tasksTaskA unit of work that belongs to a job. It appears in the open task list until it is scheduled to a resource.. This can be a service order header with multiple lines, a projectProjectA job seen as a whole in project planning: a body of work with a budget, a team, dependencies and a deadline. Its tasks are still planned as ordinary appointments on the board. with several tasks, a cargo transport with multiple containers, etc. A job record is mandatory for a task. In other words, you cannot create a task if the corresponding job record does not exist.
The following entities are exposed through the API.
Upsert
Inserts or updates a job record.
| Name | Data Type | Default | Required | Description |
|---|---|---|---|---|
| SourceApp | nvarchar(30) | ✔️ | See API reference | |
| SourceType | nvarchar(10) | ✔️ | See API reference | |
| JobNo | nvarchar(50) | ✔️ | ||
| ShortDescription | nvarchar(50) | ✔️ | ||
| Description | nvarchar(MAX) | |||
| Type | nvarchar(50) | |||
| Name | nvarchar(255) | |||
| Category | nvarchar(100) | See API reference | ||
| TimeMarker | nvarchar(100) | See API reference | ||
| Pin | nvarchar(100) | See API reference | ||
| CustomerNo | nvarchar(20) | |||
| CustomerName | nvarchar(50) | |||
| CustomerAddress | nvarchar(MAX) | |||
| CustomerAddressGeoLong | nvarchar(50) | |||
| CustomerAddressGeoLat | nvarchar(50) | |||
| CustomerPhone | nvarchar(50) | |||
| CustomerMobilePhone | nvarchar(50) | |||
| CustomerEmail | nvarchar(50) | |||
| ContactNo | nvarchar(20) | |||
| ContactName | nvarchar(50) | |||
| ContactAddress | nvarchar(MAX) | |||
| ContactAddressGeoLong | nvarchar(50) | |||
| ContactAddressGeoLat | nvarchar(50) | |||
| ContactPhone | nvarchar(50) | |||
| ContactEmail | nvarchar(50) | |||
| SiteNo | nvarchar(20) | |||
| SiteName | nvarchar(50) | |||
| SiteAddress | nvarchar(MAX) | |||
| SiteAddressGeoLong | nvarchar(50) | Used to diplay the job on the map. | ||
| SiteAddressGeoLat | nvarchar(50) | Used to diplay the job on the map. | ||
| SitePhone | nvarchar(50) | |||
| SiteEmail | nvarchar(50) | |||
| SiteRegion | nvarchar(10) | Used in the geocoding process. | ||
| SiteStreet | nvarchar(255) | Used in the geocoding process. | ||
| SiteStreetNo | nvarchar(20) | Used in the geocoding process. | ||
| SitePostcode | nvarchar(20) | Used in the geocoding process. | ||
| SiteCity | nvarchar(50) | Used in the geocoding process. | ||
| SiteCounty | nvarchar(50) | Used in the geocoding process. | ||
| SiteState | nvarchar(50) | Used in the geocoding process. | ||
| SiteCountry | nvarchar(50) | Used in the geocoding process. | ||
| SiteFromNo | nvarchar(20) | |||
| SiteFromName | nvarchar(50) | |||
| SiteFromAddress | nvarchar(MAX) | |||
| SiteFromAddressGeoLong | nvarchar(50) | |||
| SiteFromAddressGeoLat | nvarchar(50) | |||
| SiteFromPhone | nvarchar(50) | |||
| SiteFromEmail | nvarchar(50) | |||
| SiteFromRegion | nvarchar(10) | |||
| SiteFromStreet | nvarchar(255) | |||
| SiteFromStreetNo | nvarchar(20) | |||
| SiteFromPostcode | nvarchar(20) | |||
| SiteFromCity | nvarchar(50) | |||
| SiteFromCounty | nvarchar(50) | |||
| SiteFromState | nvarchar(50) | |||
| SiteFromCountry | nvarchar(50) | |||
| BillNo | nvarchar(20) | |||
| BillName | nvarchar(50) | |||
| BillAddress | nvarchar(MAX) | |||
| BillAddressGeoLong | nvarchar(50) | |||
| BillAddressGeoLat | nvarchar(50) | |||
| BillPhone | nvarchar(50) | |||
| BillEmail | nvarchar(50) | |||
| BillRegion | nvarchar(10) | |||
| Importance | int | 0 | See API reference | |
| CreationDateTime | datetime | |||
| CustomerReference | nvarchar(50) | |||
| Language | nvarchar(10) | |||
| Responsible | nvarchar(50) | |||
| Creator | nvarchar(50) | |||
| FreeText1 | nvarchar(100) | See API reference | ||
| FreeText2 | nvarchar(100) | See API reference | ||
| FreeText3 | nvarchar(100) | See API reference | ||
| FreeText4 | nvarchar(100) | See API reference | ||
| FreeText5 | nvarchar(100) | See API reference | ||
| FreeText6 | nvarchar(100) | See API reference | ||
| FreeText7 | nvarchar(100) | See API reference | ||
| FreeText8 | nvarchar(100) | See API reference | ||
| FreeText9 | nvarchar(100) | See API reference | ||
| FreeText10 | nvarchar(100) | See API reference | ||
| FreeText11 | nvarchar(100) | See API reference | ||
| FreeText12 | nvarchar(100) | See API reference | ||
| FreeText13 | nvarchar(100) | See API reference | ||
| FreeText14 | nvarchar(100) | See API reference | ||
| FreeText15 | nvarchar(100) | See API reference | ||
| FreeText16 | nvarchar(100) | See API reference | ||
| FreeText17 | nvarchar(100) | See API reference | ||
| FreeText18 | nvarchar(100) | See API reference | ||
| FreeText19 | nvarchar(100) | See API reference | ||
| FreeText20 | nvarchar(100) | See API reference | ||
| FreeDecimal1 | decimal(18, 6) | See API reference | ||
| FreeDecimal2 | decimal(18, 6) | See API reference | ||
| FreeDecimal3 | decimal(18, 6) | See API reference | ||
| FreeDecimal4 | decimal(18, 6) | See API reference | ||
| FreeDecimal5 | decimal(18, 6) | See API reference | ||
| FreeDate1 | datetime | See API reference | ||
| FreeDate2 | datetime | See API reference | ||
| FreeDate3 | datetime | See API reference | ||
| FreeDate4 | datetime | See API reference | ||
| FreeDate5 | datetime | See API reference | ||
| FreeBit1 | bit | 0 | See API reference | |
| FreeBit2 | bit | 0 | See API reference | |
| FreeBit3 | bit | 0 | See API reference | |
| FreeBit4 | bit | 0 | See API reference | |
| FreeBit5 | bit | 0 | See API reference | |
| EnableManualSelection | bit | 0 | ||
| AvailableInGantt | bit | 0 | ||
| StartDate | datetime | |||
| EndDate | datetime | |||
| AllowDependencies | bit | 1 | ||
| Note | nvarchar(max) | |||
| OverRuleGanttPlanning | bit | 0 | ||
| ReadOnly | bit | 0 | ||
| Status | nvarchar(20) | See API reference | ||
| IsOpen | bit | See API reference |
- Import
- API
- This endpoint is available in the import API endpoint
/importvia the proceduremboc_upsertJob. - Example body:
[{"StoredProcedureName": "mboc_upsertJob","ParameterNames": ["SourceApp", "SourceType", "JobNo", "ShortDescription"],"ParameterValues": ["BC", "JOB", "JOB001", "Important job"]}]
See POST /job, PUT /job in the REST API reference.
Delete
Deletes a job record. The behavior of this procedure depends on the CheckAppointments flag:
- When
CheckAppointmentsis true: the job is not deleted when there are appointmentsAppointmentA task scheduled to a resource for a specific period - the scheduled instance you see on the planning board. for any task attached to the job. - When
CheckAppointmentsis false: the job is deleted without further checks. When a job is deleted, all tasks and appointments attached to the job, if any, are also deleted.
| Name | Data Type | Default | Required | Description |
|---|---|---|---|---|
| SourceApp | nvarchar(30) | ✔️ | See API reference | |
| SourceType | nvarchar(10) | ✔️ | See API reference | |
| JobNo | nvarchar(50) | ✔️ | ||
| CheckAppointments | bit | |||
| SentFromBackOffice | bit | 1 |
- Import
- API
- This endpoint is available in the import API endpoint
/importvia the proceduremboc_deleteJob. - Example body:
[{"StoredProcedureName": "mboc_deleteJob","ParameterNames": ["SourceApp", "SourceType", "JobNo"],"ParameterValues": ["BC", "JOB", "JOB001"]}]
See DELETE /job in the REST API reference.
Read
Two REST endpoints read jobs back; there is no import procedure for reading. GET /job returns every job, and GET /job/{jobNo} returns one job by its job number, or 404 Not Found when no job carries that number. See the REST API reference.
Project member
A project member is a resourceResourceAn entity that can carry out work - a person, vehicle, tool, or room - that you schedule on the planning board. who is on a project, whether or not any work has been assigned to them yet. Membership is what the team tab of a project lists, and it is one of the two things that let a resource log time against the project's tasks: being a member, or holding an appointment on one of them.
Membership is explicit. It is not inferred from appointments, so a resource planned on a task is not a member until you say so, and a member keeps their place after their appointments are gone.
Upsert project member
Adds a resource to a project, or changes the period of an existing membership.
| Name | Data Type | Default | Required |
|---|---|---|---|
| SourceApp | nvarchar(30) | ✔️ | |
| SourceType | nvarchar(10) | ✔️ | |
| JobNo | nvarchar(50) | ✔️ | |
| ResourceNo | nvarchar(50) | ✔️ | |
| StartDate | datetime | ||
| EndDate | datetime |
The job and the resource together are the membership's identity, so sending the same pair again updates the existing membership rather than adding a second one. StartDate and EndDate bound the period the membership applies to; leave both empty for an open-ended one. On an update, an omitted bound keeps its stored value.
The job is resolved through SourceApp, SourceType and JobNo, and a job that does not exist is rejected with DATA002. A resource number that matches nothing is rejected with DATA004.
- Import
- API
- This endpoint is available in the import API endpoint
/importvia the proceduremboc_upsertProjectMember. - Example body:
[{"StoredProcedureName": "mboc_upsertProjectMember","ParameterNames": ["SourceApp", "SourceType", "JobNo", "ResourceNo", "StartDate"],"ParameterValues": ["BC1", "JOB", "JOB001", "ENG01", "2026-03-01"]}]
See POST /projectMember, PUT /projectMember in the REST API reference.
Delete project member
Removes the resource from the project. Their appointments on the project's tasks are left untouched.
| Name | Data Type | Default | Required |
|---|---|---|---|
| SourceApp | nvarchar(30) | ✔️ | |
| SourceType | nvarchar(10) | ✔️ | |
| JobNo | nvarchar(50) | ✔️ | |
| ResourceNo | nvarchar(50) | ✔️ |
- Import
- API
- This endpoint is available in the import API endpoint
/importvia the proceduremboc_deleteProjectMember.
See DELETE /projectMember in the REST API reference.
API reference
Source
Dime.Scheduler is a centralized planning application. One of its key tenets is the ability to accommodate data from different origins. For instance, it is perfectly acceptable to plan work orders from Business Central, CRM, imported Excel sheets, etc., and Dime.Scheduler won't break a sweat because of the existence of the Source App and Source Type fields in the data model.
Source App
When the planner creates an appointment for a resource or task, Dime.Scheduler knows which system to notify. Through the connector setup, Dime.Scheduler will find a matching SourceApp and subsequently send the appointment to the corresponding URI.
The source appSource appAn identifier Dime.Scheduler attaches to data so it can route a change back to the correct back-office system. field is a unique identifier that identifies a back-officeBack officeThe ERP or business system Dime.Scheduler plans for - most often Microsoft Dynamics 365 Business Central. It owns the master data and remains authoritative over what it receives. instance such as a tenant of Business Central, a test environment, an instance of CRM cloud, or any other application you wish to use to feed data into Dime.Scheduler.
The back office is bound to a connector
Each back-office instance - a Business Central tenant, a CRM environment, an Excel sheet - is identified by a Source App. The connector is configured for that one Source App and nothing else, so Dime.Scheduler always knows which system any record came from.
Source Type
The SourceType is used inside the back-office system itself. A source typeSource typeAn identifier that, together with the source app, tells Dime.Scheduler which back-office table a record belongs to. represents a distinct entity such as a service orderService orderA Business Central service management document. The service order solution plans it as one task or as one task per service item line, and writes the assignment back as a resource allocation., production orderProduction orderA Business Central manufacturing order with routing lines. The production routing solution puts those lines on the planning board against work and machine centers while BC’s own rules still hold., assembly orderAssembly orderA Business Central document that says what to build. The assembly order solution schedules the resources that build it and keeps the order’s dates in sync., etc.
The standard connectorsConnectorAn integration that links Dime.Scheduler to a back-office system, routing data in and scheduling decisions back out. that Dime Software provides make it possible to plan different types of resources and tasks. When Dime.Scheduler posts an appointment to a standard connector, it ends up in a staging tableStaging tableThe Dime.Scheduler Appointments table in Business Central where incoming appointments land first. Business Central processes rows from there, so a row can be received and still fail processing., which is then processed by the connector to ensure the appointment produced in Dime.Scheduler is traced back to the original record using the externally identifiable fields (JobNo, TaskNo, ResourceNo) that identify the record.
Importance
Controls the visual indicatorIndicatorCollective term for the visual signals - categories, time markers, pins, and tags - that identify and label appointments. of the planned taskPlanned taskAn appointment together with the resources assigned to it - the full picture of what will be done, by whom, and when. in the planning boardPlanning boardThe main graphical scheduling surface where dispatchers drag tasks onto resources across a timeline.. Read more about importance.
Category
Controls the visual indicator of the planned task in the planning board. Read more about categories.
Time Marker
Controls the visual indicator of the planned task in the planning board. Read more about time markers.
Pin
Controls the visual indicator of the planned task in the map. Read more about marker colors.
Status
Status carries the project's status as the back officeBack officeThe ERP or business system Dime.Scheduler plans for - most often Microsoft Dynamics 365 Business Central. It owns the master data and remains authoritative over what it receives. knows it, in its own words. Dime.Scheduler has no status vocabulary of its own: the value is mapped onto the work statesWork stateA lane on the task or project Kanban board, defined by an administrator. Statuses arriving from the back office are mapped onto work states so the board speaks your organization’s vocabulary. that make up the columns of the project Kanban board, and a status that matches no column lands in Unmapped. The value is stored without leading or trailing whitespace. Sending an empty value clears the status; leaving the parameter out keeps the status Dime.Scheduler already holds.
IsOpen says whether the project is open or closed. Leave it out and Dime.Scheduler works it out from the status when the job is created and whenever its status changes: the project is closed when its status is mapped, for the job's SourceApp and SourceType, to a work state in the Done category, and open otherwise. Send IsOpen to set the open state yourself; the value is stored as sent and takes precedence over the status in that call. A later change of status works the open state out again.
Closing a project locks its appointmentsAppointmentA task scheduled to a resource for a specific period - the scheduled instance you see on the planning board., and reopening it unlocks them. Appointments sent for a task of a closed project are stored locked. A job can also be closed and reopened by hand from the jobs screen.
Free fields
Free fieldsFree fieldOne of the unmapped fields on jobs, tasks and appointments that a back office can fill with its own data, each with a localizable caption. are unmapped fields that you can link custom fields to.
The captionCaptionThe label shown for a field or entity in the interface, translatable per language. A tenant that calls jobs "projects" changes the caption, not the data model. can be changed through the captions localization system. Either use the GUI and look for the corresponding field of the corresponding source table for the 'DATABASEFIELD' context, or use the API.