BusinessCentral JobManager integration

Prev Next
This content is currently unavailable in Hungarian. You are viewing the default (English) version.

Introduction

Business Central JobManager is a Microsoft-certified third-party add-on for Microsoft Dynamics 365 Business Central that enhances its job management capabilities, focusing on time and cost tracking for projects, manufacturing, and service companies. It provides features for time registration, job reporting, absence management, and payroll preparation, automatically updating Business Central with real-time data to improve financial oversight and profitability. With this integration you can capture and synchronize every shop-floor time and material registration from Tulip directly into your ERP.

Screenshot 2025-09-05 at 14.20.44.png

Purpose

You can create your production orders in Business Central (ERP). From there, you can process its corresponding operations in Tulip —starting the job and logging key activities like material consumption, output, and breaks. All Tulip registrations are seamlessly synchronized and visible in Business Central, offering traceability from shop floor to ERP. The app's primary focus is on simplifying employee interactions with the system while ensuring that operational data is captured accurately to support payroll, production cost calculations, and quality assessments. In essence, it modernizes the way tasks are executed on the shop floor by translating complex processes into clear, actionable jobs.

How It Works

JobManager application

The Tulip app is designed to streamline shop floor operations by digitizing and automating key processes such as time registration, job execution, material consumption, and output reporting. This app empowers frontline workers to easily capture real-time data, make informed decisions, and operate with greater efficiency. By seamlessly connecting with JobManager in Business Central, it delivers the best of both worlds—an intuitive, human-centric interface underpinned by powerful ERP integrations.

Intuitive Time & Attendance Management

  • Clock-In / Clock-Out: Employees can effortlessly register their working hours with the clock-in and clock-out functionality. Based on the logged-in Tulip user, the home screen allows frontline operators to clock in and out, marking the start and end of their working day.
  • Break and Absence Handling: With dedicated options for starting/stopping breaks and recording absences, the Tulip app minimizes the administrative burden while ensuring compliance with EU time registration directives. Clear error messages and prompts help mitigate any discrepancies, ensuring a smooth and reliable experience.

Active Job Management

  • Dynamic Job Dashboard: Once clocked in, operators are presented with an overview of all active jobs. Each listing includes detailed information such as job number, description, work center, and time stamps. This real-time feedback allows workers to prioritize tasks efficiently and switch seamlessly between different job orders.
  • Interactive Job Selection and Confirmation: The app offers features such as barcode scanning for rapid job selection. Once a job is selected, further details—such as production item data, quantity details, and work center information—are displayed to help the operator confirm job initiation and eventual completion. On-screen prompts and confirmations reduce errors and streamline job execution.

Material Consumption & Output Reporting

  • Real-Time Consumption Logging: Capturing material consumption is made effortless with guided forms. Operators can easily enter item numbers, descriptions, quantities, and associated serial or lot numbers. This detailed tracking is invaluable for cost calculation, inventory management, and ensuring production accuracy.
  • Detailed Output Reporting: The app facilitates comprehensive production reporting, where employees can log “good” versus “scrap” quantities with precision. This dual recording process not only reinforces quality control but also provides actionable insights into production effectiveness and process improvements.

Error Handling & User Feedback

  • Contextual Alerts: In any instance of system error—be it during clocking, job execution, or material entry—the Tulip app provides immediate, context-specific feedback. Clear error messages allow operators to quickly recognize and address issues, maintaining workflow consistency and data accuracy throughout operations.

Seamless Integration with JobManager

While the Tulip app stands out for its intuitive frontend and ease-of-use, its close integration with JobManager adds layer of enterprise-grade functionality:

  • Enhanced Data Centralization: With JobManager handling complex backend processes such as payroll calculations, production cost tracking, and compliance with ERP standards, the Tulip app acts as the interactive layer that captures and relays real-world data efficiently. This integration minimizes manual data entry, reduces redundancies, and accelerates the flow of information between the shop floor and the central ERP system.
  • Operational Efficiency Meets Enterprise Integration: While the Tulip app streamlines the operator’s experience on the shop floor, JobManager’s robust functionalities enhance overall process efficiency—automating advanced payroll transactions, aggregating consumption data, and ensuring detailed job records. These combined benefits create a holistic solution that bridges the gap between intuitive frontline operations and the complex demands of modern manufacturing systems.

The Tulip app for JobManager focusses on enhancing everyday shop floor operations through seamless integration with Microsoft Dynamics 365 Business Central. Rather than reinventing processes, the app simplifies and standardizes them—reducing administrative overhead while ensuring accurate, real-time data capture. By connecting directly with JobManager, it enables critical information like time logs, job status, material usage, and production outputs to flow efficiently into the ERP system with minimal manual input. This tight integration supports reliable payroll, costing, and compliance processes, while giving frontline teams a straightforward tool that supports efficient work without adding complexity to your shopfloor operations.

API Doc

The following connector functions in this document have leveraged Microsoft Business Central and JobManager APIs.

Pre-Requisites

  1. You need a Microsoft Business Central system with the JobManager add-on set up.
  2. In order to access JobManager from Tulip you need to set up the authorization using the Entra App registration.

Access token URL: https://login.microsoftonline.com/{Tenantid}/oauth2/v2.0/token
Client ID: your client ID
Client Secret: your client secret
Scope: https://api.businesscentral.dynamics.com/.default

Screenshot 2025-09-05 at 14.40.58.png

Tulip Connection Details

The following information would need to be configured on Tulip's HTTP connector. From Tulip you can use POST calls to access JobManager.

Running On: On-Premise Connector Host

POST URL:
https://api.businesscentral.dynamics.com/v2.0/{Tenantid}/{EnvironmentName}/ODataV4/{WebServiceName}_{Method}

Headers:
Screenshot 2025-09-05 at 14.51.36.png

Method: SignIn

POST URL:
https://api.businesscentral.dynamics.com/v2.0/{Tenantid}/GTM9ABE01/ODataV4/Tulip_SignIn

Body (raw - JSON ):

{
  "_ApiId": "TULIP",
  "_EmployeeId": "W-00011",
  "_UserInterfaceRelation": "",
  "_TimeOffsetUTC":120,
  "_JobNoAbsence":""
}

Method: SignOut

POST URL:
https://api.businesscentral.dynamics.com/v2.0/{Tenantid}/GTM9ABE01/ODataV4/Tulip_SignOut

Body (raw - JSON ):

{
  "_ApiId": "TULIP",
  "_EmployeeId": "W-00011",
  "_UserInterfaceRelation": "",
  "_TimeOffsetUTC":120,
  "_JobNoAbsence":""
}

Method: GetJobListProduction_Soap

POST URL:
https://api.businesscentral.dynamics.com/v2.0/{Tenantid}/GTM9ABE01/WS/CRONUS%20Tulip%20JobManager/Codeunit/Tulip

Body (raw - XML ):

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <GetJobListProduction_Soap xmlns="urn:microsoft-dynamics-schemas/codeunit/Tulip">
        <_ApiId>TULIP</_ApiId>
             <_EmployeeId>W-00011</_EmployeeId>
             <_UserInterfaceRelation></_UserInterfaceRelation>
             <_SearchText></_SearchText>
             <_JobManApi_JobManJob></_JobManApi_JobManJob>
        </GetJobListProduction_Soap>
    </soap:Body>
</soap:Envelope>
Return value ( example ):
<Soap:Envelope xmlns:Soap="http://schemas.xmlsoap.org/soap/envelope/">
    <Soap:Body>
        <GetJobListProduction_Soap_Result xmlns="urn:microsoft-dynamics-schemas/codeunit/Tulip">
            <_JobManApi_JobManJob>
                <JobList xmlns="urn:microsoft-dynamics-nav/xmlports/x55501">
                    <JobNo>JOB1000115</JobNo>
                    <JobType>8</JobType>
                    <JobType_Text>Production Run</JobType_Text>
                    …………
</Soap:Envelope>

Example Prebuilt Connector Functions

GetJobListProduction_Soap(_ApiId: Code[10]; _EmployeeId: Text; _UserInterfaceRelation: Text; _SearchText: Text; var _JobManApi_JobManJob: XMLport JobManApi_JobManJob)

GetJobListProductionFilter_Soap(_ApiId: Code[10]; _EmployeeId: Text; _UserInterfaceRelation: Text; _FilterWorkCenter: Text; _FilterMachineCenter: Text; _SearchText: Text; var _JobManApi_JobManJob: XMLport JobManApi_JobManJob)

GetJobListProductionTopX_Soap(_ApiId: Code[10]; _EmployeeId: Text; _UserInterfaceRelation: Text; _SearchText: Text; var _JobManApi_JobManJob: XMLport JobManApi_JobManJob)

GetListActiveJobs_Soap(_ApiId: Code[10]; _EmployeeId: Text; _UserInterfaceRelation: Text; var _JobManApi_JobManStampJournalLn: XMLport JobManApi_JobManStampJournalLn)

GetFirstActiveJobLineSequence(_ApiId: Code[10]; _EmployeeId: Text; _UserInterfaceRelation: Text; var _ReturnLineSequence: Integer)

SignIn(_ApiId: Code[10]; _EmployeeId: Text; _UserInterfaceRelation: Text; _TimeOffsetUTC: Integer; _JobNoAbsence: Code[20])

SignOut(_ApiId: Code[10]; _EmployeeId: Text; _UserInterfaceRelation: Text; _TimeOffsetUTC: Integer; _JobNoAbsence: Code[20])

BreakStart(_ApiId: Code[10]; _EmployeeId: Text; _TimeOffsetUTC: Integer; _UserInterfaceRelation: Text)

BreakStop(_ApiId: Code[10]; _EmployeeId: Text; _UserInterfaceRelation: Text)

JobStart(_ApiId: Code[10]; _EmployeeId: Text; _UserInterfaceRelation: Text; _TimeOffsetUTC: Integer; _JobNo: Code[20]; _BundleContinue: Boolean)

JobStop(_ApiId: Code[10]; _EmployeeId: Text; _UserInterfaceRelation: Text; _StampJournalLineSequence: Integer)

JobFinish(_ApiId: Code[10]; _EmployeeId: Text; _UserInterfaceRelation: Text; _StampJournalLineSequence: Integer)

JobQtyGood(_ApiId: Code[10]; _EmployeeId: Text; _UserInterfaceRelation: Text; _StampJournalLineSequence: Integer; _QtyGood: Decimal)

JobQtyScrap(_ApiId: Code[10]; _EmployeeId: Text; _UserInterfaceRelation: Text; _StampJournalLineSequence: Integer; _QtyScrap: Decimal)